OSDN Git Service

fix summary
[pettanr/pettanr.git] / lib / locmare / bucket.rb
1
2 module Locmare
3   class Bucket
4     attr :manifest, :bucket_name, :item, :mounted, :submit, :operators, :template_dir, 
5       :fields
6     
7     def self.factory bucket_or_form_name, item, mounted, submit, operators
8       bucket = LocalManifest.manifest.buckets[bucket_or_form_name]
9       c = if bucket and bucket.has_member?
10         Locmare::Bucket
11       else
12         Locmare::Form
13       end
14       c.new bucket_or_form_name, item, mounted, submit, operators
15     end
16     
17     def initialize bucket_name, item, mounted, submit, operators
18       @bucket_name = bucket_name
19       @item = item
20       @mounted = mounted
21       @submit = submit
22       @operators = operators
23       
24       @item.boosts 'post'
25       @manifest = LocalManifest.manifest.buckets[@bucket_name]
26       @template_dir = 'templates/r/form/'
27       @form_fields = []
28       @forms = {}
29       @forms[@item.item_name] = Locmare::Form.new @item.item_name, @item, @mounted, false, @operators
30       self.init_forms @item.item_name, @manifest, @item
31       self.init_fields
32     end
33     
34     def fold_extend_settings params
35       @item.class.fold_extend_settings params[@item.item_name]
36       self.members_fold_extend_settings @item, params[@item.item_name], @manifest
37     end
38     
39     def members_fold_extend_settings fold_item, attr, man
40       man.members.each do |member_name, member_manifest|
41         member_item = fold_item.__send__ member_name
42         member_item.class.fold_extend_settings attr[member_name + '_attributes']
43         self.members_fold_extend_settings member_item, attr[member_name + '_attributes'], member_manifest
44       end
45     end
46     
47     def each_field
48       @form_fields.each do |form_field|
49         yield form_field.field_name, form_field
50       end
51     end
52     
53     def push_form key, form_name, item
54     end
55     
56     def init_forms key, man, item
57       man.members.each do |member_name, member_manifest|
58         form_name = member_name   # write exchange function if you want
59         member_item = item.__send__(form_name)
60         new_key = key + '.' + form_name
61         @forms[new_key] = Locmare::Form.new new_key, member_item, @mounted, false, @operators
62         self.init_forms new_key, member_manifest, member_item
63       end
64     end
65     
66     def init_fields
67       @manifest.form_field_names.each do |form_field_name|
68         r = form_field_name.form_name.blank? ? '' : '.' + form_field_name.form_name
69         key = @item.item_name + r
70         form = @forms[key]
71         field = form.fields[form_field_name.field_name]
72         @form_fields << field
73       end
74     end
75     
76     def template_file_name
77       "form"
78     end
79     
80     def template_name
81       self.template_dir + self.template_file_name
82     end
83     
84     def fields_template_name
85       self.template_dir + 'fields'
86     end
87     
88     def image_dir
89       '/images/'
90     end
91     
92     def submit_name
93       if @item.new_record?
94         @item.table_name + '.submit.new'
95       else
96         @item.table_name + '.submit.edit'
97       end
98     end
99     
100     def submit_template_dir
101       self.template_dir + 'submit/'
102     end
103     
104     def submit_template_name
105       if @submit
106         self.submit_template_dir + 'submit'
107       else
108         self.submit_template_dir + 'none'
109       end
110     end
111     
112     def form_name
113       @bucket_name
114     end
115     
116   end
117   
118 end
119