OSDN Git Service

test 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 extend_column
93       nil
94     end
95     
96     def extend_item_name
97       self.extend_column ? self.attributes[self.extend_column] : self.item_name
98     end
99     
100     def form_name
101       self.extend_item_name
102     end
103     
104     def valid_encode
105       self.class.valid_encode_columns.each do |a|
106         next if attributes[a] == nil
107         raise Pettanr::BadRequest unless attributes[a].valid_encoding?
108       end
109     end
110     
111     def supply_default
112     end
113     
114     def overwrite 
115     end
116     
117     def visible? operators
118       if Manifest.manifest.magic_numbers['run_mode'] == 0
119         return false unless operators.guest?
120       else
121         return false unless operators.resource_reader?
122       end
123       true
124     end
125     
126     def dom_id_item 
127       self.new_record? ? '0' : self.id.to_s
128     end
129     
130     def tag_item_id c = nil
131       self.item_name + self.item_id + c.to_s
132     end
133     
134     def dom_id_item_field field_name
135       self.tag_item_id + field_name.to_s
136     end
137     
138     def path_name with_engine = false
139       self.class.path_name(with_engine)
140     end
141     
142     def form_template with_engine = false
143       self.path_name(with_engine) + '/form'
144     end
145     
146     def tag_item_attributes column = nil, opt = {}
147       {
148         :id => self.field_tag_id(column), :panel_id => self.tag_panel_id, 
149         :element_id => self.tag_element_id, :element_type => self.tag_element_type
150       }.merge(opt)
151     end
152     
153       def tag_new_index
154       end
155       
156     def field_tag_attributes column, no_attr, opt = {}
157       self.tag_attributes(column).merge(
158         {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr}
159       ).merge(opt)
160     end
161     
162     #render element by body
163     def any_tag_attributes name = nil, opt = {}
164       r = self.tag_attributes(name)
165       r.merge!(
166         {:new_index => self.tag_new_index}
167       ) if self.new_index
168       r.merge(opt)
169     end
170     
171     def select_tag_attributes(selected, column, no_attr)
172       [
173         :last, :first, 
174         {:html => {:selected => selected}}, 
175         self.field_tag_attributes(column, no_attr)
176       ]
177     end
178     
179     def tag_attr column = nil, opt = {}
180       self.tag_attributes(column, opt).to_attr
181     end
182     
183     def field_tag_attr column, no_attr, opt = {}
184       self.field_tag_attributes(column, no_attr, opt).to_attr
185     end
186     
187     def any_tag_attr name = nil, opt = {}
188       self.any_tag_attributes(name, opt).to_attr
189     end
190     
191   end
192 end