module Saxophone::ClassMethods
Public Instance Methods
ancestor(name, options = {}, &block)
click to toggle source
# File lib/saxophone/sax_document.rb, line 60 def ancestor(name, options = {}, &block) real_name = (options[:as] ||= name).to_s sax_config.add_ancestor(name, options) create_attr(real_name, &block) end
attribute(name, options = {}, &block)
click to toggle source
# File lib/saxophone/sax_document.rb, line 48 def attribute(name, options = {}, &block) real_name = (options[:as] ||= name).to_s sax_config.add_top_level_attribute(self.class.to_s, options.merge(name: name)) create_attr(real_name, &block) end
column(sym)
click to toggle source
# File lib/saxophone/sax_document.rb, line 100 def column(sym) columns.select { |c| c.column == sym }[0] end
column_names()
click to toggle source
# File lib/saxophone/sax_document.rb, line 112 def column_names columns.map { |e| e.column } end
columns()
click to toggle source
# File lib/saxophone/sax_document.rb, line 96 def columns sax_config.columns end
create_attr(real_name, &block)
click to toggle source
we only want to insert the getter and setter if they haven't defined it from elsewhere. this is how we allow custom parsing behavior. So you could define the setter and have it parse the string into a date or whatever.
# File lib/saxophone/sax_document.rb, line 123 def create_attr(real_name, &block) attr_reader(real_name) unless method_defined?(real_name) if !method_defined?("#{real_name}=") if block_given? define_method("#{real_name}=") do |value| instance_variable_set("@#{real_name}", instance_exec(value, &block)) end else attr_writer(real_name) end end end
data_class(sym)
click to toggle source
# File lib/saxophone/sax_document.rb, line 104 def data_class(sym) column(sym).data_class end
element(name, options = {}, &block)
click to toggle source
# File lib/saxophone/sax_document.rb, line 42 def element(name, options = {}, &block) real_name = (options[:as] ||= name).to_s sax_config.add_top_level_element(name, options) create_attr(real_name, &block) end
elements(name, options = {}, &block)
click to toggle source
# File lib/saxophone/sax_document.rb, line 66 def elements(name, options = {}, &block) real_name = (options[:as] ||= name).to_s if options[:class] sax_config.add_collection_element(name, options) else if block_given? define_method("add_#{real_name}") do |value| send(real_name).send(:<<, instance_exec(value, &block)) end else define_method("add_#{real_name}") do |value| send(real_name).send(:<<, value) end end sax_config.add_top_level_element(name, options.merge(collection: true)) end if !method_defined?(real_name) class_eval <<-SRC def #{real_name} @#{real_name} ||= [] end SRC end attr_writer(options[:as]) unless method_defined?("#{options[:as]}=") end
inherited(subclass)
click to toggle source
# File lib/saxophone/sax_document.rb, line 34 def inherited(subclass) subclass.sax_config.send(:initialize_copy, self.sax_config) end
parse(*args)
click to toggle source
# File lib/saxophone/sax_document.rb, line 38 def parse(*args) new.parse(*args) end
required?(sym)
click to toggle source
# File lib/saxophone/sax_document.rb, line 108 def required?(sym) column(sym).required? end
sax_config()
click to toggle source
# File lib/saxophone/sax_document.rb, line 116 def sax_config @sax_config ||= SAXConfig.new end
value(name, options = {}, &block)
click to toggle source
# File lib/saxophone/sax_document.rb, line 54 def value(name, options = {}, &block) real_name = (options[:as] ||= name).to_s sax_config.add_top_level_element_value(self.class.to_s, options.merge(name: name)) create_attr(real_name, &block) end