class ONIX::SubsetDSL
DSL
Public Class Methods
_ancestor_registered_scopes()
click to toggle source
# File lib/onix/subset.rb, line 267 def self._ancestor_registered_scopes els = self.registered_scopes sup = self while sup.respond_to?(:registered_scopes) els.merge!(sup.registered_scopes) if sup.registered_scopes sup = sup.superclass end els end
_ancestors_registered_elements()
click to toggle source
# File lib/onix/subset.rb, line 324 def self._ancestors_registered_elements els = self.registered_elements sup = self while sup.respond_to?(:registered_elements) els.merge!(sup.registered_elements) if sup.registered_elements sup = sup.superclass end els end
ancestor_registered_scopes()
click to toggle source
# File lib/onix/subset.rb, line 277 def self.ancestor_registered_scopes @ancestors_registered_scopes ||= _ancestor_registered_scopes end
ancestors_registered_elements()
click to toggle source
# File lib/onix/subset.rb, line 334 def self.ancestors_registered_elements @ancestors_registered_elements ||= _ancestors_registered_elements end
element(name, type, options = {})
click to toggle source
# File lib/onix/subset.rb, line 285 def self.element(name, type, options = {}) @elements ||= {} @elements[name] = ElementParser.new(name, type, options) short_name = self.ref_to_short(name) if short_name @elements[short_name] = @elements[name].dup @elements[short_name].short = true end attr_accessor @elements[name].to_sym alias_method "#{@elements[name].underscore_name}_with_attributes".to_sym, @elements[name].to_sym current_element = @elements[name] define_method current_element.to_sym do |args = nil| val = instance_variable_get(current_element.to_instance) if val.respond_to?(:__getobj__) val.__getobj__ else if val.is_a?(SubsetArray) and val.first and val.first.is_a?(TextWithAttributes) val.map{|v| v.respond_to?(:__getobj__) ? v.__getobj__ : v} else val end end end if @elements[name].shortcut current_element = @elements[name] alias_method "#{current_element.shortcut.to_s}_with_attributes".to_sym, "#{@elements[name].underscore_name}_with_attributes".to_sym alias_method current_element.shortcut, @elements[name].to_sym end end
elements(name, type, options = {})
click to toggle source
shortcut for element :array=>true
# File lib/onix/subset.rb, line 320 def self.elements(name, type, options = {}) self.element(name, type, options.merge(:array => true)) end
get_class(name)
click to toggle source
# File lib/onix/subset.rb, line 371 def self.get_class(name) ONIX.const_get(name) if ONIX.const_defined? name end
n()
click to toggle source
infinity constant for cardinality
# File lib/onix/subset.rb, line 376 def self.n Float::INFINITY end
new()
click to toggle source
# File lib/onix/subset.rb, line 342 def initialize # initialize plural as Array self.class.ancestors_registered_elements.each do |k, e| if e.is_array? # register a contextual SubsetArray object subset_array = SubsetArray.new subset_klass = self.class.get_class(e.class_name) if subset_klass.respond_to? :registered_scopes subset_klass.registered_scopes.each do |n, l| unless subset_array.respond_to? n.to_s subset_array.define_singleton_method(n.to_s) do instance_exec(&l) end end end end instance_variable_set(e.to_instance, subset_array) end end end
ref_to_short(name)
click to toggle source
# File lib/onix/subset.rb, line 367 def self.ref_to_short(name) RefToShort.names[name] end
registered_elements()
click to toggle source
# File lib/onix/subset.rb, line 338 def self.registered_elements @elements || {} end
registered_scopes()
click to toggle source
# File lib/onix/subset.rb, line 281 def self.registered_scopes @scopes || {} end
scope(name, lambda)
click to toggle source
# File lib/onix/subset.rb, line 262 def self.scope(name, lambda) @scopes ||= {} @scopes[name] = lambda end
short_to_ref(name)
click to toggle source
# File lib/onix/subset.rb, line 363 def self.short_to_ref(name) ShortToRef.names[name] end
Public Instance Methods
get_class(name)
click to toggle source
# File lib/onix/subset.rb, line 384 def get_class(name) self.class.get_class(name) end
get_registered_element(name)
click to toggle source
# File lib/onix/subset.rb, line 380 def get_registered_element(name) self.class.ancestors_registered_elements[name] end
parse(n)
click to toggle source
# File lib/onix/subset.rb, line 388 def parse(n) parse_attributes(n.attributes) n.elements.each do |t| name = t.name e = self.get_registered_element(name) if e primitive = true case e.type when :subset klass = self.get_class(e.class_name) unless klass raise UnknownElement, e.class_name end val = klass.parse(t) primitive = false when :text val = t.text when :integer val = t.text.to_i when :float val = t.text.to_f when :bool val = true when :date fmt = t["dateformat"] || "00" begin val = ONIX::Helper.to_date(fmt, t.text) rescue val = t.text end when :datestamp tm = t.text datestamp = DateStamp.new datestamp.parse(tm) val = datestamp when :ignore val = nil else val = t.text end if val if primitive && t.attributes.length > 0 if t.attributes["textformat"] && t.attributes["textformat"].to_s == "05" # content is XHTML val = CGI.unescapeHTML(t.children.map { |x| x.to_s }.join.strip) end val = TextWithAttributes.new(val) val.parse(t.attributes) end if e.is_array? instance_variable_get(e.to_instance).send(:push, val) else instance_variable_set(e.to_instance, e.parse_lambda(val)) end end else unsupported(t) end end end