module ZendeskAppsSupport::Validations::Requirements
Constants
- MAX_REQUIREMENTS
Public Class Methods
call(package)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 10 def call(package) requirements_file = package.files.find { |f| f.relative_path == 'requirements.json' } return [ValidationError.new(:missing_requirements)] unless requirements_file requirements_stream = requirements_file.read duplicates = non_unique_type_keys(requirements_stream) unless duplicates.empty? return [ValidationError.new(:duplicate_requirements, duplicate_keys: duplicates.join(', '), count: duplicates.length)] end requirements = JSON.load(requirements_stream) [].tap do |errors| errors << invalid_requirements_types(requirements) errors << excessive_requirements(requirements) errors << invalid_channel_integrations(requirements) errors << invalid_user_fields(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_requirements(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 49 def excessive_requirements(requirements) requirement_count = requirements.values.map(&:values).flatten.size if requirement_count > MAX_REQUIREMENTS ValidationError.new(:excessive_requirements, max: MAX_REQUIREMENTS, count: requirement_count) end end
invalid_channel_integrations(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 67 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, count: channel_integrations.size) end channel_integrations.each do |identifier, fields| unless fields.include? 'manifest_url' errors << ValidationError.new(:missing_required_fields, field: 'manifest_url', identifier: identifier) end end end end
invalid_requirements_types(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 82 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
invalid_user_fields(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 56 def invalid_user_fields(requirements) user_fields = requirements['user_fields'] return unless user_fields [].tap do |errors| user_fields.each do |identifier, fields| next if fields.include? 'key' errors << ValidationError.new(:missing_required_fields, field: 'key', identifier: identifier) end end end
missing_required_fields(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 37 def missing_required_fields(requirements) [].tap do |errors| requirements.each do |requirement_type, requirement| next if requirement_type == 'channel_integrations' requirement.each do |identifier, fields| next if fields.include? 'title' errors << ValidationError.new(:missing_required_fields, field: 'title', identifier: identifier) end end end end
non_unique_type_keys(requirements)
click to toggle source
# File lib/zendesk_apps_support/validations/requirements.rb, line 90 def non_unique_type_keys(requirements) keys = [] duplicates = [] parser = JSON::Stream::Parser.new do start_object { keys.push({}) } end_object { keys.pop } key { |k| duplicates.push(k) if keys.last.include? k; keys.last[k] = nil } end parser << requirements duplicates end