poise-application-ruby 4.0.1 → 4.1.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.kitchen.yml +1 -8
  3. data/.travis.yml +59 -15
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +5 -1
  6. data/README.md +34 -4
  7. data/Rakefile +1 -1
  8. data/chef/templates/secret_token.rb.erb +3 -0
  9. data/chef/templates/secrets.yml.erb +1 -1
  10. data/lib/poise_application_ruby.rb +1 -1
  11. data/lib/poise_application_ruby/app_mixin.rb +1 -1
  12. data/lib/poise_application_ruby/cheftie.rb +1 -1
  13. data/lib/poise_application_ruby/error.rb +1 -1
  14. data/lib/poise_application_ruby/resources.rb +2 -1
  15. data/lib/poise_application_ruby/resources/bundle_install.rb +1 -1
  16. data/lib/poise_application_ruby/resources/puma.rb +86 -0
  17. data/lib/poise_application_ruby/resources/rackup.rb +1 -1
  18. data/lib/poise_application_ruby/resources/rails.rb +40 -8
  19. data/lib/poise_application_ruby/resources/ruby.rb +1 -1
  20. data/lib/poise_application_ruby/resources/ruby_execute.rb +1 -1
  21. data/lib/poise_application_ruby/resources/ruby_gem.rb +1 -1
  22. data/lib/poise_application_ruby/resources/thin.rb +1 -1
  23. data/lib/poise_application_ruby/resources/unicorn.rb +1 -1
  24. data/lib/poise_application_ruby/service_mixin.rb +10 -2
  25. data/lib/poise_application_ruby/version.rb +2 -2
  26. data/poise-application-ruby.gemspec +5 -3
  27. data/test/{cookbooks/application_ruby_test → cookbook}/attributes/default.rb +1 -1
  28. data/test/{cookbooks/application_ruby_test → cookbook}/metadata.rb +2 -2
  29. data/test/{cookbooks/application_ruby_test → cookbook}/recipes/default.rb +4 -1
  30. data/test/{cookbooks/application_ruby_test → cookbook}/recipes/rails.rb +2 -2
  31. data/test/{cookbooks/application_ruby_test → cookbook}/recipes/sinatra.rb +2 -2
  32. data/test/gemfiles/chef-12.1.gemfile +23 -0
  33. data/test/gemfiles/chef-12.10.gemfile +23 -0
  34. data/test/gemfiles/chef-12.11.gemfile +23 -0
  35. data/test/gemfiles/chef-12.12.gemfile +22 -0
  36. data/test/gemfiles/chef-12.13.gemfile +22 -0
  37. data/test/gemfiles/chef-12.14.gemfile +19 -0
  38. data/test/gemfiles/chef-12.15.gemfile +19 -0
  39. data/test/gemfiles/chef-12.16.gemfile +19 -0
  40. data/test/gemfiles/chef-12.17.gemfile +19 -0
  41. data/test/gemfiles/chef-12.18.gemfile +19 -0
  42. data/test/gemfiles/chef-12.19.gemfile +19 -0
  43. data/test/gemfiles/chef-12.2.gemfile +23 -0
  44. data/test/gemfiles/chef-12.3.gemfile +23 -0
  45. data/test/gemfiles/chef-12.4.gemfile +24 -0
  46. data/test/gemfiles/chef-12.5.gemfile +23 -0
  47. data/test/gemfiles/chef-12.6.gemfile +23 -0
  48. data/test/gemfiles/chef-12.7.gemfile +23 -0
  49. data/test/gemfiles/chef-12.8.gemfile +23 -0
  50. data/test/gemfiles/chef-12.9.gemfile +23 -0
  51. data/test/gemfiles/chef-12.gemfile +2 -2
  52. data/test/gemfiles/chef-13.0.gemfile +19 -0
  53. data/test/gemfiles/chef-13.gemfile +19 -0
  54. data/test/gemfiles/master.gemfile +6 -1
  55. data/test/integration/default/serverspec/default_spec.rb +1 -1
  56. data/test/integration/default/serverspec/rails_spec.rb +1 -1
  57. data/test/integration/default/serverspec/sinatra_spec.rb +1 -1
  58. data/test/spec/resources/ruby_execute_spec.rb +1 -1
  59. data/test/spec/resources/ruby_spec.rb +1 -1
  60. data/test/spec/spec_helper.rb +1 -1
  61. metadata +94 -19
  62. data/.kitchen.travis.yml +0 -9
  63. data/Berksfile +0 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d4fcc59ff9d0aa94c65e9bb2a610393e570b428
