class KakaxiParse::BaseModel

Constants

DEFUALT_LIMIT

Attributes

created_at[RW]
id[RW]
name[RW]
updated_at[RW]

Public Class Methods

all(limit: DEFUALT_LIMIT) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 15
def self.all(limit: DEFUALT_LIMIT)
  to_objects(API.new("classes/#{ self.demodulize }", params: { limit: limit }).get['results'])
end
demodulize() click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 62
def self.demodulize
  self.name.split('::').last
end
find(id) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 33
def self.find(id)
  where(id: id).first
end
new(id, name, updated_at, created_at) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 8
def initialize(id, name, updated_at, created_at)
   @id = id
   @name = name if name
   @updated_at = DateTime.strptime(updated_at, '%Y-%m-%dT%H:%M:%S.%LZ') if updated_at
   @created_at =  DateTime.strptime(created_at, '%Y-%m-%dT%H:%M:%S.%LZ') if created_at
end
order(order='created_at', limit=DEFUALT_LIMIT) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 24
def self.order(order='created_at', limit=DEFUALT_LIMIT)
  params = { limit: limit }.merge(order: camelize(order))
  to_objects(API.new("classes/#{ self.demodulize }", params: params).get['results'])
end
short_name() click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 29
def self.short_name
  raise NotImplementedError
end
where(model, hash, limit, belongs_to = [], related_to = []) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 19
def self.where(model, hash, limit, belongs_to = [], related_to = [])
  params = { limit: limit }.merge(where: format(hash, belongs_to, related_to).to_json)
  API.new("classes/#{ model.demodulize }", params: params).get['results']
end

Private Class Methods

camelize(string) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 77
def self.camelize(string)
  if ['imsi', 'imei', 'iccid'].include?(string)
    return string.upcase
  end
  string.split('_').map(&:capitalize).join.tap { |e| e[0] = e[0].downcase }
end
format(hash, belongs_to, related_to) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 113
def self.format(hash, belongs_to, related_to)
  hash = validate_relation(hash, belongs_to, related_to)
  replace_key(hash, :id, :object_id)
  keys_to_camel(hash)
end
keys_to_camel(hash) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 72
def self.keys_to_camel(hash)
  hash.keys.each { |key, _| replace_key(hash, key, camelize(key.to_s)) }
  hash
end
replace_key(hash, old_key, new_key) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 67
def self.replace_key(hash, old_key, new_key)
  hash[new_key] = hash.delete(old_key) if hash.has_key? old_key
  hash
end
to_reference_key(reference_name) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 84
def self.to_reference_key(reference_name)
  (reference_name.to_s + '_id').to_sym
end
to_reference_key_array(reference_names) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 88
def self.to_reference_key_array(reference_names)
  reference_names.map { |name| to_reference_key(name) }
end
validate_relation(hash, belongs_to, related_to) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 92
def self.validate_relation(hash, belongs_to, related_to)
  belongs_to.each do |klass|
    short_name = klass.short_name
    reference = to_reference_key(short_name)
    if hash.has_key? reference
      replace_key(hash, reference, short_name)
      hash[short_name] = Datatype::Pointer.new(klass, hash[short_name]).to_hash
    end
  end

  related_to.each do |klass|
    short_name = klass.short_name
    reference = to_reference_key(short_name)
    if hash.has_key? reference
      replace_key(hash, reference, '$related_to')
      hash['$related_to'] = { object: Datatype::Pointer.new(klass, hash['$related_to']).to_hash, key: self.reference_name }
    end
  end
  hash
end

Public Instance Methods

delete() click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 58
def delete
  API.new("classes/#{self.class.demodulize}/#{self.id}").delete
end
save(record, params, belongs_to = [], related_to = []) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 37
def save(record, params, belongs_to = [], related_to = [])
  result = API.new("classes/#{record.class.demodulize}", params: BaseModel.format(params, belongs_to, related_to)).post
  if result.has_key? 'objectId'
    self.created_at = DateTime.strptime(result['createdAt'], '%Y-%m-%dT%H:%M:%S.%LZ')
    self.id = result['objectId']
    true
  else
    false
  end
end
update(record, params, belongs_to = [], related_to = []) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 48
def update(record, params, belongs_to = [], related_to = [])
  result = API.new("classes/#{record.class.demodulize}/#{record.id}", params: BaseModel.format(params, belongs_to, related_to)).put
  if result.has_key? 'updatedAt'
    self.updated_at = DateTime.strptime(result['updatedAt'], '%Y-%m-%dT%H:%M:%S.%LZ')
    true
  else
    false
  end
end

Private Instance Methods

build_original_params(params) click to toggle source
# File lib/kakaxi_parse/base_model.rb, line 119
def build_original_params(params)
  original_params = {}
  params.each { |key, value| original_params[key] = value }
  original_params
end