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