odania 0.1.0 → 0.2.0

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.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/{LICENSE.txt → MIT-LICENSE} +1 -3
  3. data/README.md +3 -3
  4. data/Rakefile +33 -3
  5. data/app/assets/config/odania_manifest.js +0 -0
  6. data/app/assets/javascripts/application.js +13 -0
  7. data/app/assets/javascripts/textAngular.js +15 -0
  8. data/app/assets/javascripts/textAngular/textAngular-rangy.min.js +478 -0
  9. data/app/assets/javascripts/textAngular/textAngular-sanitize.min.js +322 -0
  10. data/app/assets/javascripts/textAngular/textAngular.min.js +1481 -0
  11. data/app/assets/stylesheets/scaffold.css +80 -0
  12. data/app/assets/stylesheets/textAngular/application.css +15 -0
  13. data/app/assets/stylesheets/textAngular/textAngular.css +204 -0
  14. data/app/controllers/admin/home_controller.rb +2 -0
  15. data/app/controllers/admin/languages_controller.rb +74 -0
  16. data/app/controllers/admin_controller.rb +4 -0
  17. data/app/controllers/application_controller.rb +3 -0
  18. data/app/controllers/categories_controller.rb +34 -0
  19. data/app/controllers/home_controller.rb +11 -0
  20. data/app/controllers/protected/home_controller.rb +2 -0
  21. data/app/controllers/protected_controller.rb +22 -0
  22. data/app/controllers/registration_controller.rb +12 -0
  23. data/app/helpers/standard_form_builder.rb +71 -0
  24. data/app/helpers/standard_form_helper.rb +13 -0
  25. data/app/models/admin.rb +37 -0
  26. data/app/models/language.rb +5 -0
  27. data/app/models/user.rb +47 -0
  28. data/app/views/admin/home/index.html.erb +1 -0
  29. data/app/views/admin/languages/_form.html.erb +16 -0
  30. data/app/views/admin/languages/_language.json.jbuilder +2 -0
  31. data/app/views/admin/languages/edit.html.erb +6 -0
  32. data/app/views/admin/languages/index.html.erb +27 -0
  33. data/app/views/admin/languages/index.json.jbuilder +1 -0
  34. data/app/views/admin/languages/new.html.erb +5 -0
  35. data/app/views/admin/languages/show.html.erb +9 -0
  36. data/app/views/admin/languages/show.json.jbuilder +1 -0
  37. data/app/views/categories/index.html.erb +9 -0
  38. data/app/views/categories/show.html.erb +16 -0
  39. data/app/views/devise/confirmations/new.html.erb +11 -0
  40. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  41. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  42. data/app/views/devise/mailer/password_change.html.erb +4 -0
  43. data/app/views/devise/mailer/reset_password_instructions.html.erb +9 -0
  44. data/app/views/devise/mailer/unlock_instructions.html.erb +8 -0
  45. data/app/views/devise/passwords/edit.html.erb +13 -0
  46. data/app/views/devise/passwords/new.html.erb +11 -0
  47. data/app/views/devise/registrations/edit.html.erb +39 -0
  48. data/app/views/devise/registrations/new.html.erb +15 -0
  49. data/app/views/devise/sessions/new.html.erb +14 -0
  50. data/app/views/devise/shared/_links.html.erb +25 -0
  51. data/app/views/devise/unlocks/new.html.erb +11 -0
  52. data/app/views/home/index.html.erb +11 -0
  53. data/app/views/languages/_form.html.erb +20 -0
  54. data/app/views/languages/edit.html.erb +6 -0
  55. data/app/views/languages/index.html.erb +27 -0
  56. data/app/views/languages/new.html.erb +5 -0
  57. data/app/views/languages/show.html.erb +9 -0
  58. data/app/views/protected/home/index.html.erb +1 -0
  59. data/config/initializers/elasticsearch.rb +5 -0
  60. data/config/locales/devise.en.yml +64 -0
  61. data/config/routes.rb +23 -0
  62. data/db/seeds.rb +5 -0
  63. data/lib/odania.rb +7 -56
  64. data/lib/odania/engine.rb +14 -0
  65. data/lib/odania/version.rb +1 -1
  66. data/lib/tasks/odania_tasks.rake +4 -0
  67. data/lib/templates/erb/scaffold/_form.html.erb +27 -0
  68. data/lib/templates/erb/scaffold/edit.html.erb +6 -0
  69. data/lib/templates/erb/scaffold/index.html.erb +31 -0
  70. data/lib/templates/erb/scaffold/new.html.erb +5 -0
  71. data/lib/templates/erb/scaffold/show.html.erb +11 -0
  72. metadata +129 -84
  73. data/.codeclimate.yml +0 -30
  74. data/.gitignore +0 -17
  75. data/.rspec +0 -2
  76. data/.rubocop.yml +0 -1156
  77. data/.travis.yml +0 -20
  78. data/Gemfile +0 -4
  79. data/Gemfile.lock +0 -113
  80. data/Guardfile +0 -31
  81. data/features/plugin.feature +0 -35
  82. data/features/step_definitions/plugin_steps.rb +0 -75
  83. data/features/support/env.rb +0 -1
  84. data/lib/odania/config.rb +0 -17
  85. data/lib/odania/config/backend.rb +0 -31
  86. data/lib/odania/config/backend_group.rb +0 -43
  87. data/lib/odania/config/domain.rb +0 -59
  88. data/lib/odania/config/duplicates.rb +0 -28
  89. data/lib/odania/config/global_config.rb +0 -210
  90. data/lib/odania/config/layout.rb +0 -30
  91. data/lib/odania/config/page.rb +0 -29
  92. data/lib/odania/config/page_base.rb +0 -47
  93. data/lib/odania/config/plugin_config.rb +0 -58
  94. data/lib/odania/config/style.rb +0 -36
  95. data/lib/odania/config/sub_domain.rb +0 -113
  96. data/lib/odania/config/subdomain_config.rb +0 -124
  97. data/lib/odania/consul.rb +0 -138
  98. data/lib/odania/plugin.rb +0 -103
  99. data/odania.gemspec +0 -34
  100. data/spec/fixtures/global_config.json +0 -135
  101. data/spec/fixtures/plugin_config_1.json +0 -102
  102. data/spec/lib/odania/config/global_config_spec.rb +0 -69
  103. data/spec/lib/odania/config/plugin_config_spec.rb +0 -31
  104. data/spec/lib/odania/plugin_spec.rb +0 -25
  105. data/spec/lib/odania_spec.rb +0 -10
  106. data/spec/spec_helper.rb +0 -19
  107. data/spec/support/consul_mock.rb +0 -123
  108. data/tasks/odania.rake +0 -8
  109. data/tasks/rspec.rake +0 -7
