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