OSDN Git Service

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