class Quickbooks::Model::BaseModel
Public Class Methods
attribute_names()
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 66 def attribute_names roxml_attrs.map(&:accessor) end
attrs_with_types()
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 112 def attrs_with_types roxml_attrs.map do |attr| "#{attr.accessor}:" + "#{attr.class.block_shorthands.invert[attr.blocks.last]}:#{attr.sought_type}" end end
inspect()
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 108 def inspect "#{super}(#{attrs_with_types.join " "})" end
new(attributes={})
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 12 def initialize(attributes={}) attributes.each {|key, value| public_send("#{key}=", value) } end
reference_attrs()
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 104 def reference_attrs matches = roxml_attrs.select{|attr| attr.sought_type == Quickbooks::Model::BaseReference}.map{|attr| attr.accessor} end
reference_setters(*args)
click to toggle source
Automatically generate an ID setter. Example:
reference_setters :discount_ref
Would generate a method like: def discount_id=(id)
self.discount_ref = BaseReference.new(id)
end
# File lib/quickbooks/model/base_model.rb, line 86 def reference_setters(*args) references = args.empty? ? reference_attrs : args references.each do |attribute| last_index = attribute.to_s.rindex('_ref') field_name = !last_index.nil? ? attribute.to_s.slice(0, last_index) : attribute method_name = "#{field_name}_id=".to_sym unless instance_methods(false).include?(method_name) method_definition = <<-METH def #{method_name}(id) self.#{attribute} = BaseReference.new(id) end METH class_eval(method_definition) end end end
resource_for_collection()
click to toggle source
These can be over-ridden in each model object as needed
# File lib/quickbooks/model/base_model.rb, line 71 def resource_for_collection self::REST_RESOURCE end
resource_for_singular()
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 75 def resource_for_singular self::REST_RESOURCE end
to_xml_big_decimal()
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 62 def to_xml_big_decimal Proc.new { |val| val.nil? ? nil : val.to_f } end
Public Instance Methods
as_json(options = nil)
click to toggle source
Calls superclass method
# File lib/quickbooks/model/base_model.rb, line 31 def as_json(options = nil) options = {} if options.nil? except_conditions = ["roxml_references"] except_conditions << options[:except] options[:except] = except_conditions.flatten.uniq.compact super(options) end
attributes()
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 45 def attributes attributes = self.class.attribute_names.map do |name| value = public_send(name) value = value.attributes if value.respond_to?(:attributes) [name, value] end HashWithIndifferentAccess[attributes] end
inspect()
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 55 def inspect # it would be nice if we could inspect all the children, # but it's likely to blow the stack in some cases "#<#{self.class} " + "#{attributes.map{|k,v| "#{k}: #{v.nil? ? 'nil' : v.to_s }"}.join ", "}>" end
to_xml_inject_ns(model_name, options = {})
click to toggle source
ROXML doesnt insert the namespaces into generated XML so we need to do it ourselves insert the static namespaces in the first opening tag that matches the model_name
# File lib/quickbooks/model/base_model.rb, line 18 def to_xml_inject_ns(model_name, options = {}) s = StringIO.new xml = to_xml(options).write_to(s, :indent => 0, :indent_text => '') destination_name = options.fetch(:destination_name, nil) destination_name ||= model_name sparse = options.fetch(:sparse, false) sparse_string = %{sparse="#{sparse}"} step1 = s.string.sub("<#{model_name}>", "<#{destination_name} #{Quickbooks::Service::BaseService::XML_NS} #{sparse_string}>") step2 = step1.sub("</#{model_name}>", "</#{destination_name}>") step2 end
to_xml_ns(options = {})
click to toggle source
# File lib/quickbooks/model/base_model.rb, line 39 def to_xml_ns(options = {}) to_xml_inject_ns(self.class::XML_NODE, options) end