OSDN Git Service

fix bucket
[pettanr/pettanr.git] / lib / locmare / form / field.rb
1 require_dependency "locmare/form/field/label"
2 require_dependency "locmare/form/field/tag"
3 require_dependency "locmare/form/field/helper"
4 module Locmare
5   module FormModule
6     class Field
7       include FieldModule
8       attr :form, :field_name_with_sub_form, :field_manifest, 
9         :label, :tag, :helpers, :options, 
10         :field_name, :sub_form_names
11       def initialize form, field_name_with_sub_form, field_manifest
12         @form = form
13         @field_name_with_sub_form = field_name_with_sub_form
14         @field_manifest = field_manifest
15         @label = LabelFactory.factory self, @field_manifest.label
16         @tag = TagFactory.factory self, @field_manifest.tag
17         @helpers = {}
18         @field_manifest.helpers.each {|helper_name, helper_manifest|
19           @helpers[helper_name] = HelperFactory.factory self, helper_manifest
20         }
21         @options = {'data-model' => @field_manifest.form_name}
22         @sub_form_names = @field_name_with_sub_form.split '.'
23         @field_name = @sub_form_names.pop
24       end
25       
26       def mounted
27         @form.mounted ? 0 : 1
28       end
29       
30       def mount_option
31         {'mount' => self.mounted}
32       end
33       
34       def item
35         i = @form.item
36         @sub_form_names.each do |n|
37           i = i.__send__(n)  # has_many associate model does not work
38         end
39         i
40       end
41       
42       def value
43         self.item.attributes[@field_manifest.column_name]
44       end
45       
46       def options tag_options = {}
47         self.item.field_tag_attributes(@field_manifest.column_name, tag_options).merge(self.mount_option)
48       end
49       
50       def sub_form_name
51         @sub_form_names.map{|name| '[' + name + '_attributes' + ']'}.join
52       end
53       
54       def form_field_name
55         @form.form_name + self.sub_form_name + '[' + @field_name + ']'
56       end
57       
58       def form_name
59         @form.form_name
60       end
61       
62       def template_dir
63         @form.template_dir + 'field/'
64       end
65       
66       def template_file_name
67         'default'
68       end
69       
70       def template_name
71         self.template_dir + self.template_file_name
72       end
73       
74       def template_option
75         {:field => self}
76       end
77       
78       def row_break_template_dir
79         @form.template_dir + 'row_break/'
80       end
81       
82       def row_break_template_file_name
83         if @field_manifest.row_break
84           'br'
85         else
86           'no_break'
87         end
88       end
89       
90       def row_break_template_name
91         self.row_break_template_dir + self.row_break_template_file_name
92       end
93       
94     end
95   end
96 end