odania 0.0.36 → 0.0.37

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae87f0f013140efcdf8328a06001147992f74057
4
- data.tar.gz: 50e7e1e500ad4c62e4d15ebcab5fd6d6394ffcad
3
+ metadata.gz: 34635dadd6875c21d30dc12b8611e92cdcfc69dc
4
+ data.tar.gz: 985d41d81e514e86895acc024692c987611d0264
5
5
  SHA512:
6
- metadata.gz: eb9bbcf5a1b578af277a70b651bf6dadbe7fa199ea31083689e351c7ff4876ea781b44f5f03b36c06f0d6d5900a86967e06484589c8dfbbd99a55368aef90393
7
- data.tar.gz: 97e32bec1b907584c1dab1d9c4948d5900e9334a5e967eabc7e7e0059f7a1ddb59339053ddb444efe13ccb2296ffe0e5015308fdd357454517f7f0e0adfde2b7
6
+ metadata.gz: de518f1f33f55d597c05c53d4b37418afe543354e16be1b4b9c88a304ed05b53768002741dd577e0d134c60ea07b8af94e58c00ecb2d0421a2633c355856f4ed
7
+ data.tar.gz: c4be69142d66458b3e8b5fbb19455a1a1fb85f82d3a2ff3893f0923ea513f654723bae5048de3deec043c39e3c10021bddc7f13e8a3917782deacb343e750e55
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- odania (0.0.36)
4
+ odania (0.0.37)
5
5
  deep_merge
6
6
  diplomat
7
7
  erubis
data/lib/odania/config.rb CHANGED
@@ -9,6 +9,7 @@ require_relative 'config/sub_domain'
9
9
  require_relative 'config/style'
10
10
  require_relative 'config/backend'
11
11
  require_relative 'config/backend_group'
12
+ require_relative 'config/subdomain_config'
12
13
 
13
14
  module Odania
14
15
  module Config
@@ -9,6 +9,7 @@ module Odania
9
9
  @default_backend_groups = config['default_backend_groups'] unless config['default_backend_groups'].nil?
10
10
  @valid_domains = config['valid_domains'] unless config['valid_domains'].nil?
11
11
  @default_domains = config['default_domains'] unless config['default_domains'].nil?
12
+ @partials = config['partials'] unless config['partials'].nil?
12
13
 
13
14
  unless config['domains'].nil?
14
15
  config['domains'].each_pair do |name, data|
@@ -68,9 +69,24 @@ module Odania
68
69
  config = self.dump
69
70
  puts JSON.pretty_generate config if $debug
70
71
  Odania.plugin.set_global_config config
72
+
73
+ generate_subdomain_configs config
74
+
71
75
  config
72
76
  end
73
77
 
78
+ # Generate a config per subdomain
79
+ def generate_subdomain_configs(config)
80
+ $logger.info 'Generating subdomain configs'
81
+ @valid_domains.each do |domain, subdomains|
82
+ subdomains.each do |subdomain|
83
+ $logger.info "Generating Subdomain Config for Domain: #{domain} Subdomain: #{subdomain}"
84
+ subdomain_config = SubdomainConfig.new(config, domain, subdomain).generate
85
+ Odania.plugin.set_subdomain_config "#{subdomain}.#{domain}", subdomain_config
86
+ end
87
+ end
88
+ end
89
+
74
90
  # Add the configuration from the plugin
75
91
  def add_plugin_config(plugin_cfg)
76
92
  config_section = plugin_cfg['config']
@@ -84,6 +100,7 @@ module Odania
84
100
  @plugin_config[group_name] = plugin_cfg['plugin-config']
85
101
  @valid_domains.deep_merge!(plugin_cfg['valid_domains']) unless plugin_cfg['valid_domains'].nil?
86
102
  @default_domains.deep_merge!(plugin_cfg['default_domains']) unless plugin_cfg['default_domains'].nil?
103
+ @partials.deep_merge!(plugin_cfg['partials']) unless plugin_cfg['partials'].nil?
87
104
 
88
105
  # Add this service as a default backend if specified
89
106
  @default_backend_groups << group_name if plugin_cfg['plugin-config']['default']
@@ -126,6 +143,7 @@ module Odania
126
143
  @backend_groups = Hash.new { |hash, key| hash[key] = BackendGroup.new(key) }
