class TdModel::Base

Attributes

attr_values[RW]
limit_sql[RW]
order_sql[RW]
select_keys[RW]
select_sql[RW]
sql[RW]
table_name[RW]
where_sql[RW]

Public Class Methods

attr_default_values() click to toggle source
# File lib/td_model/base.rb, line 33
def self.attr_default_values
  {}
end
attr_types() click to toggle source
# File lib/td_model/base.rb, line 29
def self.attr_types
  {}
end
create(args) click to toggle source
# File lib/td_model/base.rb, line 70
def self.create(args)
  res = self.new(args)
  res.valid!(args)
  TD.event.post(self.table_name, args)
  res
end
init_type_value(obj) click to toggle source
# File lib/td_model/base.rb, line 86
def self.init_type_value(obj)
  case obj.to_s
    when "Integer"
      0
    else
      nil
  end
end
limit(num=nil) click to toggle source
# File lib/td_model/base.rb, line 162
def self.limit(num=nil)
  self.new.limit(num)
end
new(args=nil) click to toggle source
# File lib/td_model/base.rb, line 10
def initialize(args=nil)
  self.class.set_column(:time) unless self.class.attr_types.keys.include?(:time)
  @attr_values = self.class.attr_default_values.clone
  @select_keys = []
  @attr_values.keys.each do |col|
    proc = Proc.new { @attr_values[col] }
    set_proc = Proc.new { |val| @attr_values.store(col, val) }

    self.class_eval { define_method(col, proc) }
    self.class_eval { define_method("#{col}=", set_proc) }
  end

  unless args.nil?
    args.each do |key, val|
      @attr_values.store(key, val)
    end
  end
end
order(col, sort=nil) click to toggle source
# File lib/td_model/base.rb, line 130
def self.order(col, sort=nil)
  self.new.order(col, sort)
end
query_execute() click to toggle source
# File lib/td_model/base.rb, line 173
def self.query_execute
  self.new.query_execute
end
reverse_order(col) click to toggle source
# File lib/td_model/base.rb, line 154
def self.reverse_order(col)
  self.new.reverse_order(col)
end
select(args) click to toggle source
# File lib/td_model/base.rb, line 204
def self.select(args)
  self.new.select(args)
end
set_column(name, type=nil) click to toggle source
# File lib/td_model/base.rb, line 37
def self.set_column(name, type=nil)
  attr_types = self.attr_types
  attr_types.store(name, type)
  self.define_singleton_method :attr_types do
    attr_types
  end

  attr_default_values = self.attr_default_values
  attr_default_values.store(name, self.init_type_value(type))
  self.define_singleton_method :attr_default_values do
    attr_default_values
  end
end
table_name() click to toggle source
# File lib/td_model/base.rb, line 57
def self.table_name
  self.to_s.underscore
end
table_name=(name) click to toggle source
# File lib/td_model/base.rb, line 51
def self.table_name=(name)
  self.define_singleton_method :table_name do
    name
  end
end
where(obj) click to toggle source
# File lib/td_model/base.rb, line 95
def self.where(obj)
  self.new.where(obj)
end

Public Instance Methods

create() click to toggle source
# File lib/td_model/base.rb, line 65
def create
  self.valid!(@attr_values)
  TD.event.post(self.table_name, @attr_values)
end
limit(num=nil) click to toggle source
# File lib/td_model/base.rb, line 166
def limit(num=nil)
  if num.present?
    @limit_sql = "LIMIT #{num}"
  end
  self
end
order(col, sort=nil) click to toggle source
# File lib/td_model/base.rb, line 134
def order(col, sort=nil)
  if col.instance_of?(Array)
    col.each do |column|
      self.order(column, sort)
    end
  end

  if col.instance_of?(String) || col.instance_of?(Symbol)
    if @order_sql.blank?
      @order_sql = "ORDER BY #{self.table_name}.#{col} #{sort}"
    else
      @order_sql += " ,#{self.table_name}.#{col}"
    end
  else
    raise "ERROR"
  end

  self
end
query_execute() click to toggle source
# File lib/td_model/base.rb, line 177
def query_execute
  if @select_sql.blank?
    @select_keys = []
    self.class.attr_types.keys.each do |key|
      if @select_sql.blank?
        @select_sql = ''
        @select_sql += "SELECT #{self.table_name}.#{key}"
      else
        @select_sql += " ,#{self.table_name}.#{key}"
      end
      @select_keys << key
    end
  end
  @sql = "#{@select_sql} FROM #{self.table_name} #{@where_sql} #{@order_sql} #{@limit_sql}"
  res = ::TdModel::Sql.query(@sql)

  result = []
  res.each do |td_response|
    result_val = {}
    @select_keys.each_with_index do |key, ix|
      result_val.store(key, td_response[ix])
    end
    result << self.class.new(result_val)
  end
  result
end
reverse_order(col) click to toggle source
# File lib/td_model/base.rb, line 158
def reverse_order(col)
  self.order(col, 'DESC')
end
select(args) click to toggle source
# File lib/td_model/base.rb, line 208
def select(args)
  @select_sql = ''
  @select_keys = []
  [args].flatten.each do |col|
    if @select_sql.blank?
      @select_sql += "SELECT #{self.table_name}.#{col}"
    else
      @select_sql += " ,#{self.table_name}.#{col}"
    end
    @select_keys << key
  end
  self
end
valid!(args) click to toggle source
# File lib/td_model/base.rb, line 77
def valid!(args)
  self.class.attr_types.each do |key, val|
    next if val.nil?
    unless args[key].kind_of?(val)
      raise ::TdModel::Errors::FailedToTypeValidationOfColumnError
    end
  end
end
where(obj) click to toggle source
# File lib/td_model/base.rb, line 99
def where(obj)
  if obj.instance_of?(Hash)
    obj.each do |key, val|
      if @where_sql.present?
        where = "AND"
      else
        @where_sql = ''
        where = "WHERE"
      end

      if obj.instance_of?(Array)
        @where_sql += " #{where} #{self.table_name}.#{key} IN [#{val.join(',')}]"
      else
        @where_sql += " #{where} #{self.table_name}.#{key} = #{val}"
      end
    end
  elsif obj.instance_of?(String)
    if @where_sql.present?
      where = "AND"
    else
      @where_sql = ''
      where = "WHERE"
    end
    @where_sql += " #{where} #{obj}"
  else
    raise "Error"
  end
  self
end