OSDN Git Service

Merge branch 'v06' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v06
[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.extend_module
12         @item.__send__ @manifest.setter_method_name, self.parsed_settings
13       end
14     end
15     
16     # get template from system resource manifest
17     def template_path_name
18       self.template_manifest.template_items[self.template_module_name]
19     end
20     
21     # get template manifest from system resource manifest
22     def template_manifest
23       Manifest.manifest.system_resources.templates[@manifest.template_name]
24     end
25     
26     def model_name
27       self.template_path_name + '_' + @manifest.item_name_for_extend_model
28     end
29     
30     def enable?
31       self.template_manifest.template_items.include? self.template_module_name
32     end
33     
34     # get template module name
35     # ex) attributes[hoge__module_name] -> 'Hoge'
36     def template_module_name
37       @item.attributes[@manifest.column_name_for_template_module]
38     end
39     
40     def settings
41       @item.attributes[@manifest.settings_column_name]
42     end
43     
44     # name space for template
45     # ex) 'Hoge' -> Hoge
46     def template_module
47       Object.const_get self.template_module_name
48     end
49     
50     def extendable?
51       self.template_module.constants.include? @manifest.extend_module_name.to_sym
52     end
53     
54     # extend module in engine
55     # ex) 'SpeechBalloonModule' -> CircleSpeechBalloon::SpeechBalloonModule
56     def extend_module
57       self.template_module.const_get @manifest.extend_module_name
58     end
59     
60     # extend settings data model in engine
61     # ex) CircleSpeechBalloon::SpeechBalloon
62     def extend_model
63       self.template_module.const_get @manifest.extend_model_class_name
64     end
65     
66     def check_template
67       @item.attributes[@manifest.foreign_key].blank? == false
68     end
69     
70     # get system resource instance
71     def resource
72       Manifest.manifest.models[@manifest.template_name].classify
73     end
74     
75     # get extend instance
76     def extend_item
77       @item.__send__ @manifest.getter_method_name
78     end
79     
80     def parsed_settings
81       if self.settings.blank?
82         {}
83       else
84         JSON.parse(self.settings)
85       end
86     end
87     
88     def update_settings new_settings
89       @item.__send__ @manifest.setter_method_name, new_settings
90     end
91     
92   end
93 end
94