OSDN Git Service

fix form
[pettanr/pettanr.git] / lib / peta / item.rb
1 module Peta
2   class Item < ActiveRecord::Base
3     self.abstract_class = true
4     # ClassMethods
5     # class_name
6     # table_name
7     
8     before_validation :valid_encode
9     
10     def self.singular
11       self.to_s
12     end
13     
14     def self.plural
15       self.singular.pluralize
16     end
17     
18     def self.item_name
19       self.singular.underscore
20     end
21     
22     def self.item?
23       true
24     end
25     
26     def self.content?
27       false
28     end
29     
30     def self.path_name with_engine = false
31       self.plural.underscore
32     end
33     
34     def self.valid_encode_columns
35       []
36     end
37     
38     def self.visible_count_options
39       nil
40     end
41     
42     def self.list_where
43       ''
44     end
45     
46     def self.list_order
47       ''
48     end
49     
50     def self.list_opt
51       {}
52     end
53     
54     def self.list_json_opt
55       {}
56     end
57     
58     def self.show item_id, operators
59       opt = {}
60       opt.merge!(self.show_opt)
61       item = self.find(item_id, opt)
62       raise ActiveRecord::Forbidden unless item.visible?(operators)
63       item
64     end
65     
66     def self.show_opt
67       {}
68     end
69     
70     def self.show_json_opt
71       {}
72     end
73     
74     def self.visible_count
75       self.count self.visible_count_options
76     end
77     
78     def self.visible_count_options
79       []
80     end
81     
82     #InstanceMethods
83     
84     def item_name
85       self.class.item_name
86     end
87     
88     def model_name
89       self.item_name
90     end
91     
92     def table_name
93       self.class.table_name
94     end
95     
96     def extend_column
97       nil
98     end
99     
100     def extend_item_name
101       self.extend_column ? self.attributes[self.extend_column] : self.item_name
102     end
103     
104     def form_name
105       self.extend_item_name
106     end
107     
108     def valid_encode
109       self.class.valid_encode_columns.each do |a|
110         next if attributes[a] == nil
111         raise Pettanr::BadRequest unless attributes[a].valid_encoding?
112       end
113     end
114     
115     def supply_default
116     end
117     
118     def overwrite 
119     end
120     
121     def visible? operators
122       if Manifest.manifest.magic_numbers['run_mode'] == 0
123         return false unless operators.guest?
124       else
125         return false unless operators.resource_reader?
126       end
127       true
128     end
129     
130     def dom_id_item 
131       self.new_record? ? '0' : self.id.to_s
132     end
133     
134     def tag_item_id c = nil
135       self.item_name + self.item_id + c.to_s
136     end
137     
138     def dom_id_item_field field_name
139       self.tag_item_id + field_name.to_s
140     end
141     
142     def path_name with_engine = false
143       self.class.path_name(with_engine)
144     end
145     
146     def form_template with_engine = false
147       self.path_name(with_engine) + '/form'
148     end
149     
150     def tag_item_attributes column = nil, opt = {}
151       {
152         :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, 
153         :element_id => self.tag_element_id, :element_type => self.tag_element_type
154       }.merge(opt)
155     end
156     
157       def tag_new_index
158       end
159       
160     def field_tag_attributes column, no_attr, opt = {}
161       self.tag_attributes(column).merge(
162         {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr}
163       ).merge(opt)
164     end
165     
166     #render element by body
167     def any_tag_attributes name = nil, opt = {}
168       r = self.tag_attributes(name)
169       r.merge!(
170         {:new_index => self.tag_new_index}
171       ) if self.new_index
172       r.merge(opt)
173     end
174     
175     def select_tag_attributes(selected, column, no_attr)
176       [
177         :last, :first, 
178         {:html => {:selected => selected}}, 
179         self.field_tag_attributes(column, no_attr)
180       ]
181     end
182     
183     def tag_attr column = nil, opt = {}
184       self.tag_attributes(column, opt).to_attr
185     end
186     
187     def field_tag_attr column, no_attr, opt = {}
188       self.field_tag_attributes(column, no_attr, opt).to_attr
189     end
190     
191     def any_tag_attr name = nil, opt = {}
192       self.any_tag_attributes(name, opt).to_attr
193     end
194     
195   end
196 end