OSDN Git Service

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