X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Fpeta%2Fitem.rb;h=9243922e82600f05f5e728ba6599efcd05663e46;hb=ce831a2081c04cc9f8034ae8a6648088abc539bd;hp=8346615671c4a9d91764b95f2386db48662be93c;hpb=b4cc64119fff4ee29027579a6203fcd061c78cb3;p=pettanr%2Fpettanr.git diff --git a/lib/peta/item.rb b/lib/peta/item.rb index 83466156..9243922e 100644 --- a/lib/peta/item.rb +++ b/lib/peta/item.rb @@ -1,37 +1,38 @@ 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 + def self._dev? + Rails.env == "development" end - def self._extend_column_name - self.my_manifest.extend_column_name + def self._skip_load? + if self._dev? + return true unless self.my_manifest + return true unless Manifest.manifest.items + return true unless Manifest.manifest.models + end + false end def self.load_manifest - return nil unless self.my_manifest - r = self._valid_encode_columns + return nil if self._skip_load? + vc = self.my_manifest.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 + vc end - define_singleton_method("child_models") do |tree_name| - self.my_manifest.child_models tree_name + cm = self.my_manifest.child_models + define_singleton_method("child_models") do + cm end - define_singleton_method("child_element_names") do |tree_name| - self.my_manifest.child_element_names tree_name + cen = self.my_manifest.child_element_names + define_singleton_method("child_element_names") do + cen end # Instance Methods - n = self._extend_column_name - define_singleton_method("extend_column_name") do - n - end end # ClassMethods @@ -40,7 +41,13 @@ module Peta before_validation :valid_encode + def self.my_peta + return nil unless Manifest.manifest.items + Manifest.manifest.items[self.item_name] + end + def self.my_manifest + return nil unless Manifest.manifest.models Manifest.manifest.models[self.item_name] end @@ -64,12 +71,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.visible_count_options - nil + 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.list_where @@ -77,7 +100,7 @@ module Peta end def self.list_order - '' + self.table_name + '.updated_at desc' end def self.list_opt @@ -92,7 +115,8 @@ module Peta opt = {} opt.merge!(self.show_opt) item = self.find(item_id, opt) - raise ActiveRecord::Forbidden unless item.visible?(operators) + item.boosts 'read' + raise ActiveRecord::Forbidden if item.visible?(operators) == false item end @@ -104,6 +128,15 @@ module Peta {} end + 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 + #InstanceMethods def item_name @@ -118,10 +151,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 @@ -137,51 +166,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 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 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 - 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] + 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 + 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 @@ -190,6 +207,11 @@ module Peta true end + def visible? operators + return false unless self.user_visible? operators + true + end + def editize? self.respond_to? :editor end @@ -226,5 +248,9 @@ module Peta ) end + def post_attribute_key + self.dom_id + end + end end