lib/fwtoolkit/test/frank_model.rb in fwtoolkit-0.3.4 vs lib/fwtoolkit/test/frank_model.rb in fwtoolkit-0.4.0
- old
+ new
@@ -1,62 +1,111 @@
require 'pickle'
module FWToolkit
module Test
+ class FrankCache
+ @@klass_to_objects = {}
+ @@id_to_object = {}
+
+ def self.add_object(object)
+ object.id = object.object_id
+
+ # add to id to object hash
+ @@id_to_object[object.object_id.to_s] = object
+
+ # add to klass to object hash
+ @@klass_to_objects[object.class.name] = [] unless @@klass_to_objects[object.class.name]
+ @@klass_to_objects[object.class.name] << object
+ end
+
+ def self.all_objects(klass)
+ @@klass_to_objects[klass.name] ? @@klass_to_objects[klass.name] : []
+ end
+
+ def self.find(id)
+ @@id_to_object[id.to_s]
+ end
+
+ def self.find_first(klass, conditions)
+ self.find_all(klass, conditions).first
+ end
+
+ def self.find_all(klass, conditions)
+ objects = []
+ FWToolkit::Test::FrankCache.all_objects(klass).each do |o|
+ match = true
+ conditions.keys.each do |k|
+ if not eval("o.#{k}").eql? conditions[k]
+ match = false
+ break
+ end
+ end
+ objects << o if match
+ end
+ objects
+ end
+ end
+
class FrankModel
attr_accessor :id, :core_data_entity
module PickleAdapter
include Pickle::Adapter::Base
# Gets a list of the available models for this adapter
def self.model_classes
klasses = ::FWToolkit::Test::FrankModel.__send__(:descendants)
-
- #klasses.select do |klass|
- # !klass.abstract_class? && klass.table_exists? && !except_classes.include?(klass.name)
- #end
end
# get a list of column names for a given class
def self.column_names(klass)
- #klass.column_names
- []
+ klass.new.methods
end
# Get an instance by id of the model
def self.get_model(klass, id)
- FWToolkit::Test::FrankModel.object_in_cache(id)
+ FWToolkit::Test::FrankCache.find(id)
end
# Find the first instance matching conditions
def self.find_first_model(klass, conditions)
- #klass.find(:first, :conditions => conditions)
- puts "find_first_model"
+ FWToolkit::Test::FrankCache.find_first(klass, conditions)
end
# Find all models matching conditions
def self.find_all_models(klass, conditions)
- #klass.find(:all, :conditions => conditions)
- puts "find_all_models"
+ FWToolkit::Test::FrankCache.find_all(klass, conditions)
end
# Create a model using attributes
def self.create_model(klass, attributes)
puts "create_model"
end
end
- @@object_cache = {}
-
def self.object_in_cache(id)
- return @@object_cache[id.to_s]
+ FWToolkit::Test::FrankCache.find(id)
end
+
+ def self.all_objects
+ FWToolkit::Test::FrankCache.all_objects(self)
+ end
def save!
- self.id = self.object_id
- @@object_cache[self.object_id.to_s] = self
+ FWToolkit::Test::FrankCache.add_object(self)
+ end
+
+ def self.find(id)
+ FWToolkit::Test::FrankCache.find(id)
+ end
+
+ def self.find_first(conditions={})
+ FWToolkit::Test::FrankCache.find_first(self, conditions)
+ end
+
+ def self.find_all(conditions={})
+ FWToolkit::Test::FrankCache.find_all(self, conditions)
end
end
end
end
\ No newline at end of file