OSDN Git Service

fix remove tree
[pettanr/pettanr.git] / lib / peta / item.rb
index 25acd42..cfd771c 100644 (file)
@@ -1,12 +1,53 @@
 module Peta
   class Item < ActiveRecord::Base
     self.abstract_class = true
+    
+    # Dynamic ClassMethods
+    
+    def self._valid_encode_columns
+      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_modela") 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
+      end
+      define_singleton_method("child_element_names") do  |tree_name|
+        self.my_manifest.child_element_names tree_name
+      end
+      # Instance Methods
+      n = self._extend_column_name
+      define_singleton_method("extend_column_name") do 
+        n
+      end
+    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 +68,20 @@ module Peta
       false
     end
     
-    def self.path_name with_engine = false
-      self.plural.underscore
+    def self.element?
+      false
+    end
+    
+    def self.root?
+      false
     end
     
-    def self.valid_encode_columns
-      []
+    def self.parent_model
+      nil
+    end
+    
+    def self.path_name with_engine = false
+      self.plural.underscore
     end
     
     def self.visible_count_options
@@ -71,14 +120,6 @@ module Peta
       {}
     end
     
-    def self.visible_count
-      self.count self.visible_count_options
-    end
-    
-    def self.visible_count_options
-      []
-    end
-    
     #InstanceMethods
     
     def item_name
@@ -93,16 +134,20 @@ module Peta
       self.class.table_name
     end
     
-    def extend_column
-      nil
+    def extend_column_name
+      self.class.extend_column_name
     end
     
-    def extend_item_name
-      self.extend_column ? self.attributes[self.extend_column] : self.item_name
+    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
-      self.extend_item_name
+      self.extend_column ? self.attributes[self.extend_column] : self.item_name
     end
     
     def valid_encode
@@ -112,84 +157,93 @@ module Peta
       end
     end
     
-    def supply_default
+    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
+      end
     end
     
-    def overwrite 
+    def engine
+      Object.const_get self.attributes[self.extend_column_name]
     end
     
-    def visible? operators
-      if Manifest.manifest.magic_numbers['run_mode'] == 0
-        return false unless operators.guest?
-      else
-        return false unless operators.resource_reader?
-      end
-      true
+    def my_engine_resource
+      Manifest.manifest.system_resources.engine_resources[self.table_name]
     end
     
-    def dom_id_item 
-      self.new_record? ? '0' : self.id.to_s
+    def engine?
+      return false unless self.my_engine_resource
+      self.my_engine_resource.resource_items.include? self.attributes[self.extend_column_name]
     end
     
-    def tag_item_id c = nil
-      self.item_name + self.item_id + c.to_s
+    def boost
+      return false unless self.engine?
+      self.engine.boost self
+      true
     end
     
-    def dom_id_item_field field_name
-      self.tag_item_id + field_name.to_s
+    def supply_default
     end
     
-    def path_name with_engine = false
-      self.class.path_name(with_engine)
+    def overwrite 
     end
     
-    def form_template with_engine = false
-      self.path_name(with_engine) + '/form'
+    def visible? operators
+      if Manifest.manifest.magic_numbers['run_mode'] == 0
+        return false unless operators.guest?
+      else
+        return false unless operators.resource_reader?
+      end
+      true
     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 editize?
+      self.respond_to? :editor
     end
     
-      def tag_new_index
-      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)
+    def dom_id
+      self.id.to_s
     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)
+    def dom_pool_type
+      self.new_record? ? 'stored' : 'new'
     end
     
-    def select_tag_attributes(selected, column, no_attr)
-      [
-        :last, :first, 
-        {:html => {:selected => selected}}, 
-        self.field_tag_attributes(column, no_attr)
-      ]
+    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_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