Class: ZohoInvoice::Base
- Inherits:
-
Object
- Object
- ZohoInvoice::Base
- Defined in:
- lib/zoho_invoice/base.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
Class Method Summary collapse
- .create(client, options = {}) ⇒ Object
- .create_attributes(attrs) ⇒ Object
- .define_object_attrs(*attrs) ⇒ Object
-
.has_many(*attrs) ⇒ Object
TODO Create an Association class to manage the relationship.
-
.search(client, input_text, options = {}) ⇒ Object
TODO need to build a class that is something like ActiveRecord::Relation TODO need to be able to handle associations when hydrating objects.
Instance Method Summary collapse
- #attributes ⇒ Object
-
#initialize(client, options = {}) ⇒ Base
constructor
A new instance of Base.
- #reflections ⇒ Object
-
#save ⇒ Object
TODO Determining the resource to use will need to change.
-
#to_xml(*args) ⇒ Object
This needs to be a Nokogiri::XML::Builder.
Constructor Details
#initialize(client, options = {}) ⇒ Base
Returns a new instance of Base.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/zoho_invoice/base.rb', line 40 def initialize(client, = {}) @client = client # Assign all of the single attribtues # if !self.attributes.empty? (self.attributes & .keys).each do |attribute| self.send("#{attribute}=", [attribute]) end end # Assign all of the associations. Not the most advanced # if self.reflections.is_a?(Array) self.reflections.each { |r| self.send("#{r}=", []) } (self.reflections & .keys).each do |reflection| [reflection].each do |reflection_obj| klass = ZohoInvoice.const_get(camel_case(reflection.to_s[0..-2])) if reflection_obj.is_a?(Hash) self.send("#{reflection}") << klass.new(@client, reflection_obj) elsif reflection_obj.is_a?(klass) self.send("#{reflection}") << reflection_obj end end end end end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
9 10 11 |
# File 'lib/zoho_invoice/base.rb', line 9 def client @client end |
Class Method Details
.create(client, options = {}) ⇒ Object
23 24 25 |
# File 'lib/zoho_invoice/base.rb', line 23 def self.create(client, = {}) self.new(client, ).save end |
.create_attributes(attrs) ⇒ Object
104 105 106 107 108 |
# File 'lib/zoho_invoice/base.rb', line 104 def self.create_attributes(attrs) attrs.each do |attr| attr_accessor attr end end |
.define_object_attrs(*attrs) ⇒ Object
11 12 13 14 |
# File 'lib/zoho_invoice/base.rb', line 11 def self.define_object_attrs(*attrs) @attributes = attrs create_attributes(attrs) end |
.has_many(*attrs) ⇒ Object
TODO Create an Association class to manage the relationship
18 19 20 21 |
# File 'lib/zoho_invoice/base.rb', line 18 def self.has_many(*attrs) @reflections = attrs create_attributes(attrs) end |
.search(client, input_text, options = {}) ⇒ Object
TODO need to build a class that is something like ActiveRecord::Relation TODO need to be able to handle associations when hydrating objects
30 31 32 33 34 35 36 37 38 |
# File 'lib/zoho_invoice/base.rb', line 30 def self.search(client, input_text, = {}) result_hash = client.get("/api/view/search/#{self.to_s.split('::').last.downcase}s", :searchtext => input_text).body objects_to_hydrate = result_hash['Response']["#{self.to_s.split('::').last}s"]["#{self.to_s.split('::').last}"] self.process_objects(client, objects_to_hydrate) rescue Faraday::Error::ClientError => e if e.response[:body] raise ZohoInvoice::Error::ClientError.from_response(e.response) end end |
Instance Method Details
#attributes ⇒ Object
72 73 74 |
# File 'lib/zoho_invoice/base.rb', line 72 def attributes self.class.instance_variable_get(:'@attributes') || [] end |
#reflections ⇒ Object
68 69 70 |
# File 'lib/zoho_invoice/base.rb', line 68 def reflections self.class.instance_variable_get(:'@reflections') || [] end |
#save ⇒ Object
TODO Determining the resource to use will need to change
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/zoho_invoice/base.rb', line 78 def save klass_name = self.class.to_s.split('::').last action = 'create' action = 'update' if !send("#{klass_name.downcase}_id").nil? result = client.post("/api/#{klass_name.downcase + 's'}/#{action}", :XMLString => self.to_xml) if action == 'create' && !result.body.nil? && !result.body['Response'][klass_name].nil? self.send("#{klass_name.downcase}_id=", result.body['Response'][klass_name]["#{klass_name}ID"]) end self rescue Faraday::Error::ClientError => e if e.response[:body] raise ZohoInvoice::Error::ClientError.from_response(e.response) end end |
#to_xml(*args) ⇒ Object
This needs to be a Nokogiri::XML::Builder
100 101 102 |
# File 'lib/zoho_invoice/base.rb', line 100 def to_xml(*args) build_attributes.to_xml(*args) end |