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