OSDN Git Service

fix extend for profiler
[pettanr/pettanr.git] / lib / locmare / booster.rb
1 module Locmare
2   class Booster
3     attr :boost
4     
5     def initialize manifest, item
6       @manifest = manifest
7       @item = item
8       # no check
9       # return false unless self.resource.enable?
10       @item.extend self.engine_extend_module
11       @item.__send__ @manifest.setter_method_name, self.parsed_settings
12     end
13     
14     # get engine resource from system resource manifest
15     def my_engine_resource
16       Manifest.manifest.system_resources.engine_resources[@item.table_name]
17     end
18     
19     # get snake_case engine name
20     # ex) circle_speech_balloon
21     # use to url, model_name generating
22     def engine_name
23       self.my_engine_resource.resource_items[@item.classname]
24     end
25     
26     def model_name
27       self.engine_name + '_' + @manifest.extend_item_name
28     end
29     
30     def enable?
31       self.my_engine_resource.resource_items.include? @item.classname
32     end
33     
34     # get engine's module name
35     def class_name
36       @item.attributes[@manifest.extend_column_name]
37     end
38     
39     def settings
40       @item.attributes[@manifest.settings_column_name]
41     end
42     
43     # name space for engine
44     def engine_module
45       Object.const_get self.class_name
46     end
47     
48     # extend module in engine
49     # ex) CircleSpeechBalloon::SpeechBalloonModule
50     def engine_extend_module
51       self.engine_module.const_get @manifest.extend_module_name
52     end
53     
54     # extend settings data model in engine
55     # ex) CircleSpeechBalloon::SpeechBalloon
56     def engine_extend_model
57       self.engine_module.const_get @manifest.extend_model_name
58     end
59     
60     # get system resource instance
61     def resource
62       r = @item.__send__ @manifest.name
63       raise 'resource not found' unless r
64       r
65     end
66     
67     def parsed_settings
68       if self.settings.blank?
69         {}
70       else
71         JSON.parse(self.settings)
72       end
73     end
74     
75   end
76 end
77