@@ -1,210 +0,0 @@
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
- @valid_domains = config['valid_domains'] unless config['valid_domains'].nil?
11
- @default_domains = config['default_domains'] unless config['default_domains'].nil?
12
- @partials = config['partials'] unless config['partials'].nil?
13
-
14
- unless config['domains'].nil?
15
- config['domains'].each_pair do |name, data|
16
- @domains[name].load(data)
17
- end
18
- end
19
-
20
- # load backends from consul
21
- Odania.plugin.get_all.each_pair do |_name, instances|
22
- instances.each do |instance|
23
- add_backend(instance)
24
- end
25
- end
26
-
27
- #puts config.inspect
28
- #puts @backend_groups.inspect
29
- #puts @default_backend_groups.inspect
30
-
31
- self
32
- end
33
-
34
- def load_from_consul
35
- Odania.plugin.get_all.each_pair do |plugin_name, instances|
36
- $logger.info "PLUGIN NAME #{plugin_name} - #{instances.count}" if $debug
37
- instances.each do |instance|
38
- add_backend(instance)
39
- end
40
-
41
- config = Odania.plugin.config_for plugin_name
42
- next if config.nil?
43
-
44
- begin
45
- puts JSON.pretty_generate config if $debug
46
- self.add_plugin_config(config)
47
- rescue => e
48
- $logger.error 'Error loading configuration'
49
- $logger.error 'Config start ' + '+' * 50
50
- puts JSON.pretty_generate config
51
- $logger.error 'Config end ' + '+' * 50
52
- $logger.error 'Error start ' + '+' * 50
53
- $logger.error e.inspect
54
- $logger.error 'Error end ' + '+' * 50
55
- $logger.error 'Error backtrace start ' + '+' * 50
56
- e.backtrace.each do |line|
57
- $logger.error line
58
- end
59
- $logger.error 'Error backtrace end ' + '+' * 50
60
- end
61
- end
62
- end
63
-
64
- def generate_global_config
65
- $logger.info 'Loading plugin configs from consul'
66
- load_from_consul
67
-
68
- $logger.info 'Generating global config'
69
- config = self.dump
70
- puts JSON.pretty_generate config if $debug
71
- Odania.plugin.set_global_config config
72
-
73
- generate_subdomain_configs config
74
- write_valid_domain_config
75
-
76
- config
77
- end
78
-
79
- # Generate a config per subdomain
80
- def generate_subdomain_configs(config)
81
- $logger.info 'Generating subdomain configs'
82
- @valid_domains.each do |domain, subdomains|
83
- subdomains.each do |subdomain|
84
- $logger.info "Generating Subdomain Config for Domain: #{domain} Subdomain: #{subdomain}"
85
-
86
- begin
87
- subdomain_config = SubdomainConfig.new(config, domain, subdomain).generate
88
- Odania.plugin.set_subdomain_config "#{subdomain}.#{domain}", subdomain_config
89
- rescue => e
90
- $logger.error "Error generating subdomain config: #{e}"
91
- $logger.error e.backtrace.join("\n")
92
- end
93
- end
94
- end
95
- end
96
-
97
- def write_valid_domain_config
98
- $logger.info 'Writing valid domain config'
99
- config = {
100
- valid_domains: @valid_domains,
101
- default_domains: @default_domains
102
- }
103
- Odania.plugin.set_valid_domain_config config
104
- end
105
-
106
- # Add the configuration from the plugin
107
- def add_plugin_config(plugin_cfg)
108
- config_section = plugin_cfg['config']
109
- group_name = plugin_cfg['plugin-config']['name']
110
-
111
- if $debug
112
- $logger.info 'Loading configuration'
113
- puts JSON.pretty_generate plugin_cfg
114
- end
115
-
116
- @plugin_config[group_name] = plugin_cfg['plugin-config']
117
- @valid_domains.deep_merge!(plugin_cfg['valid_domains']) unless plugin_cfg['valid_domains'].nil?
118
- @default_domains.deep_merge!(plugin_cfg['default_domains']) unless plugin_cfg['default_domains'].nil?
119
- @partials.deep_merge!(plugin_cfg['partials']) unless plugin_cfg['partials'].nil?
120
-
121
- # Add this service as a default backend if specified
122
- @default_backend_groups << group_name if plugin_cfg['plugin-config']['default']
123
-
124
- # Add config
125
- unless config_section.nil?
126
- config_section.each_pair do |key, _val|
127
- unless @config[key].nil?
128
- @duplicates.add :config, {key => 'already defined'}, group_name
129
- end
130
- end
131
- @config.deep_merge! config_section
132
- end
133
-
134
- # Add Domain Information
135
- unless plugin_cfg['domains'].nil?
136
- plugin_cfg['domains'].each_pair do |name, data|
137
- @domains[name].add(data, group_name).each do |duplicate_key, duplicate_data|
138
- @duplicates.add duplicate_key, duplicate_data, group_name
139
- end
140
- end
141
- end
142
-
143
- true
144
- end
145
-
146
- def add_backend(backend_config)
147
- return if backend_config.ServiceAddress.nil? or backend_config.ServiceAddress.empty?
148
-
149
- backend = Backend.new(backend_config.ServiceName, backend_config.ServiceID, backend_config.ServiceAddress, backend_config.ServicePort)
150
- @backend_groups[backend_config.ServiceName].add_backend backend
151
- @backend_groups[backend_config.ServiceName].check_core_backend backend_config.ServiceTags
152
- end
153
-
154
- def reset
155
- super
156
-
157
- @default_backend_groups = []
158
- @duplicates = Duplicates.new
159
- @backend_groups = Hash.new { |hash, key| hash[key] = BackendGroup.new(key) }
160
- @valid_domains = {}
161
- @default_domains = {}
162
- @partials = {}
163
-
164
- @domains['_general'].add_subdomain('_general')
165
- end
166
-
167
- def duplicates
168
- @duplicates.duplicates
169
- end
170
-
171
- def backend_groups
172
- @backend_groups
173
- end
174
-
175
- def default_backend
176
- group_name = @default_backend_groups.first
177
- group_name = @backend_groups.keys.first if group_name.nil?
178
- raise 'No backend found' if @backend_groups.empty?
179
- @backend_groups[group_name].backends.first
180
- end
181
-
182
- def valid_domains
183
- @valid_domains
184
- end
185
-
186
- def default_domains
187
- @default_domains
188
- end
189
-
190
- def partials
191
- @partials
192
- end
193
-
194
- def default_redirects
195
- general = @domains['_general'].subdomain('_general')
196
- return {} if general.nil?
197
- general.redirects
198
- end
199
-
200
- def dump
201
- cfg = super
202
- cfg['default_backend_groups'] = @default_backend_groups
203
- cfg['default_domains'] = @default_domains
204
- cfg['valid_domains'] = @valid_domains
205
- cfg['partials'] = @partials
206
- cfg
207
- end
208
- end
209
- end
210
- end
@@ -1,30 +0,0 @@
1
- module Odania
2
- module Config
3
- class Layout < PageBase
4
- attr_accessor :config
5
-
6
- def initialize
7
- reset
8
- end
9
-
10
- def dump
11
- result = super
12
- result['config'] = config unless config.nil?
13
- result
14
- end
15
-
16
- def load(data, group_name)
17
- reset
18
- super(data, group_name)
19
- unless data['config'].nil?
20
- self.config = data['config']
21
- end
22
- end
23
-
24
- def reset
25
- super
26
- self.config = {}
27
- end
28
- end
29
- end
30
- end
@@ -1,29 +0,0 @@
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
- $logger.info self.inspect if self.group_name.nil?
25
- "#{Odania.varnish_sanitize(self.group_name)}_director"
26
- end
27
- end
28
- end
29
- end
@@ -1,47 +0,0 @@
1
- module Odania
2
- module Config
3
- class PageBase
4
- attr_accessor :assets
5
-
6
- def initialize
7
- reset
8
- end
9
-
10
- def add(data, group_name=nil)
11
- duplicates = Hash.new { |hash, key| hash[key] = [] }
12
- unless data['assets'].nil?
13
- data['assets'].each_pair do |name, asset_data|
14
- duplicates[:assets] << name if self.assets.key? name
15
- self.assets[name].load(asset_data, group_name)
16
- end
17
- end
18
- duplicates
19
- end
20
-
21
- def load(data, group_name)
22
- self.add(data, group_name)
23
- end
24
-
25
- def reset
26
- self.assets = Hash.new { |hash, key| hash[key] = Page.new }
27
-
28
- @plugins = {:assets => Hash.new { |hash, key| hash[key] = [] }}
29
- end
30
-
31
- def [](type)
32
- self.assets
33
- end
34
-
35
- def dump
36
- asset_data = {}
37
- assets.each_pair do |web_url, page|
38
- asset_data[web_url] = page.dump
39
- end
40
-
41
- {
42
- 'assets' => asset_data
43
- }
44
- end
45
- end
46
- end
47
- end
@@ -1,58 +0,0 @@
1
- module Odania
2
- module Config
3
- class PluginConfig
4
- attr_accessor :domains, :config, :valid_domains, :default_domains, :plugin_config, :partials
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
- @valid_domains = data['valid_domains'] unless data['valid_domains'].nil?
16
- @default_domains = data['default_domains'] unless data['default_domains'].nil?
17
- @partials = data['partials'] unless data['partials'].nil?
18
- unless data['domains'].nil?
19
- data['domains'].each_pair do |name, domain_data|
20
- @domains[name].load(domain_data)
21
- end
22
- end
23
-
24
- true
25
- end
26
-
27
- def [](key)
28
- @domains[key]
29
- end
30
-
31
- # Reset configuration
32
- def reset
33
- @config = {}
34
- @plugin_config = {}
35
- @default_domains = {}
36
- @valid_domains = {}
37
- @partials = {}
38
- @domains = Hash.new { |hash, key| hash[key] = Domain.new(key) }
39
- end
40
-
41
- def dump
42
- domain_data = {}
43
- @domains.each_pair do |name, domain|
44
- domain_data[name] = domain.dump
45
- end
46
-
47
- {
48
- 'plugin-config' => plugin_config,
49
- 'config' => config,
50
- 'default_domains' => @default_domains,
51
- 'valid_domains' => @valid_domains,
52
- 'partials' => @partials,
53
- 'domains' => domain_data
54
- }
55
- end
56
- end
57
- end
58
- end
@@ -1,36 +0,0 @@
1
- module Odania
2
- module Config
3
- class Style
4
- attr_accessor :name, :entry_point
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
- result = super
17
-
18
- result['entry_point'] = entry_point
19
- result
20
- end
21
-
22
- def load(data, group_name)
23
- reset
24
- super(data, group_name)
25
- self.entry_point = data['entry_point'] unless data['entry_point'].nil?
26
- end
27
-
28
- private
29
-
30
- def reset
31
- super
32
- self.entry_point = nil
33
- end
34
- end
35
- end
36
- end
@@ -1,113 +0,0 @@
1
- module Odania
2
- module Config
3
- class SubDomain < PageBase
4
- attr_accessor :name, :config, :web, :layouts, :from_plugin, :redirects
5
-
6
- def initialize(name)
7
- self.name = name
8
- reset
9
- end
10
-
11
- def set_config(config_data, group_name)
12
- errors = []
13
- return errors if config_data.nil?
14
-
15
- config_data.each_pair do |key, val|
16
- from_plugin[:config][key] << group_name
17
- errors << {:type => :config, :plugins => from_plugin[:config][key], :key => key} unless config[key].nil?
18
- config[key] = val
19
- end
20
- errors
21
- end
22
-
23
- def get_redirects
24
- return {} if self.redirects.nil?
25
- self.redirects
26
- end
27
-
28
- def plugins(type, key)
29
- @plugins[type][key]
30
- end
31
-
32
- def dump
33
- result = super
34
-
35
- layout_data = {}
36
- layouts.each_pair do |layout_name, layout|
37
- layout_data[layout_name] = layout.dump
38
- end
39
-
40
- web_data = {}
41
- web.each_pair do |url, page|
42
- web_data[url] = page.dump
43
- end
44
-
45
- result['redirects'] = self.redirects
46
- result['config'] = self.config
47
- result['web'] = web_data
48
- result['layouts'] = layout_data
49
- result
50
- end
51
-
52
- def load(data)
53
- reset
54
- super(data, nil)
55
- self.add(data)
56
- end
57
-
58
- def add(data, group_name=nil)
59
- duplicates = super(data, group_name)
60
-
61
- self.config = data['config'] unless data['config'].nil?
62
-
63
- unless data['web'].nil?
64
- data['web'].each_pair do |name, partial_data|
65
- self.web[name].load(partial_data, group_name)
66
- end
67
- end
68
-
69
- unless data['layouts'].nil?
70
- data['layouts'].each_pair do |name, layout_data|
71
- self.layouts[name].load(layout_data, group_name)
72
- end
73
- end
74
-
75
- unless data['redirects'].nil?
76
- data['redirects'].each_pair do |src_url, target_url|
77
- duplicates[:redirect] << src_url if self.redirects.key? src_url
78
- self.redirects[src_url] = target_url
79
- end
80
- end
81
-
82
- duplicates
83
- end
84
-
85
- def layout_assets
86
- layout_assets = {}
87
- self.layouts.each_pair do |_name, layout|
88
- layout_assets.merge! layout.assets
89
- end
90
- layout_assets
91
- end
92
-
93
- def [](type)
94
- type = type.to_sym
95
- return self.web if :web.eql? type
96
- return self.layouts if :layouts.eql? type
97
- return self.layout_assets if :layout_assets.eql? type
98
- super(type)
99
- end
100
-
101
- private
102
-
103
- def reset
104
- super
105
- self.config = {}
106
- self.from_plugin = {:config => Hash.new { |hash, key| hash[key] = [] }}
107
- self.redirects = {}
108
- self.layouts = Hash.new { |hash, key| hash[key] = Layout.new }
109
- self.web = Hash.new { |hash, key| hash[key] = Page.new }
110
- end
111
- end
112
- end
113
- end