Sha256: 43e0cd8abd8c7aab17aa21a9c917145220cd757639d86bb9ffbca30420492cb9

Contents?: true

Size: 1.26 KB

Versions: 40

Compression:

Stored size: 1.26 KB

Contents

class Eco::API::Common::People::DefaultParsers::SelectParser < Eco::API::Common::Loaders::Parser
  attribute :select

  class << self
    def select_tables
      @select_tables ||= {}
    end
  end

  dependencies select_hashes: (lambda do |person_parser|
    select_tables[person_parser.schema&.id] ||= person_parser.select_tables
  end)


  def parser(value, deps)
    return value unless (options_map = options_hash(deps))
    to_select_option(value, options_map, attr: deps['attr'])
  end

  def serializer(value, _deps)
    value
  end

  private

  def to_select_option(value, options_map, attr:)
    if value.is_a?(Array)
      value.map {|val| to_select_option(val, options_map, attr: attr)}.compact
    elsif value
      val = value&.downcase&.strip
      return options_map[val] if options_map.key?(val)

      unknown!(value, attr: attr)
      nil
    end
  end

  def unknown!(value, attr:)
    return if unknown(attr).key?(value)
    unknown(attr)[value] = value
    log(:warn) { "Unknown select option '#{value}' for '#{attr}'" }
  end

  def unknown(attr = nil)
    @unknown ||= {}
    return @unknown if attr.nil?
    @unknown[attr] ||= {}
  end

  def options_hash(deps)
    deps[:select_hashes][deps['attr']]
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
eco-helpers-3.0.21 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.20 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.19 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.18 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.17 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.16 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.15 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.14 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.13 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.12 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.11 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.10 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.9 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.8 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.7 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.6 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.5 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.4 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.3 lib/eco/api/common/people/default_parsers/select_parser.rb
eco-helpers-3.0.2 lib/eco/api/common/people/default_parsers/select_parser.rb