lib/fog/collection.rb in fog-0.0.29 vs lib/fog/collection.rb in fog-0.0.30

- old
+ new

@@ -3,24 +3,43 @@ def self.attribute(name, other_names = []) class_eval <<-EOS, __FILE__, __LINE__ attr_accessor :#{name} EOS - attributes << name + @attributes ||= [] + @attributes |= [name] for other_name in [*other_names] aliases[other_name] = name end end + def self.model(new_model) + @model = new_model + end + def self.aliases @aliases ||= {} end def self.attributes @attributes ||= [] end + def attributes + attributes = {} + for attribute in self.class.attributes + attributes[attribute] = send("#{attribute}") + end + attributes + end + + def create(attributes = {}) + object = new(attributes) + object.save + object + end + def initialize(attributes = {}) merge_attributes(attributes) end def inspect @@ -34,16 +53,12 @@ end data.chop! unless self.empty? data << "]>" end - def attributes - attributes = {} - for attribute in self.class.attributes - attributes[attribute] = send("#{attribute}") - end - attributes + def model + self.class.instance_variable_get('@model') end def merge_attributes(new_attributes = {}) for key, value in new_attributes if aliased_key = self.class.aliases[key] @@ -51,9 +66,22 @@ else send("#{key}=", value) end end self + end + + def new(attributes = {}) + model.new( + attributes.merge!( + :collection => self, + :connection => connection + ) + ) + end + + def reload + self.clear.concat(all) end private def connection=(new_connection)