@item = item
# no check
# return false unless self.resource.enable?
- @item.extend self.engine_extend_module
- @item.__send__ @manifest.setter_method_name, self.parsed_settings
- @boosted = true
+ if self.extendable?
+ @item.extend self.engine_extend_module
+ @item.__send__ @manifest.setter_method_name, self.parsed_settings
+ end
end
- def boosted?
- @boosted
+ def engine_resource_name
+ @manifest.engine_resource_name || self.resource.table_name
end
# get engine resource from system resource manifest
def my_engine_resource
- Manifest.manifest.system_resources.engine_resources[@item.table_name]
+ Manifest.manifest.system_resources.engine_resources[self.engine_resource_name]
+ end
+
+ def engine_classname
+ return self.resource.classname unless @manifest.engine_resource_extend_column_name
+ self.resource.attributes[@manifest.engine_resource_extend_column_name]
end
# get snake_case engine name
# ex) circle_speech_balloon
# use to url, model_name generating
def engine_name
- self.my_engine_resource.resource_items[@item.classname]
+ self.my_engine_resource.resource_items[self.engine_classname]
end
def model_name
end
def enable?
- self.my_engine_resource.resource_items.include? @item.classname
+ self.my_engine_resource.resource_items.include? self.class_name
end
# get engine's module name
Object.const_get self.class_name
end
+ def extendable?
+ self.engine_module.constants.include? @manifest.extend_module_name.to_sym
+ end
+
# extend module in engine
# ex) CircleSpeechBalloon::SpeechBalloonModule
def engine_extend_module
self.engine_module.const_get @manifest.extend_model_name
end
+ def check_resource
+ @item.attributes[@manifest.foreign_key].blank? == false
+ end
+
# get system resource instance
def resource
- r = @item.__send__ @manifest.name
- raise 'resource not found' unless r
+ raise 'blank foreign_key ' + @manifest.name unless self.check_resource
+ r = @item.__send__ @manifest.resource_name
+ raise 'resource not found' + @manifest.resource_name unless r
r
end
+ # get extend instance
+ def extend_item
+ @item.__send__ @manifest.getter_method_name
+ end
+
def parsed_settings
if self.settings.blank?
{}