hanami 1.3.1 → 2.0.0.alpha2

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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +110 -6
  3. data/FEATURES.md +9 -1
  4. data/LICENSE.md +1 -1
  5. data/README.md +4 -5
  6. data/hanami.gemspec +26 -30
  7. data/lib/hanami.rb +40 -243
  8. data/lib/hanami/application.rb +338 -174
  9. data/lib/hanami/application/autoloader/inflector_adapter.rb +22 -0
  10. data/lib/hanami/application/container/boot/inflector.rb +7 -0
  11. data/lib/hanami/application/container/boot/logger.rb +8 -0
  12. data/lib/hanami/application/container/boot/rack_logger.rb +19 -0
  13. data/lib/hanami/application/container/boot/rack_monitor.rb +12 -0
  14. data/lib/hanami/application/container/boot/settings.rb +7 -0
  15. data/lib/hanami/application/router.rb +59 -0
  16. data/lib/hanami/application/routing/middleware/stack.rb +89 -0
  17. data/lib/hanami/application/routing/resolver.rb +82 -0
  18. data/lib/hanami/application/routing/resolver/node.rb +50 -0
  19. data/lib/hanami/application/routing/resolver/trie.rb +59 -0
  20. data/lib/hanami/application/settings.rb +23 -0
  21. data/lib/hanami/application/settings/definition.rb +26 -0
  22. data/lib/hanami/application/settings/loader.rb +97 -0
  23. data/lib/hanami/application/settings/struct.rb +65 -0
  24. data/lib/hanami/boot.rb +5 -0
  25. data/lib/hanami/cli/application/cli.rb +40 -0
  26. data/lib/hanami/cli/application/command.rb +47 -0
  27. data/lib/hanami/cli/application/commands.rb +16 -0
  28. data/lib/hanami/cli/application/commands/console.rb +81 -0
  29. data/lib/hanami/cli/base_command.rb +48 -0
  30. data/lib/hanami/cli/commands.rb +6 -42
  31. data/lib/hanami/cli/commands/command.rb +20 -30
  32. data/lib/hanami/cli/commands/server.rb +63 -14
  33. data/lib/hanami/configuration.rb +248 -190
  34. data/lib/hanami/configuration/middleware.rb +8 -28
  35. data/lib/hanami/configuration/router.rb +50 -0
  36. data/lib/hanami/configuration/sessions.rb +50 -0
  37. data/lib/hanami/init.rb +5 -0
  38. data/lib/hanami/server.rb +5 -69
  39. data/lib/hanami/setup.rb +8 -2
  40. data/lib/hanami/slice.rb +138 -0
  41. data/lib/hanami/version.rb +3 -1
  42. data/lib/hanami/web/rack_logger.rb +96 -0
  43. metadata +84 -228
  44. data/bin/hanami +0 -6
  45. data/lib/hanami/action/csrf_protection.rb +0 -211
  46. data/lib/hanami/action/routing_helpers.rb +0 -40
  47. data/lib/hanami/app.rb +0 -96
  48. data/lib/hanami/application_configuration.rb +0 -1495
  49. data/lib/hanami/application_name.rb +0 -108
  50. data/lib/hanami/application_namespace.rb +0 -14
  51. data/lib/hanami/assets/asset.rb +0 -72
  52. data/lib/hanami/assets/static.rb +0 -102
  53. data/lib/hanami/cli/commands/assets.rb +0 -16
  54. data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
  55. data/lib/hanami/cli/commands/console.rb +0 -95
  56. data/lib/hanami/cli/commands/db.rb +0 -32
  57. data/lib/hanami/cli/commands/db/apply.rb +0 -32
  58. data/lib/hanami/cli/commands/db/console.rb +0 -44
  59. data/lib/hanami/cli/commands/db/create.rb +0 -32
  60. data/lib/hanami/cli/commands/db/drop.rb +0 -32
  61. data/lib/hanami/cli/commands/db/migrate.rb +0 -39
  62. data/lib/hanami/cli/commands/db/prepare.rb +0 -32
  63. data/lib/hanami/cli/commands/db/rollback.rb +0 -59
  64. data/lib/hanami/cli/commands/db/version.rb +0 -32
  65. data/lib/hanami/cli/commands/destroy.rb +0 -26
  66. data/lib/hanami/cli/commands/destroy/action.rb +0 -137
  67. data/lib/hanami/cli/commands/destroy/app.rb +0 -159
  68. data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
  69. data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
  70. data/lib/hanami/cli/commands/destroy/model.rb +0 -84
  71. data/lib/hanami/cli/commands/generate.rb +0 -28
  72. data/lib/hanami/cli/commands/generate/action.rb +0 -321
  73. data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
  74. data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
  75. data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
  76. data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
  77. data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
  78. data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
  79. data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
  80. data/lib/hanami/cli/commands/generate/app.rb +0 -243
  81. data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
  82. data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
  83. data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
  84. data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
  85. data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
  86. data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
  87. data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
  88. data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
  89. data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
  90. data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
  91. data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
  92. data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
  93. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
  94. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
  95. data/lib/hanami/cli/commands/generate/migration.rb +0 -41
  96. data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
  97. data/lib/hanami/cli/commands/generate/model.rb +0 -125
  98. data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
  99. data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
  100. data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
  101. data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
  102. data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
  103. data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
  104. data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
  105. data/lib/hanami/cli/commands/generate/secret.rb +0 -48
  106. data/lib/hanami/cli/commands/new.rb +0 -578
  107. data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
  108. data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
  109. data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
  110. data/lib/hanami/cli/commands/new/Gemfile.erb +0 -58
  111. data/lib/hanami/cli/commands/new/README.md.erb +0 -33
  112. data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
  113. data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
  114. data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
  115. data/lib/hanami/cli/commands/new/gitignore.erb +0 -2
  116. data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -3
  117. data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
  118. data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
  119. data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
  120. data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
  121. data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
  122. data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
  123. data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
  124. data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
  125. data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
  126. data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
  127. data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
  128. data/lib/hanami/cli/commands/project.rb +0 -421
  129. data/lib/hanami/cli/commands/routes.rb +0 -21
  130. data/lib/hanami/cli/commands/templates.rb +0 -31
  131. data/lib/hanami/cli/commands/version.rb +0 -19
  132. data/lib/hanami/common_logger.rb +0 -93
  133. data/lib/hanami/components.rb +0 -156
  134. data/lib/hanami/components/app/assets.rb +0 -59
  135. data/lib/hanami/components/app/controller.rb +0 -74
  136. data/lib/hanami/components/app/routes.rb +0 -59
  137. data/lib/hanami/components/app/view.rb +0 -44
  138. data/lib/hanami/components/component.rb +0 -182
  139. data/lib/hanami/components/components.rb +0 -479
  140. data/lib/hanami/components/routes_inspector.rb +0 -72
  141. data/lib/hanami/config/cookies.rb +0 -69
  142. data/lib/hanami/config/framework_configuration.rb +0 -43
  143. data/lib/hanami/config/load_paths.rb +0 -46
  144. data/lib/hanami/config/mapper.rb +0 -47
  145. data/lib/hanami/config/routes.rb +0 -20
  146. data/lib/hanami/config/security.rb +0 -110
  147. data/lib/hanami/config/sessions.rb +0 -103
  148. data/lib/hanami/configuration/app.rb +0 -18
  149. data/lib/hanami/early_hints.rb +0 -129
  150. data/lib/hanami/env.rb +0 -69
  151. data/lib/hanami/environment.rb +0 -513
  152. data/lib/hanami/environment_application_configurations.rb +0 -37
  153. data/lib/hanami/frameworks.rb +0 -22
  154. data/lib/hanami/hanamirc.rb +0 -169
  155. data/lib/hanami/mailer/glue.rb +0 -27
  156. data/lib/hanami/middleware_stack.rb +0 -172
  157. data/lib/hanami/rake_helper.rb +0 -78
  158. data/lib/hanami/rake_tasks.rb +0 -2
  159. data/lib/hanami/rendering_policy.rb +0 -95
  160. data/lib/hanami/routes.rb +0 -219
  161. data/lib/hanami/routing/default.rb +0 -32
  162. data/lib/hanami/static.rb +0 -63
  163. data/lib/hanami/templates/default.html.erb +0 -30
  164. data/lib/hanami/templates/welcome.html.erb +0 -52
  165. data/lib/hanami/views/default.rb +0 -37
  166. data/lib/hanami/views/default_template_finder.rb +0 -22
  167. data/lib/hanami/views/null_view.rb +0 -15
  168. data/lib/hanami/welcome.rb +0 -36
