OSDN Git Service

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