1 class Pettanr::Item < ActiveRecord::Base
2 self.abstract_class = true
7 before_validation :valid_encode
9 cattr_accessor :valid_encode_columns, :default_page_size, :max_page_size, :visible_count_options
10 @@valid_encode_columns = []
11 @@default_page_size = 25
13 @@visible_count_options = {}
14 cattr_reader :singular, :plural
19 self.singular.underscore
22 def self.path_name with_engine = false
23 self.plural.underscore
26 def self.page_number prm = nil
32 def self.page_size prm = self.default_page_size
34 page_size = self.max_page_size if page_size > self.max_page_size
35 page_size = self.default_page_size if page_size < 1
47 def self.list page = 1, page_size = self.default_page_size
48 self.where(self.list_where()).includes(self.list_opt).order(self.list_order).offset((page -1) * page_size).limit(page_size)
51 def self.list_paginate page = 1, page_size = self.default_page_size
52 Kaminari.paginate_array(
53 Array.new(self.where(self.list_where()).includes(self.list_opt).count, nil)
54 ).page(page).per(page_size)
61 def self.list_json_opt
65 def self.show item_id, operators
67 opt.merge!(self.show_opt)
68 item = self.find(item_id, opt)
69 raise ActiveRecord::Forbidden unless item.visible?(operators)
77 def self.show_json_opt
81 def self.visible_count
82 self.count self.visible_count_options
92 self.class.valid_encode_columns.each do |a|
93 next if attributes[a] == nil
94 raise Pettanr::BadRequest unless attributes[a].valid_encoding?
104 def visible? operators
105 if MagicNumber['run_mode'] == 0
106 return false unless operators.guest?
108 return false unless operators.resource_reader?
114 self.new_record? ? '0' : self.id.to_s
117 def tag_item_id c = nil
118 self.item_name + self.item_id + c.to_s
121 def dom_id_item_field field_name
122 self.tag_item_id + field_name.to_s
125 def path_name with_engine = false
126 self.class.path_name(with_engine)
129 def form_template with_engine = false
130 self.path_name(with_engine) + '/form'
133 def tag_item_attributes column = nil, opt = {}
135 :id => self.field_tag_id(column), :panel_id => self.tag_panel_id,
136 :element_id => self.tag_element_id, :element_type => self.tag_element_type
140 def field_tag_attributes column, no_attr, opt = {}
141 self.tag_attributes(column).merge(
142 {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr}
146 #render element by body
147 def any_tag_attributes name = nil, opt = {}
148 r = self.tag_attributes(name)
150 {:new_index => self.tag_new_index}
155 def select_tag_attributes(selected, column, no_attr)
158 {:html => {:selected => selected}},
159 self.field_tag_attributes(column, no_attr)
163 def tag_attr column = nil, opt = {}
164 self.tag_attributes(column, opt).to_attr
167 def field_tag_attr column, no_attr, opt = {}
168 self.field_tag_attributes(column, no_attr, opt).to_attr
171 def any_tag_attr name = nil, opt = {}
172 self.any_tag_attributes(name, opt).to_attr