4
- data.tar.gz: 6b286b88c179d78ad14c948263d3b7532b8f7db3
3
+ metadata.gz: fba24adc4885d1dc3aa8f828e171f62eb2365feb
4
+ data.tar.gz: 357af4fcbf3037783623b73fab3d8c97f5449617
5
5
  SHA512:
6
- metadata.gz: 8a977b15690a4fe6dc57398f0d983b1cdd2e10e37d2bcd015cdfc032bdfa7f9f0da56f9d1d50391a9f71156dafb4eb3b6ba155c84c5dff678ff4c77b9f245f5d
7
- data.tar.gz: fdd020c99ca1b6d82aec9cdcb7a03e80269cf8da3141987040b8751324c5fa08fae43b46f77de746eefb67995cd281b6c207b546f04fd4176c3d692762651950
6
+ metadata.gz: 3c6798bf1807c33dd1702f5cb19c02c711a024f447a8911c095c07ff0d9617338283ec9f034f88a890cd3e9e0e56bf33950beb09f8e2965daf1fb6e0508ee7b5
7
+ data.tar.gz: f19a2ee73de1675ea51ba99017d7187b9f9f2ee9783da7bdef4c7c8139b3917d02f83a518e03c9e62a5677c6058fd47c1d1675c03779d20de600f1639afa6c6c
@@ -1,10 +1,3 @@
1
1
  ---
2
2
  #<% require 'poise_boiler' %>
3
- <%= PoiseBoiler.kitchen(platforms: 'linux') %>
4
-
5
- suites:
6
- - name: default
7
- run_list:
8
- - recipe[application_ruby_test]
9
- - recipe[application_ruby_test::sinatra]
10
- - recipe[application_ruby_test::rails]
3
+ <%= PoiseBoiler.kitchen %>
@@ -1,21 +1,65 @@
1
1
  sudo: false
2
2
  cache: bundler
3
3
  language: ruby
4
- rvm:
5
- - '2.2'
6
- addons:
7
- apt:
8
- packages:
9
- - libgecode-dev
10
4
  env:
11
5
  global:
12
- - USE_SYSTEM_GECODE=true
13
- - KITCHEN_LOCAL_YAML=.kitchen.travis.yml
14
- - secure: jQ+4WYd8BWSyWAvpvqbX/FXXhX/NbFmT1u/4WSTnFHi6DT+JFSE/nix6GnznGxK40/VXJaUPCN6bzgYPEK0XfYhcy+pdg9DuxYSKiKv/nsnACHI24MC6ipnHHpo3L+EsbZx2cpl9pHRiZf9sLH9X0lgIY1kNGWcu1Mdqa4+zk3s=
15
- - secure: K3R3/mibEEGg4IdvwoZ5xWxdOghMY98bt9L6ywYfnlROyJMAzkMvqxj3fgRmDsoOKoVF1zE4tMd1OmJ2Utc4IzL+PNFOOMt7Py8DZ+BSxCj8HNvO+FbrNITYXxA1ofiy/vbLAm1Lx073Vq/KilTWr7L0i9DZmCweWHxv6SYPB9s=
16
- bundler_args: "--binstubs=$PWD/bin --jobs 3 --retry 3"
6
+ - secure: jQ+4WYd8BWSyWAvpvqbX/FXXhX/NbFmT1u/4WSTnFHi6DT+JFSE/nix6GnznGxK40/VXJaUPCN6bzgYPEK0XfYhcy+pdg9DuxYSKiKv/nsnACHI24MC6ipnHHpo3L+EsbZx2cpl9pHRiZf9sLH9X0lgIY1kNGWcu1Mdqa4+zk3s=
7
+ - secure: K3R3/mibEEGg4IdvwoZ5xWxdOghMY98bt9L6ywYfnlROyJMAzkMvqxj3fgRmDsoOKoVF1zE4tMd1OmJ2Utc4IzL+PNFOOMt7Py8DZ+BSxCj8HNvO+FbrNITYXxA1ofiy/vbLAm1Lx073Vq/KilTWr7L0i9DZmCweWHxv6SYPB9s=
8
+ before_install:
9
+ - 'if [[ $BUNDLE_GEMFILE == *master.gemfile ]]; then gem update --system; fi'
10
+ - gem --version
11
+ - gem install bundler
12
+ - bundle --version
13
+ - 'bundle config --local path ${BUNDLE_PATH:-$(dirname $BUNDLE_GEMFILE)/vendor/bundle}'
14
+ - bundle config --local bin $PWD/bin
15
+ install: bundle update --jobs=3 --retry=3
17
16
  script:
