class Rubill::Base

Attributes

remote_record[RW]

Public Class Methods

active() click to toggle source
# File lib/rubill/base.rb, line 19
def self.active
  where([Query::Filter.new("isActive", "=", "1")])
end
all() click to toggle source
# File lib/rubill/base.rb, line 86
def self.all
  # Note: this method returns ALL of desired entity, including inactive
  where([])
end
create(data) click to toggle source
# File lib/rubill/base.rb, line 39
def self.create(data)
  new(Query.create(remote_class_name, data.merge({entity: remote_class_name})))
end
delete(id) click to toggle source
# File lib/rubill/base.rb, line 47
def self.delete(id)
  Query.delete(remote_class_name, id)
end
find(id) click to toggle source
# File lib/rubill/base.rb, line 35
def self.find(id)
  new(Query.read(remote_class_name, id))
end
find_by_name(name) click to toggle source
# File lib/rubill/base.rb, line 51
def self.find_by_name(name)
  filter = Query::Filter.new("name", "=", name)
  raw_result = Query.list(remote_class_name, 0, 1, [filter])

  raw_result.length > 0 ? new(raw_result.first) : nil
end
new(remote) click to toggle source
# File lib/rubill/base.rb, line 7
def initialize(remote)
  self.remote_record = remote
end
update(data) click to toggle source
# File lib/rubill/base.rb, line 43
def self.update(data)
  Query.update(remote_class_name, data.merge({entity: remote_class_name}))
end
where(filters=[]) click to toggle source
# File lib/rubill/base.rb, line 58
def self.where(filters=[])
  raise ArgumentError unless filters.is_a?(Enumerable)
  raise ArgumentError if !filters.is_a?(Hash) && !filters.all? { |f| f.is_a?(Query::Filter) }

  if filters.is_a?(Hash)
    filters = filters.map do |field, value|
      Query::Filter.new(field.to_s, "=", value)
    end
  end

  result = []
  start = 0
  step = 999
  loop do
    chunk = Query.list(remote_class_name, start, step, filters)

    if !chunk.empty?
      records = chunk.map { |r| new(r) }
      result += records
      start += step
    end

    break if chunk.length < step
  end

  result
end

Private Class Methods

remote_class_name() click to toggle source
# File lib/rubill/base.rb, line 93
def self.remote_class_name
  # Assume remote class name is the same as the class name
  self.name.sub('Rubill::', '')
end

Public Instance Methods

[](key) click to toggle source
# File lib/rubill/base.rb, line 11
def [](key)
  remote_record.send(:[], key)
end
[]=(key, value) click to toggle source
# File lib/rubill/base.rb, line 15
def []=(key, value)
  remote_record.send(:[]=, key, value)
end
delete() click to toggle source
# File lib/rubill/base.rb, line 31
def delete
  self.class.delete(id)
end
id() click to toggle source
# File lib/rubill/base.rb, line 23
def id
  remote_record[:id]
end
save() click to toggle source
# File lib/rubill/base.rb, line 27
def save
  self.class.update(remote_record)
end