127
144
  @valid_domains = {}
128
145
  @default_domains = {}
146
+ @partials = {}
129
147
 
130
148
  @domains['_general'].add_subdomain('_general')
131
149
  end
@@ -153,6 +171,10 @@ module Odania
153
171
  @default_domains
154
172
  end
155
173
 
174
+ def partials
175
+ @partials
176
+ end
177
+
156
178
  def default_redirects
157
179
  general = @domains['_general'].subdomain('_general')
158
180
  return {} if general.nil?
@@ -164,6 +186,7 @@ module Odania
164
186
  cfg['default_backend_groups'] = @default_backend_groups
165
187
  cfg['default_domains'] = @default_domains
166
188
  cfg['valid_domains'] = @valid_domains
189
+ cfg['partials'] = @partials
167
190
  cfg
168
191
  end
169
192
  end
@@ -1,7 +1,7 @@
1
1
  module Odania
2
2
  module Config
3
3
  class PageBase
4
- attr_accessor :assets, :partials
4
+ attr_accessor :assets
5
5
 
6
6
  def initialize
7
7
  reset
@@ -15,13 +15,6 @@ module Odania
15
15
  self.assets[name].load(asset_data, group_name)
16
16
  end
17
17
  end
18
-
19
- unless data['partials'].nil?
20
- data['partials'].each_pair do |name, partial_data|
21
- duplicates[:partials] << name if self.partials.key? name
22
- self.partials[name].load(partial_data, group_name)
23
- end
24
- end
25
18
  duplicates
26
19
  end
27
20
 
@@ -31,15 +24,12 @@ module Odania
31
24
 
32
25
  def reset
33
26
  self.assets = Hash.new { |hash, key| hash[key] = Page.new }
34
- self.partials = Hash.new { |hash, key| hash[key] = Page.new }
35
27
 
36
- @plugins = {:partials => Hash.new { |hash, key| hash[key] = [] }, :assets => Hash.new { |hash, key| hash[key] = [] }}
28
+ @plugins = {:assets => Hash.new { |hash, key| hash[key] = [] }}
37
29
  end
38
30
 
39
31
  def [](type)
40
- type = type.to_sym
41
- return self.assets if :assets.eql? type
42
- self.partials
32
+ self.assets
43
33
  end
44
34
 
45
35
  def dump
@@ -48,14 +38,8 @@ module Odania
48
38
  asset_data[web_url] = page.dump
49
39
  end
50
40
 
51
- partial_data = {}
52
- partials.each_pair do |web_url, page|
53
- partial_data[web_url] = page.dump
54
- end
55
-
56
41
  {
57
- 'assets' => asset_data,
58
- 'partials' => partial_data
42
+ 'assets' => asset_data
59
43
  }
60
44
  end
61
45
  end
@@ -1,7 +1,7 @@
1
1
  module Odania
2
2
  module Config
3
3
  class PluginConfig
4
- attr_accessor :domains, :config, :valid_domains, :default_domains, :plugin_config
4
+ attr_accessor :domains, :config, :valid_domains, :default_domains, :plugin_config, :partials
5
5
 
6
6
  def initialize
7
7
  reset
@@ -14,6 +14,7 @@ module Odania
14
14
  @plugin_config = data['plugin-config'] unless data['plugin-config'].nil?
15
15
  @valid_domains = data['valid_domains'] unless data['valid_domains'].nil?
16
16
  @default_domains = data['default_domains'] unless data['default_domains'].nil?
17
+ @partials = data['partials'] unless data['partials'].nil?
17
18
  unless data['domains'].nil?
18
19
  data['domains'].each_pair do |name, domain_data|
19
20
  @domains[name].load(domain_data)
@@ -33,6 +34,7 @@ module Odania
33
34
  @plugin_config = {}
34
35
  @default_domains = {}
35
36
  @valid_domains = {}
37
+ @partials = {}
36
38
  @domains = Hash.new { |hash, key| hash[key] = Domain.new(key) }
37
39
  end
38
40
 
@@ -47,6 +49,7 @@ module Odania
47
49
  'config' => config,
48
50
  'default_domains' => @default_domains,
49
51
  'valid_domains' => @valid_domains,
