# File lib/cimi/models/collection.rb, line 76 def self.generate(model_class, opts = {}) model_name = model_class.name.split("::").last scope = opts[:scope] || CIMI::Model coll_class = Class.new(CIMI::Model::Collection) scope.const_set(:"#{model_name}Collection", coll_class) coll_class.entry_name = model_name.underscore.pluralize.to_sym coll_class.embedded = opts[:embedded] entry_schema = model_class.schema coll_class.instance_eval do text :id scalar :href text :count scalar :href if opts[:embedded] array self.entry_name, :schema => entry_schema, :xml_name => model_name array :operations do scalar :rel, :href end end coll_class end
# File lib/cimi/models/collection.rb, line 26 def initialize(values = {}) if values[:entries] values[self.class.entry_name] = values.delete(:entries) end values[self.class.entry_name] ||= [] super(values) end
# File lib/cimi/models/collection.rb, line 72 def self.xml_tag_name "Collection" end
# File lib/cimi/models/collection.rb, line 55 def [](a) a = entry_name if a == :entries super(a) end
# File lib/cimi/models/collection.rb, line 60 def []=(a, v) a = entry_name if a == :entries super(a, v) end
# File lib/cimi/models/collection.rb, line 34 def entries self[self.class.entry_name] end
# File lib/cimi/models/collection.rb, line 65 def filter_attributes(attr_list) self[self.class.entry_name] = entries.map do |e| e.filter_attributes(attr_list) end self end
Prepare to serialize
# File lib/cimi/models/collection.rb, line 39 def prepare self.count = self.entries.size if self.class.embedded ["id", "href"].each { |a| self[a] = nil if self[a] == "" } # Handle href and id, which are really just aliases of one another unless self.href || self.id raise "Collection #{self.class.name} must have one of id and href set" end if self.href && self.id && self.href != self.id raise "id and href must be identical for collection #{self.class.name}, id = #{id.inspect}, href = #{href.inspect}" end self.href ||= self.id self.id ||= self.href end end