X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Fpeta%2Fitem.rb;h=cfd771ca5b6ee0adb39ecf7552c97841973c3f0d;hb=ae65f3fa406f90544b2afa166a274746bebce68d;hp=25acd422969e9b30c7bba14dc5b989ef7a3b4d0c;hpb=11a45b633d577752eab730818d0b116180e18a47;p=pettanr%2Fpettanr.git diff --git a/lib/peta/item.rb b/lib/peta/item.rb index 25acd422..cfd771ca 100644 --- a/lib/peta/item.rb +++ b/lib/peta/item.rb @@ -1,12 +1,53 @@ 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 @@ -27,12 +68,20 @@ module Peta 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 @@ -71,14 +120,6 @@ module Peta {} end - def self.visible_count - self.count self.visible_count_options - end - - def self.visible_count_options - [] - end - #InstanceMethods def item_name @@ -93,16 +134,20 @@ module Peta 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 @@ -112,84 +157,93 @@ module Peta 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