module Peta
class Content < Item
self.abstract_class = true
- # ClassMethods
- def self.owner_model
- nil
+ # Dynamic Methods
+
+ def self._content?
+ self.my_manifest.content_model
end
- def self.owner_type
- :author
+ def self._owner_type
+ self.my_manifest.owner_type
end
- def self.content?
- true
+ def self._owner_model
+ self.parent_model
end
- def self.operator operators
- case self.owner_type
- when :author
- operators.author
- when :artist
- operators.artist
- else
- nil
+ def self._owner_column
+ self._owner_type.to_s + '_id'
+ end
+
+ def self.load_manifest
+ super
+ # Class Methods
+ ct = self._content?
+ define_singleton_method("content?") do
+ ct
+ end
+ ot = self._owner_type
+ define_singleton_method("owner_type") do
+ ot
+ end
+ om = self._owner_model
+ define_singleton_method("owner_model") do
+ om
+ end
+ oc = self._owner_column
+ define_singleton_method("owner_column") do
+ oc
+ end
+ # Instance Methods
+ define_method("elements") do |tree_name|
+ self.my_manifest.child_element_names(tree_name).map {|element_name|
+ self.__send__ element_name
+ }
end
end
- def self.owner_column
- self.owner_type.to_s + '_id'
+ # Class Methods
+
+ def self.operator operators
+ return nil unless self.owner_type
+ operators.__send__ self.owner_type
end
def self.public_list_where
content
end
- #InstanceMethods
+ # Instance Methods
def owner_model
self.class.owner_model ? self.__send__(self.class.owner_model.item_name) : self
end
+ # super return if my item
def visible? operators
super
- return true if owner_model.own?(operators)
+ return nil if owner_model.own?(operators)
true
end