OSDN Git Service

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