OSDN Git Service

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