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