lib/mediator/parser.rb in mediator-0.0.0 vs lib/mediator/parser.rb in mediator-0.0.1
- old
+ new
@@ -1,33 +1,54 @@
+require "mediator/processor"
+
class Mediator
- class Parser
+ class Parser < Processor
attr_reader :data
attr_reader :mediator
def initialize mediator, data = {}
@data = data
@mediator = mediator
end
- def get name
- data[name] || data[name.to_s]
+ def get name, options = nil
+ selector = (options && options[:from]) || name
+ (options && options[:value]) || data[selector] || data[selector.to_s]
end
def has? name
!!get(name)
end
+ def id name, options = {}
+ key "#{name}_id", options.merge(from: name)
+ end
+
def key name, options = nil, &block
- selector = (options && options[:from]) || name
- value ||= get(selector) || (options && options[:value])
+ if name[-1] == "?"
+ name = name[0..-2].intern
+ end
- return if value.nil? or value.respond_to?(:empty?) && value.empty?
+ value = get name, options
- value = block[value] if block_given?
- key! name, value
+ return if empty? value, options
+ mediator.set name, block ? block[value] : value
end
- def key! name, value
- mediator.set name, value
+ def obj name, options = nil, &block
+ data = get name, options
+ subj = (options && options[:subject]) || mediator.get(name)
+
+ return if empty? data, options or subj.nil?
+
+ Mediator[subj, mediator].parse data
+ block[subj] if block
+
+ subj
+ end
+
+ def union name, options = nil, &block
+ (options ||= {}).merge! value: self.data
+ obj name, options, &block
end
end
end