OSDN Git Service

separate manifest
[pettanr/pettanr.git] / lib / local_manifest / form.rb
1 require_dependency "local_manifest/form/field"
2 module LocalManifest
3   class Form
4     include FormModule
5     
6     def self.base_manager manifest, my_manifests
7       form = {}
8       base = my_manifests['base'] || {}
9       base.each {|form_name, form_manifest|
10         form[form_name] = Form.new(manifest, form_name, form_manifest)
11       }
12       form
13     end
14     
15     def self.extend_manager manifest, my_manifests
16       form = {}
17       extend = my_manifests['extend'] || {}
18       extend.each {|form_name, form_manifest|
19         form[form_name] = ExtendForm.new(manifest, form_name, form_manifest)
20       }
21       form
22     end
23     
24     attr :form_manifest, :form_name, :manifest, 
25       :fields, :field_names
26     def initialize manifest, form_name, form_manifest
27       @manifest = manifest
28       @form_name = form_name
29       @form_manifest = form_manifest
30       self.set_default
31       self.init
32     end
33     
34     def set_default
35       @form_manifest['fields'] ||= {}
36       @form_manifest['field_names'] ||= []
37     end
38     
39     def init
40       @base = @form_manifest['base']
41       @fields = {}
42       @form_manifest['fields'].each {|field_name, field_manifest|
43         @fields[field_name] = FieldFactory.factory(self, field_name, field_manifest)
44       }
45       @field_names = @form_manifest['field_names']
46     end
47     
48     def each_field
49       @field_names.each do |field_name|
50         yield field_name, @fields[field_name]
51       end
52     end
53     
54   end
55   
56   class ExtendForm < Form
57     
58     attr :base
59     def set_default
60       super
61       raise "undefined base for forms > extend > #{self.form_name}\n" unless @form_manifest['base']
62     end
63     
64     def init
65       super
66       @base = @form_manifest['base']
67       @base_form = @manifest.forms[@base]
68       raise "undefined base form for forms > extend > #{self.form_name}\n" unless @base_form
69       @fields.merge! @base_form.fields
70     end
71     
72   end
73   
74 end
75