Sha256: 529dd93151ada72d3f480f52a2d73bf1387a189455118a83122e2e25953fc507

Contents?: true

Size: 1001 Bytes

Versions: 17

Compression:

Stored size: 1001 Bytes

Contents

module Decanter
  module Parser
    class ArrayParser < ValueParser

      DUMMY_VALUE_KEY = '_'.freeze

      parser do |val, options|
        next if val.nil?
        raise Decanter::ParseError.new 'Expects an array' unless val.is_a? Array
        # Fetch parser classes for provided keys
        parse_each = options.fetch(:parse_each, :pass)
        item_parsers = Parser.parsers_for(Array.wrap(parse_each))
        unless item_parsers.all? { |parser| parser <= ValueParser }
          raise Decanter::ParseError.new 'parser(s) for array items must subclass ValueParser'
        end
        # Compose supplied parsers
        item_parser = Parser.compose_parsers(item_parsers)
        # Parse all values
        val.map do |item|
          # Value parsers will expect a "key" for the value they're parsing,
          # so we provide a dummy one.
          result = item_parser.parse(DUMMY_VALUE_KEY, item, options)
          result[DUMMY_VALUE_KEY]
        end.compact
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
decanter-4.0.4 lib/decanter/parser/array_parser.rb
decanter-4.0.3 lib/decanter/parser/array_parser.rb
decanter-4.0.2 lib/decanter/parser/array_parser.rb
decanter-4.0.1 lib/decanter/parser/array_parser.rb
decanter-4.0.0 lib/decanter/parser/array_parser.rb
decanter-3.6.0 lib/decanter/parser/array_parser.rb
decanter-3.5.1 lib/decanter/parser/array_parser.rb
decanter-3.5.0 lib/decanter/parser/array_parser.rb
decanter-3.4.2 lib/decanter/parser/array_parser.rb
decanter-3.4.1 lib/decanter/parser/array_parser.rb
decanter-3.4.0 lib/decanter/parser/array_parser.rb
decanter-3.3.0 lib/decanter/parser/array_parser.rb
decanter-3.2.1 lib/decanter/parser/array_parser.rb
decanter-3.2.0 lib/decanter/parser/array_parser.rb
decanter-3.1.2 lib/decanter/parser/array_parser.rb
decanter-3.1.1 lib/decanter/parser/array_parser.rb
decanter-3.1.0 lib/decanter/parser/array_parser.rb