OSDN Git Service

separate manifest
[pettanr/pettanr.git] / lib / local_manifest / form / field / field.rb
diff --git a/lib/local_manifest/form/field/field.rb b/lib/local_manifest/form/field/field.rb
new file mode 100644 (file)
index 0000000..84c3d63
--- /dev/null
@@ -0,0 +1,90 @@
+require_dependency "local_manifest/form/field/tag"
+require_dependency "local_manifest/form/field/label"
+require_dependency "local_manifest/form/field/helper"
+module LocalManifest
+  module FormModule
+    class Field
+      include FieldModule
+      attr :form, :field_name, :field_manifest, :type, 
+        :model_name, :column_name, :label, :tag, :helpers, :row_break
+      
+      def initialize form, field_name, field_manifest
+        @form = form
+        @field_name = field_name
+        @field_manifest = field_manifest
+        self.set_default
+        self.init
+      end
+      
+      def set_default
+        @field_manifest['args'] ||= {}
+        n = self.field_name.split '.'
+        if n.size > 1
+          @field_manifest['args']['model_name'] ||= n[0]
+          @field_manifest['args']['column_name'] ||= n[1]
+        else
+          @field_manifest['args']['model_name'] ||= self.form.form_name
+          @field_manifest['args']['column_name'] ||= self.field_name
+        end
+        @field_manifest['args']['label'] ||= {}
+        @field_manifest['args']['tag'] ||= {}
+        @field_manifest['args']['helpers'] ||= {}
+        @field_manifest['args']['row_break'] ||= true
+      end
+      
+      def init
+        @type = @field_manifest['type']
+        @args = @field_manifest['args']
+        @model_name = @args['model_name']
+        @column_name = @args['column_name']
+        @label = LabelFactory.factory(self, @args['label'])
+        @tag = TagFactory.factory(self, @args['tag'])
+        @helpers = {}
+        @args['helpers'].each {|helper_name, helper_manifest|
+          @helpers[helper_name] = HelperFactory.factory(self, helper_name, helper_manifest)
+        }
+        @row_break = @args['row_break']
+      end
+      
+      def part?
+        @part_name != nil 
+      end
+      
+      def form_name
+        @form.form_name
+      end
+      
+      def filer_manifest
+        @form.form_manifest
+      end
+      
+    end
+    
+    class ElementField < Field
+      def form_field_name
+        @model_name + '[' + @column_name + ']'
+      end
+      
+    end
+    
+    class PartField < Field
+      attr :part_name
+      
+      def set_default
+        super
+        @field_manifest['args']['part_name'] ||= @field_manifest['args']['model_name']
+      end
+      
+      def init
+        super
+        @part_name = @args['part_name']
+      end
+      
+      def form_field_name
+        @model_name + '[' + @model_name + '_attributes][' + @column_name + ']'
+      end
+      
+    end
+    
+  end
+end