OSDN Git Service

fix summary
[pettanr/pettanr.git] / lib / locmare / bucket.rb
index 2a80ef8..211755f 100644 (file)
@@ -1,11 +1,19 @@
-require_dependency "locmare/bucket/member"
-require_dependency "locmare/bucket/field_name"
 
 module Locmare
   class Bucket
-    include BucketModule
     attr :manifest, :bucket_name, :item, :mounted, :submit, :operators, :template_dir, 
       :fields
+    
+    def self.factory bucket_or_form_name, item, mounted, submit, operators
+      bucket = LocalManifest.manifest.buckets[bucket_or_form_name]
+      c = if bucket and bucket.has_member?
+        Locmare::Bucket
+      else
+        Locmare::Form
+      end
+      c.new bucket_or_form_name, item, mounted, submit, operators
+    end
+    
     def initialize bucket_name, item, mounted, submit, operators
       @bucket_name = bucket_name
       @item = item
@@ -14,27 +22,54 @@ module Locmare
       @operators = operators
       
       @item.boosts 'post'
-      self.init_fields
-      @manifest = LocalManifest.manifest.forms[@form_name]
+      @manifest = LocalManifest.manifest.buckets[@bucket_name]
       @template_dir = 'templates/r/form/'
-      @fields = {}
+      @form_fields = []
+      @forms = {}
+      @forms[@item.item_name] = Locmare::Form.new @item.item_name, @item, @mounted, false, @operators
+      self.init_forms @item.item_name, @manifest, @item
+      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_item = @item.boosters[boost_name].extend_item
-          @fields[field_name] = ExtendForm.new self, extend_form_name, extend_item, @mounted, @operators, field_name
-        else
-          @fields[field_name] = Field.new self, field_name, field_manifest
-        end
+    def fold_extend_settings params
+      @item.class.fold_extend_settings params[@item.item_name]
+      self.members_fold_extend_settings @item, params[@item.item_name], @manifest
+    end
+    
+    def members_fold_extend_settings fold_item, attr, man
+      man.members.each do |member_name, member_manifest|
+        member_item = fold_item.__send__ member_name
+        member_item.class.fold_extend_settings attr[member_name + '_attributes']
+        self.members_fold_extend_settings member_item, attr[member_name + '_attributes'], member_manifest
       end
     end
     
     def each_field
-      @manifest.field_names.each do |field_name| 
-        yield field_name, @fields[field_name]
+      @form_fields.each do |form_field|
+        yield form_field.field_name, form_field
+      end
+    end
+    
+    def push_form key, form_name, item
+    end
+    
+    def init_forms key, man, item
+      man.members.each do |member_name, member_manifest|
+        form_name = member_name   # write exchange function if you want
+        member_item = item.__send__(form_name)
+        new_key = key + '.' + form_name
+        @forms[new_key] = Locmare::Form.new new_key, member_item, @mounted, false, @operators
+        self.init_forms new_key, member_manifest, member_item
+      end
+    end
+    
+    def init_fields
+      @manifest.form_field_names.each do |form_field_name|
+        r = form_field_name.form_name.blank? ? '' : '.' + form_field_name.form_name
+        key = @item.item_name + r
+        form = @forms[key]
+        field = form.fields[form_field_name.field_name]
+        @form_fields << field
       end
     end
     
@@ -74,6 +109,10 @@ module Locmare
       end
     end
     
+    def form_name
+      @bucket_name
+    end
+    
   end
   
 end