hanami 1.3.1 → 2.0.0.alpha2

Sign up to get free protection for your applications and to get access to all the features.
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