-require_dependency "locmare/bucket/member"
-require_dependency "locmare/bucket/field_name"
module Locmare
class Bucket
- include BucketModule
attr :manifest, :bucket_name, :item, :mounted, :submit, :operators, :template_dir,
:fields
+
+ def self.factory bucket_or_form_name, item, mounted, submit, operators
+ bucket = LocalManifest.manifest.buckets[bucket_or_form_name]
+ c = if bucket and bucket.has_member?
+ Locmare::Bucket
+ else
+ Locmare::Form
+ end
+ c.new bucket_or_form_name, item, mounted, submit, operators
+ end
+
def initialize bucket_name, item, mounted, submit, operators
@bucket_name = bucket_name
@item = item
@operators = operators
@item.boosts 'post'
- self.init_fields
- @manifest = LocalManifest.manifest.forms[@form_name]
+ @manifest = LocalManifest.manifest.buckets[@bucket_name]
@template_dir = 'templates/r/form/'
- @fields = {}
+ @form_fields = []
+ @forms = {}
+ @forms[@item.item_name] = Locmare::Form.new @item.item_name, @item, @mounted, false, @operators
+ self.init_forms @item.item_name, @manifest, @item
+ self.init_fields
end
- def init_fields
- @manifest.each_field do |field_name, field_manifest|
- if boost_name = @item.class.find_boost_name(field_name)
- extend_form_name = @item.boosters[boost_name].model_name
- extend_item = @item.boosters[boost_name].extend_item
- @fields[field_name] = ExtendForm.new self, extend_form_name, extend_item, @mounted, @operators, field_name
- else
- @fields[field_name] = Field.new self, field_name, field_manifest
- end
+ def fold_extend_settings params
+ @item.class.fold_extend_settings params[@item.item_name]
+ self.members_fold_extend_settings @item, params[@item.item_name], @manifest
+ end
+
+ def members_fold_extend_settings fold_item, attr, man
+ man.members.each do |member_name, member_manifest|
+ member_item = fold_item.__send__ member_name
+ member_item.class.fold_extend_settings attr[member_name + '_attributes']
+ self.members_fold_extend_settings member_item, attr[member_name + '_attributes'], member_manifest
end
end
def each_field
- @manifest.field_names.each do |field_name|
- yield field_name, @fields[field_name]
+ @form_fields.each do |form_field|
+ yield form_field.field_name, form_field
+ end
+ end
+
+ def push_form key, form_name, item
+ end
+
+ def init_forms key, man, item
+ man.members.each do |member_name, member_manifest|
+ form_name = member_name # write exchange function if you want
+ member_item = item.__send__(form_name)
+ new_key = key + '.' + form_name
+ @forms[new_key] = Locmare::Form.new new_key, member_item, @mounted, false, @operators
+ self.init_forms new_key, member_manifest, member_item
+ end
+ end
+
+ def init_fields
+ @manifest.form_field_names.each do |form_field_name|
+ r = form_field_name.form_name.blank? ? '' : '.' + form_field_name.form_name
+ key = @item.item_name + r
+ form = @forms[key]
+ field = form.fields[form_field_name.field_name]
+ @form_fields << field
end
end
end
end
+ def form_name
+ @bucket_name
+ end
+
end
end