Class: Quickbooks::Model::BaseModel

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Validations, ROXML
Defined in:
lib/quickbooks/model/base_model.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.reference_setters(*args) ⇒ Object

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



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/quickbooks/model/base_model.rb', line 45

def reference_setters(*args)
  args.each do |attribute|
    method_name = "#{attribute.to_s.gsub('_ref', '_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 ⇒ Object

These can be over-ridden in each model object as needed



30
31
32
# File 'lib/quickbooks/model/base_model.rb', line 30

def resource_for_collection
  self::REST_RESOURCE
end

.resource_for_singular ⇒ Object



34
35
36
# File 'lib/quickbooks/model/base_model.rb', line 34

def resource_for_singular
  self::REST_RESOURCE
end

Instance Method Details

#to_xml_inject_ns(model_name, options = {}) ⇒ Object

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



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/quickbooks/model/base_model.rb', line 10

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 = {}) ⇒ Object



23
24
25
# File 'lib/quickbooks/model/base_model.rb', line 23

def to_xml_ns(options = {})
  to_xml_inject_ns(self.class::XML_NODE, options)
end