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
42 before_validation :valid_encode
45 return nil unless Manifest.manifest.items
46 Manifest.manifest.items[self.item_name]
50 return nil unless Manifest.manifest.models
51 Manifest.manifest.models[self.item_name]
59 self.singular.pluralize
63 self.singular.underscore
86 def self.path_name with_engine = false
87 self.plural.underscore
90 def self.find_boost_name column_name
91 self.my_peta.find_boost_name column_name
94 def self.extend_column? column_name
95 self.my_peta.extend_column? column_name
98 def self.visible_count_options
107 self.table_name + '.updated_at desc'
114 def self.list_json_opt
118 def self.show item_id, operators
120 opt.merge!(self.show_opt)
121 item = self.find(item_id, opt)
123 raise ActiveRecord::Forbidden if item.visible?(operators) == false
131 def self.show_json_opt
135 def self.fold_extend_settings attr
136 self.my_peta.boost.each do |name, manifest|
137 my_settings = attr[manifest.settings_column_name]
138 if my_settings.is_a?(Hash)
139 attr[manifest.settings_column_name] = my_settings.to_json
155 self.class.table_name
158 def path_name with_engine = false
159 self.class.path_name(with_engine)
162 def form_template with_engine = false
163 self.path_name(with_engine) + '/form'
167 self.extend_column ? self.attributes[self.extend_column] : self.item_name
171 self.class.valid_encode_columns.each do |a|
172 next if attributes[a] == nil
173 raise Pettanr::BadRequest unless self.attributes[a].valid_encoding?
178 self.class.my_peta.boost.each do |boost_name, boost_manifest|
179 next if level == 'read' and boost_manifest.level == 'post'
180 self.boost boost_manifest
184 def boost boost_manifest
186 @boosters[boost_manifest.name] ||= Locmare::Booster.new(boost_manifest, self)
193 def extend_column? column_name
194 self.class.extend_column? column_name
198 self.class.my_peta.supply_defaults self
202 self.class.my_peta.overwrites self
205 def user_visible? operators
206 if Manifest.manifest.magic_numbers['run_mode'] == 0
207 return false unless operators.guest?
209 return false unless operators.resource_reader?
214 def visible? operators
215 return false unless self.user_visible? operators
220 self.respond_to? :editor
228 self.new_record? ? 'stored' : 'new'
231 def merge_dom_item_id attr, name = nil
233 attr.merge({'id' => self.dom_item_id(name)})
239 def tag_attributes name = nil, opt = {}
241 'data-pool_type' => self.dom_pool_type, 'data-id' => self.dom_id,
242 'data-item_name' => self.item_name
244 r = self.merge_dom_item_id r, name
249 def field_tag_attributes column_name, opt = {}
250 self.tag_attributes(column_name, opt).merge(
251 {'data-column_name' => column_name}
255 def post_attribute_key