module FeideeUtils::Record::Persistent::ClassMethods

Public Instance Methods

all() click to toggle source

Persistent

# 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