OSDN Git Service

fix anything
[pettanr/pettanr.git] / lib / locmare / form.rb
index 7fc8dd5..584ca85 100644 (file)
@@ -1,25 +1,25 @@
 require_dependency "locmare/form/field"
+require_dependency "locmare/form/extend_field"
+
 module Locmare
-  class Form
+  class FormBase
     include FormModule
-    attr :form_name, :item, :mounted, :submit, :operators, :template_dir, 
+    attr :form_name, :item, :mounted, :operators, :template_dir, 
       :fields
-    def initialize form_name, item, mounted, submit, operators
+    def initialize form_name, item, mounted, operators
       @form_name = form_name
       @item = item
       @mounted = mounted
-      @submit = submit
       @operators = operators
+      
       @manifest = LocalManifest.manifest.forms[@form_name]
       @template_dir = 'templates/r/form/'
       @fields = {}
-      @manifest.each_field do |field_name, field_manifest| 
-        @fields[field_name] = Field.new self, field_name, field_manifest
-      end
+      self.init_fields
     end
     
     def each_field
-      @manifest.each_field do |field_name, field_manifest
+      @manifest.field_names.each do |field_name
         yield field_name, @fields[field_name]
       end
     end
@@ -32,6 +32,38 @@ module Locmare
       self.template_dir + self.template_file_name
     end
     
+    def fields_template_name
+      self.template_dir + 'fields'
+    end
+    
+    def image_dir
+      '/images/'
+    end
+    
+  end
+  
+  class Form < FormBase
+    attr :submit
+    
+    def initialize form_name, item, mounted, submit, operators
+      super form_name, item, mounted, operators
+      @submit = submit
+      @item.boosts 'post'
+      self.init_fields
+    end
+    
+    def init_fields
+      @manifest.each_field do |field_name, field_manifest| 
+        if boost_name = @item.class.find_boost_name(field_name)
+          extend_form_name = @item.boosters[boost_name].model_name
+          extend_form_manifest = LocalManifest.manifest.forms[extend_form_name]
+          @fields[field_name] = ExtendForm.new self, extend_form_name, @item, @mounted, @operators
+        else
+          @fields[field_name] = Field.new self, field_name, field_manifest
+        end
+      end
+    end
+    
     def submit_name
       if @item.new_record?
         @item.table_name + '.submit.new'
@@ -52,14 +84,29 @@ module Locmare
       end
     end
     
-    def fields_template_name
-      self.template_dir + 'fields'
+  end
+  
+  class ExtendForm < FormBase
+    attr :parent
+    
+    def initialize parent, form_name, item, mounted, submit, operators
+      @parent = parent
+      super form_name, item, mounted, operators
     end
     
-    def image_dir
-      '/images/'
+    def init_fields
+      @manifest.each_field do |field_name, field_manifest| 
+        if boost_name = @item.class.find_boost_name(field_name)
+          extend_form_name = @item.boosters[boost_name].model_name
+          extend_form_manifest = LocalManifest.manifest.forms[extend_form_name]
+          @fields[field_name] = ExtendField.new self, field_name, field_manifest, @item.boosters[n].extend_item
+        else
+          @fields[field_name] = Field.new self, field_name, field_manifest
+        end
+      end
     end
     
   end
+  
 end