OSDN Git Service

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