X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Fpeta%2Fitem.rb;h=7b991bbbe705a07ee1e8eed7defb51ffcc4b42ba;hb=84ff044803e4dc54b2eafd529c3c4b21a6c28edc;hp=b8b889ad79236155c9585b409f2b6c1abb9a853d;hpb=ac6610b290db53f3914b593963fef972eb4cfa82;p=pettanr%2Fpettanr.git diff --git a/lib/peta/item.rb b/lib/peta/item.rb index b8b889ad..7b991bbb 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 @@ -10,10 +11,19 @@ module Peta def self.load_manifest return nil unless self.my_manifest - r = self._valid_encode_columns + vc = self._valid_encode_columns define_singleton_method("valid_encode_columns") do - r + vc end + cm = self.my_manifest.child_models + define_singleton_method("child_models") do + cm + end + cen = self.my_manifest.child_element_names + define_singleton_method("child_element_names") do + cen + end + # Instance Methods end # ClassMethods @@ -22,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 @@ -46,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 @@ -74,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 @@ -86,29 +121,16 @@ module Peta {} end - #InstanceMethods - - 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 - 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 + def self.fold_extend_settings attr + self.my_peta.boost.each do |name, manifest| + my_settings = attr[manifest.settings_column_name] + if my_settings.is_a?(Hash) + attr[manifest.settings_column_name] = my_settings.to_json + end end end - def extend_engine_module - self.extend self.speech_balloon_template.engine_speech_balloon_module - self.elements.each do |element| - element.extend_item - end - end + #InstanceMethods def item_name self.class.item_name @@ -130,32 +152,46 @@ module Peta self.path_name(with_engine) + '/form' end - def extend_column - nil - end - - def extend_item_name - self.extend_column ? self.attributes[self.extend_column] : self.item_name - end - def form_name - self.extend_item_name + self.extend_column ? self.attributes[self.extend_column] : self.item_name end def valid_encode self.class.valid_encode_columns.each do |a| next if attributes[a] == nil - raise Pettanr::BadRequest unless attributes[a].valid_encoding? + raise Pettanr::BadRequest unless self.attributes[a].valid_encoding? end end + 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 + end + + def boost boost_manifest + @boosters ||= {} + @boosters[boost_manifest.name] ||= Locmare::Booster.new(boost_manifest, self) + end + + def boosters + @boosters + end + + 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 + self.class.my_peta.overwrites self end - def visible? operators + def user_visible? operators if Manifest.manifest.magic_numbers['run_mode'] == 0 return false unless operators.guest? else @@ -164,34 +200,29 @@ module Peta true end - def editor - @editor - end - - def editor=(e) - @editor = e - end - - def pool_id - @pool_id || self.id + def visible? operators + return false unless self.user_visible? operators + true end - def pool_id=(i) - @pool_id = i + def editize? + self.respond_to? :editor end def dom_id - self.pool_id.to_s + self.id.to_s end def dom_pool_type self.new_record? ? 'stored' : 'new' end - def dom_item_id name = nil - r = [self.editor.eid, self.dom_pool_type, self.item_name, self.dom_id] - r += name.to_s if column_name - r.join '-' + 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 = {} @@ -199,7 +230,7 @@ module Peta '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.editor + r = self.merge_dom_item_id r, name r.merge!(opt) r end @@ -210,5 +241,9 @@ module Peta ) end + def post_attribute_key + self.dom_id + end + end end