Class: Relief::Element
- Inherits:
-
Object
- Object
- Relief::Element
- Defined in:
- lib/relief/element.rb
Instance Attribute Summary collapse
-
#children ⇒ Object
readonly
Returns the value of attribute children.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
- #attribute(name, options = {}, &block) ⇒ Object
- #element(name, options = {}, &block) ⇒ Object
- #elements(name, options = {}, &block) ⇒ Object
-
#initialize(name, options, &block) ⇒ Element
constructor
A new instance of Element.
- #parse(document) ⇒ Object
- #xpath ⇒ Object
Constructor Details
#initialize(name, options, &block) ⇒ Element
Returns a new instance of Element.
5 6 7 8 9 10 11 |
# File 'lib/relief/element.rb', line 5 def initialize(name, , &block) @name = name = @children = {} instance_eval(&block) if block_given? end |
Instance Attribute Details
#children ⇒ Object (readonly)
Returns the value of attribute children.
3 4 5 |
# File 'lib/relief/element.rb', line 3 def children @children end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
3 4 5 |
# File 'lib/relief/element.rb', line 3 def name @name end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
3 4 5 |
# File 'lib/relief/element.rb', line 3 def end |
Instance Method Details
#attribute(name, options = {}, &block) ⇒ Object
45 46 47 |
# File 'lib/relief/element.rb', line 45 def attribute(name, ={}, &block) element(name, .merge(:attribute => true), &block) end |
#element(name, options = {}, &block) ⇒ Object
35 36 37 38 39 |
# File 'lib/relief/element.rb', line 35 def element(name, ={}, &block) [:xpath] ||= name if name =~ %r([/.]) name = [:as].to_sym if .has_key?(:as) @children[name] ||= self.class.new(name, , &block) end |
#elements(name, options = {}, &block) ⇒ Object
41 42 43 |
# File 'lib/relief/element.rb', line 41 def elements(name, ={}, &block) element(name, .merge(:collection => true), &block) end |
#parse(document) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/relief/element.rb', line 13 def parse(document) @children.inject({}) do |values, child| name, element = child values[name] = begin target = (document / element.xpath) parse_node = lambda { |target| element.children.any? ? element.parse(target) : target.to_s } if element.[:collection] target.collect { |child| parse_node.call(child) } else parse_node.call(target) end end values end end |
#xpath ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/relief/element.rb', line 49 def xpath if .has_key?(:xpath) [:xpath] elsif @children.empty? attribute = [:attribute] attribute = name if attribute == true !attribute ? "#{name}/text()" : "@#{attribute}" else name.to_s end end |