module Manifest
module ItemModule
class Boost < ManifestBase::NameValues
- attr :level, :extend_column_name, :settings_column_name,
- :foreign_key, :setter_method_name, :getter_method_name
+ attr :level, :template_name,
+ :column_name_for_template_module, :settings_column_name,
+ :foreign_key, :extend_model_class_name, :item_name_for_extend_model,
+ :setter_method_name, :getter_method_name,
+ :extend_module_name
def set_default
super
@values['level'] ||= 'post'
- @values['extend_column_name'] ||= @name + '_classname'
+ @values['template_name'] ||= @name
+ @values['column_name_for_template_module'] ||= @values['template_name'] + '_module_name'
@values['settings_column_name'] ||= @name + '_settings'
- @values['foreign_key'] ||= @name + '_id'
- @values['setter_method_name'] ||= @name + '_extend='
- @values['getter_method_name'] ||= @name + '_extend'
+ @values['foreign_key'] ||= @values['template_name'] + '_id'
end
def init
super
@level = @values['level']
- @extend_column_name = @values['extend_column_name']
+ @template_name = @values['template_name']
+ @column_name_for_template_module = @values['column_name_for_template_module']
@settings_column_name = @values['settings_column_name']
@foreign_key = @values['foreign_key']
+
+ @values['item_name_for_extend_model'] ||= @template_name
+ @values['setter_method_name'] ||= @values['item_name_for_extend_model'] + '_extend='
+ @values['getter_method_name'] ||= @values['item_name_for_extend_model'] + '_extend'
+ @extend_model_class_name = @values['extend_model_class_name']
+ @item_name_for_extend_model = @values['item_name_for_extend_model']
@setter_method_name = @values['setter_method_name']
@getter_method_name = @values['getter_method_name']
- end
-
- def extend_model_name
- @parent.model.singular
- end
-
- def extend_module_name
- @parent.model.singular + 'Module'
- end
-
- class ItemBooster
- def initialize manifest, item
- @manifest = manifest
- @item = item
- end
-
- # get engine's name
- def class_name
- @item.attributes[@manifest.extend_column_name]
- end
-
- def settings
- @item.attributes[@manifest.settings_column_name]
- end
-
- # name space for engine
- def engine_module
- Object.const_get self.class_name(@item)
- end
-
- # extend module in engine
- # ex) CircleSpeechBalloon::SpeechBalloonModule
- def engine_extend_module
- self.engine_module.const_get @manifest.extend_module_name
- end
-
- # extend settings data model in engine
- def engine_extend_model
- self.engine_module.const_get @manifest.extend_module_name
- end
-
- # get system resource instance
- def resource
- r = @item.__send__ @manifest.name
- raise 'resource not found' unless r
- r
- end
-
- def parsed_settings
- if self.settings.blank?
- {}
+ @extend_module_name = @values['extend_module_name']
+ unless @extend_module_name
+ if @extend_model_class_name
+ @extend_module_name = @extend_model_class_name + 'Module'
else
- JSON.parse(self.settings)
+ ManifestBase.alert_undefined_message 'extend_module_name', self.module_message
end
end
-
- def boost
- # no check
- # return false unless self.resource.enable?
- @item.extend self.engine_extend_module
- @item.__send__ @manifest.setter_method_name, self.parsed_settings
- end
-
- end
-
- def supply_default item
- self.engine_model(item).engine_extend_module.supply_default item, self
end
end