OSDN Git Service

merge
[pettanr/pettanr.git] / lib / manifest / form.rb
index 74bd865..48d40d0 100644 (file)
@@ -1,26 +1,75 @@
-
-module Pettanr
-  class FormManager
-    class Form
+require_dependency "manifest/form/field"
+module Manifest
+  class Form
+    include FormModule
+    
+    def self.base_manager manifest, my_manifests
+      form = {}
+      base = my_manifests['base'] || {}
+      base.each {|form_name, form_manifest|
+        form[form_name] = Form.new(manifest, form_name, form_manifest)
+      }
+      form
+    end
+    
+    def self.extend_manager manifest, my_manifests
+      form = {}
+      extend = my_manifests['extend'] || {}
+      extend.each {|form_name, form_manifest|
+        form[form_name] = ExtendForm.new(manifest, form_name, form_manifest)
+      }
+      form
     end
     
-    attr :form_manifest, :item_name, :manifest, :form_conf, 
-    def initialize form_manifest
+    attr :form_manifest, :form_name, :manifest, 
+      :fields, :field_names
+    def initialize manifest, form_name, form_manifest
+      @manifest = manifest
+      @form_name = form_name
       @form_manifest = form_manifest
-      @item_name = @form_manifest.item_name
-      @manifest = @form_manifest.manifest
-      @form_conf = @form_manifest.conf
-      attributes = @form_manifest.conf
-      
+      self.set_default
+      self.init
+    end
+    
+    def set_default
+      @form_manifest['fields'] ||= {}
+      @form_manifest['field_names'] ||= []
     end
     
-    def attributes
+    def init
+      @base = @form_manifest['base']
+      @fields = {}
+      @form_manifest['fields'].each {|field_name, field_manifest|
+        @fields[field_name] = FieldFactory.factory(self, field_name, field_manifest)
+      }
+      @field_names = @form_manifest['field_names']
+    end
+    
+    def each_field
+      @field_names.each do |field_name|
+        yield field_name, @fields[field_name]
+      end
+    end
+    
+  end
+  
+  class ExtendForm < Form
+    
+    attr :base
+    def set_default
+      super
+      raise "undefined base for forms > extend > #{self.form_name}\n" unless @form_manifest['base']
     end
     
-    def open list_name, item, operators
-      Form.new item_name, item, operators, @manifest
+    def init
+      super
+      @base = @form_manifest['base']
+      @base_form = @manifest.forms[@base]
+      raise "undefined base form for forms > extend > #{self.form_name}\n" unless @base_form
+      @fields.merge! @base_form.fields
     end
     
   end
+  
 end