hanami 1.3.5 → 2.0.0.alpha4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +196 -5
  3. data/FEATURES.md +1 -3
  4. data/README.md +4 -4
  5. data/hanami.gemspec +27 -30
  6. data/lib/hanami/application/autoloader/inflector_adapter.rb +22 -0
  7. data/lib/hanami/application/container/boot/inflector.rb +7 -0
  8. data/lib/hanami/application/container/boot/logger.rb +7 -0
  9. data/lib/hanami/application/container/boot/rack_logger.rb +19 -0
  10. data/lib/hanami/application/container/boot/rack_monitor.rb +12 -0
  11. data/lib/hanami/application/container/boot/routes_helper.rb +9 -0
  12. data/lib/hanami/application/container/boot/settings.rb +7 -0
  13. data/lib/hanami/application/router.rb +59 -0
  14. data/lib/hanami/application/routes.rb +55 -0
  15. data/lib/hanami/application/routes_helper.rb +34 -0
  16. data/lib/hanami/application/routing/middleware/stack.rb +89 -0
  17. data/lib/hanami/application/routing/resolver/node.rb +50 -0
  18. data/lib/hanami/application/routing/resolver/trie.rb +59 -0
  19. data/lib/hanami/application/routing/resolver.rb +87 -0
  20. data/lib/hanami/application/settings/dotenv_store.rb +60 -0
  21. data/lib/hanami/application/settings.rb +93 -0
  22. data/lib/hanami/application.rb +349 -174
  23. data/lib/hanami/assets/application_configuration.rb +63 -0
  24. data/lib/hanami/assets/configuration.rb +54 -0
  25. data/lib/hanami/boot.rb +5 -0
  26. data/lib/hanami/cli/application/cli.rb +40 -0
  27. data/lib/hanami/cli/application/command.rb +47 -0
  28. data/lib/hanami/cli/application/commands/console.rb +81 -0
  29. data/lib/hanami/cli/application/commands.rb +16 -0
  30. data/lib/hanami/cli/base_command.rb +48 -0
  31. data/lib/hanami/cli/commands/command.rb +23 -31
  32. data/lib/hanami/cli/commands/server.rb +63 -14
  33. data/lib/hanami/cli/commands.rb +5 -41
  34. data/lib/hanami/configuration/logger.rb +40 -0
  35. data/lib/hanami/configuration/middleware.rb +9 -29
  36. data/lib/hanami/configuration/null_configuration.rb +14 -0
  37. data/lib/hanami/configuration/router.rb +52 -0
  38. data/lib/hanami/configuration/sessions.rb +50 -0
  39. data/lib/hanami/configuration.rb +152 -185
  40. data/lib/hanami/init.rb +5 -0
  41. data/lib/hanami/server.rb +5 -69
  42. data/lib/hanami/setup.rb +8 -2
  43. data/lib/hanami/slice.rb +167 -0
  44. data/lib/hanami/version.rb +3 -1
  45. data/lib/hanami/web/rack_logger.rb +96 -0
  46. data/lib/hanami.rb +42 -241
  47. metadata +88 -222
  48. data/bin/hanami +0 -6
  49. data/lib/hanami/action/csrf_protection.rb +0 -211
  50. data/lib/hanami/action/routing_helpers.rb +0 -40
  51. data/lib/hanami/app.rb +0 -96
  52. data/lib/hanami/application_configuration.rb +0 -1495
  53. data/lib/hanami/application_name.rb +0 -108
  54. data/lib/hanami/application_namespace.rb +0 -14
  55. data/lib/hanami/assets/asset.rb +0 -72
  56. data/lib/hanami/assets/static.rb +0 -102
  57. data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
  58. data/lib/hanami/cli/commands/assets.rb +0 -16
  59. data/lib/hanami/cli/commands/console.rb +0 -95
  60. data/lib/hanami/cli/commands/db/apply.rb +0 -32
  61. data/lib/hanami/cli/commands/db/console.rb +0 -44
  62. data/lib/hanami/cli/commands/db/create.rb +0 -32
  63. data/lib/hanami/cli/commands/db/drop.rb +0 -32
  64. data/lib/hanami/cli/commands/db/migrate.rb +0 -39
  65. data/lib/hanami/cli/commands/db/prepare.rb +0 -32
  66. data/lib/hanami/cli/commands/db/rollback.rb +0 -59
  67. data/lib/hanami/cli/commands/db/version.rb +0 -32
  68. data/lib/hanami/cli/commands/db.rb +0 -32
  69. data/lib/hanami/cli/commands/destroy/action.rb +0 -137
  70. data/lib/hanami/cli/commands/destroy/app.rb +0 -159
  71. data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
  72. data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
  73. data/lib/hanami/cli/commands/destroy/model.rb +0 -84
  74. data/lib/hanami/cli/commands/destroy.rb +0 -26
  75. data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
  76. data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
  77. data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
  78. data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
  79. data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
  80. data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
  81. data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
  82. data/lib/hanami/cli/commands/generate/action.rb +0 -321
  83. data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
  84. data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
  85. data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
  86. data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
  87. data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
  88. data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
  89. data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
  90. data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
  91. data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
  92. data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
  93. data/lib/hanami/cli/commands/generate/app.rb +0 -243
  94. data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
  95. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
  96. data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
  97. data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
  98. data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
  99. data/lib/hanami/cli/commands/generate/migration.rb +0 -41
  100. data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
  101. data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
  102. data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
  103. data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
  104. data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
  105. data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
  106. data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
  107. data/lib/hanami/cli/commands/generate/model.rb +0 -125
  108. data/lib/hanami/cli/commands/generate/secret.rb +0 -48
  109. data/lib/hanami/cli/commands/generate.rb +0 -28
  110. data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
  111. data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
  112. data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
  113. data/lib/hanami/cli/commands/new/Gemfile.erb +0 -57
  114. data/lib/hanami/cli/commands/new/README.md.erb +0 -33
  115. data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
  116. data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
  117. data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
  118. data/lib/hanami/cli/commands/new/gitignore.erb +0 -4
  119. data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -5
  120. data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
  121. data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
  122. data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
  123. data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
  124. data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
  125. data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
  126. data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
  127. data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
  128. data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
  129. data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
  130. data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
  131. data/lib/hanami/cli/commands/new.rb +0 -578
  132. data/lib/hanami/cli/commands/project.rb +0 -421
  133. data/lib/hanami/cli/commands/routes.rb +0 -21
  134. data/lib/hanami/cli/commands/templates.rb +0 -31
  135. data/lib/hanami/cli/commands/version.rb +0 -19
  136. data/lib/hanami/common_logger.rb +0 -109
  137. data/lib/hanami/components/app/assets.rb +0 -59
  138. data/lib/hanami/components/app/controller.rb +0 -74
  139. data/lib/hanami/components/app/routes.rb +0 -59
  140. data/lib/hanami/components/app/view.rb +0 -44
  141. data/lib/hanami/components/component.rb +0 -182
  142. data/lib/hanami/components/components.rb +0 -479
  143. data/lib/hanami/components/routes_inspector.rb +0 -72
  144. data/lib/hanami/components.rb +0 -156
  145. data/lib/hanami/config/cookies.rb +0 -69
  146. data/lib/hanami/config/framework_configuration.rb +0 -43
  147. data/lib/hanami/config/load_paths.rb +0 -46
  148. data/lib/hanami/config/mapper.rb +0 -47
  149. data/lib/hanami/config/routes.rb +0 -20
  150. data/lib/hanami/config/security.rb +0 -110
  151. data/lib/hanami/config/sessions.rb +0 -119
  152. data/lib/hanami/configuration/app.rb +0 -21
  153. data/lib/hanami/early_hints.rb +0 -129
  154. data/lib/hanami/env.rb +0 -69
  155. data/lib/hanami/environment.rb +0 -541
  156. data/lib/hanami/environment_application_configurations.rb +0 -37
  157. data/lib/hanami/frameworks.rb +0 -22
  158. data/lib/hanami/hanamirc.rb +0 -169
  159. data/lib/hanami/mailer/glue.rb +0 -27
  160. data/lib/hanami/middleware_stack.rb +0 -172
  161. data/lib/hanami/rake_helper.rb +0 -78
  162. data/lib/hanami/rake_tasks.rb +0 -3
  163. data/lib/hanami/rendering_policy.rb +0 -94
  164. data/lib/hanami/routes.rb +0 -219
  165. data/lib/hanami/routing/default.rb +0 -32
  166. data/lib/hanami/static.rb +0 -63
  167. data/lib/hanami/templates/default.html.erb +0 -30
  168. data/lib/hanami/templates/welcome.html.erb +0 -52
  169. data/lib/hanami/views/default.rb +0 -37
  170. data/lib/hanami/views/default_template_finder.rb +0 -22
  171. data/lib/hanami/views/null_view.rb +0 -15
  172. 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