X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Fpeta%2Fitem.rb;h=0fd4b80222a9122438bf26736d50f0dbe3d5b8ea;hb=8b87bde4b61bea53c697047889941c4232b493de;hp=9f84df3a52667739b0c42ffec7ab0e18cdf4bbe0;hpb=a139b5ea7fe0f0cefa75e4fc64d8aa33029dedc4;p=pettanr%2Fpettanr.git diff --git a/lib/peta/item.rb b/lib/peta/item.rb index 9f84df3a..0fd4b802 100644 --- a/lib/peta/item.rb +++ b/lib/peta/item.rb @@ -1,6 +1,7 @@ module Peta class Item < ActiveRecord::Base self.abstract_class = true + attr :boosters # Dynamic ClassMethods @@ -8,30 +9,21 @@ module Peta self.my_manifest.valid_encode_columns end - def self._extend_column_name - self.my_manifest.extend_column_name - end - def self.load_manifest return nil unless self.my_manifest r = self._valid_encode_columns define_singleton_method("valid_encode_columns") do r end - define_singleton_method("parent_model") do |tree_name| - self.my_manifest.tree[tree_name].parent_model - end - define_singleton_method("child_models") do |tree_name| - self.my_manifest.child_models tree_name + r = self.my_manifest.child_models + define_singleton_method("child_models") do + r end - define_singleton_method("child_element_names") do |tree_name| - self.my_manifest.child_element_names tree_name + r = self.my_manifest.child_element_names + define_singleton_method("child_element_names") do + r end # Instance Methods - n = self._extend_column_name - define_singleton_method("extend_column_name") do - n - end end # ClassMethods @@ -40,6 +32,10 @@ module Peta before_validation :valid_encode + def self.my_peta + Manifest.manifest.items[self.item_name] + end + def self.my_manifest Manifest.manifest.models[self.item_name] end @@ -64,10 +60,30 @@ module Peta false end + def self.element? + false + end + + def self.root? + false + end + + def self.parent_model + nil + end + def self.path_name with_engine = false self.plural.underscore end + def self.find_boost_name column_name + self.my_peta.find_boost_name column_name + end + + def self.extend_column? column_name + self.my_peta.extend_column? column_name + end + def self.visible_count_options nil end @@ -92,6 +108,7 @@ module Peta opt = {} opt.merge!(self.show_opt) item = self.find(item_id, opt) + item.boosts 'read' raise ActiveRecord::Forbidden unless item.visible?(operators) item end @@ -104,6 +121,18 @@ module Peta {} end + def self.fold_extend_settings params + self.my_peta.boost.each do |name, manifest| + my_settings = params[self.item_name][manifest.settings_column_name] + if my_settings.is_a?(Hash) + params[self.item_name][manifest.settings_column_name] = my_settings.to_json + end + end + self.child_models.each do |child_model| + child_model.fold_extend_settings params + end + end + #InstanceMethods def item_name @@ -118,10 +147,6 @@ module Peta self.class.table_name end - def extend_column_name - self.class.extend_column_name - end - def path_name with_engine = false self.class.path_name(with_engine) end @@ -141,47 +166,34 @@ module Peta end end - def self.fold_extend_settings params - speech_balloon_settings = params[:speech_balloon][:settings] - if speech_balloon_settings.is_a?(Hash) - params[:speech_balloon][:settings] = speech_balloon_settings.to_json + def boosts level + self.class.my_peta.boost.each do |boost_name, boost_manifest| + next if level == 'read' and boost_manifest.level == 'post' + self.boost boost_manifest end - balloon_settings = params[:speech_balloon][:balloon_attributes][:settings] - if balloon_settings.is_a?(Hash) - params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json - end - speech_settings = params[:speech_balloon][:speech_attributes][:settings] - if speech_settings.is_a?(Hash) - params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json - end - end - - def engine - Object.const_get self.attributes[self.extend_column_name] end - def my_engine_resource - Manifest.manifest.system_resources.engine_resources[self.table_name] + def boost boost_manifest + @boosters ||= {} + @boosters[boost_manifest.name] = Locmare::Booster.new(boost_manifest, self) end - def engine? - return false unless self.my_engine_resource - self.my_engine_resource.resource_items.include? self.attributes[self.extend_column_name] - end + def boosters + @boosters + end - def boost - return false unless self.engine? - self.engine.boost self - true + def extend_column? column_name + self.class.extend_column? column_name end def supply_default + self.class.my_peta.supply_defaults self end def overwrite end - def visible? operators + def user_visible? operators if Manifest.manifest.magic_numbers['run_mode'] == 0 return false unless operators.guest? else @@ -190,6 +202,11 @@ module Peta true end + def visible? operators + return false unless self.user_visible? operators + true + end + def editize? self.respond_to? :editor end @@ -202,12 +219,20 @@ module Peta self.new_record? ? 'stored' : 'new' end + def merge_dom_item_id attr, name = nil + if self.editize? + attr.merge({'id' => self.dom_item_id(name)}) + else + attr + end + end + def tag_attributes name = nil, opt = {} r = { 'data-pool_type' => self.dom_pool_type, 'data-id' => self.dom_id, 'data-item_name' => self.item_name } - r.merge!({'id' => self.dom_item_id(name)}) if self.editize? + r = self.merge_dom_item_id r, name r.merge!(opt) r end @@ -218,5 +243,9 @@ module Peta ) end + def post_attribute_key + self.dom_id + end + end end