OSDN Git Service

separate manifest
[pettanr/pettanr.git] / lib / locmare / form / field.rb
diff --git a/lib/locmare/form/field.rb b/lib/locmare/form/field.rb
new file mode 100644 (file)
index 0000000..014eb57
--- /dev/null
@@ -0,0 +1,81 @@
+require_dependency "locmare/form/field/label"
+require_dependency "locmare/form/field/tag"
+require_dependency "locmare/form/field/helper"
+module Locmare
+  module FormModule
+    class Field
+      include FieldModule
+      attr :form, :field_name, :field_manifest, 
+        :label, :tag, :helpers, :options
+      def initialize form, field_name, field_manifest
+        @form = form
+        @field_name = field_name
+        @field_manifest = field_manifest
+        @label = LabelFactory.factory self, @field_manifest.label
+        @tag = TagFactory.factory self, @field_manifest.tag
+        @helpers = {}
+        @field_manifest.helpers.each {|helper_name, helper_manifest|
+          @helpers[helper_name] = HelperFactory.factory self, helper_manifest
+        }
+        @options = {'data-model' => @field_manifest.model_name}
+      end
+      
+      def mounted
+        @form.mounted ? 0 : 1
+      end
+      
+      def mount_option
+        {'mount' => self.mounted}
+      end
+      
+      def item
+        @form.item
+      end
+      
+      def value
+        self.item.attributes[@field_manifest.column_name]
+      end
+      
+      def options tag_options = {}
+        self.item.field_tag_attributes(@field_manifest.column_name, tag_options).merge(self.mount_option)
+      end
+      
+      def form_field_name
+        @field_manifest.form_field_name
+      end
+      
+      def form_name
+        @form.form_name
+      end
+      
+      def template_dir
+        @form.template_dir + 'field/'
+      end
+      
+      def template_file_name
+        @field_manifest.type
+      end
+      
+      def template_name
+        self.template_dir + self.template_file_name
+      end
+      
+      def row_break_template_dir
+        @form.template_dir + 'row_break/'
+      end
+      
+      def row_break_template_file_name
+        if @field_manifest.row_break
+          'br'
+        else
+          'no_break'
+        end
+      end
+      
+      def row_break_template_name
+        self.row_break_template_dir + self.row_break_template_file_name
+      end
+      
+    end
+  end
+end