class Bogusdb::Record
simulate a basic database record ORM style @param [Hash] table_data column names and values
Public Class Methods
create(args)
click to toggle source
@note can pass array of hashes to build records @param [Array, Hash] args @retrun [Array, Bogusdb::Record
]
# File lib/bogusdb/record.rb, line 17 def self.create(args) args.is_a?(Array) ? Array.new(args.length) { |i| new(args[i]) } : new(args) end
new(table_data)
click to toggle source
# File lib/bogusdb/record.rb, line 7 def initialize(table_data) raise TypeError unless Hash(table_data) @table_data = table_data set_id @attributes = initialize_attributes(@table_data) end
Public Instance Methods
attributes()
click to toggle source
# File lib/bogusdb/record.rb, line 21 def attributes @attributes end
has_one(table_name, opt)
click to toggle source
@param [String, Symbol] table_name joined table name @param [Hash] opt column names and values @return [Bogusdb::Record] joined table
# File lib/bogusdb/record.rb, line 40 def has_one(table_name, opt) self.class.send(:define_method, table_name.to_sym) do self.class.new(opt) end self.send(table_name) end
inspect()
click to toggle source
# File lib/bogusdb/record.rb, line 47 def inspect nice_format = attributes.collect { |k,v| "#{k}: #{v}" }.compact.join(", ") "#<#{self.class.name}: #{nice_format}" end
join_table(table_name, opts)
click to toggle source
@param [String, Symbol] table_name joined table name @param [Hash, Array] opts column names and values @return [Bogusdb::Record, Array] joined table rows
# File lib/bogusdb/record.rb, line 28 def join_table(table_name, opts) self.class.send(:define_method, table_name.to_sym) do self.class.create([opts].flatten) end self.send(table_name) end
Also aliased as: has_many
Private Instance Methods
column_names()
click to toggle source
# File lib/bogusdb/record.rb, line 61 def column_names @table_data.keys end
id()
click to toggle source
# File lib/bogusdb/record.rb, line 56 def id SecureRandom.random_number(100) end
initialize_attributes(options)
click to toggle source
# File lib/bogusdb/record.rb, line 71 def initialize_attributes(options) options.each do |key,value| if value.is_a?(Hash) || value.is_a?(Array) self.define_singleton_method(key) { Record.create(value) } else self.define_singleton_method(key) { options[key] } self.define_singleton_method("#{key}=") { |val| options[key]=val } end end end
set_id()
click to toggle source
# File lib/bogusdb/record.rb, line 65 def set_id unless @table_data.include?("id" || :id) @table_data.merge!(id: id) end end