18
- - "./bin/rake travis"
19
- gemfile:
20
- - test/gemfiles/chef-12.gemfile
21
- - test/gemfiles/master.gemfile
17
+ - ./bin/rake travis
18
+ matrix:
19
+ include:
20
+ - rvm: 2.3.1
21
+ gemfile: test/gemfiles/chef-12.gemfile
22
+ - rvm: 2.4.1
23
+ gemfile: test/gemfiles/chef-13.gemfile
24
+ - rvm: 2.1.4
25
+ gemfile: test/gemfiles/chef-12.1.gemfile
26
+ - rvm: 2.1.4
27
+ gemfile: test/gemfiles/chef-12.2.gemfile
28
+ - rvm: 2.1.4
29
+ gemfile: test/gemfiles/chef-12.3.gemfile
30
+ - rvm: 2.1.6
31
+ gemfile: test/gemfiles/chef-12.4.gemfile
32
+ - rvm: 2.1.6
33
+ gemfile: test/gemfiles/chef-12.5.gemfile
34
+ - rvm: 2.1.6
35
+ gemfile: test/gemfiles/chef-12.6.gemfile
36
+ - rvm: 2.1.6
37
+ gemfile: test/gemfiles/chef-12.7.gemfile
38
+ - rvm: 2.1.6
39
+ gemfile: test/gemfiles/chef-12.8.gemfile
40
+ - rvm: 2.1.8
41
+ gemfile: test/gemfiles/chef-12.9.gemfile
42
+ - rvm: 2.1.8
43
+ gemfile: test/gemfiles/chef-12.10.gemfile
44
+ - rvm: 2.1.8
45
+ gemfile: test/gemfiles/chef-12.11.gemfile
46
+ - rvm: 2.1.8
47
+ gemfile: test/gemfiles/chef-12.12.gemfile
48
+ - rvm: 2.1.9
49
+ gemfile: test/gemfiles/chef-12.13.gemfile
50
+ - rvm: 2.3.1
51
+ gemfile: test/gemfiles/chef-12.14.gemfile
52
+ - rvm: 2.3.1
53
+ gemfile: test/gemfiles/chef-12.15.gemfile
54
+ - rvm: 2.3.1
55
+ gemfile: test/gemfiles/chef-12.16.gemfile
56
+ - rvm: 2.3.1
57
+ gemfile: test/gemfiles/chef-12.17.gemfile
58
+ - rvm: 2.3.1
59
+ gemfile: test/gemfiles/chef-12.18.gemfile
60
+ - rvm: 2.3.1
61
+ gemfile: test/gemfiles/chef-12.19.gemfile
62
+ - rvm: 2.4.1
63
+ gemfile: test/gemfiles/chef-13.0.gemfile
64
+ - rvm: 2.4.1
65
+ gemfile: test/gemfiles/master.gemfile
@@ -1,5 +1,11 @@
1
1
  # Application_Ruby Changelog
2
2
 
3
+ ## v4.1.0
4
+
5
+ * Add an `application_puma` resource to run a Puma application server.
6
+ * Add support for `:initializer` style secrets for the `application_rails` resource.
7
+ * Chef 13 support.
8
+
3
9
  ## v4.0.1
