OSDN Git Service

add peta model_manifest
[pettanr/pettanr.git] / lib / editor / pool.rb
1 module Editor
2   module EditorModule
3     class Pool
4       attr_accessor :editor, :root_item, :pool, :index
5       def initialize editor, root_item
6         @editor = editor
7         @root_item = root_item
8         @pool = {}
9         @index = 1
10         self.editize
11       end
12       
13       # regist stored element
14       def editize
15         @root_item.boost
16         self.register nil, @root_item
17         editize_element @root_item
18       end
19       
20       def editize_element parent
21         parent.class.child_element_names(@root_item.class.element_tree_name).each do |element_name|
22           e = parent.__send__ element_name
23           e = [e] unless e.respond_to? :each
24           e.each do |element|
25             element.boost
26             self.register parent, element
27             self.editize_element element
28           end
29         end
30       end
31       
32       def register parent, item
33         item.extend Peta::Editize
34         item.editor = @editor
35         item.parent = parent if parent
36         if item.new_record?
37           item.pool_id = @index
38           @index += 1
39         else
40           item.pool_id = item.id
41         end
42         @pool[item.item_name] ||= {'stored' => {}, 'new'  => {}}
43         @pool[item.item_name][item.dom_pool_type] ||= {}
44         @pool[item.item_name][item.dom_pool_type][item.pool_id] = item
45       end
46       
47       def unregister item
48         
49       end
50       
51     end
52     
53   end
54 end