OSDN Git Service

filer worked
[pettanr/pettanr.git] / lib / manifest / form.rb
1 require_dependency "manifest/form/field"
2 module Manifest
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   end
49   
50   class ExtendForm < Form
51     
52     attr :base
53     def set_default
54       super
55       raise "undefined base for forms > extend > #{self.form_name}\n" unless @form_manifest['base']
56     end
57     
58     def init
59       super
60       @base = @form_manifest['base']
61       @base_form = @manifest.forms[@base]
62       raise "undefined base form for forms > extend > #{self.form_name}\n" unless @base_form
63       @fields.merge! @base_form.fields
64     end
65     
66   end
67   
68 end
69