X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Fpeta%2Fitem.rb;h=7b991bbbe705a07ee1e8eed7defb51ffcc4b42ba;hb=84ff044803e4dc54b2eafd529c3c4b21a6c28edc;hp=df4564bacdd32da1848af1122ae1f5b29434d9cb;hpb=4268bdee5ba2880ad07915df54053049bef50330;p=pettanr%2Fpettanr.git diff --git a/lib/peta/item.rb b/lib/peta/item.rb index df4564ba..7b991bbb 100644 --- a/lib/peta/item.rb +++ b/lib/peta/item.rb @@ -1,12 +1,45 @@ module Peta class Item < ActiveRecord::Base self.abstract_class = true + attr :boosters + + # Dynamic ClassMethods + + def self._valid_encode_columns + self.my_manifest.valid_encode_columns + end + + def self.load_manifest + return nil unless self.my_manifest + vc = self._valid_encode_columns + define_singleton_method("valid_encode_columns") do + 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 # class_name # table_name 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 + def self.singular self.to_s end @@ -27,12 +60,28 @@ 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.valid_encode_columns - [] + 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 @@ -59,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 @@ -71,41 +121,16 @@ module Peta {} end - def self.visible_count - self.count self.visible_count_options - end - - def self.visible_count_options - [] - 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 + 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 - 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.extend_column end - def extend_engine_module - self.extend self.engine.extend_module - self.elements.each do |element| - element.extend_item - end - end + #InstanceMethods def item_name self.class.item_name @@ -119,8 +144,12 @@ module Peta self.class.table_name end - def extend_column_name - nil + def path_name with_engine = false + self.class.path_name(with_engine) + end + + def form_template with_engine = false + self.path_name(with_engine) + '/form' end def form_name @@ -130,17 +159,39 @@ module Peta 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 @@ -149,72 +200,49 @@ module Peta true end - def boost - end - - def dom_id_item - self.new_record? ? '0' : self.id.to_s - end - - def tag_item_id c = nil - self.item_name + self.item_id + c.to_s - end - - def dom_id_item_field field_name - self.tag_item_id + field_name.to_s + def visible? operators + return false unless self.user_visible? operators + true end - def path_name with_engine = false - self.class.path_name(with_engine) + def editize? + self.respond_to? :editor end - def form_template with_engine = false - self.path_name(with_engine) + '/form' + def dom_id + self.id.to_s end - def tag_item_attributes column = nil, opt = {} - { - :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, - :element_id => self.tag_element_id, :element_type => self.tag_element_type - }.merge(opt) + def dom_pool_type + self.new_record? ? 'stored' : 'new' end - def tag_new_index + def merge_dom_item_id attr, name = nil + if self.editize? + attr.merge({'id' => self.dom_item_id(name)}) + else + attr end - - def field_tag_attributes column, no_attr, opt = {} - self.tag_attributes(column).merge( - {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr} - ).merge(opt) - end - - #render element by body - def any_tag_attributes name = nil, opt = {} - r = self.tag_attributes(name) - r.merge!( - {:new_index => self.tag_new_index} - ) if self.new_index - r.merge(opt) - end - - def select_tag_attributes(selected, column, no_attr) - [ - :last, :first, - {:html => {:selected => selected}}, - self.field_tag_attributes(column, no_attr) - ] end - def tag_attr column = nil, opt = {} - self.tag_attributes(column, opt).to_attr + 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 = self.merge_dom_item_id r, name + r.merge!(opt) + r end - def field_tag_attr column, no_attr, opt = {} - self.field_tag_attributes(column, no_attr, opt).to_attr + def field_tag_attributes column_name, opt = {} + self.tag_attributes(column_name, opt).merge( + {'data-column_name' => column_name} + ) end - def any_tag_attr name = nil, opt = {} - self.any_tag_attributes(name, opt).to_attr + def post_attribute_key + self.dom_id end end