-class Pettanr::Item < ActiveRecord::Base
- self.abstract_class = true
- # ClassMethods
- # class_name
- # table_name
-
- before_validation :valid_encode
-
- def self.singular
- self.to_s
- end
-
- def self.plural
- self.singular.pluralize
- end
-
- def self.item_name
- self.singular.underscore
- end
-
- def self.item?
- true
- end
-
- def self.content?
- false
- end
-
- def self.path_name with_engine = false
- self.plural.underscore
- end
-
- def self.valid_encode_columns
- []
- end
-
- def self.visible_count_options
- nil
- end
-
- def self.list_where
- ''
- end
-
- def self.list_order
- ''
- end
-
- def self.list_opt
- {}
- end
-
- def self.list_json_opt
- {}
- end
-
- def self.show item_id, operators
- opt = {}
- opt.merge!(self.show_opt)
- item = self.find(item_id, opt)
- raise ActiveRecord::Forbidden unless item.visible?(operators)
- item
- end
-
- def self.show_opt
- {}
- end
-
- def self.show_json_opt
- {}
- end
-
- def self.visible_count
- self.count self.visible_count_options
- end
-
- def self.visible_count_options
- []
- end
-
- #InstanceMethods
-
- def item_name
- self.class.item_name
- end
-
- def model_name
- self.item_name
- end
-
- def extend_column
- nil
- end
-
- def extend_item_name
- self.extend_column ? self.attributes[self.extend_column] : self.item_name
- end
-
- def form_name
- self.extend_item_name
- end
-
- def valid_encode
- self.class.valid_encode_columns.each do |a|
- next if attributes[a] == nil
- raise Pettanr::BadRequest unless attributes[a].valid_encoding?
- end
- end
-
- def supply_default
- end
-
- def overwrite
- end
-
- def visible? operators
- if Manifest.manifest.magic_numbers['run_mode'] == 0
- return false unless operators.guest?
- else
- return false unless operators.resource_reader?
- end
- true
- end
-
- def dom_id_item
- self.new_record? ? '0' : self.id.to_s
- end
-
- def tag_item_id c = nil
- self.item_name + self.item_id + c.to_s
- end
-
- def dom_id_item_field field_name
- self.tag_item_id + field_name.to_s
- end
-
- def path_name with_engine = false
- self.class.path_name(with_engine)
- end
-
- def form_template with_engine = false
- self.path_name(with_engine) + '/form'
- end
-
- def tag_item_attributes column = nil, opt = {}
- {
- :id => self.field_tag_id(column), :panel_id => self.tag_panel_id,
- :element_id => self.tag_element_id, :element_type => self.tag_element_type
- }.merge(opt)
- end
-
- def field_tag_attributes column, no_attr, opt = {}
- self.tag_attributes(column).merge(
- {:column => column, :new_index => self.tag_new_index, :no_attr => no_attr}
- ).merge(opt)
- end
-
- #render element by body
- def any_tag_attributes name = nil, opt = {}
- r = self.tag_attributes(name)
- r.merge!(
- {:new_index => self.tag_new_index}
- ) if self.new_index
- r.merge(opt)
- end
-
- def select_tag_attributes(selected, column, no_attr)
- [
- :last, :first,
- {:html => {:selected => selected}},
- self.field_tag_attributes(column, no_attr)
- ]
- end
-
- def tag_attr column = nil, opt = {}
- self.tag_attributes(column, opt).to_attr
- end
-
- def field_tag_attr column, no_attr, opt = {}
- self.field_tag_attributes(column, no_attr, opt).to_attr
- end
-
- def any_tag_attr name = nil, opt = {}
- self.any_tag_attributes(name, opt).to_attr
- end
-
-end