lib/pickle/session.rb in ianwhite-pickle-0.1.4 vs lib/pickle/session.rb in ianwhite-pickle-0.1.5

- old
+ new

@@ -1,69 +1,74 @@ module Pickle class Session def initialize(options = {}) self.parser = options[:parser] || Pickle.parser - @config = options[:config] || parser.config + @config = parser.config end def create_model(a_model_name, fields = nil) factory, label = *parser.parse_model(a_model_name) raise ArgumentError, "Can't create with an ordinal (e.g. 1st user)" if label.is_a?(Integer) record = config.factories[factory].create(parser.parse_fields(fields)) store_model(factory, label, record) end - def find_model(a_model_name, fields) - model, name = *parser.parse_model(a_model_name) + def find_model(a_model_name, fields = nil) + factory, name = *parser.parse_model(a_model_name) raise ArgumentError, "Can't find a model with an ordinal (e.g. 1st user)" if name.is_a?(Integer) - model_class = model.classify.constantize + model_class = config.factories[factory].klass if record = model_class.find(:first, :conditions => convert_models_to_attributes(model_class, parser.parse_fields(fields))) - store_model(model, name, record) - else - raise ActiveRecord::RecordNotFound, "Couldn't find #{model} with #{fields}" + store_model(factory, name, record) end end + def find_models(factory, fields = nil) + model_class = config.factories[factory].klass + records = model_class.find(:all, :conditions => convert_models_to_attributes(model_class, parser.parse_fields(fields))) + records.each {|record| store_model(factory, nil, record)} + end + + def clear_models(factory) + models_by_name(factory).clear + models_by_factory(factory).clear + end + # return the original model stored by create_model or find_model - def created_model(a_model_name) - factory, name_or_index = *parser.parse_model(a_model_name) + def created_model(name) + factory, name_or_index = *parser.parse_model(name) if name_or_index.blank? models_by_factory(factory).last elsif name_or_index.is_a?(Integer) models_by_factory(factory)[name_or_index] else - models_by_name(factory)[name_or_index] or raise "model: #{a_model_name} does not refer to known model in this scenario" + models_by_name(factory)[name_or_index] or raise "model: #{name} does not refer to known model in this scenario" end end # predicate version which raises no errors - def created_model?(a_model_name) - (created_model(a_model_name) rescue nil) ? true : false + def created_model?(name) + (created_model(name) rescue nil) ? true : false end # return a newly selected model - def model(a_model_name) - if model = created_model(a_model_name) - model.class.find(model.id) or raise ActiveRecord::RecordNotFound, "model: #{a_model_name} could not be found in the database" - end + def model(name) + (model = created_model(name)) && model.class.find(model.id) end # predicate version which raises no errors - def model?(a_model_name) - (model(a_model_name) rescue nil) ? true : false + def model?(name) + (model(name) rescue nil) ? true : false end # return all original models of specified type def created_models(factory) models_by_factory(factory) end # return all models of specified type (freshly selected from the database) def models(factory) - created_models(factory).map do |model| - model.class.find(model.id) - end + created_models(factory).map{|model| model.class.find(model.id) } end protected attr_reader :parser, :config \ No newline at end of file