odania 0.0.16 → 0.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +63 -21
- data/Guardfile +31 -0
- data/Rakefile +1 -0
- data/config/varnish_config.json +4 -2
- data/lib/odania/{plugin_config/models → config}/backend.rb +1 -1
- data/lib/odania/{plugin_config/models → config}/backend_group.rb +7 -2
- data/lib/odania/config/domain.rb +55 -0
- data/lib/odania/config/duplicates.rb +28 -0
- data/lib/odania/config/global_config.rb +154 -0
- data/lib/odania/config/internal.rb +48 -0
- data/lib/odania/config/layout.rb +35 -0
- data/lib/odania/config/page.rb +28 -0
- data/lib/odania/config/plugin_config.rb +51 -0
- data/lib/odania/config/style.rb +60 -0
- data/lib/odania/config/sub_domain.rb +125 -0
- data/lib/odania/config.rb +16 -0
- data/lib/odania/consul.rb +6 -2
- data/lib/odania/erb.rb +154 -0
- data/lib/odania/plugin.rb +12 -5
- data/lib/odania/plugin_config/{plugin_config.rb → base.rb} +26 -31
- data/lib/odania/varnish/generators/generate_backend_vcl.rb +12 -0
- data/lib/odania/varnish/generators/generate_site_vcl.rb +16 -0
- data/lib/odania/varnish/generators/generate_sites_vcl.rb +0 -4
- data/lib/odania/varnish.rb +11 -12
- data/lib/odania/version.rb +1 -1
- data/lib/odania.rb +7 -1
- data/odania.gemspec +3 -0
- data/spec/fixtures/global_config.json +142 -0
- data/spec/fixtures/plugin_config_1.json +93 -0
- data/spec/lib/odania/config/global_config_spec.rb +67 -0
- data/spec/lib/odania/config/plugin_config_spec.rb +28 -0
- data/spec/lib/odania/erb_spec.rb +16 -0
- data/spec/lib/odania/plugin_spec.rb +25 -0
- data/spec/lib/odania/varnish_spec.rb +37 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/consul_mock.rb +116 -0
- data/tasks/odania.rake +1 -5
- data/templates/varnish/backend.vcl.erb +7 -1
- data/templates/varnish/catch_all.vcl.erb +1 -0
- data/templates/varnish/default.vcl.erb +1 -0
- data/templates/varnish/general.vcl.erb +29 -13
- data/templates/varnish/general_site.vcl.erb +33 -0
- data/templates/varnish/redirects.vcl.erb +1 -0
- data/templates/varnish/site.vcl.erb +18 -8
- data/templates/varnish/sites.vcl.erb +1 -1
- data/templates/varnish/websocker.vcl.erb +1 -0
- metadata +79 -19
- data/lib/odania/plugin_config/models/domain.rb +0 -38
- data/lib/odania/plugin_config/models/layout.rb +0 -31
- data/lib/odania/plugin_config/models/page.rb +0 -23
- data/lib/odania/plugin_config/models/redirect.rb +0 -20
- data/lib/odania/plugin_config/models/sub_domain.rb +0 -99
- data/lib/odania/template/asset.rb +0 -15
- data/lib/odania/template/config.rb +0 -15
- data/lib/odania/template/page.rb +0 -16
- data/lib/odania/template.rb +0 -8
- data/lib/odania/varnish/generators/generate_site_assets_vcl.rb +0 -27
- data/templates/varnish/site_assets.vcl.erb +0 -24
- /data/spec/{odania → lib}/odania_spec.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a5a520ac12de40571852067855b0471297d244c
|
4
|
+
data.tar.gz: 69685e1f55249f36906b3184e30336770c2f04c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ca2320f73fedc397f662e0ce36955493af048d222af10d6824a17ec7e12e09997fedb525db3a116bf91caa70f0cebda3833062f0e294e6321e048ef20c17742
|
7
|
+
data.tar.gz: e4fdeee4b1352e3ed427b5a089b7d02e3a37edf8715d4fa123f45f37e20b11ffab7a487d6ecc639da22cc49632cef2993f095637fb585a522970bdded34eac1c
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
odania (0.0.
|
4
|
+
odania (0.0.17)
|
5
|
+
deep_merge
|
5
6
|
diplomat
|
6
7
|
erubis
|
7
8
|
public_suffix
|
@@ -10,42 +11,81 @@ GEM
|
|
10
11
|
remote: https://rubygems.org/
|
11
12
|
specs:
|
12
13
|
builder (3.2.2)
|
13
|
-
|
14
|
+
coderay (1.1.0)
|
15
|
+
cucumber (2.3.2)
|
14
16
|
builder (>= 2.1.2)
|
15
|
-
cucumber-core (~> 1.
|
17
|
+
cucumber-core (~> 1.4.0)
|
18
|
+
cucumber-wire (~> 0.0.1)
|
16
19
|
diff-lcs (>= 1.1.3)
|
17
|
-
|
20
|
+
gherkin (~> 3.2.0)
|
18
21
|
multi_json (>= 1.7.5, < 2.0)
|
19
22
|
multi_test (>= 0.1.2)
|
20
|
-
cucumber-core (1.
|
21
|
-
|
23
|
+
cucumber-core (1.4.0)
|
24
|
+
gherkin (~> 3.2.0)
|
25
|
+
cucumber-wire (0.0.1)
|
26
|
+
deep_merge (1.0.1)
|
22
27
|
diff-lcs (1.2.5)
|
23
|
-
diplomat (0.
|
28
|
+
diplomat (0.15.0)
|
24
29
|
faraday (~> 0.9)
|
25
30
|
json (~> 1.8)
|
26
31
|
erubis (2.7.0)
|
27
32
|
faraday (0.9.2)
|
28
33
|
multipart-post (>= 1.2, < 3)
|
29
|
-
|
34
|
+
ffi (1.9.10)
|
35
|
+
formatador (0.2.5)
|
36
|
+
gherkin (3.2.0)
|
37
|
+
guard (2.13.0)
|
38
|
+
formatador (>= 0.2.4)
|
39
|
+
listen (>= 2.7, <= 4.0)
|
40
|
+
lumberjack (~> 1.0)
|
41
|
+
nenv (~> 0.1)
|
42
|
+
notiffany (~> 0.0)
|
43
|
+
pry (>= 0.9.12)
|
44
|
+
shellany (~> 0.0)
|
45
|
+
thor (>= 0.18.1)
|
46
|
+
guard-compat (1.2.1)
|
47
|
+
guard-rspec (4.6.4)
|
48
|
+
guard (~> 2.1)
|
49
|
+
guard-compat (~> 1.1)
|
50
|
+
rspec (>= 2.99.0, < 4.0)
|
30
51
|
json (1.8.3)
|
52
|
+
listen (3.0.6)
|
53
|
+
rb-fsevent (>= 0.9.3)
|
54
|
+
rb-inotify (>= 0.9.7)
|
55
|
+
lumberjack (1.0.10)
|
56
|
+
method_source (0.8.2)
|
31
57
|
multi_json (1.11.2)
|
32
58
|
multi_test (0.1.2)
|
33
59
|
multipart-post (2.0.0)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
60
|
+
nenv (0.3.0)
|
61
|
+
notiffany (0.0.8)
|
62
|
+
nenv (~> 0.1)
|
63
|
+
shellany (~> 0.0)
|
64
|
+
pry (0.10.3)
|
65
|
+
coderay (~> 1.1.0)
|
66
|
+
method_source (~> 0.8.1)
|
67
|
+
slop (~> 3.4)
|
68
|
+
public_suffix (1.5.3)
|
69
|
+
rake (10.5.0)
|
70
|
+
rb-fsevent (0.9.7)
|
71
|
+
rb-inotify (0.9.7)
|
72
|
+
ffi (>= 0.5.0)
|
73
|
+
rspec (3.4.0)
|
74
|
+
rspec-core (~> 3.4.0)
|
75
|
+
rspec-expectations (~> 3.4.0)
|
76
|
+
rspec-mocks (~> 3.4.0)
|
77
|
+
rspec-core (3.4.3)
|
78
|
+
rspec-support (~> 3.4.0)
|
79
|
+
rspec-expectations (3.4.0)
|
43
80
|
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
-
rspec-support (~> 3.
|
45
|
-
rspec-mocks (3.
|
81
|
+
rspec-support (~> 3.4.0)
|
82
|
+
rspec-mocks (3.4.1)
|
46
83
|
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
-
rspec-support (~> 3.
|
48
|
-
rspec-support (3.
|
84
|
+
rspec-support (~> 3.4.0)
|
85
|
+
rspec-support (3.4.1)
|
86
|
+
shellany (0.0.1)
|
87
|
+
slop (3.6.0)
|
88
|
+
thor (0.19.1)
|
49
89
|
|
50
90
|
PLATFORMS
|
51
91
|
ruby
|
@@ -53,6 +93,8 @@ PLATFORMS
|
|
53
93
|
DEPENDENCIES
|
54
94
|
bundler (~> 1.5)
|
55
95
|
cucumber
|
96
|
+
guard
|
97
|
+
guard-rspec
|
56
98
|
odania!
|
57
99
|
rake
|
58
100
|
rspec
|
data/Guardfile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec features)
|
6
|
+
|
7
|
+
## Uncomment to clear the screen before every task
|
8
|
+
# clearing :on
|
9
|
+
|
10
|
+
## Guard internally checks for changes in the Guardfile and exits.
|
11
|
+
## If you want Guard to automatically start up again, run guard in a
|
12
|
+
## shell loop, e.g.:
|
13
|
+
##
|
14
|
+
## $ while bundle exec guard; do echo "Restarting Guard..."; done
|
15
|
+
##
|
16
|
+
## Note: if you are using the `directories` clause above and you are not
|
17
|
+
## watching the project directory ('.'), then you will want to move
|
18
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
19
|
+
#
|
20
|
+
# $ mkdir config
|
21
|
+
# $ mv Guardfile config/
|
22
|
+
# $ ln -s config/Guardfile .
|
23
|
+
#
|
24
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
25
|
+
|
26
|
+
guard :rspec, cmd: 'rspec' do
|
27
|
+
watch(%r{^spec/.+_spec\.rb$})
|
28
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
29
|
+
watch(%r{^lib/odania/config/(.+)\.rb$}) { |m| 'spec/lib/odania/config/plugin_config_spec.rb' }
|
30
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
31
|
+
end
|
data/Rakefile
CHANGED
data/config/varnish_config.json
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module Odania
|
2
|
-
module
|
2
|
+
module Config
|
3
3
|
class BackendGroup
|
4
|
-
attr_accessor :name, :backends
|
4
|
+
attr_accessor :name, :backends, :core_backend
|
5
5
|
|
6
6
|
def initialize(name, backends=[])
|
7
7
|
self.name = name
|
8
|
+
self.core_backend = false
|
8
9
|
self.backends = backends
|
9
10
|
end
|
10
11
|
|
@@ -12,6 +13,10 @@ module Odania
|
|
12
13
|
self.backends << backend
|
13
14
|
end
|
14
15
|
|
16
|
+
def check_core_backend(tags)
|
17
|
+
self.core_backend = tags.include?('core-backend')
|
18
|
+
end
|
19
|
+
|
15
20
|
def dump
|
16
21
|
backend_data = []
|
17
22
|
backends.each do |backend|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Odania
|
2
|
+
module Config
|
3
|
+
class Domain
|
4
|
+
attr_accessor :name, :subdomains, :config, :redirects
|
5
|
+
|
6
|
+
def initialize(name)
|
7
|
+
self.name = name
|
8
|
+
reset
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_subdomain(subdomain_name)
|
12
|
+
self.subdomains[subdomain_name]
|
13
|
+
end
|
14
|
+
|
15
|
+
def subdomain(name)
|
16
|
+
self.subdomains[name]
|
17
|
+
end
|
18
|
+
|
19
|
+
def dump
|
20
|
+
subdomain_data = {}
|
21
|
+
subdomains.each_pair do |name, subdomain|
|
22
|
+
subdomain_data[name] = subdomain.dump
|
23
|
+
end
|
24
|
+
subdomain_data
|
25
|
+
end
|
26
|
+
|
27
|
+
def load(data)
|
28
|
+
self.name = data['name'] unless data['name'].nil?
|
29
|
+
self.add(data)
|
30
|
+
end
|
31
|
+
|
32
|
+
def add(sub_domain_data, group_name=nil)
|
33
|
+
duplicates = Hash.new { |hash, key| hash[key] = [] }
|
34
|
+
unless sub_domain_data.nil?
|
35
|
+
sub_domain_data.each_pair do |name, data|
|
36
|
+
subdomain_duplicates = self.subdomains[name].add(data, group_name)
|
37
|
+
duplicates.deep_merge! subdomain_duplicates
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
duplicates
|
42
|
+
end
|
43
|
+
|
44
|
+
def [](key)
|
45
|
+
self.subdomains[key]
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def reset
|
51
|
+
self.subdomains = Hash.new { |hash, key| hash[key] = SubDomain.new(key) }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Odania
|
2
|
+
module Config
|
3
|
+
class Duplicates
|
4
|
+
def initialize
|
5
|
+
@duplicates = Hash.new { |hash, key| hash[key] = Duplicate.new }
|
6
|
+
end
|
7
|
+
|
8
|
+
def add(type, key, group_name)
|
9
|
+
@duplicates[type].add(key, group_name)
|
10
|
+
end
|
11
|
+
|
12
|
+
def duplicates
|
13
|
+
@duplicates
|
14
|
+
end
|
15
|
+
|
16
|
+
class Duplicate
|
17
|
+
def initialize
|
18
|
+
@duplicate = {}
|
19
|
+
end
|
20
|
+
|
21
|
+
def add(key, group_name)
|
22
|
+
@duplicate[key] = [] if @duplicate[key].nil?
|
23
|
+
@duplicate[key] << group_name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
module Odania
|
2
|
+
module Config
|
3
|
+
class GlobalConfig < PluginConfig
|
4
|
+
# Load the global configuration
|
5
|
+
def load_global_config(config)
|
6
|
+
throw 'Invalid global config!' if config.nil?
|
7
|
+
|
8
|
+
reset
|
9
|
+
@default_backend_groups = config['default_backend_groups'] unless config['default_backend_groups'].nil?
|
10
|
+
|
11
|
+
unless config['domains'].nil?
|
12
|
+
config['domains'].each_pair do |name, data|
|
13
|
+
@domains[name].load(data)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# load backends from consul
|
18
|
+
Odania.plugin.get_all.each_pair do |name, instances|
|
19
|
+
instances.each do |instance|
|
20
|
+
add_backend(instance)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
#puts config.inspect
|
25
|
+
#puts @backend_groups.inspect
|
26
|
+
#puts @default_backend_groups.inspect
|
27
|
+
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def load_from_consul
|
32
|
+
Odania.plugin.get_all.each_pair do |plugin_name, instances|
|
33
|
+
puts "PLUGIN NAME #{plugin_name} - #{instances.count}" if $debug
|
34
|
+
instances.each do |instance|
|
35
|
+
add_backend(instance)
|
36
|
+
end
|
37
|
+
|
38
|
+
config = Odania.plugin.config_for plugin_name
|
39
|
+
next if config.nil?
|
40
|
+
|
41
|
+
begin
|
42
|
+
puts JSON.pretty_generate config if $debug
|
43
|
+
self.add_plugin_config(config)
|
44
|
+
rescue => e
|
45
|
+
puts 'Error loading configuration'
|
46
|
+
puts 'Config start ' + '+' * 50
|
47
|
+
puts JSON.pretty_generate config
|
48
|
+
puts 'Config end ' + '+' * 50
|
49
|
+
puts 'Error start ' + '+' * 50
|
50
|
+
puts e.inspect
|
51
|
+
puts 'Error end ' + '+' * 50
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def generate_global_config
|
57
|
+
puts 'Loading plugin configs from consul'
|
58
|
+
load_from_consul
|
59
|
+
|
60
|
+
puts 'Generating global config'
|
61
|
+
config = self.dump
|
62
|
+
puts JSON.pretty_generate config if $debug
|
63
|
+
Odania.plugin.set_global_config config
|
64
|
+
config
|
65
|
+
end
|
66
|
+
|
67
|
+
# Add the configuration from the plugin
|
68
|
+
def add_plugin_config(plugin_cfg)
|
69
|
+
config_section = plugin_cfg['config']
|
70
|
+
group_name = plugin_cfg['plugin-config']['name']
|
71
|
+
|
72
|
+
if $debug
|
73
|
+
puts 'Loading configuration'
|
74
|
+
puts JSON.pretty_generate plugin_cfg
|
75
|
+
end
|
76
|
+
|
77
|
+
@plugin_config[group_name] = plugin_cfg['plugin-config']
|
78
|
+
@default_subdomains.deep_merge(plugin_cfg['default_subdomains']) unless plugin_cfg['default_subdomains'].nil?
|
79
|
+
|
80
|
+
# Add this service as a default backend if specified
|
81
|
+
@default_backend_groups << group_name if config_section['default']
|
82
|
+
|
83
|
+
# Add config
|
84
|
+
config_section.each_pair do |key, val|
|
85
|
+
unless @config[key].nil?
|
86
|
+
@duplicates.add :config, {key => 'already defined'}, group_name
|
87
|
+
end
|
88
|
+
end
|
89
|
+
@config.deep_merge! config_section
|
90
|
+
|
91
|
+
# Add Domain Information
|
92
|
+
unless plugin_cfg['domains'].nil?
|
93
|
+
plugin_cfg['domains'].each_pair do |name, data|
|
94
|
+
@domains[name].add(data, group_name).each do |duplicate_key, duplicate_data|
|
95
|
+
@duplicates.add duplicate_key, duplicate_data, group_name
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
true
|
101
|
+
end
|
102
|
+
|
103
|
+
def add_backend(backend_config)
|
104
|
+
return if backend_config.ServiceAddress.nil? or backend_config.ServiceAddress.empty?
|
105
|
+
|
106
|
+
backend = Backend.new(backend_config.ServiceName, backend_config.ServiceID, backend_config.ServiceAddress, backend_config.ServicePort)
|
107
|
+
@backend_groups[backend_config.ServiceName].add_backend backend
|
108
|
+
@backend_groups[backend_config.ServiceName].check_core_backend backend_config.ServiceTags
|
109
|
+
end
|
110
|
+
|
111
|
+
def reset
|
112
|
+
super
|
113
|
+
|
114
|
+
@default_backend_groups = []
|
115
|
+
@duplicates = Duplicates.new
|
116
|
+
@backend_groups = Hash.new { |hash, key| hash[key] = BackendGroup.new(key) }
|
117
|
+
@default_subdomains = {}
|
118
|
+
|
119
|
+
@domains['_general'].add_subdomain('_general')
|
120
|
+
end
|
121
|
+
|
122
|
+
def duplicates
|
123
|
+
@duplicates.duplicates
|
124
|
+
end
|
125
|
+
|
126
|
+
def backend_groups
|
127
|
+
@backend_groups
|
128
|
+
end
|
129
|
+
|
130
|
+
def default_backend
|
131
|
+
group_name = @default_backend_groups.first
|
132
|
+
group_name = @backend_groups.keys.first if group_name.nil?
|
133
|
+
raise 'No backend found' if @backend_groups.empty?
|
134
|
+
@backend_groups[group_name].backends.first
|
135
|
+
end
|
136
|
+
|
137
|
+
def default_subdomains
|
138
|
+
@default_subdomains
|
139
|
+
end
|
140
|
+
|
141
|
+
def default_redirects
|
142
|
+
general = @domains['_general'].subdomain('_general')
|
143
|
+
return {} if general.nil?
|
144
|
+
general.redirects
|
145
|
+
end
|
146
|
+
|
147
|
+
def dump
|
148
|
+
cfg = super
|
149
|
+
cfg['default_backend_groups'] = @default_backend_groups
|
150
|
+
cfg
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Odania
|
2
|
+
module Config
|
3
|
+
class Internal
|
4
|
+
attr_accessor :partials, :layouts
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
reset
|
8
|
+
end
|
9
|
+
|
10
|
+
def load(data)
|
11
|
+
reset
|
12
|
+
unless data['partials'].nil?
|
13
|
+
data['partials'].each_pair do |name, data|
|
14
|
+
self.partials[name].load(data)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
unless data['layouts'].nil?
|
19
|
+
data['layouts'].each_pair do |name, data|
|
20
|
+
self.layouts[name].load(data)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def dump
|
26
|
+
partial_data = {}
|
27
|
+
partials.each_pair do |web_url, page|
|
28
|
+
partial_data[web_url] = page.dump
|
29
|
+
end
|
30
|
+
|
31
|
+
layout_data = {}
|
32
|
+
layouts.each_pair do |web_url, page|
|
33
|
+
layout_data[web_url] = page.dump
|
34
|
+
end
|
35
|
+
|
36
|
+
{
|
37
|
+
'layouts' => layout_data,
|
38
|
+
'partials' => partial_data
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def reset
|
43
|
+
self.layouts = Hash.new { |hash, key| hash[key] = Layout.new }
|
44
|
+
self.partials = Hash.new { |hash, key| hash[key] = Page.new }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Odania
|
2
|
+
module Config
|
3
|
+
class Layout
|
4
|
+
attr_accessor :styles
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
reset
|
8
|
+
end
|
9
|
+
|
10
|
+
def dump
|
11
|
+
style_data = {}
|
12
|
+
styles.each_pair do |name, style|
|
13
|
+
style_data[name] = style.dump
|
14
|
+
end
|
15
|
+
|
16
|
+
result = {}
|
17
|
+
result['styles'] =style_data unless style_data.nil?
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
def load(data)
|
22
|
+
reset
|
23
|
+
unless data['styles'].nil?
|
24
|
+
data['styles'].each_pair do |key, val|
|
25
|
+
self.styles[key].load(val)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def reset
|
31
|
+
self.styles = Hash.new { |hash, key| hash[key] = Style.new(key) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Odania
|
2
|
+
module Config
|
3
|
+
class Page
|
4
|
+
attr_accessor :group_name, :plugin_url, :cacheable, :expires
|
5
|
+
|
6
|
+
def dump
|
7
|
+
result = {}
|
8
|
+
result['group_name'] = self.group_name unless self.group_name.nil?
|
9
|
+
result['plugin_url'] = self.plugin_url unless self.plugin_url.nil?
|
10
|
+
result['cacheable'] = self.cacheable unless self.cacheable.nil?
|
11
|
+
result['expires'] = self.expires unless self.expires.nil?
|
12
|
+
result
|
13
|
+
end
|
14
|
+
|
15
|
+
def load(data, group_name=nil)
|
16
|
+
self.group_name = data['group_name'] unless data['group_name'].nil?
|
17
|
+
self.group_name = group_name unless group_name.nil?
|
18
|
+
self.plugin_url = data['plugin_url']
|
19
|
+
self.cacheable = data['cacheable'] unless data['cacheable'].nil?
|
20
|
+
self.expires = data['expires'] unless data['expires'].nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
def director
|
24
|
+
"#{Odania.varnish_sanitize(self.group_name)}_director"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Odania
|
2
|
+
module Config
|
3
|
+
class PluginConfig
|
4
|
+
attr_accessor :domains, :config, :default_subdomains, :plugin_config
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
reset
|
8
|
+
end
|
9
|
+
|
10
|
+
# Load the global configuration
|
11
|
+
def load(data)
|
12
|
+
reset
|
13
|
+
@config = data['config'] unless data['config'].nil?
|
14
|
+
@plugin_config = data['plugin-config'] unless data['plugin-config'].nil?
|
15
|
+
@default_subdomains = data['default_subdomains'] unless data['default_subdomains'].nil?
|
16
|
+
unless data['domains'].nil?
|
17
|
+
data['domains'].each_pair do |name, data|
|
18
|
+
@domains[name].load(data)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def [](key)
|
26
|
+
@domains[key]
|
27
|
+
end
|
28
|
+
|
29
|
+
# Reset configuration
|
30
|
+
def reset
|
31
|
+
@config = {}
|
32
|
+
@plugin_config = {}
|
33
|
+
@domains = Hash.new { |hash, key| hash[key] = Domain.new(key) }
|
34
|
+
end
|
35
|
+
|
36
|
+
def dump
|
37
|
+
domain_data = {}
|
38
|
+
@domains.each_pair do |name, domain|
|
39
|
+
domain_data[name] = domain.dump
|
40
|
+
end
|
41
|
+
|
42
|
+
{
|
43
|
+
'plugin-config' => plugin_config,
|
44
|
+
'config' => config,
|
45
|
+
'default_subdomains' => @default_subdomains,
|
46
|
+
'domains' => domain_data
|
47
|
+
}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Odania
|
2
|
+
module Config
|
3
|
+
class Style
|
4
|
+
attr_accessor :name, :entry_point, :direct, :dynamic
|
5
|
+
|
6
|
+
def initialize(name)
|
7
|
+
self.name = name
|
8
|
+
reset
|
9
|
+
end
|
10
|
+
|
11
|
+
def plugins(type, key)
|
12
|
+
@plugins[type][key]
|
13
|
+
end
|
14
|
+
|
15
|
+
def dump
|
16
|
+
direct_data = {}
|
17
|
+
direct.each_pair do |web_url, page|
|
18
|
+
direct_data[web_url] = page.dump
|
19
|
+
end
|
20
|
+
|
21
|
+
dynamic_data = {}
|
22
|
+
dynamic.each_pair do |web_url, page|
|
23
|
+
dynamic_data[web_url] = page.dump
|
24
|
+
end
|
25
|
+
|
26
|
+
{
|
27
|
+
'entry_point' => entry_point,
|
28
|
+
'direct' => direct_data,
|
29
|
+
'dynamic' => dynamic_data
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def load(data)
|
34
|
+
reset
|
35
|
+
self.entry_point = data['entry_point'] unless data['entry_point'].nil?
|
36
|
+
|
37
|
+
unless data['direct'].nil?
|
38
|
+
data['direct'].each_pair do |name, data|
|
39
|
+
self.direct[name].load(data)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
unless data['dynamic'].nil?
|
44
|
+
data['dynamic'].each_pair do |name, data|
|
45
|
+
self.dynamic[name].load(data)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def reset
|
53
|
+
self.entry_point = nil
|
54
|
+
self.direct = Hash.new { |hash, key| hash[key] = Page.new }
|
55
|
+
self.dynamic = Hash.new { |hash, key| hash[key] = Page.new }
|
56
|
+
@plugins = {:direct => Hash.new { |hash, key| hash[key] = [] }, :dynamic => Hash.new { |hash, key| hash[key] = [] }}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|