52
+ 'partials' => @partials,
50
53
  'domains' => domain_data
51
54
  }
52
55
  end
@@ -0,0 +1,121 @@
1
+ module Odania
2
+ module Config
3
+ class SubdomainConfig
4
+
5
+ def initialize(global_config, domain, subdomain)
6
+ @global_config = global_config
7
+ @domain = domain
8
+ @subdomain = subdomain
9
+ end
10
+
11
+ def generate
12
+ @layout = get_layout_name
13
+ config = {
14
+ layout: @layout,
15
+ config: generate_merged_config,
16
+ partials: generate_merged_partials
17
+ }
18
+
19
+ layout_config = get_layout_config @layout
20
+ layout_config.delete('assets')
21
+ config[:styles] = layout_config['config']['styles']
22
+
23
+ if $debug
24
+ $logger.debug 'Generated config:'
25
+ $logger.debug JSON.pretty_generate(config)
26
+ end
27
+
28
+ config
29
+ end
30
+
31
+ private
32
+
33
+ def get_layout_name
34
+ # subdomain specific layouts
35
+ result = retrieve_hash_path @global_config, ['domains', @domain, @subdomain, 'config', 'layout']
36
+ return result unless result.nil?
37
+
38
+ # domain specific layouts
39
+ result = retrieve_hash_path @global_config, ['domains', @domain, '_general', 'config', 'layout']
40
+ return result unless result.nil?
41
+
42
+ # general layouts
43
+ result = retrieve_hash_path @global_config, %w(domains _general _general config layout)
44
+ return result unless result.nil?
45
+
46
+ # general layouts
47
+ result = retrieve_hash_path @global_config, %w(config layout)
48
+ return result unless result.nil?
49
+
50
+ 'simple'
51
+ end
52
+
53
+ def get_layout_config(layout)
54
+ # subdomain specific layouts
55
+ result = retrieve_hash_path @global_config, ['domains', @domain, @subdomain, 'layouts', layout]
56
+ return result unless result.nil?
57
+
58
+ # domain specific layouts
59
+ result = retrieve_hash_path @global_config, ['domains', @domain, '_general', 'layouts', layout]
60
+ return result unless result.nil?
61
+
62
+ # general layouts
63
+ result = retrieve_hash_path @global_config, ['domains', '_general', '_general', 'layouts', layout]
64
+ return result unless result.nil?
65
+
66
+ {}
67
+ end
68
+
69
+ def generate_merged_config
70
+ config = retrieve_hash_path @global_config, %w(domains _general _general config)
71
+ config = {} if config.nil?
72
+
73
+ # domain specific layouts
74
+ result = retrieve_hash_path @global_config, ['domains', @domain, '_general', 'config']
75
+ config.deep_merge!(result) unless result.nil?
76
+
77
+ # subdomain specific layouts
78
+ result = retrieve_hash_path @global_config, ['domains', @domain, @subdomain, 'config']
79
+ config.deep_merge!(result) unless result.nil?
80
+
81
+ config
82
+ end
83
+
84
+ def generate_merged_partials
85
+ partials = retrieve_hash_path @global_config, %w(partials _general _general default)
86
+ partials = {} if partials.nil?
87
+
88
+ # general specific layout
89
+ result = retrieve_hash_path @global_config, ['partials', '_general', '_general', 'layouts', @layout]
90
+ partials.deep_merge!(result) unless result.nil?
91
+
92
+ # domain specific
93
+ result = retrieve_hash_path @global_config, ['partials', @domain, '_general', 'default']
94
+ partials.deep_merge!(result) unless result.nil?
95
+
96
+ # domain specific layout
97
+ result = retrieve_hash_path @global_config, ['partials', @domain, '_general', 'layouts', @layout]
98
+ partials.deep_merge!(result) unless result.nil?
99
+
100
+ # subdomain
101
+ result = retrieve_hash_path @global_config, ['partials', @domain, @subdomain, 'default']
102
+ partials.deep_merge!(result) unless result.nil?
103
+
104
+ # subdomain specific layout
105
+ result = retrieve_hash_path @global_config, ['partials', @domain, @subdomain, 'layouts', @layout]
106
+ partials.deep_merge!(result) unless result.nil?
107
+
108
+ partials
109
+ end
110
+
111
+ def retrieve_hash_path(hash, path)
112
+ key = path.shift
113
+
114
+ return nil until hash.has_key? key
115
+ return hash[key] if path.empty?
116
+ retrieve_hash_path hash[key], path
117
+ end
118
+
119
+ end
120
+ end
121
+ end
data/lib/odania/plugin.rb CHANGED
@@ -51,6 +51,14 @@ module Odania
51
51
  @consul.config.get get_global_plugin_config_path
