Module | Atom::Converters |
In: |
lib/atom/element.rb
|
an XML attribute in the Atom namespace
# File lib/atom/element.rb, line 304 def atom_attrb(name) self.attrb(['atom', Atom::NS], name) end
a type of Atom Link. specifics defined by Hash ‘criteria‘
# File lib/atom/element.rb, line 309 def atom_link name, criteria def_get name do existing = find_link(criteria) existing and existing.href end def_set name do |value| existing = find_link(criteria) if existing existing.href = value else links.new criteria.merge(:href => value) end end end
an XML attribute in the namespace ‘ns‘
# File lib/atom/element.rb, line 282 def attrb(ns, name) attr_accessor name self.on_parse_attr [ns[1], name] do |e,x| e.set(name, x) end self.on_build do |e,x| if v = e.get(name) n = name.to_s if x.namespace != ns[1] x.add_namespace *ns unless x.namespaces[ns[0]] n = "#{ns[0]}:#{n}" end x.attributes[n] = v.to_s end end end
# File lib/atom/element.rb, line 149 def build_plain ns, name self.on_build do |e,x| if v = e.get(name) el = e.append_elem(x, ns, name) el.text = v.to_s end end end
an element that is parsed by Element descendant ‘klass‘
# File lib/atom/element.rb, line 194 def element(ns, name, klass) el_name = name name = name.to_s.gsub(/-/, '_') attr_reader name self.on_parse [ns[1], el_name] do |e,x| e.instance_variable_set("@#{name}", klass.parse(x, e.base)) end self.on_build do |e,x| if v = e.get(name) el = e.append_elem(x, ns, el_name) v.build(el) end end def_set name do |value| instance_variable_set("@#{name}", klass.new(value)) end end
an element that can appear multiple times that is parsed by Element descendant ‘klass‘
‘one_name’ is the name of the element, ‘many_name’ is the name of the attribute that will be created on this Element
# File lib/atom/element.rb, line 252 def elements(ns, one_name, many_name, klass) attr_reader many_name self.on_init do var = Atom::Multiple(klass).new instance_variable_set("@#{many_name}", var) end self.on_parse_many [ns[1], one_name] do |e,xs| var = e.get(many_name) xs.each do |el| var << klass.parse(el, e.base) end end self.on_build do |e,x| e.get(many_name).each do |v| el = e.append_elem(x, ns, one_name) v.build(el) end end end
an element that can appear multiple times that contains text
‘one_name’ is the name of the element, ‘many_name’ is the name of the attribute that will be created on this Element
# File lib/atom/element.rb, line 225 def strings(ns, one_name, many_name) attr_reader many_name self.on_init do instance_variable_set("@#{many_name}", []) end self.on_parse_many [ns[1], one_name] do |e,xs| var = e.instance_variable_get("@#{many_name}") xs.each do |el| var << el.text end end self.on_build do |e,x| e.instance_variable_get("@#{many_name}").each do |v| e.append_elem(x, ns, one_name).text = v end end end
an element in namespace ‘ns’ containing a RFC3339 timestamp
# File lib/atom/element.rb, line 167 def time(ns, name) attr_reader name self.def_set name do |time| unless time.respond_to? :iso8601 time = Time.parse(time.to_s) end def time.to_s; iso8601; end instance_variable_set("@#{name}", time) end define_method "#{name}!".to_sym do set(name, Time.now) end self.parse_plain(ns[1], name) self.build_plain(ns, name) end