module ZendeskAppsSupport::Validations::Requirements
Constants
- MAX_CUSTOM_OBJECTS_REQUIREMENTS
- MAX_REQUIREMENTS
Public Class Methods
call(package)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 10 def call(package) if package.manifest.requirements_only? && !package.has_requirements? return [ValidationError.new(:missing_requirements)] elsif !supports_requirements(package) && package.has_requirements? return [ValidationError.new(:requirements_not_supported)] elsif !package.has_requirements? return [] end begin requirements = package.requirements_json rescue ZendeskAppsSupport::Manifest::OverrideError => e return [ValidationError.new(:duplicate_requirements, duplicate_keys: e.key, count: 1)] end [].tap do |errors| errors << invalid_requirements_types(requirements) errors << excessive_requirements(requirements) errors << excessive_custom_objects_requirements(requirements) errors << invalid_channel_integrations(requirements) errors << invalid_custom_fields(requirements) errors << invalid_custom_objects(requirements) errors << missing_required_fields(requirements) errors.flatten! errors.compact! end rescue JSON::ParserError => e return [ValidationError.new(:requirements_not_json, errors: e)] end
Private Class Methods
excessive_custom_objects_requirements(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 67 def excessive_custom_objects_requirements(requirements) custom_objects = requirements[AppRequirement::CUSTOM_OBJECTS_KEY] return unless custom_objects count = custom_objects.values.flatten.size if count > MAX_CUSTOM_OBJECTS_REQUIREMENTS ValidationError.new(:excessive_custom_objects_requirements, max: MAX_CUSTOM_OBJECTS_REQUIREMENTS, count: count) end end
excessive_requirements(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 60 def excessive_requirements(requirements) count = requirements.values.map do |req| req.is_a?(Hash) ? req.values : req end.flatten.size ValidationError.new(:excessive_requirements, max: MAX_REQUIREMENTS, count: count) if count > MAX_REQUIREMENTS end
invalid_channel_integrations(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 94 def invalid_channel_integrations(requirements) channel_integrations = requirements['channel_integrations'] return unless channel_integrations [].tap do |errors| if channel_integrations.size > 1 errors << ValidationError.new(:multiple_channel_integrations) end channel_integrations.each do |identifier, fields| next if fields.include? 'manifest_url' errors << ValidationError.new(:missing_required_fields, field: 'manifest_url', identifier: identifier) end end end
invalid_custom_fields(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 78 def invalid_custom_fields(requirements) user_fields = requirements['user_fields'] organization_fields = requirements['organization_fields'] return if user_fields.nil? && organization_fields.nil? [].tap do |errors| [user_fields, organization_fields].compact.each do |field_group| field_group.each do |identifier, fields| next if fields.include? 'key' errors << ValidationError.new(:missing_required_fields, field: 'key', identifier: identifier) end end end end
invalid_custom_objects(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 110 def invalid_custom_objects(requirements) custom_objects = requirements[AppRequirement::CUSTOM_OBJECTS_KEY] return if custom_objects.nil? [].tap do |errors| unless custom_objects.key?(AppRequirement::CUSTOM_OBJECTS_TYPE_KEY) errors << ValidationError.new(:missing_required_fields, field: AppRequirement::CUSTOM_OBJECTS_TYPE_KEY, identifier: AppRequirement::CUSTOM_OBJECTS_KEY) end valid_schema = { AppRequirement::CUSTOM_OBJECTS_TYPE_KEY => %w[key schema], AppRequirement::CUSTOM_OBJECTS_RELATIONSHIP_TYPE_KEY => %w[key source target] } valid_schema.keys.each do |requirement_type| (custom_objects[requirement_type] || []).each do |requirement| validate_custom_objects_keys(requirement.keys, valid_schema[requirement_type], requirement_type, errors) end end end end
invalid_requirements_types(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 134 def invalid_requirements_types(requirements) invalid_types = requirements.keys - ZendeskAppsSupport::AppRequirement::TYPES unless invalid_types.empty? ValidationError.new(:invalid_requirements_types, invalid_types: invalid_types.join(', '), count: invalid_types.length) end end
missing_required_fields(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 46 def missing_required_fields(requirements) [].tap do |errors| requirements.each do |requirement_type, requirement| next if %w[channel_integrations custom_objects].include? requirement_type requirement.each do |identifier, fields| next if fields.nil? || fields.include?('title') errors << ValidationError.new(:missing_required_fields, field: 'title', identifier: identifier) end end end end
supports_requirements(package)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 42 def supports_requirements(package) !package.manifest.marketing_only? && package.manifest.products_ignore_locations != [Product::CHAT] end
validate_custom_objects_keys(keys, expected_keys, identifier, errors = [])
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 143 def validate_custom_objects_keys(keys, expected_keys, identifier, errors = []) missing_keys = expected_keys - keys missing_keys.each do |key| errors << ValidationError.new(:missing_required_fields, field: key, identifier: identifier) end end