odania 0.0.17 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/odania/config/domain.rb +4 -0
- data/lib/odania/config/global_config.rb +12 -5
- data/lib/odania/config/internal.rb +12 -2
- data/lib/odania/config/layout.rb +7 -2
- data/lib/odania/config/page.rb +1 -0
- data/lib/odania/config/style.rb +18 -5
- data/lib/odania/config/sub_domain.rb +7 -13
- data/lib/odania/varnish/generators/generate_site_assets_vcl.rb +41 -0
- data/lib/odania/varnish/generators/generate_sites_vcl.rb +4 -0
- data/lib/odania/version.rb +1 -1
- data/lib/odania.rb +0 -1
- data/templates/varnish/general.vcl.erb +4 -0
- data/templates/varnish/general_site_assets.vcl.erb +21 -0
- data/templates/varnish/site.vcl.erb +32 -2
- data/templates/varnish/site_assets.vcl.erb +34 -0
- data/templates/varnish/sites.vcl.erb +1 -0
- metadata +5 -5
- data/lib/odania/erb.rb +0 -154
- data/spec/lib/odania/erb_spec.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8231be278b477108ee91b8b72cb153b777dea0c6
|
4
|
+
data.tar.gz: 144e705b3ef3b3eef96860a6ed3e69215afaf997
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 639da08f0dc6895d1c7627a73ae835b110797a54250a9202e6d4acd9aa403d072026b9517afa924d3a4563cc0931a0ca01019e21e3e7aca7b5ba697647258223
|
7
|
+
data.tar.gz: a993aeef804be2fc9ab2e7618eaac0f18b27cfc077310c9814cd62d9b3ac00160121d972d9e95e07fc554368639d25b9a67dc664c0ff8c9e282d3b1100bda6a9
|
data/Gemfile.lock
CHANGED
data/lib/odania/config/domain.rb
CHANGED
@@ -49,6 +49,11 @@ module Odania
|
|
49
49
|
puts 'Error start ' + '+' * 50
|
50
50
|
puts e.inspect
|
51
51
|
puts 'Error end ' + '+' * 50
|
52
|
+
puts 'Error backtrace start ' + '+' * 50
|
53
|
+
e.backtrace.each do |line|
|
54
|
+
puts line
|
55
|
+
end
|
56
|
+
puts 'Error backtrace end ' + '+' * 50
|
52
57
|
end
|
53
58
|
end
|
54
59
|
end
|
@@ -78,15 +83,17 @@ module Odania
|
|
78
83
|
@default_subdomains.deep_merge(plugin_cfg['default_subdomains']) unless plugin_cfg['default_subdomains'].nil?
|
79
84
|
|
80
85
|
# Add this service as a default backend if specified
|
81
|
-
@default_backend_groups << group_name if
|
86
|
+
@default_backend_groups << group_name if plugin_cfg['plugin-config']['default']
|
82
87
|
|
83
88
|
# Add config
|
84
|
-
config_section.
|
85
|
-
|
86
|
-
@
|
89
|
+
unless config_section.nil?
|
90
|
+
config_section.each_pair do |key, val|
|
91
|
+
unless @config[key].nil?
|
92
|
+
@duplicates.add :config, {key => 'already defined'}, group_name
|
93
|
+
end
|
87
94
|
end
|
95
|
+
@config.deep_merge! config_section
|
88
96
|
end
|
89
|
-
@config.deep_merge! config_section
|
90
97
|
|
91
98
|
# Add Domain Information
|
92
99
|
unless plugin_cfg['domains'].nil?
|
@@ -7,7 +7,17 @@ module Odania
|
|
7
7
|
reset
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def assets
|
11
|
+
result = {}
|
12
|
+
self.layouts.each_pair do |name, layout|
|
13
|
+
layout.assets.each_pair do |key, val|
|
14
|
+
result[key] = val
|
15
|
+
end
|
16
|
+
end
|
17
|
+
result
|
18
|
+
end
|
19
|
+
|
20
|
+
def load(data, group_name)
|
11
21
|
reset
|
12
22
|
unless data['partials'].nil?
|
13
23
|
data['partials'].each_pair do |name, data|
|
@@ -17,7 +27,7 @@ module Odania
|
|
17
27
|
|
18
28
|
unless data['layouts'].nil?
|
19
29
|
data['layouts'].each_pair do |name, data|
|
20
|
-
self.layouts[name].load(data)
|
30
|
+
self.layouts[name].load(data, group_name)
|
21
31
|
end
|
22
32
|
end
|
23
33
|
end
|
data/lib/odania/config/layout.rb
CHANGED
@@ -7,6 +7,11 @@ module Odania
|
|
7
7
|
reset
|
8
8
|
end
|
9
9
|
|
10
|
+
def assets
|
11
|
+
return {} if self.styles['_general'].nil? or self.styles['_general'].assets.nil?
|
12
|
+
self.styles['_general'].assets
|
13
|
+
end
|
14
|
+
|
10
15
|
def dump
|
11
16
|
style_data = {}
|
12
17
|
styles.each_pair do |name, style|
|
@@ -18,11 +23,11 @@ module Odania
|
|
18
23
|
result
|
19
24
|
end
|
20
25
|
|
21
|
-
def load(data)
|
26
|
+
def load(data, group_name)
|
22
27
|
reset
|
23
28
|
unless data['styles'].nil?
|
24
29
|
data['styles'].each_pair do |key, val|
|
25
|
-
self.styles[key].load(val)
|
30
|
+
self.styles[key].load(val, group_name)
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
data/lib/odania/config/page.rb
CHANGED
data/lib/odania/config/style.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Odania
|
2
2
|
module Config
|
3
3
|
class Style
|
4
|
-
attr_accessor :name, :entry_point, :direct, :dynamic
|
4
|
+
attr_accessor :name, :entry_point, :direct, :dynamic, :assets
|
5
5
|
|
6
6
|
def initialize(name)
|
7
7
|
self.name = name
|
@@ -23,26 +23,38 @@ module Odania
|
|
23
23
|
dynamic_data[web_url] = page.dump
|
24
24
|
end
|
25
25
|
|
26
|
+
asset_data = {}
|
27
|
+
assets.each_pair do |asset_url, page|
|
28
|
+
asset_data[asset_url] = page.dump
|
29
|
+
end
|
30
|
+
|
26
31
|
{
|
27
32
|
'entry_point' => entry_point,
|
28
33
|
'direct' => direct_data,
|
29
|
-
'dynamic' => dynamic_data
|
34
|
+
'dynamic' => dynamic_data,
|
35
|
+
'assets' => asset_data
|
30
36
|
}
|
31
37
|
end
|
32
38
|
|
33
|
-
def load(data)
|
39
|
+
def load(data, group_name)
|
34
40
|
reset
|
35
41
|
self.entry_point = data['entry_point'] unless data['entry_point'].nil?
|
36
42
|
|
37
43
|
unless data['direct'].nil?
|
38
44
|
data['direct'].each_pair do |name, data|
|
39
|
-
self.direct[name].load(data)
|
45
|
+
self.direct[name].load(data, group_name)
|
40
46
|
end
|
41
47
|
end
|
42
48
|
|
43
49
|
unless data['dynamic'].nil?
|
44
50
|
data['dynamic'].each_pair do |name, data|
|
45
|
-
self.dynamic[name].load(data)
|
51
|
+
self.dynamic[name].load(data, group_name)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
unless data['assets'].nil?
|
56
|
+
data['assets'].each_pair do |name, data|
|
57
|
+
self.assets[name].load(data, group_name)
|
46
58
|
end
|
47
59
|
end
|
48
60
|
end
|
@@ -53,6 +65,7 @@ module Odania
|
|
53
65
|
self.entry_point = nil
|
54
66
|
self.direct = Hash.new { |hash, key| hash[key] = Page.new }
|
55
67
|
self.dynamic = Hash.new { |hash, key| hash[key] = Page.new }
|
68
|
+
self.assets = Hash.new { |hash, key| hash[key] = Page.new }
|
56
69
|
@plugins = {:direct => Hash.new { |hash, key| hash[key] = [] }, :dynamic => Hash.new { |hash, key| hash[key] = [] }}
|
57
70
|
end
|
58
71
|
end
|
@@ -31,25 +31,19 @@ module Odania
|
|
31
31
|
result
|
32
32
|
end
|
33
33
|
|
34
|
-
def add_internal(web_url, group_name, plugin_url, plugin_name)
|
35
|
-
result = true
|
36
|
-
result = false unless self.assets.key? web_url
|
37
|
-
self.assets[web_url].group_name = group_name
|
38
|
-
self.assets[web_url].plugin_url = plugin_url
|
39
|
-
@plugins[:asset][web_url] << plugin_name
|
40
|
-
result
|
41
|
-
end
|
42
|
-
|
43
34
|
def get_redirects
|
44
|
-
return {} if self.
|
45
|
-
|
46
|
-
self.config['redirects']
|
35
|
+
return {} if self.redirects.nil?
|
36
|
+
self.redirects
|
47
37
|
end
|
48
38
|
|
49
39
|
def plugins(type, key)
|
50
40
|
@plugins[type][key]
|
51
41
|
end
|
52
42
|
|
43
|
+
def assets
|
44
|
+
self.internal.assets
|
45
|
+
end
|
46
|
+
|
53
47
|
def dump
|
54
48
|
direct_data = {}
|
55
49
|
direct.each_pair do |web_url, page|
|
@@ -93,7 +87,7 @@ module Odania
|
|
93
87
|
end
|
94
88
|
end
|
95
89
|
|
96
|
-
self.internal.load(data['internal']) unless data['internal'].nil?
|
90
|
+
self.internal.load(data['internal'], group_name) unless data['internal'].nil?
|
97
91
|
unless data['redirects'].nil?
|
98
92
|
data['redirects'].each_pair do |src_url, target_url|
|
99
93
|
duplicates[:redirect] << src_url if self.redirects.key? src_url
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Odania
|
2
|
+
class GenerateSiteAssetsVcl
|
3
|
+
attr_accessor :domain, :template, :default_subdomains
|
4
|
+
|
5
|
+
def default_subdomain_for(domain)
|
6
|
+
return self.default_subdomains[domain.name] unless self.default_subdomains[domain.name].nil?
|
7
|
+
return self.default_subdomains['_general'] unless self.default_subdomains['_general'].nil?
|
8
|
+
'www'
|
9
|
+
end
|
10
|
+
|
11
|
+
def template_url_for(domain, page)
|
12
|
+
"&domain=#{domain.name}"+
|
13
|
+
"&plugin_url=#{page.plugin_url.nil? ? '/' : page.plugin_url}"+
|
14
|
+
"&group_name=#{Odania.varnish_sanitize(page.group_name)}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def prepare_url(url)
|
18
|
+
return "/#{url}" unless '/'.eql? url[0]
|
19
|
+
url
|
20
|
+
end
|
21
|
+
|
22
|
+
def general_subdomain
|
23
|
+
self.domain['_general']
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(domain, default_subdomains)
|
27
|
+
self.domain = domain
|
28
|
+
self.default_subdomains = default_subdomains
|
29
|
+
self.template = File.new("#{BASE_DIR}/templates/varnish/site_assets.vcl.erb").read
|
30
|
+
self.template = File.new("#{BASE_DIR}/templates/varnish/general_site_assets.vcl.erb").read if '_general'.eql? domain.name
|
31
|
+
end
|
32
|
+
|
33
|
+
def render
|
34
|
+
Erubis::Eruby.new(self.template).result(binding)
|
35
|
+
end
|
36
|
+
|
37
|
+
def write(out_dir)
|
38
|
+
File.write("#{out_dir}/sites/#{self.domain.name}_assets.vcl", self.render)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'generate_site_vcl'
|
2
|
+
require_relative 'generate_site_assets_vcl'
|
2
3
|
|
3
4
|
module Odania
|
4
5
|
class GenerateSitesVcl
|
@@ -21,6 +22,9 @@ module Odania
|
|
21
22
|
self.domains.each_pair do |domain_name, domain|
|
22
23
|
out = GenerateSiteVcl.new(domain, default_subdomains)
|
23
24
|
out.write out_dir
|
25
|
+
|
26
|
+
out = GenerateSiteAssetsVcl.new(domain, default_subdomains)
|
27
|
+
out.write out_dir
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|
data/lib/odania/version.rb
CHANGED
data/lib/odania.rb
CHANGED
@@ -18,6 +18,10 @@ sub vcl_recv {
|
|
18
18
|
std.log("template partial identified! Page:" + req.url);
|
19
19
|
set req.backend_hint = core_backend_director.backend();
|
20
20
|
return (hash);
|
21
|
+
} else if (req.url ~ "^/template/page") {
|
22
|
+
std.log("template page identified! Page:" + req.url);
|
23
|
+
set req.backend_hint = core_backend_director.backend();
|
24
|
+
return (hash);
|
21
25
|
}
|
22
26
|
}
|
23
27
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
vcl 4.0;
|
2
|
+
# generated varnish config: <%= ENVIRONMENT %>
|
3
|
+
# local test: <%= LOCAL_TEST_MODE ? 'ENABLED' : 'DISABLED' %>
|
4
|
+
|
5
|
+
sub vcl_recv {
|
6
|
+
std.log("pre varnish log info '<%= domain.name %>':" + req.http.host);
|
7
|
+
if (req.http.host ~ "<%= domain.name %>$") {
|
8
|
+
std.log("varnish log info '<%= domain.name %>':" + req.http.host);
|
9
|
+
|
10
|
+
<% general_subdomain.assets.each_pair do |url, page| %>
|
11
|
+
if (req.url ~ "^<%= prepare_url url %>") {
|
12
|
+
std.log("page identified '<%= subdomain.name %>.<%= domain.name %>' Page:'<%= url %>':" + req.url);
|
13
|
+
|
14
|
+
set req.backend_hint = <%= page.director %>.backend();
|
15
|
+
<% unless page.plugin_url.nil? %>set req.url = "<%= page.plugin_url %>";<% end %>
|
16
|
+
|
17
|
+
return (hash);
|
18
|
+
}
|
19
|
+
<% end %>
|
20
|
+
}
|
21
|
+
}
|
@@ -10,7 +10,8 @@ sub vcl_recv {
|
|
10
10
|
if (req.http.host ~ "<%= domain.name %>$") {
|
11
11
|
std.log("varnish log info '<%= domain.name %>':" + req.http.host);
|
12
12
|
|
13
|
-
<% domain.subdomains.each_pair do |subdomain_name, subdomain|
|
13
|
+
<% domain.subdomains.each_pair do |subdomain_name, subdomain|
|
14
|
+
next if '_general'.eql? subdomain_name %>
|
14
15
|
<%= is_first ? '' : 'else ' %>if (req.http.host ~ "^<%= subdomain.name %>.<%= domain.name %>$") {
|
15
16
|
std.log("subdomain identified '<%= subdomain.name %>.<%= domain.name %>':" + req.http.host + " url: " + req.url );
|
16
17
|
|
@@ -44,12 +45,41 @@ sub vcl_recv {
|
|
44
45
|
<% is_first = false %>
|
45
46
|
<% end %>
|
46
47
|
|
48
|
+
# Important: This needs to be directly after the subdomain config
|
47
49
|
<%= is_first ? '' : 'else' %> {
|
48
|
-
# Redirect to default
|
50
|
+
# Redirect to default subdomain
|
49
51
|
std.log("varnish log info 'redirect to default':" + req.url);
|
50
52
|
set req.http.Location = "http://<%= default_subdomain_for(domain) %>.<%= domain.name %>" + req.url;
|
51
53
|
return (synth(750, "Permanently moved"));
|
52
54
|
}
|
55
|
+
|
56
|
+
# General part
|
57
|
+
<% domain.get_redirects.each_pair do |src, target| %>
|
58
|
+
if (req.url ~ "<%= src %>") {
|
59
|
+
std.log("general redirect identified '<%= domain.name %>' src:'<%= src %>':" + req.url);
|
60
|
+
set req.http.Location = "<%= target %>";
|
61
|
+
return (synth(750, "Permanently moved"));
|
62
|
+
}
|
63
|
+
<% end %>
|
64
|
+
|
65
|
+
<% subdomain = domain.subdomains['_general'] %>
|
66
|
+
<% %w(direct dynamic).each do |type| %>
|
67
|
+
<% subdomain[type].each_pair do |url, page| %>
|
68
|
+
if (req.url ~ "^<%= prepare_url url %>") {
|
69
|
+
std.log("page identified '<%= subdomain.name %>.<%= domain.name %>' Page:'<%= url %>':" + req.url);
|
70
|
+
|
71
|
+
<% if 'direct'.eql? type %>
|
72
|
+
set req.backend_hint = <%= page.director %>.backend();
|
73
|
+
<% unless page.plugin_url.nil? %>set req.url = "<%= page.plugin_url %>";<% end %>
|
74
|
+
<% else %>
|
75
|
+
set req.backend_hint = core_backend_director.backend();
|
76
|
+
set req.url = "/template/page?req_url=" + req.url + "&req_host=" + req.http.host + "<%= template_url_for(domain, page) %>";
|
77
|
+
<% end %>
|
78
|
+
|
79
|
+
return (hash);
|
80
|
+
}
|
81
|
+
<% end %>
|
82
|
+
<% end %>
|
53
83
|
}
|
54
84
|
}
|
55
85
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<%
|
2
|
+
is_first = true
|
3
|
+
%>
|
4
|
+
vcl 4.0;
|
5
|
+
# generated varnish config: <%= ENVIRONMENT %>
|
6
|
+
# local test: <%= LOCAL_TEST_MODE ? 'ENABLED' : 'DISABLED' %>
|
7
|
+
|
8
|
+
sub vcl_recv {
|
9
|
+
std.log("pre varnish log info '<%= domain.name %>':" + req.http.host);
|
10
|
+
if (req.http.host ~ "<%= domain.name %>$") {
|
11
|
+
std.log("varnish log info '<%= domain.name %>':" + req.http.host);
|
12
|
+
|
13
|
+
<% domain.subdomains.each_pair do |subdomain_name, subdomain| %>
|
14
|
+
<% unless '_general'.eql? subdomain_name %><%= is_first ? '' : 'else ' %>if (req.http.host ~ "^<%= subdomain.name %>.<%= domain.name %>$") {<% end %>
|
15
|
+
std.log("subdomain identified '<%= subdomain.name %>.<%= domain.name %>':" + req.http.host + " url: " + req.url );
|
16
|
+
|
17
|
+
<% subdomain.assets.each_pair do |url, page| %>
|
18
|
+
if (req.url ~ "^<%= prepare_url url %>") {
|
19
|
+
std.log("page identified '<%= subdomain.name %>.<%= domain.name %>' Page:'<%= url %>':" + req.url);
|
20
|
+
|
21
|
+
set req.backend_hint = <%= page.director %>.backend();
|
22
|
+
<% unless page.plugin_url.nil? %>set req.url = "<%= page.plugin_url %>";<% end %>
|
23
|
+
|
24
|
+
return (hash);
|
25
|
+
}
|
26
|
+
<% end %>
|
27
|
+
|
28
|
+
<% unless '_general'.eql? subdomain_name %>
|
29
|
+
}
|
30
|
+
<% is_first = false %>
|
31
|
+
<% end %>
|
32
|
+
<% end %>
|
33
|
+
}
|
34
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: odania
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Petersen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -184,7 +184,6 @@ files:
|
|
184
184
|
- lib/odania/config/style.rb
|
185
185
|
- lib/odania/config/sub_domain.rb
|
186
186
|
- lib/odania/consul.rb
|
187
|
-
- lib/odania/erb.rb
|
188
187
|
- lib/odania/plugin.rb
|
189
188
|
- lib/odania/plugin_config/base.rb
|
190
189
|
- lib/odania/varnish.rb
|
@@ -193,6 +192,7 @@ files:
|
|
193
192
|
- lib/odania/varnish/generators/generate_default_vcl.rb
|
194
193
|
- lib/odania/varnish/generators/generate_general_vcl.rb
|
195
194
|
- lib/odania/varnish/generators/generate_redirects_vcl.rb
|
195
|
+
- lib/odania/varnish/generators/generate_site_assets_vcl.rb
|
196
196
|
- lib/odania/varnish/generators/generate_site_vcl.rb
|
197
197
|
- lib/odania/varnish/generators/generate_sites_vcl.rb
|
198
198
|
- lib/odania/version.rb
|
@@ -201,7 +201,6 @@ files:
|
|
201
201
|
- spec/fixtures/plugin_config_1.json
|
202
202
|
- spec/lib/odania/config/global_config_spec.rb
|
203
203
|
- spec/lib/odania/config/plugin_config_spec.rb
|
204
|
-
- spec/lib/odania/erb_spec.rb
|
205
204
|
- spec/lib/odania/plugin_spec.rb
|
206
205
|
- spec/lib/odania/varnish_spec.rb
|
207
206
|
- spec/lib/odania_spec.rb
|
@@ -214,8 +213,10 @@ files:
|
|
214
213
|
- templates/varnish/default.vcl.erb
|
215
214
|
- templates/varnish/general.vcl.erb
|
216
215
|
- templates/varnish/general_site.vcl.erb
|
216
|
+
- templates/varnish/general_site_assets.vcl.erb
|
217
217
|
- templates/varnish/redirects.vcl.erb
|
218
218
|
- templates/varnish/site.vcl.erb
|
219
|
+
- templates/varnish/site_assets.vcl.erb
|
219
220
|
- templates/varnish/sites.vcl.erb
|
220
221
|
- templates/varnish/websocker.vcl.erb
|
221
222
|
homepage: http://www.odania.com
|
@@ -252,7 +253,6 @@ test_files:
|
|
252
253
|
- spec/fixtures/plugin_config_1.json
|
253
254
|
- spec/lib/odania/config/global_config_spec.rb
|
254
255
|
- spec/lib/odania/config/plugin_config_spec.rb
|
255
|
-
- spec/lib/odania/erb_spec.rb
|
256
256
|
- spec/lib/odania/plugin_spec.rb
|
257
257
|
- spec/lib/odania/varnish_spec.rb
|
258
258
|
- spec/lib/odania_spec.rb
|
data/lib/odania/erb.rb
DELETED
@@ -1,154 +0,0 @@
|
|
1
|
-
module Odania
|
2
|
-
class Erb
|
3
|
-
attr_accessor :variables, :config, :page, :asset
|
4
|
-
|
5
|
-
def initialize(template, domain, partials, group_name, req_host)
|
6
|
-
@template = template
|
7
|
-
|
8
|
-
self.variables = Variables.new(template, domain, partials, group_name, req_host)
|
9
|
-
self.config = Config.new self.variables
|
10
|
-
self.page = Page.new self.variables
|
11
|
-
self.asset = Asset.new self.variables
|
12
|
-
|
13
|
-
if LOCAL_TEST_MODE
|
14
|
-
data = "\n<!-- Domain: #{domain} -->"
|
15
|
-
data += "\n<!-- Group Name: #{group_name} -->"
|
16
|
-
data += "\n<!-- Request Host: #{req_host} -->"
|
17
|
-
data += "\n<!-- Base Domain: #{self.variables.base_domain} -->"
|
18
|
-
data += "\n<!-- Partials: #{JSON.pretty_generate(self.variables.partials)} -->"
|
19
|
-
data += "\n<!-- Config: #{JSON.pretty_generate(self.variables.config)} -->"
|
20
|
-
data += "\n<!-- SubDomain Config: #{JSON.pretty_generate(self.variables.subdomain_config)} -->"
|
21
|
-
#data += "\n<!-- Global Config: #{JSON.pretty_generate(self.variables.global_config)} -->"
|
22
|
-
@template += data.html_safe
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def render
|
27
|
-
ERB.new(@template).result(binding)
|
28
|
-
end
|
29
|
-
|
30
|
-
class Variables
|
31
|
-
attr_accessor :template, :config, :subdomain_config, :global_config, :domain
|
32
|
-
attr_accessor :base_domain, :partials, :group_name, :req_host
|
33
|
-
|
34
|
-
def initialize(template, domain, partials, group_name, req_host)
|
35
|
-
self.template = template
|
36
|
-
self.global_config = Odania.plugin.get_global_config
|
37
|
-
|
38
|
-
domain_info = PublicSuffix.parse(domain)
|
39
|
-
self.config, self.base_domain = Odania.plugin.get_domain_config_for domain_info.domain, self.global_config
|
40
|
-
self.subdomain_config = self.config[domain_info.trd] unless domain_info.trd.nil?
|
41
|
-
self.subdomain_config = self.config['_general'] if self.subdomain_config.nil?
|
42
|
-
self.subdomain_config = {} if self.subdomain_config.nil?
|
43
|
-
|
44
|
-
self.domain = domain
|
45
|
-
self.partials = partials
|
46
|
-
self.group_name = group_name
|
47
|
-
self.req_host = req_host
|
48
|
-
end
|
49
|
-
|
50
|
-
def get_partial(page)
|
51
|
-
get_specific %w(internal partials), page
|
52
|
-
end
|
53
|
-
|
54
|
-
def get_config_key(key)
|
55
|
-
get_specific %w(config), key
|
56
|
-
end
|
57
|
-
|
58
|
-
def notify_error_async(type, key, data)
|
59
|
-
data = {
|
60
|
-
domain: self.domain,
|
61
|
-
base_domain: self.base_domain,
|
62
|
-
group_name: self.group_name,
|
63
|
-
req_host: self.req_host,
|
64
|
-
type: type,
|
65
|
-
key: key,
|
66
|
-
data: data
|
67
|
-
}
|
68
|
-
ProcessErrorJob.perform_later data
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
|
73
|
-
def get_specific(part, page)
|
74
|
-
subdomain = req_host.gsub(".#{domain}", '')
|
75
|
-
|
76
|
-
# subdomain specific layouts
|
77
|
-
result = retrieve_hash_path global_config, ['domains', domain, subdomain] + part + [page]
|
78
|
-
return result unless result.nil?
|
79
|
-
|
80
|
-
# domain specific layouts
|
81
|
-
result = retrieve_hash_path global_config, ['domains', domain, '_general'] + part + [page]
|
82
|
-
return result unless result.nil?
|
83
|
-
|
84
|
-
# general layouts
|
85
|
-
result = retrieve_hash_path global_config, %w(domains _general _general) + part + [page]
|
86
|
-
return result unless result.nil?
|
87
|
-
|
88
|
-
nil
|
89
|
-
end
|
90
|
-
|
91
|
-
def retrieve_hash_path(hash, path)
|
92
|
-
key = path.shift
|
93
|
-
|
94
|
-
return nil until hash.has_key? key
|
95
|
-
return hash[key] if path.empty?
|
96
|
-
retrieve_hash_path hash[key], path
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
class Config
|
101
|
-
def initialize(variables)
|
102
|
-
@variables = variables
|
103
|
-
end
|
104
|
-
|
105
|
-
def get(key)
|
106
|
-
val = @variables.get_config_key(key)
|
107
|
-
return val unless val.nil?
|
108
|
-
"--- Config Key Not found: #{key} ---"
|
109
|
-
|
110
|
-
@variables.notify_error_async :config, 'Key not found', key
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
class Page
|
115
|
-
def initialize(variables)
|
116
|
-
@variables = variables
|
117
|
-
end
|
118
|
-
|
119
|
-
def get(page)
|
120
|
-
if not @variables.partials[page].nil?
|
121
|
-
"<!-- Page: #{page} -->\n<esi:include src=\"#{@variables.partials[page]}\"/>\n<!-- End Page: #{page} -->"
|
122
|
-
else
|
123
|
-
partial = @variables.get_partial(page)
|
124
|
-
|
125
|
-
if partial.nil?
|
126
|
-
#"<!-- Page: #{page} -->\n<esi:include src=\"http://internal.core/template/partial/#{page}?domain=#{@variables.domain}&group_name=#{@variables.group_name}\"/>\n<!-- End Page: #{page} -->"
|
127
|
-
"\n\n\n<pre>UNHANDLED PAGE: #{page} !!!!!!!!!!!!!!!!!!!!</pre>\n\n\n"
|
128
|
-
else
|
129
|
-
"<!-- Page: #{page} -->\n<esi:include src=\"http://internal.core/template/partial/#{page}?domain=#{@variables.domain}&group_name=#{@variables.group_name}&plugin_url=#{partial['plugin_url']}&req_host=#{@variables.req_host}\"/>\n<!-- End Page: #{page} -->"
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
class Asset
|
136
|
-
def initialize(variables)
|
137
|
-
@variables = variables
|
138
|
-
end
|
139
|
-
|
140
|
-
def get(asset)
|
141
|
-
asset_url = get_asset_url(@variables.domain)
|
142
|
-
asset_url = "//#{asset_url}" unless asset_url.include? '//'
|
143
|
-
"#{asset_url}/#{asset}"
|
144
|
-
end
|
145
|
-
|
146
|
-
private
|
147
|
-
|
148
|
-
def get_asset_url(domain)
|
149
|
-
return @variables.subdomain_config['asset_url'] unless @variables.subdomain_config['asset_url'].nil?
|
150
|
-
domain
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
data/spec/lib/odania/erb_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
describe Odania::Erb do
|
2
|
-
context 'render simple template' do
|
3
|
-
let(:subject) {
|
4
|
-
Odania::Erb.new('This is a very simple template', 'example.com', {}, 'odania-test', 'test.odania.com')
|
5
|
-
}
|
6
|
-
|
7
|
-
let(:global_cfg) {
|
8
|
-
JSON.parse File.read("#{BASE_DIR}/spec/fixtures/global_config.json")
|
9
|
-
}
|
10
|
-
|
11
|
-
it 'renders simple template' do
|
12
|
-
$consul_mock.config.set('global_plugins_config', global_cfg)
|
13
|
-
expect(subject.render).to eq('This is a very simple template')
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|