OSDN Git Service

fix remove tree
[pettanr/pettanr.git] / lib / peta / item.rb
1 module Peta
2   class Item < ActiveRecord::Base
3     self.abstract_class = true
4     
5     # Dynamic ClassMethods
6     
7     def self._valid_encode_columns
8       self.my_manifest.valid_encode_columns
9     end
10     
11     def self._extend_column_name
12       self.my_manifest.extend_column_name
13     end
14     
15     def self.load_manifest
16       return nil unless self.my_manifest
17       r = self._valid_encode_columns
18       define_singleton_method("valid_encode_columns") do 
19         r
20       end
21       define_singleton_method("parent_modela") do |tree_name|
22         self.my_manifest.tree[tree_name].parent_model
23       end
24       define_singleton_method("child_models") do  |tree_name|
25         self.my_manifest.child_models tree_name
26       end
27       define_singleton_method("child_element_names") do  |tree_name|
28         self.my_manifest.child_element_names tree_name
29       end
30       # Instance Methods
31       n = self._extend_column_name
32       define_singleton_method("extend_column_name") do 
33         n
34       end
35     end
36     
37     # ClassMethods
38     # class_name
39     # table_name
40     
41     before_validation :valid_encode
42     
43     def self.my_peta
44       Manifest.manifest.items[self.item_name]
45     end
46     
47     def self.my_manifest
48       Manifest.manifest.models[self.item_name]
49     end
50     
51     def self.singular
52       self.to_s
53     end
54     
55     def self.plural
56       self.singular.pluralize
57     end
58     
59     def self.item_name
60       self.singular.underscore
61     end
62     
63     def self.item?
64       true
65     end
66     
67     def self.content?
68       false
69     end
70     
71     def self.element?
72       false
73     end
74     
75     def self.root?
76       false
77     end
78     
79     def self.parent_model
80       nil
81     end
82     
83     def self.path_name with_engine = false
84       self.plural.underscore
85     end
86     
87     def self.visible_count_options
88       nil
89     end
90     
91     def self.list_where
92       ''
93     end
94     
95     def self.list_order
96       ''
97     end
98     
99     def self.list_opt
100       {}
101     end
102     
103     def self.list_json_opt
104       {}
105     end
106     
107     def self.show item_id, operators
108       opt = {}
109       opt.merge!(self.show_opt)
110       item = self.find(item_id, opt)
111       raise ActiveRecord::Forbidden unless item.visible?(operators)
112       item
113     end
114     
115     def self.show_opt
116       {}
117     end
118     
119     def self.show_json_opt
120       {}
121     end
122     
123     #InstanceMethods
124     
125     def item_name
126       self.class.item_name
127     end
128     
129     def model_name
130       self.item_name
131     end
132     
133     def table_name
134       self.class.table_name
135     end
136     
137     def extend_column_name
138       self.class.extend_column_name
139     end
140     
141     def path_name with_engine = false
142       self.class.path_name(with_engine)
143     end
144     
145     def form_template with_engine = false
146       self.path_name(with_engine) + '/form'
147     end
148     
149     def form_name
150       self.extend_column ? self.attributes[self.extend_column] : self.item_name
151     end
152     
153     def valid_encode
154       self.class.valid_encode_columns.each do |a|
155         next if attributes[a] == nil
156         raise Pettanr::BadRequest unless attributes[a].valid_encoding?
157       end
158     end
159     
160     def self.fold_extend_settings params
161       speech_balloon_settings = params[:speech_balloon][:settings]
162       if speech_balloon_settings.is_a?(Hash)
163         params[:speech_balloon][:settings] = speech_balloon_settings.to_json
164       end
165       balloon_settings = params[:speech_balloon][:balloon_attributes][:settings]
166       if balloon_settings.is_a?(Hash)
167         params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json
168       end
169       speech_settings = params[:speech_balloon][:speech_attributes][:settings]
170       if speech_settings.is_a?(Hash)
171         params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json
172       end
173     end
174     
175     def engine
176       Object.const_get self.attributes[self.extend_column_name]
177     end
178     
179     def my_engine_resource
180       Manifest.manifest.system_resources.engine_resources[self.table_name]
181     end
182     
183     def engine?
184       return false unless self.my_engine_resource
185       self.my_engine_resource.resource_items.include? self.attributes[self.extend_column_name]
186     end
187     
188     def boost
189       return false unless self.engine?
190       self.engine.boost self
191       true
192     end
193     
194     def supply_default
195     end
196     
197     def overwrite 
198     end
199     
200     def visible? operators
201       if Manifest.manifest.magic_numbers['run_mode'] == 0
202         return false unless operators.guest?
203       else
204         return false unless operators.resource_reader?
205       end
206       true
207     end
208     
209     def editize?
210       self.respond_to? :editor
211     end
212     
213     def dom_id
214       self.id.to_s
215     end
216     
217     def dom_pool_type
218       self.new_record? ? 'stored' : 'new'
219     end
220     
221     def merge_dom_item_id attr, name = nil
222       if self.editize?
223         attr.merge({'id' => self.dom_item_id(name)})
224       else
225         attr
226       end
227     end
228     
229     def tag_attributes name = nil, opt = {}
230       r = {
231         'data-pool_type' => self.dom_pool_type, 'data-id' => self.dom_id, 
232         'data-item_name' => self.item_name
233       }
234       r = self.merge_dom_item_id r, name
235       r.merge!(opt)
236       r
237     end
238     
239     def field_tag_attributes column_name, opt = {}
240       self.tag_attributes(column_name, opt).merge(
241         {'data-column_name' => column_name}
242       )
243     end
244     
245     def post_attribute_key
246       self.dom_id
247     end
248     
249   end
250 end