-
-module Pettanr
- class FormManager
- class Form
+require_dependency "manifest/form/field"
+module Manifest
+ class Form
+ include FormModule
+
+ def self.base_manager manifest, my_manifests
+ form = {}
+ base = my_manifests['base'] || {}
+ base.each {|form_name, form_manifest|
+ form[form_name] = Form.new(manifest, form_name, form_manifest)
+ }
+ form
+ end
+
+ def self.extend_manager manifest, my_manifests
+ form = {}
+ extend = my_manifests['extend'] || {}
+ extend.each {|form_name, form_manifest|
+ form[form_name] = ExtendForm.new(manifest, form_name, form_manifest)
+ }
+ form
end
- attr :form_manifest, :item_name, :manifest, :form_conf,
- def initialize form_manifest
+ attr :form_manifest, :form_name, :manifest,
+ :fields, :field_names
+ def initialize manifest, form_name, form_manifest
+ @manifest = manifest
+ @form_name = form_name
@form_manifest = form_manifest
- @item_name = @form_manifest.item_name
- @manifest = @form_manifest.manifest
- @form_conf = @form_manifest.conf
- attributes = @form_manifest.conf
-
+ self.set_default
+ self.init
+ end
+
+ def set_default
+ @form_manifest['fields'] ||= {}
+ @form_manifest['field_names'] ||= []
end
- def attributes
+ def init
+ @base = @form_manifest['base']
+ @fields = {}
+ @form_manifest['fields'].each {|field_name, field_manifest|
+ @fields[field_name] = FieldFactory.factory(self, field_name, field_manifest)
+ }
+ @field_names = @form_manifest['field_names']
+ end
+
+ def each_field
+ @field_names.each do |field_name|
+ yield field_name, @fields[field_name]
+ end
+ end
+
+ end
+
+ class ExtendForm < Form
+
+ attr :base
+ def set_default
+ super
+ raise "undefined base for forms > extend > #{self.form_name}\n" unless @form_manifest['base']
end
- def open list_name, item, operators
- Form.new item_name, item, operators, @manifest
+ def init
+ super
+ @base = @form_manifest['base']
+ @base_form = @manifest.forms[@base]
+ raise "undefined base form for forms > extend > #{self.form_name}\n" unless @base_form
+ @fields.merge! @base_form.fields
end
end
+
end