Module: FeideeUtils::Record::Persistent::ClassMethods
- Included in:
- FeideeUtils::Record
- Defined in:
- lib/feidee_utils/record/persistent.rb
Instance Method Summary collapse
-
#all ⇒ Object
Persistent.
- #find(id) ⇒ Object
- #find_by_id(id) ⇒ Object
-
#genereate_names(subclass) ⇒ Object
Names Must be invoked by Record.inherited.
Instance Method Details
#all ⇒ Object
Persistent
26 27 28 29 30 31 32 33 34 |
# File 'lib/feidee_utils/record/persistent.rb', line 26 def all arr = [] database.query("SELECT * FROM #{self.table_name}") do |result| result.each do |raw_row| arr << self.new(result.columns, result.types, raw_row) end end arr end |
#find(id) ⇒ Object
49 50 51 |
# File 'lib/feidee_utils/record/persistent.rb', line 49 def find(id) find_by_id(id) or raise "No #{self.name} of poid #{id} found" end |
#find_by_id(id) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/feidee_utils/record/persistent.rb', line 36 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_result.columns, raw_result.types, raw_row) end |
#genereate_names(subclass) ⇒ Object
Names Must be invoked by Record.inherited
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/feidee_utils/record/persistent.rb', line 8 def genereate_names subclass entity_name = if i = subclass.name.rindex("::") subclass.name[(i+2)..-1] else subclass.name end id_field_name = entity_name.sub(/^[A-Z]/) { $&.downcase } + "POID" table_name = "t_" + entity_name.gsub(/([a-z\d])([A-Z\d])/, '\1_\2').downcase subclass.class_exec do 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 end |