OSDN Git Service

fix: fetch fail
[pettanr/pettanr.git] / lib / locmare / booster.rb
1 module Locmare
2   class Booster
3     attr :boost, :manifest
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 if self.has_extend_model?
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 item_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     def has_extend_model?
61       !@manifest.extend_model_class_name.blank?
62     end
63     
64     # extend settings data model in engine
65     # ex) CircleSpeechBalloon::SpeechBalloon
66     def extend_model
67       if self.has_extend_model?
68         self.template_module.const_get @manifest.extend_model_class_name
69       else
70         nil
71       end
72     end
73     
74     def check_template
75       @item.attributes[@manifest.foreign_key].blank? == false
76     end
77     
78     # get template model
79     def template_model
80       Manifest.manifest.models[@manifest.template_name].classify
81     end
82     
83     # get extend instance
84     def extend_item
85       if self.extend_model
86         @item.__send__ @manifest.getter_method_name
87       else
88         nil
89       end
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     def update_settings new_settings
101       @item.__send__ @manifest.setter_method_name, new_settings
102     end
103     
104     def supply_default
105       self.extend_item.supply_default @item
106     end
107     
108     def overwrite 
109       self.extend_item.overwrite @item
110     end
111     
112   end
113 end
114