hanami 1.3.5 → 2.0.0.alpha1

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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +51 -41
  3. data/FEATURES.md +2 -12
  4. data/LICENSE.md +1 -1
  5. data/README.md +5 -8
  6. data/bin/hanami +6 -4
  7. data/hanami.gemspec +24 -28
  8. data/lib/hanami/application.rb +44 -176
  9. data/lib/hanami/boot.rb +6 -0
  10. data/lib/hanami/cli/commands/command.rb +21 -29
  11. data/lib/hanami/cli/commands/server.rb +63 -14
  12. data/lib/hanami/cli/commands.rb +5 -42
  13. data/lib/hanami/configuration/cookies.rb +24 -0
  14. data/lib/hanami/configuration/middleware.rb +8 -28
  15. data/lib/hanami/configuration/security.rb +141 -0
  16. data/lib/hanami/configuration/sessions.rb +50 -0
  17. data/lib/hanami/configuration.rb +181 -191
  18. data/lib/hanami/container.rb +107 -0
  19. data/lib/hanami/frameworks.rb +24 -18
  20. data/lib/hanami/routes.rb +17 -205
  21. data/lib/hanami/server.rb +5 -69
  22. data/lib/hanami/version.rb +3 -1
  23. data/lib/hanami.rb +39 -243
  24. metadata +36 -233
  25. data/lib/hanami/action/csrf_protection.rb +0 -211
  26. data/lib/hanami/action/routing_helpers.rb +0 -40
  27. data/lib/hanami/app.rb +0 -96
  28. data/lib/hanami/application_configuration.rb +0 -1495
  29. data/lib/hanami/application_name.rb +0 -108
  30. data/lib/hanami/application_namespace.rb +0 -14
  31. data/lib/hanami/assets/asset.rb +0 -72
  32. data/lib/hanami/assets/static.rb +0 -102
  33. data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
  34. data/lib/hanami/cli/commands/assets.rb +0 -16
  35. data/lib/hanami/cli/commands/console.rb +0 -95
  36. data/lib/hanami/cli/commands/db/apply.rb +0 -32
  37. data/lib/hanami/cli/commands/db/console.rb +0 -44
  38. data/lib/hanami/cli/commands/db/create.rb +0 -32
  39. data/lib/hanami/cli/commands/db/drop.rb +0 -32
  40. data/lib/hanami/cli/commands/db/migrate.rb +0 -39
  41. data/lib/hanami/cli/commands/db/prepare.rb +0 -32
  42. data/lib/hanami/cli/commands/db/rollback.rb +0 -59
  43. data/lib/hanami/cli/commands/db/version.rb +0 -32
  44. data/lib/hanami/cli/commands/db.rb +0 -32
  45. data/lib/hanami/cli/commands/destroy/action.rb +0 -137
  46. data/lib/hanami/cli/commands/destroy/app.rb +0 -159
  47. data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
  48. data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
  49. data/lib/hanami/cli/commands/destroy/model.rb +0 -84
  50. data/lib/hanami/cli/commands/destroy.rb +0 -26
  51. data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
  52. data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
  53. data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
  54. data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
  55. data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
  56. data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
  57. data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
  58. data/lib/hanami/cli/commands/generate/action.rb +0 -321
  59. data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
  60. data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
  61. data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
  62. data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
  63. data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
  64. data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
  65. data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
  66. data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
  67. data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
  68. data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
  69. data/lib/hanami/cli/commands/generate/app.rb +0 -243
  70. data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
  71. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
  72. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
  73. data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
  74. data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
  75. data/lib/hanami/cli/commands/generate/migration.rb +0 -41
  76. data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
  77. data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
  78. data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
  79. data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
  80. data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
  81. data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
  82. data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
  83. data/lib/hanami/cli/commands/generate/model.rb +0 -125
  84. data/lib/hanami/cli/commands/generate/secret.rb +0 -48
  85. data/lib/hanami/cli/commands/generate.rb +0 -28
  86. data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
  87. data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
  88. data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
  89. data/lib/hanami/cli/commands/new/Gemfile.erb +0 -57
  90. data/lib/hanami/cli/commands/new/README.md.erb +0 -33
  91. data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
  92. data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
  93. data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
  94. data/lib/hanami/cli/commands/new/gitignore.erb +0 -4
  95. data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -5
  96. data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
  97. data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
  98. data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
  99. data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
  100. data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
  101. data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
  102. data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
  103. data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
  104. data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
  105. data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
  106. data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
  107. data/lib/hanami/cli/commands/new.rb +0 -578
  108. data/lib/hanami/cli/commands/project.rb +0 -421
  109. data/lib/hanami/cli/commands/routes.rb +0 -21
  110. data/lib/hanami/cli/commands/templates.rb +0 -31
  111. data/lib/hanami/cli/commands/version.rb +0 -19
  112. data/lib/hanami/common_logger.rb +0 -109
  113. data/lib/hanami/components/app/assets.rb +0 -59
  114. data/lib/hanami/components/app/controller.rb +0 -74
  115. data/lib/hanami/components/app/routes.rb +0 -59
  116. data/lib/hanami/components/app/view.rb +0 -44
  117. data/lib/hanami/components/component.rb +0 -182
  118. data/lib/hanami/components/components.rb +0 -479
  119. data/lib/hanami/components/routes_inspector.rb +0 -72
  120. data/lib/hanami/components.rb +0 -156
  121. data/lib/hanami/config/cookies.rb +0 -69
  122. data/lib/hanami/config/framework_configuration.rb +0 -43
  123. data/lib/hanami/config/load_paths.rb +0 -46
  124. data/lib/hanami/config/mapper.rb +0 -47
  125. data/lib/hanami/config/routes.rb +0 -20
  126. data/lib/hanami/config/security.rb +0 -110
  127. data/lib/hanami/config/sessions.rb +0 -119
  128. data/lib/hanami/configuration/app.rb +0 -21
  129. data/lib/hanami/early_hints.rb +0 -129
  130. data/lib/hanami/env.rb +0 -69
  131. data/lib/hanami/environment.rb +0 -541
  132. data/lib/hanami/environment_application_configurations.rb +0 -37
  133. data/lib/hanami/hanamirc.rb +0 -169
  134. data/lib/hanami/mailer/glue.rb +0 -27
  135. data/lib/hanami/middleware_stack.rb +0 -172
  136. data/lib/hanami/rake_helper.rb +0 -78
  137. data/lib/hanami/rake_tasks.rb +0 -3
  138. data/lib/hanami/rendering_policy.rb +0 -94
  139. data/lib/hanami/routing/default.rb +0 -32
  140. data/lib/hanami/setup.rb +0 -3
  141. data/lib/hanami/static.rb +0 -63
  142. data/lib/hanami/templates/default.html.erb +0 -30
  143. data/lib/hanami/templates/welcome.html.erb +0 -52
  144. data/lib/hanami/views/default.rb +0 -37
  145. data/lib/hanami/views/default_template_finder.rb +0 -22
  146. data/lib/hanami/views/null_view.rb +0 -15
  147. data/lib/hanami/welcome.rb +0 -41
