OSDN Git Service

fix local_manifest
[pettanr/pettanr.git] / lib / local_manifest / form.rb
1 ManifestBase.require_modules "local_manifest/form/", 
2   %w|field|
3
4 module LocalManifest
5   class Form < ManifestBase::Base
6     include FormModule
7     
8     def self.load manifest, jsons, module_name
9       Hash[jsons[module_name]['base'].map {|name, json|
10         [name, self.new(manifest, name, json, module_name)]
11       }]
12     end
13     
14     attr :fields, :field_names
15     
16     def set_default
17       super
18       @json['fields'] ||= {}
19       @json['field_names'] ||= []
20     end
21     
22     def init
23       super
24       @base = @json['base']
25       @fields = ManifestBase.load_type_name_args self, @json, 'fields', FieldFactory
26       @field_names = @json['field_names']
27     end
28     
29     def each_field
30       @field_names.each do |field_name|
31         yield field_name, @fields[field_name]
32       end
33     end
34     
35   end
36   
37   class ExtendForm < Form
38     
39     attr :base
40     
41     def self.load manifest, jsons, module_name
42       Hash[jsons[module_name]['extend'].map {|name, json|
43         [name, self.new(manifest, name, json, module_name)]
44       }]
45     end
46     
47     def set_default
48       super
49       ManifestBase.alert_undefined_message 'base',  self.module_message unless @json['base']
50     end
51     
52     def init
53       super
54       @base = @json['base']
55       @base_form = @manifest.forms[@base]
56       ManifestBase.alert_undefined_message 'base form',  self.module_message unless @base_form
57       @fields.merge! @base_form.fields
58     end
59     
60   end
61   
62 end
63