OSDN Git Service

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