OSDN Git Service

fix form extend
[pettanr/pettanr.git] / lib / locmare / booster.rb
index c4bf673..a8201d4 100644 (file)
@@ -7,25 +7,31 @@ module Locmare
       @item = item
       # no check
       # return false unless self.resource.enable?
-      @item.extend self.engine_extend_module
-      @item.__send__ @manifest.setter_method_name, self.parsed_settings
-      @boosted = true
+      if self.extendable?
+        @item.extend self.engine_extend_module
+        @item.__send__ @manifest.setter_method_name, self.parsed_settings
+      end
     end
     
-    def boosted?
-      @boosted
+    def engine_resource_name
+      @manifest.engine_resource_name || self.resource.table_name
     end
     
     # get engine resource from system resource manifest
     def my_engine_resource
-      Manifest.manifest.system_resources.engine_resources[@item.table_name]
+      Manifest.manifest.system_resources.engine_resources[self.engine_resource_name]
+    end
+    
+    def engine_classname
+      return self.resource.classname unless @manifest.engine_resource_extend_column_name
+      self.resource.attributes[@manifest.engine_resource_extend_column_name]
     end
     
     # get snake_case engine name
     # ex) circle_speech_balloon
     # use to url, model_name generating
     def engine_name
-      self.my_engine_resource.resource_items[@item.classname]
+      self.my_engine_resource.resource_items[self.engine_classname]
     end
     
     def model_name
@@ -33,7 +39,7 @@ module Locmare
     end
     
     def enable?
-      self.my_engine_resource.resource_items.include? @item.classname
+      self.my_engine_resource.resource_items.include? self.class_name
     end
     
     # get engine's module name
@@ -50,6 +56,10 @@ module Locmare
       Object.const_get self.class_name
     end
     
+    def extendable?
+      self.engine_module.constants.include? @manifest.extend_module_name.to_sym
+    end
+    
     # extend module in engine
     # ex) CircleSpeechBalloon::SpeechBalloonModule
     def engine_extend_module
@@ -62,13 +72,23 @@ module Locmare
       self.engine_module.const_get @manifest.extend_model_name
     end
     
+    def check_resource
+      @item.attributes[@manifest.foreign_key].blank? == false
+    end
+    
     # get system resource instance
     def resource
-      r = @item.__send__ @manifest.name
-      raise 'resource not found' unless r
+      raise 'blank foreign_key ' + @manifest.name unless self.check_resource
+      r = @item.__send__ @manifest.resource_name
+      raise 'resource not found' + @manifest.resource_name unless r
       r
     end
     
+    # get extend instance
+    def extend_item
+      @item.__send__ @manifest.getter_method_name
+    end
+    
     def parsed_settings
       if self.settings.blank?
         {}