@@ -1,74 +0,0 @@
1
- require 'hanami/action/session'
2
- require 'hanami/action/routing_helpers'
3
-
4
- module Hanami
5
- # @since 0.9.0
6
- # @api private
7
- module Components
8
- # @since 0.9.0
9
- # @api private
10
- module App
11
- # hanami-controller configuration for a single Hanami application in the project.
12
- #
13
- # @since 0.9.0
14
- # @api private
15
- class Controller
16
- STRICT_TRANSPORT_SECURITY_HEADER = 'Strict-Transport-Security'.freeze
17
- STRICT_TRANSPORT_SECURITY_DEFAULT_VALUE = 'max-age=31536000'.freeze
18
-
19
- # Configure hanami-controller for a single Hanami application in the project.
20
- #
21
- # @param app [Hanami::Configuration::App] a Hanami application
22
- #
23
- # @since 0.9.0
24
- # @api private
25
- #
26
- # rubocop:disable Metrics/AbcSize
27
- # rubocop:disable Metrics/MethodLength
28
- def self.resolve(app)
29
- config = app.configuration
30
- namespace = app.namespace
31
-
32
- unless namespace.const_defined?('Controller', false)
33
- controller = Hanami::Controller.duplicate(namespace) do
34
- handle_exceptions config.handle_exceptions
35
- public_directory Hanami.public_directory
36
- default_request_format config.default_request_format
37
- default_response_format config.default_response_format
38
- default_headers(
39
- Hanami::Config::Security::X_FRAME_OPTIONS_HEADER => config.security.x_frame_options,
40
- Hanami::Config::Security::X_CONTENT_TYPE_OPTIONS_HEADER => config.security.x_content_type_options,
41
- Hanami::Config::Security::X_XSS_PROTECTION_HEADER => config.security.x_xss_protection,
42
- Hanami::Config::Security::CONTENT_SECURITY_POLICY_HEADER => config.security.content_security_policy
43
- )
44
- default_headers[STRICT_TRANSPORT_SECURITY_HEADER] = STRICT_TRANSPORT_SECURITY_DEFAULT_VALUE if config.force_ssl
45
-
46
- if config.cookies.enabled?
47
- require 'hanami/action/cookies'
48
- prepare { include Hanami::Action::Cookies }
49
- cookies config.cookies.default_options
50
- end
51
-
52
- if config.sessions.enabled?
53
- prepare do
54
- include Hanami::Action::Session
55
- include Hanami::Action::CSRFProtection
56
- end
57
- end
58
-
59
- prepare { include Hanami::Action::RoutingHelpers }
60
-
61
- config.controller.__apply(self)
62
- end
63
-
64
- namespace.const_set('Controller', controller)
65
- end
66
-
67
- Components.resolved "#{app.app_name}.controller", namespace.const_get('Controller').configuration
68
- end
69
- end
70
- # rubocop:enable Metrics/MethodLength
71
- # rubocop:enable Metrics/AbcSize
72
- end
73
- end
74
- end
@@ -1,59 +0,0 @@
1
- require 'hanami/routes'
2
- require 'hanami/routing/default'
3
-
4
- module Hanami
5
- # @since 0.9.0
6
- # @api private
7
- module Components
8
- # @since 0.9.0
9
- # @api private
10
- module App
11
- # hanami-router configuration for a single Hanami application in the project.
12
- #
13
- # @since 0.9.0
14
- # @api private
15
- class Routes
16
- # Configure hanami-router for a single Hanami application in the project.
17
- #
18
- # @param app [Hanami::Configuration::App] a Hanami application
19
- #
20
- # @since 0.9.0
21
- # @api private
22
- def self.resolve(app)
23
- namespace = app.namespace
24
- routes = application_routes(app)
25
-
26
- if namespace.routes.nil? # rubocop:disable Style/IfUnlessModifier
27
- namespace.routes = Hanami::Routes.new(routes)
28
- end
29
-
30
- Components.resolved("#{app.app_name}.routes", routes)
31
- end
32
-
33
- # @since 0.9.0
34
- # @api private
35
- def self.application_routes(app) # rubocop:disable Metrics/MethodLength
36
- config = app.configuration
37
- namespace = app.namespace
38
-
39
- resolver = Hanami::Routing::EndpointResolver.new(pattern: config.controller_pattern, namespace: namespace)
40
- default_app = Hanami::Routing::Default.new
41
-
42
- options = {
43
- resolver: resolver,
44
- default_app: default_app,
45
- scheme: config.scheme,
46
- host: config.host,
47
- port: config.port,
48
- prefix: config.path_prefix,
49
- force_ssl: config.force_ssl
50
- }
51
-
52
- options[:parsers] = config.body_parsers if config.body_parsers.any?
53
-
54
- Hanami::Router.new(options, &config.routes)
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,44 +0,0 @@
1
- module Hanami
2
- # @since 0.9.0
3
- # @api private
4
- module Components
5
- # @since 0.9.0
6
- # @api private
7
- module App
8
- # hanami-view configuration for a single Hanami application in the project.
9
- #
10
- # @since 0.9.0
11
- # @api private
12
- class View
13
- # Configure hanami-view for a single Hanami application in the project.
14
- #
15
- # @param app [Hanami::Configuration::App] a Hanami application
16
- #
17
- # @since 0.9.0
18
- # @api private
19
- #
20
- # rubocop:disable Metrics/AbcSize
21
- # rubocop:disable Metrics/MethodLength
22
- def self.resolve(app)
23
- config = app.configuration
24
- namespace = app.namespace
25
-
26
- unless namespace.const_defined?('View', false)
27
- view = Hanami::View.duplicate(namespace) do
28
- root config.templates
29
- layout config.layout
30
-
31
- config.view.__apply(self)
32
- end
33
-
34
- namespace.const_set('View', view)
35
- end
36
-
37
- Components.resolved "#{app.app_name}.view", namespace.const_get('View').configuration
38
- end
39
- end
40
- # rubocop:enable Metrics/MethodLength
41
- # rubocop:enable Metrics/AbcSize
42
- end
43
- end
44
- end
@@ -1,182 +0,0 @@
1
- module Hanami
2
- # @since 0.9.0
3
- # @api private
4
- module Components
5
- # Base component
6
- #
7
- # @since 0.9.0
8
- # @api private
9
- #
10
- # @see Hanami::Components
11
- class Component
12
- # Instantiate a new component
13
- #
14
- # @param name [String] the component name
15
- # @param blk [Proc] the logic of the component
16
- #
17
- # @return [Hanami::Components::Component]
18
- #
19
- # @since 0.9.0
20
- # @api private
21
- def initialize(name, &blk)
22
- @name = name
23
- @requirements = []
24
- @_prepare = ->(*) {}
25
- @_resolve = -> {}
26
- instance_eval(&blk)
27
- end
28
-
29
- # Run or resolve the component
30
- #
31
- # @param configuration [Hanami::Configuration] the Hanami configuration for the project
32
- #
33
- # @since 0.9.0
34
- # @api private
35
- def call(configuration)
36
- resolve_requirements
37
- _prepare.call(configuration)
38
-
39
- unless _run.nil?
40
- _run.call(configuration)
41
- return
42
- end
43
-
44
- resolved(name, _resolve.call(configuration))
45
- end
46
-
47
- private
48
-
49
- # @since 1.3.0
50
- # @api private
51
- #
52
- # @see Hanami::Component#logger_interface?
53
- LOGGER_METHODS = %i[info warn debug]
54
-
55
- # Component name
56
- #
57
- # @return [String]
58
- #
59
- # @since 0.9.0
60
- # @api private
61
- attr_reader :name
62
-
63
- # Component requirements
64
- #
65
- # @return [Array<String>]
66
- #
67
- # @since 0.9.0
68
- # @api private
69
- attr_reader :requirements
70
-
71
- # Prepare logic
72
- #
73
- # @since 0.9.0
74
- # @api private
75
- attr_accessor :_prepare
76
-
77
- # Resolve logic
78
- #
79
- # @since 0.9.0
80
- # @api private
81
- attr_accessor :_resolve
82
-
83
- # Run logic
84
- #
85
- # @since 0.9.0
86
- # @api private
87
- attr_accessor :_run
88
-
89
- # Declare component requirement(s)
90
- #
91
- # @param components [Array<String>] the name of the other components to
92
- # depend on
93
- def requires(*components)
94
- self.requirements = Array(components).flatten
95
- end
96
-
97
- # Declare prepare logic
98
- #
99
- # @param blk [Proc] prepare logic
100
- #
101
- # @since 0.9.0
102
- # @api private
103
- def prepare(&blk)
104
- self._prepare = blk
105
- end
106
-
107
- # Declare resolve logic
108
- #
109
- # @param blk [Proc] resolve logic
110
- #
111
- # @since 0.9.0
112
- # @api private
113
- def resolve(&blk)
114
- self._resolve = blk
115
- end
116
-
117
- # Declare run logic
118
- #
119
- # @param blk [Proc] run logic
120
- #
121
- # @since 0.9.0
122
- # @api private
123
- def run(&blk)
124
- self._run = blk
125
- end
126
-
127
- # Set requirements
128
- #
129
- # @param names [Array<String>] the requirements
130
- #
131
- # @since 0.9.0
132
- # @api private
133
- def requirements=(names)
134
- @requirements = Array(names).flatten
135
- end
136
-
137
- # Resolve the requirements before to execute the logic of this component
138
- #
139
- # @since 0.9.0
140
- # @api private
141
- #
142
- # @see Hanami::Components.resolve
143
- def resolve_requirements
144
- Components.resolve(requirements)
145
- end
146
-
147
- # Get a registered component by name
148
- #
149
- # @param name [String] the component name
150
- #
151
- # @since 0.9.0
152
- # @api private
153
- #
154
- # @see Hanami::Components.component
155
- def component(name)
156
- Components.component(name)
157
- end
158
-
159
- # Mark a component as resolved by providing a value or a block.
160
- #
161
- # @param name [String] the name of the component to mark as resolved
162
- # @param value [Object] the optional value of the component
163
- # @param blk [Proc] the optional block which returning value is associated with the component.
164
- #
165
- # @since 0.9.0
166
- # @api private
167
- #
168
- # @see Hanami::Components.resolved
169
- def resolved(name, value = nil, &blk)
170
- Components.resolved(name, value, &blk)
171
- end
172
-
173
- # Check that instance has logger interfaces (#info, #warn and #debug)
174
- #
175
- # @since 1.3.0
176
- # @api private
177
- def logger_interface?(instance)
178
- LOGGER_METHODS.all? { |method| instance.respond_to?(method) }
179
- end
180
- end
181
- end
182
- end