OSDN Git Service

add editize
[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.load_manifest
12       return nil unless self.my_manifest
13       r = self._valid_encode_columns
14       define_singleton_method("valid_encode_columns") do 
15         r
16       end
17       define_singleton_method("parent_model") do |tree_name|
18         self.my_manifest.tree[tree_name].parent_model
19       end
20       define_singleton_method("child_models") do  |tree_name|
21         self.my_manifest.child_models tree_name
22       end
23       # Instance Methods
24       define_method("parent_model") do |tree_name|
25         self.__send__ self.class.parent_model(tree_name).item_name
26       end
27     end
28     
29     # ClassMethods
30     # class_name
31     # table_name
32     
33     before_validation :valid_encode
34     
35     def self.my_manifest
36       Manifest.manifest.models[self.item_name]
37     end
38     
39     def self.singular
40       self.to_s
41     end
42     
43     def self.plural
44       self.singular.pluralize
45     end
46     
47     def self.item_name
48       self.singular.underscore
49     end
50     
51     def self.item?
52       true
53     end
54     
55     def self.content?
56       false
57     end
58     
59     def self.path_name with_engine = false
60       self.plural.underscore
61     end
62     
63     def self.visible_count_options
64       nil
65     end
66     
67     def self.list_where
68       ''
69     end
70     
71     def self.list_order
72       ''
73     end
74     
75     def self.list_opt
76       {}
77     end
78     
79     def self.list_json_opt
80       {}
81     end
82     
83     def self.show item_id, operators
84       opt = {}
85       opt.merge!(self.show_opt)
86       item = self.find(item_id, opt)
87       raise ActiveRecord::Forbidden unless item.visible?(operators)
88       item
89     end
90     
91     def self.show_opt
92       {}
93     end
94     
95     def self.show_json_opt
96       {}
97     end
98     
99     #InstanceMethods
100     
101     def self.fold_extend_settings params
102       speech_balloon_settings = params[:speech_balloon][:settings]
103       if speech_balloon_settings.is_a?(Hash)
104         params[:speech_balloon][:settings] = speech_balloon_settings.to_json
105       end
106       balloon_settings = params[:speech_balloon][:balloon_attributes][:settings]
107       if balloon_settings.is_a?(Hash)
108         params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json
109       end
110       speech_settings = params[:speech_balloon][:speech_attributes][:settings]
111       if speech_settings.is_a?(Hash)
112         params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json
113       end
114     end
115     
116     def extend_engine_module
117       self.extend self.speech_balloon_template.engine_speech_balloon_module
118       self.elements.each do |element|
119         element.extend_item
120       end
121     end
122     
123     def item_name
124       self.class.item_name
125     end
126     
127     def model_name
128       self.item_name
129     end
130     
131     def table_name
132       self.class.table_name
133     end
134     
135     def path_name with_engine = false
136       self.class.path_name(with_engine)
137     end
138     
139     def form_template with_engine = false
140       self.path_name(with_engine) + '/form'
141     end
142     
143     def extend_column
144       nil
145     end
146     
147     def extend_item_name
148       self.extend_column ? self.attributes[self.extend_column] : self.item_name
149     end
150     
151     def form_name
152       self.extend_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 supply_default
163     end
164     
165     def overwrite 
166     end
167     
168     def visible? operators
169       if Manifest.manifest.magic_numbers['run_mode'] == 0
170         return false unless operators.guest?
171       else
172         return false unless operators.resource_reader?
173       end
174       true
175     end
176     
177     def editize?
178       self.respond_to? :editor
179     end
180     
181     def dom_id
182       self.id.to_s
183     end
184     
185     def dom_pool_type
186       self.new_record? ? 'stored' : 'new'
187     end
188     
189     def tag_attributes name = nil, opt = {}
190       r = {
191         'data-pool_type' => self.dom_pool_type, 'data-id' => self.dom_id, 
192         'data-item_name' => self.item_name
193       }
194       r.merge!({'id' => self.dom_item_id(name)}) if self.editize?
195       r.merge!(opt)
196       r
197     end
198     
199     def field_tag_attributes column_name, opt = {}
200       self.tag_attributes(column_name, opt).merge(
201         {'data-column_name' => column_name}
202       )
203     end
204     
205   end
206 end