52
52
  end
53
53
 
54
+ def set_subdomain_config(full_domain, config)
55
+ @consul.config.set get_subdomain_config_path(full_domain), config
56
+ end
57
+
58
+ def get_subdomain_config(full_domain)
59
+ @consul.config.get get_subdomain_config_path(full_domain)
60
+ end
61
+
54
62
  def get_domain_config_for(domain, global_config=nil)
55
63
  global_config = get_global_config if global_config.nil?
56
64
 
@@ -64,6 +72,10 @@ module Odania
64
72
 
65
73
  private
66
74
 
75
+ def get_subdomain_config_path(full_domain)
76
+ "subdomain_config/#{full_domain}"
77
+ end
78
+
67
79
  def get_global_plugin_config_path
68
80
  'global_plugins_config'
69
81
  end
@@ -1,3 +1,3 @@
1
1
  module Odania
2
- VERSION = '0.0.36'
2
+ VERSION = '0.0.37'
3
3
  end
@@ -40,15 +40,10 @@
40
40
  "assets": {
41
41
  },
42
42
  "layouts": {
43
- },
44
- "partials": {
45
43
  }
46
44
  }
47
45
  },
48
46
  "example.com": {
49
- "_general": {
50
- "config": {}
51
- },
52
47
  "_general": {
53
48
  "config": {
54
49
  },
@@ -59,8 +54,7 @@
59
54
  }
60
55
  },
61
56
  "assets": {},
62
- "layouts": {},
63
- "partials": {}
57
+ "layouts": {}
64
58
  },
65
59
  "www": {
66
60
  "dynamic": {
@@ -126,22 +120,16 @@
126
120
  }
127
121
  }
128
122
  }
129
- },
130
- "partials": {
131
- "footer": {
132
- "name": "footer",
133
- "group_name": "static-content",
134
- "plugin_url": "partials/footer.html",
135
- "cacheable": true,
136
- "expires": 60
137
- },
138
- "tracking": {
139
- "name": "tracking",
140
- "group_name": "static-content",
141
- "plugin_url": "partials/tracking.html"
142
- }
143
123
  }
144
124
  }
145
125
  }
126
+ },
127
+ "partials": {
128
+ "example.com": {
129
+ "www": {
130
+ "tracking": "partials/tracking.html",
131
+ "footer": "partials/footer.html"
132
+ }
133
+ }
146
134
  }
147
135
  }
@@ -88,8 +88,14 @@
88
88
  }
89
89
  },
90
90
  "assets": {},
91
- "layouts": {},
92
- "partials": {}
91
+ "layouts": {}
92
+ }
93
+ }
94
+ },
95
+ "partials": {
96
+ "_general": {
97
+ "_general": {
98
+
93
99
  }
94
100
  }
95
101
  }
@@ -31,7 +31,7 @@ describe Odania::Config::GlobalConfig do
31
31
  duplicates = subject.duplicates
32
32
  expect(subject.duplicates).not_to be_empty
33
33
  expect(duplicates).to have_key(:config)
34
- expect(duplicates).to have_key(:partials)
34
+ expect(duplicates).to have_key(:assets)
35
35
  expect(duplicates).to have_key(:redirect)
36
36
  end
37
37
 
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.36
4
+ version: 0.0.37
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-06-05 00:00:00.000000000 Z
11
+ date: 2016-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -212,6 +212,7 @@ files:
212
212
  - lib/odania/config/plugin_config.rb
213
213
  - lib/odania/config/style.rb
214
214
  - lib/odania/config/sub_domain.rb
215
+ - lib/odania/config/subdomain_config.rb
215
216
  - lib/odania/consul.rb
216
217
  - lib/odania/plugin.rb
217
218
  - lib/odania/version.rb