module Peta
class Item < ActiveRecord::Base
self.abstract_class = true
+
+ # Dynamic ClassMethods
+
+ def self._valid_encode_columns
+ self.my_manifest.valid_encode_columns
+ end
+
+ def self._extend_column_name
+ self.my_manifest.extend_column_name
+ end
+
+ def self.load_manifest
+ return nil unless self.my_manifest
+ r = self._valid_encode_columns
+ define_singleton_method("valid_encode_columns") do
+ r
+ end
+ define_singleton_method("parent_modela") do |tree_name|
+ self.my_manifest.tree[tree_name].parent_model
+ end
+ define_singleton_method("child_models") do |tree_name|
+ self.my_manifest.child_models tree_name
+ end
+ define_singleton_method("child_element_names") do |tree_name|
+ self.my_manifest.child_element_names tree_name
+ end
+ # Instance Methods
+ n = self._extend_column_name
+ define_singleton_method("extend_column_name") do
+ n
+ end
+ end
+
# ClassMethods
# class_name
# table_name
before_validation :valid_encode
+ def self.my_peta
+ Manifest.manifest.items[self.item_name]
+ end
+
+ def self.my_manifest
+ Manifest.manifest.models[self.item_name]
+ end
+
def self.singular
self.to_s
end
false
end
- def self.path_name with_engine = false
- self.plural.underscore
+ def self.element?
+ false
+ end
+
+ def self.root?
+ false
end
- def self.valid_encode_columns
- []
+ def self.parent_model
+ nil
+ end
+
+ def self.path_name with_engine = false
+ self.plural.underscore
end
def self.visible_count_options
{}
end
- def self.visible_count
- self.count self.visible_count_options
- end
-
- def self.visible_count_options
- []
- end
-
#InstanceMethods
def item_name
self.class.table_name
end
- def extend_column
- nil
+ def extend_column_name
+ self.class.extend_column_name
end
- def extend_item_name
- self.extend_column ? self.attributes[self.extend_column] : self.item_name
+ 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 form_name
- self.extend_item_name
+ self.extend_column ? self.attributes[self.extend_column] : self.item_name
end
def valid_encode
end
end
- def supply_default
+ def self.fold_extend_settings params
+ speech_balloon_settings = params[:speech_balloon][:settings]
+ if speech_balloon_settings.is_a?(Hash)
+ params[:speech_balloon][:settings] = speech_balloon_settings.to_json
+ end
+ balloon_settings = params[:speech_balloon][:balloon_attributes][:settings]
+ if balloon_settings.is_a?(Hash)
+ params[:speech_balloon][:balloon_attributes][:settings] = balloon_settings.to_json
+ end
+ speech_settings = params[:speech_balloon][:speech_attributes][:settings]
+ if speech_settings.is_a?(Hash)
+ params[:speech_balloon][:speech_attributes][:settings] = speech_settings.to_json
+ end
end
- def overwrite
+ def engine
+ Object.const_get self.attributes[self.extend_column_name]
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
+ def my_engine_resource
+ Manifest.manifest.system_resources.engine_resources[self.table_name]
end
- def dom_id_item
- self.new_record? ? '0' : self.id.to_s
+ def engine?
+ return false unless self.my_engine_resource
+ self.my_engine_resource.resource_items.include? self.attributes[self.extend_column_name]
end
- def tag_item_id c = nil
- self.item_name + self.item_id + c.to_s
+ def boost
+ return false unless self.engine?
+ self.engine.boost self
+ true
end
- def dom_id_item_field field_name
- self.tag_item_id + field_name.to_s
+ def supply_default
end
- def path_name with_engine = false
- self.class.path_name(with_engine)
+ def overwrite
end
- def form_template with_engine = false
- self.path_name(with_engine) + '/form'
+ 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 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)
+ def editize?
+ self.respond_to? :editor
end
- def tag_new_index
- 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)
+ def dom_id
+ self.id.to_s
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)
+ def dom_pool_type
+ self.new_record? ? 'stored' : 'new'
end
- def select_tag_attributes(selected, column, no_attr)
- [
- :last, :first,
- {:html => {:selected => selected}},
- self.field_tag_attributes(column, no_attr)
- ]
+ def merge_dom_item_id attr, name = nil
+ if self.editize?
+ attr.merge({'id' => self.dom_item_id(name)})
+ else
+ attr
+ end
end
- def tag_attr column = nil, opt = {}
- self.tag_attributes(column, opt).to_attr
+ def tag_attributes name = nil, opt = {}
+ r = {
+ 'data-pool_type' => self.dom_pool_type, 'data-id' => self.dom_id,
+ 'data-item_name' => self.item_name
+ }
+ r = self.merge_dom_item_id r, name
+ r.merge!(opt)
+ r
end
- def field_tag_attr column, no_attr, opt = {}
- self.field_tag_attributes(column, no_attr, opt).to_attr
+ def field_tag_attributes column_name, opt = {}
+ self.tag_attributes(column_name, opt).merge(
+ {'data-column_name' => column_name}
+ )
end
- def any_tag_attr name = nil, opt = {}
- self.any_tag_attributes(name, opt).to_attr
+ def post_attribute_key
+ self.dom_id
end
end