Class: ToParsedObj::Parsers

Inherits:
Object show all
Includes:
FromHash
Defined in:
lib/to_parsed_obj.rb

Instance Method Summary collapse

Instance Method Details

#add(ops, &b) ⇒ Object



57
58
59
60
# File 'lib/to_parsed_obj.rb', line 57

def add(ops,&b)
  ops[:convertor] ||= b if block_given?
  self.parsers << ToParsedObj::SingleParser.new(ops)
end

#add_basic!Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/to_parsed_obj.rb', line 61

def add_basic!
  require 'date'
  add(:matcher => /^-?[0-9]+$/, :convertor => :to_i)
  add(:matcher => [/^-?[0-9\.]+$/,/^[^\.]*\.[^\.]*$/], :convertor => :to_f)
  add(:matcher => /^\d+[\/\\]\d+[\/\\]\d+$/) { |str| Date.parse(str) }
  
  add(:matcher => /^(\d+[\/\\]\d+[\/\\]\d+\s+\d+(?::\d+){1,99})/) do |str,single|
    m = single.match_obj[1].scan(/\d+/).map { |x| x.to_i }
    arr = [2,0,1].map { |i| m[i] }
    arr += m[3..-1].map { |x| x }
    Time.local(*arr)
  end
  
  add(:matcher => /^(\d+-\d+-\d+\s+\d+(?::\d+){1,99})\s+\-\d+$/) do |str,single|
    m = single.match_obj[1].scan(/\d+/).map { |x| x.to_i }
    Time.local(*m)
  end
end

#each_parser(one_time, &b) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/to_parsed_obj.rb', line 44

def each_parser(one_time,&b)
  one_time.each do |m,c|
    parser = ToParsedObj::SingleParser.new(:matcher => m, :convertor => c)
    yield(parser)
  end
  parsers.each(&b)
end

#parse(obj, one_time = {}) ⇒ Object



51
52
53
54
55
56
# File 'lib/to_parsed_obj.rb', line 51

def parse(obj,one_time={})
  each_parser(one_time) do |parser|
    return parser.parse(obj) if parser.match?(obj)
  end
  obj
end