Module: Decanter::Parser

Defined in:
lib/decanter/parser.rb,
lib/decanter/parser/base.rb,
lib/decanter/parser/core.rb,
lib/decanter/parser/date_parser.rb,
lib/decanter/parser/hash_parser.rb,
lib/decanter/parser/join_parser.rb,
lib/decanter/parser/pass_parser.rb,
lib/decanter/parser/float_parser.rb,
lib/decanter/parser/phone_parser.rb,
lib/decanter/parser/value_parser.rb,
lib/decanter/parser/string_parser.rb,
lib/decanter/parser/boolean_parser.rb,
lib/decanter/parser/integer_parser.rb,
lib/decanter/parser/datetime_parser.rb,
lib/decanter/parser/key_value_splitter_parser.rb

Defined Under Namespace

Modules: Core Classes: Base, BooleanParser, DateParser, DateTimeParser, FloatParser, HashParser, IntegerParser, JoinParser, KeyValueSplitterParser, PassParser, PhoneParser, StringParser, ValueParser

Class Method Summary collapse

Class Method Details

.expand(parser) ⇒ Object

expand to include preparsers



33
34
35
# File 'lib/decanter/parser.rb', line 33

def expand(parser)
  Parser.parsers_for(parser.preparsers).push(parser)
end

.klass_or_sym_to_str(klass_or_sym) ⇒ Object

convert from a class or symbol to a string and concat ‘Parser’



14
15
16
17
18
19
20
21
22
23
# File 'lib/decanter/parser.rb', line 14

def klass_or_sym_to_str(klass_or_sym)
  case klass_or_sym
  when Class
    klass_or_sym.name
  when Symbol
    klass_or_sym.to_s.singularize.camelize
  else
    raise ArgumentError.new("cannot lookup parser for #{klass_or_sym} with class #{klass_or_sym.class}")
  end.concat('Parser')
end

.parser_constantize(parser_str) ⇒ Object

convert from a string to a constant



26
27
28
29
30
# File 'lib/decanter/parser.rb', line 26

def parser_constantize(parser_str)
  parser_str.safe_constantize ||
  "Decanter::Parser::".concat(parser_str).safe_constantize ||
  raise(NameError.new("cannot find parser #{parser_str}"))
end

.parsers_for(klass_or_syms) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/decanter/parser.rb', line 5

def parsers_for(klass_or_syms)
  Array.wrap(klass_or_syms)
       .map { |klass_or_sym| klass_or_sym_to_str(klass_or_sym) }
       .map { |parser_str|   parser_constantize(parser_str) }
       .map { |parser|       expand(parser) }
       .flatten
end