test/factory.rb in polymorphic_identity-0.0.5 vs test/factory.rb in polymorphic_identity-0.1.0

- old
+ new

@@ -1,27 +1,37 @@ module Factory - # Build actions for the class - def self.build(klass, &block) - name = klass.to_s.underscore - define_method("#{name}_attributes", block) + # Build actions for the model + def self.build(model, &block) + name = model.to_s.underscore - module_eval <<-end_eval - def valid_#{name}_attributes(attributes = {}) - #{name}_attributes(attributes) - attributes - end - - def new_#{name}(attributes = {}) - #{klass}.new(valid_#{name}_attributes(attributes)) - end - - def create_#{name}(*args) - record = new_#{name}(*args) - record.save! - record.reload - record - end - end_eval + define_method("#{name}_attributes", block) + define_method("valid_#{name}_attributes") {|*args| valid_attributes_for(model, *args)} + define_method("new_#{name}") {|*args| new_record(model, *args)} + define_method("create_#{name}") {|*args| create_record(model, *args)} + end + + # Get valid attributes for the model + def valid_attributes_for(model, attributes = {}) + name = model.to_s.underscore + send("#{name}_attributes", attributes) + attributes.stringify_keys! + attributes + end + + # Build an unsaved record + def new_record(model, *args) + attributes = valid_attributes_for(model, *args) + record = model.new(attributes) + attributes.each {|attr, value| record.send("#{attr}=", value) if model.accessible_attributes && !model.accessible_attributes.include?(attr) || model.protected_attributes && model.protected_attributes.include?(attr)} + record + end + + # Build and save/reload a record + def create_record(model, *args) + record = new_record(model, *args) + record.save! + record.reload + record end build Article do |attributes| attributes[:author] = create_author unless attributes.include?(:author) attributes.reverse_merge!(