4
10
 
5
11
  * Correct `gem_binary` results for `application_ruby`.
data/Gemfile CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -31,7 +31,11 @@ dev_gem 'halite'
31
31
  dev_gem 'poise'
32
32
  dev_gem 'poise-application', path: '../application'
33
33
  dev_gem 'poise-application-git', path: '../application_git'
34
+ dev_gem 'poise-archive'
34
35
  dev_gem 'poise-boiler'
36
+ dev_gem 'poise-build-essential'
37
+ dev_gem 'poise-git'
35
38
  dev_gem 'poise-languages'
39
+ dev_gem 'poise-profiler'
36
40
  dev_gem 'poise-ruby'
37
41
  dev_gem 'poise-service'
data/README.md CHANGED
@@ -33,7 +33,7 @@ end
33
33
 
34
34
  ## Requirements
35
35
 
36
- Chef 12 or newer is required.
36
+ Chef 12.1 or newer is required.
37
37
 
38
38
  ## Resources
39
39
 
@@ -53,6 +53,34 @@ end
53
53
 
54
54
  All actions and properties are the same as the [`bundle_install` resource](https://github.com/poise/poise-ruby#bundle_install).
55
55
 
56
+ ### `application_puma`
57
+
58
+ The `application_puma` resource creates a service for `puma`.
59
+
60
+ ```ruby
61
+ application '/srv/myapp' do
62
+ puma do
63
+ port 8000
64
+ end
65
+ end
66
+ ```
67
+
68
+ #### Actions
69
+
70
+ * `:enable` – Create, enable and start the service. *(default)*
71
+ * `:disable` – Stop, disable, and destroy the service.
72
+ * `:start` – Start the service.
73
+ * `:stop` – Stop the service.
74
+ * `:restart` – Stop and then start the service.
75
+ * `:reload` – Send the configured reload signal to the service.
76
+
77
+ #### Properties
78
+
79
+ * `path` – Base path for the application. *(name attribute)*
80
+ * `port` – Port to listen on. *(default: 80)*
81
+ * `service_name` – Name of the service to create. *(default: auto-detect)*
82
+ * `user` – User to run the service as. *(default: application owner)*
83
+
56
84
  ### `application_rackup`
57
85
 
58
86
  The `application_rackup` resource creates a service for `rackup`.
@@ -102,6 +130,8 @@ end
102
130
  #### Properties
103
131
 
104
132
  * `path` – Base path for the application. *(name attribute)*
133
+ * `app_module` – Top-level application module. Only needed for the :initializer
134
+ style of secret token configuration. *(default: auto-detect)*
105
135
  * `database` – Database settings for Rails. See [the database section
106
136
  below](#database-parameters) for more information. *(option collector)*
107
137
  * `migrate` – Run database migrations. *(default: false)*
@@ -218,7 +248,7 @@ end
218
248
  * `config_path` – Path to a Thin configuration file.
219
249
  * `port` – Port to listen on. *(default: 80)*
220
250
  * `service_name` – Name of the service to create. *(default: auto-detect)*
221
- # `user` – User to run the service as. *(default: application owner)*
251
+ * `user` – User to run the service as. *(default: application owner)*
222
252
 
223
253
  ### `application_unicorn`
224
254
 
@@ -246,7 +276,7 @@ end
246
276
  * `path` – Base path for the application. *(name attribute)*
247
277
  * `port` – Port to listen on. *(default: 80)*
248
278
  * `service_name` – Name of the service to create. *(default: auto-detect)*
249
- # `user` – User to run the service as. *(default: application owner)*
279
+ * `user` – User to run the service as. *(default: application owner)*
250
280
 
251
281
  ## Sponsors
252
282
 
@@ -256,7 +286,7 @@ The Poise test server infrastructure is sponsored by [Rackspace](https://rackspa
256
286
 
257
287
  ## License
258
288
 
259
- Copyright 2015, Noah Kantrowitz
289
+ Copyright 2015-2017, Noah Kantrowitz
260
290
 
261
291
  Licensed under the Apache License, Version 2.0 (the "License");
262
292
  you may not use this file except in compliance with the License.
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -0,0 +1,3 @@
1
+ # Generated by Chef for <%= @new_resource.to_s %>
2
+
3
+ <%= @app_module %>::Application.config.secret_token = <%= @secret_token.inspect %>
@@ -1,3 +1,3 @@
1
1
  # Generated by Chef for <%= @new_resource.to_s %>
2
2
 
3
- <%= @config.to_yaml %>
3
+ <%= @yaml_config.to_yaml %>
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
15
15
  #
16
16
 
17
17
  require 'poise_application_ruby/resources/bundle_install'
18
+ require 'poise_application_ruby/resources/puma'
18
19
  require 'poise_application_ruby/resources/rackup'
19
20
  require 'poise_application_ruby/resources/rails'
20
21
  require 'poise_application_ruby/resources/ruby'
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -0,0 +1,86 @@
1
+ #
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'chef/provider'
18
+ require 'chef/resource'
19
+
20
+ require 'poise_application_ruby/service_mixin'
21
+
22
+ module PoiseApplicationRuby
23
+ module Resources
24
+ # (see Puma::Resource)
25
+ # @since 4.1.0
26
+ module Puma
27
+ # An `application_puma` resource to manage a puma web application
28
+ # server.
29
+ #
30
+ # @since 4.1.0
31
+ # @provides application_puma
32
+ # @action enable
33
+ # @action disable
34
+ # @action start
35
+ # @action stop
36
+ # @action restart
37
+ # @action reload
38
+ # @example
39
+ # application '/srv/myapp' do
40
+ # git '...'
41
+ # bundle_install
42
+ # puma do
43
+ # port 8080
44
+ # end
45
+ # end
46
+ class Resource < Chef::Resource
47
+ include PoiseApplicationRuby::ServiceMixin
48
+ provides(:application_puma)
49
+
50
+ # @!attribute port
51
+ # Port to bind to.
52
+ attribute(:port, kind_of: [String, Integer], default: 80)
53
+ end
54
+
55
+ # Provider for `application_puma`.
56
+ #
57
+ # @since 4.1.0
58
+ # @see Resource
59
+ # @provides application_puma
60
+ class Provider < Chef::Provider
61
+ include PoiseApplicationRuby::ServiceMixin
62
+ provides(:application_puma)
63
+
64
+ private
65
+
66
+ # Find the path to the config.ru. If the resource path was to a
67
+ # directory, apparent /config.ru.
68
+ #
69
+ # @return [String]
70
+ def configru_path
71
+ @configru_path ||= if ::File.directory?(new_resource.path)
72
+ ::File.join(new_resource.path, 'config.ru')
73
+ else
74
+ new_resource.path
75
+ end
76
+ end
77
+
78
+ # Set service resource options.
79
+ def service_options(resource)
80
+ super
81
+ resource.ruby_command("puma --port #{new_resource.port} #{configru_path}")
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright 2015, Noah Kantrowitz
2
+ # Copyright 2015-2017, Noah Kantrowitz
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
5
5
  # you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@ require 'chef/provider'
18
18
  require 'chef/resource'
19
19
 
20
20
  require 'poise_application_ruby/app_mixin'
21
+ require 'poise_application_ruby/error'
21
22
 
22
23
 
23
24
  module PoiseApplicationRuby
@@ -47,6 +48,11 @@ module PoiseApplicationRuby
47
48
  provides(:application_rails)
48
49
  actions(:deploy)
49
50
 
51
+ # @!attribute app_module
52
+ # Top-level application module. Only needed for the :initializer style
53
+ # of secret token configuration, and generally auto-detected.
54
+ # @return [String, false, nil]
55
+ attribute(:app_module, kind_of: [String, FalseClass, NilClass], default: lazy { default_app_module })
50
56
  # @!attribute database
51
57
  # Option collector attribute for Rails database configuration.
52
58
  # @return [Hash]
@@ -84,14 +90,20 @@ module PoiseApplicationRuby
84
90
  # Secret token for Rails session verification and other purposes. On
85
91
  # Rails 4.2 this will be used for secret_key_base. If not set, no
86
92
  # secrets configuration is written.
87
- # @return [String]
88
- attribute(:secret_token, kind_of: [String, FalseClass])
93
+ # @return [String, false, nil]
94
+ attribute(:secret_token, kind_of: [String, FalseClass, NilClass])
89
95
  # @!attribute secrets_config
90
96
  # Template content attribute for the contents of secrets.yml. Only
91
97
  # used when secrets_mode is :yaml.
92
98
  # @todo Redo this doc to cover the actual attributes created.
93
99
  # @return [Poise::Helpers::TemplateContent]
94
100
  attribute(:secrets_config, template: true, default_source: 'secrets.yml.erb', default_options: lazy { default_secrets_options })
101
+ # @!attribute secrets_initializer
102
+ # Template content attribute for the contents of secret_token.rb. Only
103
+ # used when secrets_mode is :initializer.
104
+ # @todo Redo this doc to cover the actual attributes created.
105
+ # @return [Poise::Helpers::TemplateContent]
106
+ attribute(:secrets_initializer, template: true, default_source: 'secret_token.rb.erb', default_options: lazy { default_secrets_options })
95
107
  # @!attribute secrets_mode
96
108
  # Secrets configuration mode. Set to `:yaml` to generate a Rails 4.2
97
109
  # secrets.yml. Set to `:initializer` to update
@@ -140,21 +152,33 @@ module PoiseApplicationRuby
140
152
  #
141
153
  # @return [Symbol]
142
154
  def default_secrets_mode
143
- ::File.exists?(::File.join(path, 'config', 'initializers', 'secret_token.rb')) ? :initialize : :yaml
155
+ ::File.exists?(::File.join(path, 'config', 'initializers', 'secret_token.rb')) ? :initializer : :yaml
144
156
  end
145
157
 
146
- # Default template variables for the secrets.yml.
158
+ # Default template variables for the secrets.yml and secret_token.rb.
147
159
  #
148
160
  # @return [Hash<Symbol, Object>]
149
161
  def default_secrets_options
150
162
  {
151
- config: {
163
+ yaml_config: {
152
164
  rails_env => {
153
165
  'secret_key_base' => secret_token,
154
166
  }
155
167
  },
168
+ secret_token: secret_token,
169
+ app_module: if secrets_mode == :initializer
170
+ raise Error.new("Unable to extract app module for #{self}, please set app_module property") if !app_module || app_module.empty?
171
+ app_module
172
+ end
156
173
  }
157
174
  end
175
+
176
+ # Default application module name.
177
+ #
178
+ # @return [String]
179
+ def default_app_module
180
+ IO.read(::File.join(path, 'config', 'initializers', 'secret_token.rb'))[/(\w+)::Application\.config\.secret_token/, 1]
181
+ end
158
182
  end
159
183
 
160
184
  # Provider for `application_rails`.
@@ -205,6 +229,8 @@ module PoiseApplicationRuby
205
229
  write_secrets_yml
206
230
  when :initializer
207
231
  write_secrets_initializer
232
+ else
233
+ raise Error.new("Unknown secrets mode #{new_resource.secrets_mode.inspect}")
208
234
  end
209
235
  end
210
236
 
@@ -215,13 +241,19 @@ module PoiseApplicationRuby
215
241
  group new_resource.parent.group
216
242
  mode '640'
217
243
  content new_resource.secrets_config_content
244
+ sensitive true
218
245
  end
219
246
  end
220
247
 
221
248
  # In-place update a config/initializers/secret_token.rb file.
222
249
  def write_secrets_initializer
223
- # @todo Implement initalizer-style secret support.
224
- raise NotImplementedError.new('Sorry, intializer-style secrets loading is not yet supported.')
250
+ file ::File.join(new_resource.path, 'config', 'initializers', 'secret_token.rb') do
251
+ user new_resource.parent.owner
252
+ group new_resource.parent.group
253
+ mode '640'
254
+ content new_resource.secrets_initializer_content
255
+ sensitive true
256
+ end
225
257
  end
226
258
 
227
259
  # Precompile assets using the rake task.