2 class Item < ActiveRecord::Base
3 self.abstract_class = true
7 def self._valid_encode_columns
8 self.my_manifest.valid_encode_columns
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
17 r = self.my_manifest.child_models
18 define_singleton_method("child_models") do
21 r = self.my_manifest.child_element_names
22 define_singleton_method("child_element_names") do
32 before_validation :valid_encode
35 Manifest.manifest.items[self.item_name]
39 Manifest.manifest.models[self.item_name]
47 self.singular.pluralize
51 self.singular.underscore
74 def self.path_name with_engine = false
75 self.plural.underscore
78 def self.visible_count_options
94 def self.list_json_opt
98 def self.show item_id, operators
100 opt.merge!(self.show_opt)
101 item = self.find(item_id, opt)
103 raise ActiveRecord::Forbidden unless item.visible?(operators)
111 def self.show_json_opt
115 def self.fold_extend_settings params
116 self.my_peta.boost.each do |name, manifest|
117 my_settings = params[self.item_name][manifest.settings_column_name]
118 if my_settings.is_a?(Hash)
119 params[self.item_name][manifest.settings_column_name] = my_settings.to_json
122 self.child_models.each do |child_model|
123 child_model.fold_extend_settings params
138 self.class.table_name
141 def path_name with_engine = false
142 self.class.path_name(with_engine)
145 def form_template with_engine = false
146 self.path_name(with_engine) + '/form'
150 self.extend_column ? self.attributes[self.extend_column] : self.item_name
154 self.class.valid_encode_columns.each do |a|
155 next if attributes[a] == nil
156 raise Pettanr::BadRequest unless attributes[a].valid_encoding?
161 self.class.my_peta.boosts self, level
165 self.class.my_peta.supply_defaults self
171 def visible? operators
172 if Manifest.manifest.magic_numbers['run_mode'] == 0
173 return false unless operators.guest?
175 return false unless operators.resource_reader?
181 self.respond_to? :editor
189 self.new_record? ? 'stored' : 'new'
192 def merge_dom_item_id attr, name = nil
194 attr.merge({'id' => self.dom_item_id(name)})
200 def tag_attributes name = nil, opt = {}
202 'data-pool_type' => self.dom_pool_type, 'data-id' => self.dom_id,
203 'data-item_name' => self.item_name
205 r = self.merge_dom_item_id r, name
210 def field_tag_attributes column_name, opt = {}
211 self.tag_attributes(column_name, opt).merge(
212 {'data-column_name' => column_name}
216 def post_attribute_key