module FeideeUtils::Record::Persistent::ClassMethods
Public Instance Methods
all()
click to toggle source
# File lib/feidee_utils/record/persistent.rb, line 38 def all arr = [] database.query("SELECT * FROM #{self.table_name}") do |result| result.each do |raw_row| arr << self.new(raw_row) end end arr end
column_names()
click to toggle source
# File lib/feidee_utils/record/persistent.rb, line 33 def column_names @column_names ||= self.columns.map do |entry| entry["name"] end.freeze end
columns()
click to toggle source
# File lib/feidee_utils/record/persistent.rb, line 29 def columns database.table_info(self.table_name) end
find(id)
click to toggle source
# File lib/feidee_utils/record/persistent.rb, line 65 def find(id) find_by_id(id) or raise "No #{self.entity_name} of poid #{id} found" end
find_by_id(id)
click to toggle source
# File lib/feidee_utils/record/persistent.rb, line 48 def find_by_id(id) raw_result = database.query( "SELECT * FROM #{self.table_name} WHERE #{self.id_field_name} = ?", id ) raw_row = raw_result.next return nil if raw_row == nil if raw_result.next != nil raise "Getting more than one result with the same ID #{id} " + "in table #{self.table_name}." end self.new(raw_row) end
Protected Instance Methods
generate_names()
click to toggle source
Names Must be invoked by Record.inherited
# File lib/feidee_utils/record/persistent.rb, line 10 def generate_names entity_name = if i = self.name.rindex("::") self.name[(i+2)..-1] else self.name end id_field_name = entity_name.sub(/^[A-Z]/) { $&.downcase } + "POID" entity_name_underscore = entity_name.gsub(/([a-z\d])([A-Z\d])/, '\1_\2').downcase table_name = "t_" + entity_name_underscore define_singleton_method :entity_name do entity_name end define_singleton_method :id_field_name do id_field_name end define_singleton_method :table_name do table_name end end