OSDN Git Service

315bdce8b7207e16e4852119a07ac8045a4d5320
[pettanr/pettanr.git] / lib / peta / element_nestable_content.rb
1 module Peta
2   class ElementNestableContent < Content
3     self.abstract_class = true
4     
5     # Dynamic Methods
6     
7     def self._element_tree_name
8       self.my_peta.element_tree_name
9     end
10     
11     def self.load_manifest
12       super
13       # Class Methods
14       n = self._element_tree_name
15       define_singleton_method("element_tree_name") do 
16         n
17       end
18       c = self.child_models(self.element_tree_name)
19       define_singleton_method("element_models") do 
20         c
21       end
22       # Instance Methods
23       define_method("element_items") do |element_model|
24         self.__send__ self.class.my_manifest.associations.child_element_name(element_model)
25       end
26       define_method("elements_items") do 
27         self.class.element_models.map {|element_model|
28           self.element_items element_model
29         }.flatten
30       end
31     end
32     
33     # Class Methods
34     
35     # Instance Methods
36     def post_attributes opt = {}
37       attr = self.copy_attributes
38       hash = {}
39       self.class.element_models.each do |element_model|
40         name = self.class.my_manifest.associations.child_element_name(element_model) + '_attributes'
41         hash[name] ||= {}
42         self.element_items(element_model).each do |element|
43           hash[name][element.post_attribute_key] = element.post_attributes opt
44         end
45       end
46       attr.merge hash
47     end
48     
49   end
50 end
51