Class: Mediator::Parser

Inherits:
Processor show all
Defined in:
lib/mediator/parser.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Processor

#empty?

Constructor Details

#initialize(mediator, data = {}) ⇒ Parser

Returns a new instance of Parser.



8
9
10
11
# File 'lib/mediator/parser.rb', line 8

def initialize mediator, data = {}
  @data     = data
  @mediator = mediator
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



5
6
7
# File 'lib/mediator/parser.rb', line 5

def data
  @data
end

#mediatorObject (readonly)

Returns the value of attribute mediator.



6
7
8
# File 'lib/mediator/parser.rb', line 6

def mediator
  @mediator
end

Instance Method Details

#get(name, options = {}) ⇒ Object



13
14
15
16
# File 'lib/mediator/parser.rb', line 13

def get name, options = {}
  selector = options[:from] || name
  options[:value] || data[selector] || data[selector.to_s]
end

#has?(name, options = {}) ⇒ Boolean

Returns:

  • (Boolean)


18
19
20
21
# File 'lib/mediator/parser.rb', line 18

def has? name, options = {}
  selector = options[:from] || name
  options.has_key?(:value)  || mediator.data_has?(data,selector)
end

#id(name, options = {}) ⇒ Object



23
24
25
# File 'lib/mediator/parser.rb', line 23

def id name, options = {}
  key "#{name}_id", options.merge(from: name)
end

#ids(name, options = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/mediator/parser.rb', line 27

def ids name, options = {}
  if name[-1] == "s" and !options[:from]
    id_name = "#{name[0..-2]}_ids"
  else
    id_name = "#{name}_ids"
  end

  options[:from] ||= name

  key id_name, options
end

#key(name, options = {}, &block) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/mediator/parser.rb', line 39

def key name, options = {}, &block
  if name[-1] == "?"
    name = name[0..-2].intern
  end

  return unless has? name, options

  value = get name, options
  return if empty? value, options

  value = block ? block[value] : value

  mediator.set name, value unless empty? value, options
end

#many(name, options = {}, &block) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/mediator/parser.rb', line 54

def many name, options = {}, &block
  options = {construct: true}.merge options

  data = get(name, options)
  return if data.nil? and !options[:empty] # Can't use main empty? call here as [] does not count as empty..

  mediator.set name, [] unless options[:merge]

  subj = (options && options[:subject]) || mediator.get(name, options)

  (data || []).each do |d|
    name = name[0..-2] if name[-1] == "s"
    s = mediator.construct name
    sub s, d, options, &block
  end
end

#one(name, options = {}, &block) ⇒ Object



71
72
73
74
75
76
77
78
# File 'lib/mediator/parser.rb', line 71

def one name, options = {}, &block
  options = {construct: true}.merge options

  data = get name, options
  subj = options[:subject] || mediator.get(name, options)

  sub subj, data, options, &block
end

#union(name, options = {}, &block) ⇒ Object



80
81
82
83
# File 'lib/mediator/parser.rb', line 80

def union name, options = {}, &block
  options = {value: self.data}.merge options
  one name, options, &block
end