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 = nil) ⇒ Object



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

def get name, options = nil
  selector = (options && options[:from]) || name
  (options && options[:value]) || data[selector] || data[selector.to_s]
end

#has?(name, options = nil) ⇒ Boolean

Returns:

  • (Boolean)


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

def has? name, options = nil
  selector = (options && options[:from]) || name
  (options && 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 = nil, &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 = nil, &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 = nil, &block) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/mediator/parser.rb', line 54

def many name, options = nil, &block
  data = get name, options
  subj = (options && options[:subject]) || mediator.get(name)

  data.map { |d| sub subj[data.index d], d, options, &block }.
    reject { |v| empty? v, options }
end

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



62
63
64
65
66
67
# File 'lib/mediator/parser.rb', line 62

def one name, options = nil, &block
  data = get name, options
  subj = (options && options[:subject]) || mediator.get(name)

  sub subj, data, options, &block
end

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



69
70
71
72
# File 'lib/mediator/parser.rb', line 69

def union name, options = nil, &block
  (options ||= {}).merge! value: self.data
  one name, options, &block
end