File without changes
@@ -1,7 +0,0 @@
1
- module <%= app.classify %>
2
- module Views
3
- class ApplicationLayout
4
- include <%= app.classify %>::Layout
5
- end
6
- end
7
- end
@@ -1,10 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe <%= app.classify %>::Views::ApplicationLayout do
4
- let(:layout) { <%= app.classify %>::Views::ApplicationLayout.new({ format: :html }, "contents") }
5
- let(:rendered) { layout.render }
6
-
7
- it 'contains application name' do
8
- rendered.must_include('<%= app.classify %>')
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe <%= app.classify %>::Views::ApplicationLayout, type: :view do
4
- let(:layout) { <%= app.classify %>::Views::ApplicationLayout.new({ format: :html }, "contents") }
5
- let(:rendered) { layout.render }
6
-
7
- it 'contains application name' do
8
- expect(rendered).to include('<%= app.classify %>')
9
- end
10
- end
@@ -1,5 +0,0 @@
1
- # Configure your routes here
2
- # See: http://hanamirb.org/guides/routing/overview/
3
- #
4
- # Example:
5
- # get '/hello', to: ->(env) { [200, {}, ['Hello from Hanami!']] }
@@ -1,10 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title><%= app.classify %></title>
5
- <%%= favicon %>
6
- </head>
7
- <body>
8
- <%%= yield %>
9
- </body>
10
- </html>
@@ -1,7 +0,0 @@
1
- !!!
2
- %html
3
- %head
4
- %title <%= app.classify %>
5
- = favicon
6
- %body
7
- = yield
@@ -1,8 +0,0 @@
1
- doctype html
2
- html
3
- head
4
- title
5
- | <%= app.classify %>
6
- = favicon
7
- body
8
- = yield
@@ -1,104 +0,0 @@
1
- module Hanami
2
- class CLI
3
- module Commands
4
- module Generate
5
- # @since 1.1.0
6
- # @api private
7
- class Mailer < Command
8
- requires "environment"
9
-
10
- desc "Generate a mailer"
11
-
12
- argument :mailer, required: true, desc: "The mailer name (eg. `welcome`)"
13
-
14
- option :from, desc: "The default `from` field of the mail"
15
- option :to, desc: "The default `to` field of the mail"
16
- option :subject, desc: "The mail subject"
17
-
18
- example [
19
- "welcome # Basic usage",
20
- 'welcome --from="noreply@example.com" # Generate with default `from` value',
21
- 'announcement --to="users@example.com" # Generate with default `to` value',
22
- 'forgot_password --subject="Your password reset" # Generate with default `subject`'
23
- ]
24
-
25
- # @since 1.1.0
26
- # @api private
27
- def call(mailer:, **options)
28
- from = clean_option(options.fetch(:from, DEFAULT_FROM))
29
- to = clean_option(options.fetch(:to, DEFAULT_TO))
30
- subject = clean_option(options.fetch(:subject, DEFAULT_SUBJECT))
31
- context = Context.new(mailer: mailer, test: options.fetch(:test), from: from, to: to, subject: subject, options: options)
32
-
33
- generate_mailer(context)
34
- generate_mailer_spec(context)
35
- generate_text_template(context)
36
- generate_html_template(context)
37
- end
38
-
39
- private
40
-
41
- # @since 1.1.0
42
- # @api private
43
- DEFAULT_FROM = "<from>".freeze
44
-
45
- # @since 1.1.0
46
- # @api private
47
- DEFAULT_TO = "<to>".freeze
48
-
49
- # @since 1.1.0
50
- # @api private
51
- DEFAULT_SUBJECT = "Hello".freeze
52
-
53
- # @since 1.1.1
54
- # @api private
55
- QUOTES_REGEX = /^("|')|("|')$/
56
-
57
- # @since 1.1.0
58
- # @api private
59
- def generate_mailer(context)
60
- source = templates.find("mailer.erb")
61
- destination = project.mailer(context)
62
-
63
- generate_file(source, destination, context)
64
- say(:create, destination)
65
- end
66
-
67
- # @since 1.1.0
68
- # @api private
69
- def generate_mailer_spec(context)
70
- source = templates.find("mailer_spec.#{context.test}.erb")
71
- destination = project.mailer_spec(context)
72
-
73
- generate_file(source, destination, context)
74
- say(:create, destination)
75
- end
76
-
77
- # @since 1.1.0
78
- # @api private
79
- def generate_text_template(context)
80
- destination = project.mailer_template(context, "txt")
81
-
82
- files.touch(destination)
83
- say(:create, destination)
84
- end
85
-
86
- # @since 1.1.0
87
- # @api private
88
- def generate_html_template(context)
89
- destination = project.mailer_template(context, "html")
90
-
91
- files.touch(destination)
92
- say(:create, destination)
93
- end
94
-
95
- # @since 1.1.1
96
- # @api private
97
- def clean_option(option)
98
- option.gsub(QUOTES_REGEX, '')
99
- end
100
- end
101
- end
102
- end
103
- end
104
- end
@@ -1,9 +0,0 @@
1
- module Mailers
2
- class <%= mailer.classify %>
3
- include Hanami::Mailer
4
-
5
- from '<%= from %>'
6
- to '<%= to %>'
7
- subject '<%= subject %>'
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe Mailers::<%= mailer.classify %> do
4
- it 'delivers email' do
5
- mail = Mailers::<%= mailer.classify %>.deliver
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- RSpec.describe Mailers::<%= mailer.classify %>, type: :mailer do
2
- it 'delivers email' do
3
- mail = Mailers::<%= mailer.classify %>.deliver
4
- end
5
- end
@@ -1,41 +0,0 @@
1
- module Hanami
2
- class CLI
3
- module Commands
4
- module Generate
5
- # @since 1.1.0
6
- # @api private
7
- class Migration < Command
8
- requires "environment"
9
- desc "Generate a migration"
10
-
11
- argument :migration, required: true, desc: "The migration name (eg. `create_users`)"
12
-
13
- example [
14
- "create_users # Generate `db/migrations/#{Project.migration_timestamp}_create_users.rb`"
15
- ]
16
-
17
- # @since 1.1.0
18
- # @api private
19
- def call(migration:, **options)
20
- migration = Utils::String.underscore(migration)
21
- context = Context.new(migration: migration, options: options)
22
-
23
- generate_migration(context)
24
- end
25
-
26
- private
27
-
28
- # @since 1.1.0
29
- # @api private
30
- def generate_migration(context)
31
- source = templates.find("migration.erb")
32
- destination = project.migration(context)
33
-
34
- generate_file(source, destination, context)
35
- say(:create, destination)
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,4 +0,0 @@
1
- Hanami::Model.migration do
2
- change do
3
- end
4
- end
@@ -1,125 +0,0 @@
1
- module Hanami
2
- class CLI
3
- module Commands
4
- module Generate
5
- # @since 1.1.0
6
- # @api private
7
- class Model < Command
8
- requires "environment"
9
-
10
- desc "Generate a model"
11
-
12
- argument :model, required: true, desc: "Model name (eg. `user`)"
13
- option :skip_migration, type: :boolean, default: false, desc: "Skip migration"
14
- option :relation, type: :string, desc: "Name of the database relation, default: pluralized model name"
15
-
16
- example [
17
- "user # Generate `User` entity, `UserRepository` repository, and the migration",
18
- "user --skip-migration # Generate `User` entity and `UserRepository` repository",
19
- "user --relation=accounts # Generate `User` entity, `UserRepository` and migration to create `accounts` table"
20
- ]
21
-
22
- # @since 1.1.0
23
- # @api private
24
- def call(model:, **options)
25
- model = Utils::String.underscore(model)
26
- relation = relation_name(options, model)
27
- migration = "create_#{relation}"
28
- context = Context.new(model: model, relation: relation, migration: migration, test: options.fetch(:test), override_relation_name: override_relation_name?(options), options: options)
29
-
30
- assert_valid_relation!(context)
31
-
32
- generate_entity(context)
33
- generate_repository(context)
34
- generate_migration(context)
35
- generate_entity_spec(context)
36
- generate_repository_spec(context)
37
- end
38
-
39
- private
40
-
41
- def assert_valid_relation!(context)
42
- if Utils::Blank.blank?(context.relation)
43
- warn "`#{context.relation}' is not a valid relation name"
44
- exit(1)
45
- end
46
- end
47
-
48
- # @since 1.1.0
49
- # @api private
50
- def generate_entity(context)
51
- source = templates.find("entity.erb")
52
- destination = project.entity(context)
53
-
54
- generate_file(source, destination, context)
55
- say(:create, destination)
56
- end
57
-
58
- # @since 1.1.0
59
- # @api private
60
- def generate_repository(context)
61
- source = templates.find("repository.erb")
62
- destination = project.repository(context)
63
-
64
- generate_file(source, destination, context)
65
- say(:create, destination)
66
- end
67
-
68
- # @since 1.1.0
69
- # @api private
70
- def generate_migration(context)
71
- return if skip_migration?(context)
72
-
73
- source = templates.find("migration.erb")
74
- destination = project.migration(context)
75
-
76
- generate_file(source, destination, context)
77
- say(:create, destination)
78
- end
79
-
80
- # @since 1.1.0
81
- # @api private
82
- def generate_entity_spec(context)
83
- source = templates.find("entity_spec.#{context.test}.erb")
84
- destination = project.entity_spec(context)
85
-
86
- generate_file(source, destination, context)
87
- say(:create, destination)
88
- end
89
-
90
- # @since 1.1.0
91
- # @api private
92
- def generate_repository_spec(context)
93
- source = templates.find("repository_spec.#{context.test}.erb")
94
- destination = project.repository_spec(context)
95
-
96
- generate_file(source, destination, context)
97
- say(:create, destination)
98
- end
99
-
100
- # @since 1.1.0
101
- # @api private
102
- def skip_migration?(context)
103
- context.options.fetch(:skip_migration, false)
104
- end
105
-
106
- # @since 1.1.0
107
- # @api private
108
- def relation_name(options, model)
109
- if override_relation_name?(options)
110
- Utils::String.underscore(options[:relation])
111
- else
112
- Utils::String.pluralize(model)
113
- end
114
- end
115
-
116
- # @since 1.1.0
117
- # @api private
118
- def override_relation_name?(options)
119
- !options.fetch(:relation, nil).nil?
120
- end
121
- end
122
- end
123
- end
124
- end
125
- end
@@ -1,2 +0,0 @@
1
- class <%= model.classify %> < Hanami::Entity
2
- end
@@ -1,5 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe <%= model.classify %> do
4
- # place your tests here
5
- end
@@ -1,3 +0,0 @@
1
- RSpec.describe <%= model.classify %>, type: :entity do
2
- # place your tests here
3
- end
@@ -1,10 +0,0 @@
1
- Hanami::Model.migration do
2
- change do
3
- create_table :<%= relation %> do
4
- primary_key :id
5
-
6
- column :created_at, DateTime, null: false
7
- column :updated_at, DateTime, null: false
8
- end
9
- end
10
- end
@@ -1,5 +0,0 @@
1
- class <%= model.classify %>Repository < Hanami::Repository
2
- <%- if override_relation_name -%>
3
- self.relation = :<%= relation %>
4
- <%- end -%>
5
- end
@@ -1,5 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe <%= model.classify %>Repository do
4
- # place your tests here
5
- end
@@ -1,3 +0,0 @@
1
- RSpec.describe <%= model.classify %>Repository, type: :repository do
2
- # place your tests here
3
- end
@@ -1,48 +0,0 @@
1
- require "hanami/utils/blank"
2
- require "securerandom"
3
-
4
- module Hanami
5
- class CLI
6
- module Commands
7
- module Generate
8
- # @since 1.1.0
9
- # @api private
10
- class Secret < Command
11
- requires "environment"
12
-
13
- desc "Generate session secret"
14
-
15
- argument :app, desc: "The application name (eg. `web`)"
16
-
17
- example [
18
- " # Prints secret (eg. `#{Project.app_sessions_secret}`)",
19
- "web # Prints session secret (eg. `WEB_SESSIONS_SECRET=#{Project.app_sessions_secret}`)"
20
- ]
21
-
22
- # @since 1.1.0
23
- # @api private
24
- def call(app: nil, **options)
25
- context = Context.new(app: app, options: options)
26
-
27
- generate_secret(context)
28
- end
29
-
30
- private
31
-
32
- # @since 1.1.0
33
- # @api private
34
- def generate_secret(context)
35
- secret = project.app_sessions_secret
36
-
37
- if Hanami::Utils::Blank.blank?(context.app)
38
- puts secret
39
- else
40
- puts "Set the following environment variable to provide the secret token:"
41
- puts %(#{context.app.upcase}_SESSIONS_SECRET="#{secret}")
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end