OSDN Git Service

merge
[pettanr/pettanr.git] / lib / manifest / form / field / field.rb
1 require_dependency "manifest/form/field/tag"
2 require_dependency "manifest/form/field/label"
3 require_dependency "manifest/form/field/helper"
4 module Manifest
5   module FormModule
6     class Field
7       include FieldModule
8       attr :form, :field_name, :field_manifest, :type, 
9         :model_name, :column_name, :label, :tag, :helpers, :row_break
10       
11       def initialize form, field_name, field_manifest
12         @form = form
13         @field_name = field_name
14         @field_manifest = field_manifest
15         self.set_default
16         self.init
17       end
18       
19       def set_default
20         @field_manifest['args'] ||= {}
21         n = self.field_name.split '.'
22         if n.size > 1
23           @field_manifest['args']['model_name'] ||= n[0]
24           @field_manifest['args']['column_name'] ||= n[1]
25         else
26           @field_manifest['args']['model_name'] ||= self.form.form_name
27           @field_manifest['args']['column_name'] ||= self.field_name
28         end
29         @field_manifest['args']['label'] ||= {}
30         @field_manifest['args']['tag'] ||= {}
31         @field_manifest['args']['helpers'] ||= {}
32         @field_manifest['args']['row_break'] ||= true
33       end
34       
35       def init
36         @type = @field_manifest['type']
37         @args = @field_manifest['args']
38         @model_name = @args['model_name']
39         @column_name = @args['column_name']
40         @label = LabelFactory.factory(self, @args['label'])
41         @tag = TagFactory.factory(self, @args['tag'])
42         @helpers = {}
43         @args['helpers'].each {|helper_name, helper_manifest|
44           @helpers[helper_name] = HelperFactory.factory(self, helper_name, helper_manifest)
45         }
46         @row_break = @args['row_break']
47       end
48       
49       def part?
50         @part_name != nil 
51       end
52       
53       def form_name
54         @form.form_name
55       end
56       
57       def filer_manifest
58         @form.form_manifest
59       end
60       
61     end
62     
63     class ElementField < Field
64       def form_field_name
65         @model_name + '[' + @column_name + ']'
66       end
67       
68     end
69     
70     class PartField < Field
71       attr :part_name
72       
73       def set_default
74         super
75         @field_manifest['args']['part_name'] ||= @field_manifest['args']['model_name']
76       end
77       
78       def init
79         super
80         @part_name = @args['part_name']
81       end
82       
83       def form_field_name
84         @model_name + '[' + @model_name + '_attributes][' + @column_name + ']'
85       end
86       
87     end
88     
89   end
90 end