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)