class ZohoService::Base
Attributes
default_parent_name[RW]
model_params[RW]
childs[R]
errors[R]
full_data[R]
item_id[R]
parents[R]
saved[R]
table[R]
Public Class Methods
class_path(id = nil)
click to toggle source
# File lib/zoho_service/base.rb, line 110 def class_path(id = nil) "/#{models_name}" + (id ? '/'+id : '') end
models_name()
click to toggle source
# File lib/zoho_service/base.rb, line 114 def models_name self.name.demodulize.pluralize.underscore end
new(parent = nil, data = nil, params = {})
click to toggle source
Calls superclass method
# File lib/zoho_service/base.rb, line 7 def initialize(parent = nil, data = nil, params = {}) @childs = {} @errors = [] @parents = parent ? { parent.class.name.demodulize.underscore.to_sym => parent } : {} @item_id = params[:item_id] || ((data && data['id']) ? data['id'] : nil) super(data) @full_data = params[:full_data] end
new_by_id(parent, id)
click to toggle source
# File lib/zoho_service/base.rb, line 118 def new_by_id(parent, id) raise('Need id in Base::new_by_id of ZohoService gem.') unless id data = parent.connector.load_by_api(parent.resource_path + class_path(id)) new(parent, data, { full_data: true }) end
Public Instance Methods
connector()
click to toggle source
# File lib/zoho_service/base.rb, line 16 def connector parent ? parent.connector : self end
delete()
click to toggle source
# File lib/zoho_service/base.rb, line 67 def delete return unless @item_id response = connector.load_by_api(resource_path, nil, { method: :delete }) if response && response['message'] @errors << response['message'] elsif response @item_id = nil @id = nil @full_data = nil else @errors << 'Error while try delete' end self end
delete!()
click to toggle source
# File lib/zoho_service/base.rb, line 82 def delete! delete raise("#{@errors.join("\n")}") if @errors.any? self end
full()
click to toggle source
# File lib/zoho_service/base.rb, line 33 def full load_full unless @full_data self end
get_childs(child_model, childs_class)
click to toggle source
# File lib/zoho_service/base.rb, line 28 def get_childs(child_model, childs_class) @childs[child_model] ||= ApiCollection.new(self, { items_class: childs_class}) @childs[child_model] end
get_parent(model, params = {})
click to toggle source
# File lib/zoho_service/base.rb, line 24 def get_parent(model, params = {}) @parents[model.to_sym] end
init_data(data)
click to toggle source
# File lib/zoho_service/base.rb, line 44 def init_data(data) data.each{ |k, v| @table[k.to_sym] = v; new_ostruct_member(k); } @item_id = id if id && !@item_id end
load_full(data = nil)
click to toggle source
# File lib/zoho_service/base.rb, line 38 def load_full(data = nil) raise('You must save model before take full data in ZohoService gem.') unless @item_id init_data(data || connector.load_by_api(resource_path)) @full_data = true end
parent()
click to toggle source
# File lib/zoho_service/base.rb, line 20 def parent @parents[self.class.default_parent_name] || @parents.values.first end
resource_path()
click to toggle source
# File lib/zoho_service/base.rb, line 99 def resource_path raise('Cant take resource_path for not saved item in ZohoService gem.') unless @item_id parent.resource_path + self.class.class_path(@item_id) end
save()
click to toggle source
# File lib/zoho_service/base.rb, line 88 def save update(to_hash) @saved = @errors.any? end
save!()
click to toggle source
# File lib/zoho_service/base.rb, line 93 def save! save raise("#{@errors.join("\n")}") if @errors.any? self end
to_hash()
click to toggle source
# File lib/zoho_service/base.rb, line 104 def to_hash @table.to_hash(*args, &block) end
update(params)
click to toggle source
# File lib/zoho_service/base.rb, line 49 def update(params) url = @item_id ? resource_path : parent.resource_path + self.class.class_path response = connector.load_by_api(url, params.to_hash, { method: @item_id ? :patch : :post }) if response if response.kind_of?(Array) raise("ERROR! create item response is Array[#{response.count}]. Try change http to https in api_url :)!") elsif response['message'] @errors << response['message'] else init_data(response.to_hash) @full_data = nil end else @errors << "Error while try update[#{@item_id}] url=[#{url}] params=[#{params&.to_json}]" end self end