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_many(table_name, opts)
Alias for: join_table
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