2 class Item < ActiveRecord::Base
3 self.abstract_class = true
9 Rails.env == "development"
14 return true unless self.my_manifest
15 return true unless Manifest.manifest.items
16 return true unless Manifest.manifest.models
21 def self.load_manifest
22 return nil if self._skip_load?
23 vc = self.my_manifest.valid_encode_columns
24 define_singleton_method("valid_encode_columns") do
27 cm = self.my_manifest.child_models
28 define_singleton_method("child_models") do
31 cen = self.my_manifest.child_element_names
32 define_singleton_method("child_element_names") do
41 before_validation :valid_encode
44 return nil unless Manifest.manifest.items
45 Manifest.manifest.items[self.item_name]
48 def self.my_controller
49 return nil unless Manifest.manifest.controllers
50 Manifest.manifest.controllers[self.table_name]
54 return nil unless Manifest.manifest.models
55 Manifest.manifest.models[self.item_name]
63 table_name = Manifest.manifest.pluralize self.item_name
68 self.singular.underscore
97 def self.path_name with_engine = false
101 def self.pickup_item_name
105 def self.pickup_column_name
109 def self.find_boost_name column_name
110 self.my_peta.find_boost_name column_name
113 def self.extend_column? column_name
114 self.my_peta.extend_column? column_name
117 def self.index_list_where list
125 def self.list_json_opt
129 def self.show item_id, operators = nil
131 opt.merge!(self.show_opt)
132 item = self.find(item_id)
134 raise ActiveRecord::Forbidden if operators and item.visible?(operators) == false
142 def self.show_json_opt
146 def self.fold_extend_settings attr
147 self.my_peta.boost.each do |name, manifest|
148 my_settings = attr[manifest.settings_column_name]
149 if my_settings.is_a?(Hash)
150 attr[manifest.settings_column_name] = my_settings.to_json
158 self.class.my_manifest
178 self.class.table_name
181 def path_name with_engine = false
182 self.class.path_name(with_engine)
186 self.class.pickup_item_name
189 def pickup_column_name
190 self.class.pickup_column_name
194 self.attributes[self.pickup_column_name]
197 def form_template with_engine = false
198 self.path_name(with_engine) + '/form'
202 self.extend_column ? self.attributes[self.extend_column] : self.item_name
206 self.class.valid_encode_columns.each do |a|
207 next if attributes[a] == nil
208 raise Pettanr::BadRequest unless self.attributes[a].valid_encoding?
213 self.class.my_peta.boost.each do |boost_name, boost_manifest|
214 next if level == 'read' and boost_manifest.level == 'post'
215 self.boost boost_manifest
219 def boost boost_manifest
221 @boosters[boost_manifest.name] ||= Locmare::Booster.new(boost_manifest, self)
228 def extend_column? column_name
229 self.class.extend_column? column_name
233 self.boosters.each do |boost_name, booster|
234 booster.supply_default
239 self.boosters.each do |boost_name, booster|
244 def user_visible? operators
245 if Manifest.manifest.magic_numbers['run_mode'] == 0
246 return false unless operators.guest?
248 return false unless operators.resource_reader?
253 def visible? operators
254 return false unless self.user_visible? operators
258 def permit_params params
259 attrs = self.class.permit_attributes
260 params.require(self.item_name.to_sym).permit(attrs)
263 def self.permit_attributes
264 attrs = self.my_manifest.attributes.keys
265 self.child_models.each do |element_model|
266 name = self.my_manifest.associations.child_element_name(element_model) + '_attributes'
268 child_attrs[name] = element_model.permit_attributes
269 attrs.push child_attrs
275 self.respond_to? :editor
283 self.new_record? ? 'stored' : 'new'
286 def merge_dom_item_id attr, name = nil
288 attr.merge({'id' => self.dom_item_id(name)})
294 def tag_attributes name = nil, opt = {}
296 'data-pool_type' => self.dom_pool_type, 'data-id' => self.dom_id,
297 'data-item_name' => self.item_name
299 r = self.merge_dom_item_id r, name
304 def tag_attr column = nil, opt = {}
305 self.tag_attributes(column, opt).to_attr
308 def field_tag_attributes column_name, opt = {}
309 self.tag_attributes(column_name, opt).merge(
310 {'data-column_name' => column_name}
314 def post_attribute_key
318 ##################################################################
320 ##################################################################
322 def self.each_import data
328 def self.import_system_picture attr
330 return false if d.blank?
331 imager = PettanImager.load(Base64.decode64(d.to_s))
332 return false unless imager
333 sp = SystemPicture.store(imager)
334 return false unless sp
338 def self.replace_system_picture attr
339 attr.each do |name, value|
341 r = if name.to_s =~ /_id$/
342 self.import_system_picture value
344 self.replace_system_picture value
346 return false unless r
352 def self.modify_object(name, attr, key = 'name')
353 c = 'find_by_' + key.to_s
354 r = self.__send__ c, name
364 def self.import_list(attrs, &blk)
367 attrs.each do |name, item|
368 m = blk.call(name, item)
369 res.push(m) unless m.valid?
371 raise ActiveRecord::Rollback unless res.empty?
376 def self.import_text(text, &blk)
377 attrs = JSON.parse(text)
378 self.import_list attrs, &blk
381 def self.import_file(filename, &blk)
382 text = File.open(filename, 'r').read
383 self.import_text text, &blk
386 def self.import_url(url, &blk)
387 text = open(url).read
388 self.import_text text, &blk
391 def self.import_urls(urls, &blk)
396 h[:validations] = self.import_url(url, &blk)
398 h[:exception] = {:location => $@, :message => $!}