Module: Decanter::Parser

Extended by:
Utils
Defined in:
lib/decanter/parser.rb,
lib/decanter/parser/base.rb,
lib/decanter/parser/core.rb,
lib/decanter/parser/utils.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, Utils Classes: Base, BooleanParser, DateParser, DateTimeParser, FloatParser, HashParser, IntegerParser, JoinParser, KeyValueSplitterParser, PassParser, PhoneParser, StringParser, ValueParser

Class Method Summary collapse

Methods included from Utils

camelize_str, concat_str, singular_class_present?, singularize_and_camelize_str, symbol_to_string

Class Method Details

.expand(parser) ⇒ Object

expand to include preparsers



37
38
39
# File 'lib/decanter/parser.rb', line 37

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’



17
18
19
20
21
22
23
24
25
26
# File 'lib/decanter/parser.rb', line 17

def klass_or_sym_to_str(klass_or_sym)
  case klass_or_sym
  when Class
    klass_or_sym.name
  when Symbol
    symbol_to_string(klass_or_sym)
  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



29
30
31
32
33
34
# File 'lib/decanter/parser.rb', line 29

def parser_constantize(parser_str)
  # safe_constantize returns nil if match not found
  parser_str.safe_constantize ||
    concat_str(parser_str).safe_constantize ||
    raise(NameError.new("cannot find parser #{parser_str}"))
end

.parsers_for(klass_or_syms) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/decanter/parser.rb', line 8

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