odania 0.0.36 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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