class CIMI::Model::Collection

Attributes

embedded[RW]
entry_name[RW]

Public Class Methods

generate(model_class, opts = {}) click to toggle source
# File lib/cimi/models/collection.rb, line 27
def 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
new(values = {}) click to toggle source

You can initialize collection by passing the Hash representation of the collection or passing another Collection object.

# File lib/cimi/models/collection.rb, line 56
def initialize(values = {})
  if values.kind_of?(Hash)
    if values[:entries]
      values[self.class.entry_name] = values.delete(:entries)
    end
    values[self.class.entry_name] ||= []
    super(values)
  else
    super
  end
end
xml_tag_name() click to toggle source
# File lib/cimi/models/collection.rb, line 23
def xml_tag_name
  'Collection'
end

Public Instance Methods

[](a) click to toggle source
# File lib/cimi/models/collection.rb, line 89
def [](a)
  a = self.class.entry_name if a == :entries
  super(a)
end
[]=(a, v) click to toggle source
# File lib/cimi/models/collection.rb, line 94
def []=(a, v)
  a = self.class.entry_name if a == :entries
  super(a, v)
end
entries() click to toggle source
# File lib/cimi/models/collection.rb, line 68
def entries
  self[self.class.entry_name]
end
prepare() click to toggle source

Prepare to serialize

# File lib/cimi/models/collection.rb, line 73
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
select_attributes(attr_list) click to toggle source
# File lib/cimi/models/collection.rb, line 99
def select_attributes(attr_list)
  self[self.class.entry_name] = entries.map do |e|
    e.select_attributes(attr_list)
  end
  self
end