OSDN Git Service

c4bf673d3119bfdd37975c50eb2e562ebccdbfb6
[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       @boosted = true
13     end
14     
15     def boosted?
16       @boosted
17     end
18     
19     # get engine resource from system resource manifest
20     def my_engine_resource
21       Manifest.manifest.system_resources.engine_resources[@item.table_name]
22     end
23     
24     # get snake_case engine name
25     # ex) circle_speech_balloon
26     # use to url, model_name generating
27     def engine_name
28       self.my_engine_resource.resource_items[@item.classname]
29     end
30     
31     def model_name
32       self.engine_name + '_' + @manifest.extend_item_name
33     end
34     
35     def enable?
36       self.my_engine_resource.resource_items.include? @item.classname
37     end
38     
39     # get engine's module name
40     def class_name
41       @item.attributes[@manifest.extend_column_name]
42     end
43     
44     def settings
45       @item.attributes[@manifest.settings_column_name]
46     end
47     
48     # name space for engine
49     def engine_module
50       Object.const_get self.class_name
51     end
52     
53     # extend module in engine
54     # ex) CircleSpeechBalloon::SpeechBalloonModule
55     def engine_extend_module
56       self.engine_module.const_get @manifest.extend_module_name
57     end
58     
59     # extend settings data model in engine
60     # ex) CircleSpeechBalloon::SpeechBalloon
61     def engine_extend_model
62       self.engine_module.const_get @manifest.extend_model_name
63     end
64     
65     # get system resource instance
66     def resource
67       r = @item.__send__ @manifest.name
68       raise 'resource not found' unless r
69       r
70     end
71     
72     def parsed_settings
73       if self.settings.blank?
74         {}
75       else
76         JSON.parse(self.settings)
77       end
78     end
79     
80   end
81 end
82