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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6f8de5a13b2d729b7e98e30b5115b4ac469b14a8cdeb0ac8e3d7d298ec488e7d
4
- data.tar.gz: bade8071e296c4ba2340e2128007dd32ff6e1a04dd0c8259f021c03edb20360b
3
+ metadata.gz: ee3c6a367cfd05f2b18ae080da80b75a08a8680bd922ac8b00433e0c59f53f2b
4
+ data.tar.gz: 2de0d4102bf80606d130c04d83716370fe2c1c985986cd034ce232ff08e9be61
5
5
  SHA512:
6
- metadata.gz: bee97cd8a6b879e1f58aee23dd04d35a121ce0352bf728e435bd86902a508533d2bf9b1312ff2482f15e76223131dcd7b91c9a68f2cd6149e25884d31fdaaf29
7
- data.tar.gz: bebfb7bf05e39b8165b8465e3b6898b02e4d43b71708778a48c6175dcf9cda7272ca28e6542d277e2854631106fd850299a8ac0d7701995707ec48630ce1b17a
6
+ metadata.gz: a7d143ccf35f088d91fa1702d40b5aac22b3cada72cf566b239403d97fdd22b0839f93a1c20286853ae440ea4898902605b0bfbd3b05854f149de98ef9a78a83
7
+ data.tar.gz: 8f512b014ed54456df5beb0d3ecccbe260f0186d3ebfba7fb2fc51f9d80956b511ab87e08e1149dd2dd02d94939a1b260059f2cfcaa1ee34ca6681aee1408434
data/CHANGELOG.md CHANGED
@@ -1,6 +1,110 @@
1
1
  # Hanami
2
2
  The web, with simplicity.
3
3
 
4
+ ## v2.0.0.alpha2 - 2021-05-04
5
+ ### Added
6
+ - [Luca Guidi] Official support for Ruby: MRI 3.0
7
+ - [Tim Riley] Code autoloading via Zeitwerk
8
+ - [Tim Riley] `Hanami::Application` subclasses generate and configure a `Dry::System::Container`, accessible via `.container` and `AppNamespace::Container`, with several common container methods available directly via the application subclass (e.g. `Bookshelf::Application["foo"]` or `Hanami.application["foo"]`)
9
+ - [Tim Riley] Introduced `Hanami::Application.register_bootable` to register custom components
10
+ - [Tim Riley] Introduced `Hanami::Application.keys` to get the list of resolved components
11
+ - [Tim Riley] Dynamically create an auto-injection mixin (e.g. `Bookshelf::Deps`)
12
+ ```ruby
13
+ # frozen_string_literal: true
14
+
15
+ module Bookshelf
16
+ class CreateThing
17
+ include Deps[service_client: "some_service.client"]
18
+
19
+ def call(attrs)
20
+ # Validate attrs, etc.
21
+ service_client.create(attrs)
22
+ end
23
+ end
24
+ end
25
+ ```
26
+ - [Tim Riley] Introduced application settings. They are accessible via `Hanami.application.settings` in `config/settings.rb`
27
+ - [Tim Riley] Introduced application slices to organise high-level application concerns. Slices are generated based on subdirectories of `slices/`, and map onto corresponding ruby module namespaces, e.g. `slices/main` -> `Main`, with the slice instance itself being `Main::Slice` (as well as being accessible via `Hanami.application.slices[:main]`)
28
+ - [Tim Riley] Each slice generates and configures has its own `Dry::System::Container`, accessible via the slice instance (e.g. `Main::Slice.container`) as well as via its own constant (e.g. `Main::Container`)
29
+ - [Tim Riley] Slice containers automatically import the application container, under the `"application"` namespace
30
+ - [Tim Riley] Allow slice containers to be imported by other slice containers
31
+
32
+ ### Changed
33
+ - [Luca Guidi] Drop support for Ruby: MRI 2.5
34
+ - [Tim Riley] Removed `config.cookies` in favor of `config.actions.cookies`
35
+ - [Tim Riley] Removed `config.sessions` in favor of `config.actions.sessions`
36
+ - [Tim Riley] Removed `config.security` settings
37
+
38
+ ## v2.0.0.alpha1 - 2019-01-30
39
+ ### Added
40
+ - [Luca Guidi] Implemented from scratch `hanami version`
41
+ - [Luca Guidi] Implemented from scratch `hanami server`
42
+ - [Luca Guidi] Main configuration is opinionated: when a setting is not specified in generated code, it uses a framework default.
43
+ - [Luca Guidi] Main configuration setting `environment`: to yield env based settings (e.g. `config.environment(:production) { |c| c.logger = {...} }`)
44
+ - [Luca Guidi] Main configuration setting `base_url`: to set the base URL of the app (e.g. `config.base_url = "https://example.com"`)
45
+ - [Luca Guidi] Main configuration setting `logger`: to set the logger options (e.g. `config.logger = { level: :info, format: :json }`)
46
+ - [Luca Guidi] Main configuration setting `routes`: to set the path to routes file (e.g. `config.routes = "path/to/routes"`)
47
+ - [Luca Guidi] Main configuration setting `cookies`: to set cookies options (e.g. `config.cookies = { max_age: 300 }`)
48
+ - [Luca Guidi] Main configuration setting `sessions`: to set session options (e.g. `config.sessions = :cookie, { secret: "abc" }`)
49
+ - [Luca Guidi] Main configuration setting `default_request_format`: to set the fallback for request format (aka MIME Type) (e.g. `config.default_request_format = :json`)
50
+ - [Luca Guidi] Main configuration setting `default_response_format`: to set the default response format (aka MIME Type) (e.g. `config.default_response_format = :json`)
51
+ - [Luca Guidi] Main configuration setting `middleware` to mount Rack middleware (e.g. `config.middleware.use MyMiddleware, "argument"`)
52
+ - [Luca Guidi] Main configuration setting `security` to set security settings (see below)
53
+ - [Luca Guidi] Main configuration setting `inflections` to configure inflections (e.g. `config.inflections { |i| i.plural "virus", "viruses" }`)
54
+ - [Luca Guidi] Main configuration security setting `x_frame_options`: defaults to `"deny"` (e.g. `config.security.x_frame_options = "sameorigin"`)
55
+ - [Luca Guidi] Main configuration security setting `x_content_type_options`: defaults to `"nosniff"` (e.g. `config.security.x_content_type_options = nil`)
56
+ - [Luca Guidi] Main configuration security setting `x_xss_protection`: defaults to `"1; mode=block"` (e.g. `config.security.x_xss_protection = "1"`)
57
+ - [Luca Guidi] Main configuration security setting `content_security_policy`: defaults to `"form-action 'self'; frame-ancestors 'self'; base-uri 'self'; default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self' https: data:; style-src 'self' 'unsafe-inline' https:; font-src 'self'; object-src 'none'; plugin-types application/pdf; child-src 'self'; frame-src 'self'; media-src 'self'"`
58
+ (e.g. `config.security.content_security_policy[:style_src] += " https://my.cdn.example"` to add another source)
59
+ (e.g. `config.security.content_security_policy[:plugin_types] = nil` to override the settings)
60
+
61
+ ### Changed
62
+ - [Luca Guidi] Drop support for Ruby: MRI 2.3, and 2.4.
63
+ - [Luca Guidi] `Hanami::Application` must be used as superclass for main application under `config/application.rb` (e.g. `Bookshelf::Application`)
64
+ - [Luca Guidi] Main configuration is available at `config/application.rb` instead of `config/enviroment.rb`
65
+ - [Luca Guidi] Removed `Hanami.configure` in favor of main application configuration (e.g. `Bookshelf::Application.config`)
66
+ - [Luca Guidi] Removed DSL syntax for main configuration (from `cookies max_age: 600` to `config.cookies = { max_age: 600 }`)
67
+ - [Luca Guidi] Per enviroment settings must be wrapped in a block (e.g. `config.enviroment(:production) { |c| c.logger = {} }`)
68
+ - [Luca Guidi] Concrete applications are no longer supported (e.g. `Web::Application` in `apps/web/application.rb`)
69
+ - [Luca Guidi] Main routes must be configured at `config/routes.rb`:
70
+ ```ruby
71
+ # frozen_string_literal: true
72
+
73
+ Hanami.application.routes do
74
+ mount :web, at: "/" do
75
+ root to: "home#index"
76
+ end
77
+
78
+ mount :admin, at: "/admin" do
79
+ root to: "home#index"
80
+ end
81
+ end
82
+ ```
83
+ - [Luca Guidi] Per application routes are no longer supported (e.g. `apps/web/config/routes.rb`)
84
+ - [Luca Guidi] Removed `shotgun` and code reloading from the core. Code reloading is implemented by `hanami-reloader` gem.
85
+ - [Luca Guidi] Removed support for `.hanamirc`
86
+
87
+ ## v1.3.4 - 2021-05-02
88
+ ### Fixed
89
+ - [Slava Kardakov] Fix generated `config.ru` `require_relative` statement
90
+ - [Armin] Fix `Hanami::CommonLogger` elapsed time compatibility with `rack` 2.1.0+
91
+ - [Adam Daniels] Fix generated tests compatibility with `minitest` 6.0+
92
+
93
+ ## v1.3.3 - 2019-09-20
94
+ ### Added
95
+ - [Gray Manley] Standardize file loading for `.env` files (see: https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use)
96
+
97
+ ### Fixed
98
+ - [Alfonso Uceda & Luca Guidi] Ensure to use `:host` option when mounting an application in main router (e.g. `mount Beta::Application.new, at: "/", host: "beta.hanami.test"`)
99
+
100
+ ## v1.3.2 - 2019-07-26
101
+ ### Added
102
+ - [Luca Guidi] Support both `hanami-validations` 1 and 2
103
+
104
+ ### Fixed
105
+ - [Wisnu Adi Nurcahyo] Ensure `hanami generate` syntax for Welcome page is compatible with ZSH
106
+ - [Luca Guidi] Don't let `hanami` to crash when called without `bundle exec`
107
+
4
108
  ## v1.3.1 - 2019-01-18
5
109
  ### Added
6
110
  - [Luca Guidi] Official support for Ruby: MRI 2.6
@@ -9,7 +113,7 @@ The web, with simplicity.
9
113
  ### Fixed
10
114
  - [Aidan Coyle] Remove from app generator support for deprecated `force_ssl` setting
11
115
  - [Alessandro Caporrini] Remove from app generator support for deprecated `body_parsers` setting
12
- - [Daphne Rouw & Sean Collins] Make app generator to work when code in `config/enviroment.rb` uses double quotes
116
+ - [Daphne Rouw & Sean Collins] Make app generator to work when code in `config/environment.rb` uses double quotes
13
117
 
14
118
  ## v1.3.0 - 2018-10-24
15
119
  ### Added
@@ -26,7 +130,7 @@ The web, with simplicity.
26
130
 
27
131
  ### Fixed
28
132
  - [Anton Davydov] Make possible to pass extra settings for custom logger instances (eg. `logger SemanticLogger.new, :foo, :bar`)
29
- - [graywolf] Ensure `hanami generate app` to work without `require_relative` entries in `config/enviroment.rb`
133
+ - [graywolf] Ensure `hanami generate app` to work without `require_relative` entries in `config/environment.rb`
30
134
  - [Makoto Tajitsu & Luca Guidi] Fixed regression for `hanami new .` that used to generate a broken project
31
135
 
32
136
  ### Fixed
@@ -143,7 +247,7 @@ The web, with simplicity.
143
247
  - [Luca Guidi] Make compatible with Rack 2.0 only
144
248
  - [Luca Guidi] Removed `logger` settings from Hanami applications
145
249
  - [Luca Guidi] Removed logger for Hanami applications (eg `Web.logger`)
146
- - [Luca Guidi] Changed mailer syntax in `config/enviroment.rb`
250
+ - [Luca Guidi] Changed mailer syntax in `config/environment.rb`
147
251
 
148
252
  ## v0.9.2 - 2016-12-19
149
253
  ## Added
@@ -232,11 +336,11 @@ The web, with simplicity.
232
336
 
233
337
  ## v0.7.2 - 2016-02-09
234
338
  ### Fixed
235
- - [Alfonso Uceda Pompa] Fixed routing issue when static assets server tried to hijiack paths that are matching directories in public directory
339
+ - [Alfonso Uceda Pompa] Fixed routing issue when static assets server tried to hijack paths that are matching directories in public directory
236
340
 
237
341
  ## v0.7.1 - 2016-02-05
238
342
  ### Fixed
239
- - [Anton Davydov] Fixed routing issue when static assets server tried to hijiack requests belonging to dynamic endpoints
343
+ - [Anton Davydov] Fixed routing issue when static assets server tried to hijack requests belonging to dynamic endpoints
240
344
  - [Anatolii Didukh] Ensure to fallback to default engine for `hanami console`
241
345
 
242
346
  ## v0.7.0 - 2016-01-22
@@ -371,7 +475,7 @@ The web, with simplicity.
371
475
  ## v0.3.0 - 2015-03-23
372
476
  ### Added
373
477
  - [Luca Guidi] Introduced action generator. Eg. `bundle exec lotus generate action web dashboard#index`
374
- - [Alfonso Uceda Pompa] Allow to specify default coookies options in application configuration. Eg. `cookies true, { domain: 'lotusrb.org' }`
478
+ - [Alfonso Uceda Pompa] Allow to specify default cookies options in application configuration. Eg. `cookies true, { domain: 'lotusrb.org' }`
375
479
  - [Tom Kadwill] Include `Lotus::Helpers` in views.
376
480
  - [Linus Pettersson] Allow to specify `--database` CLI option when generate a new project. Eg. `lotus new bookshelf --database=postgresql`
377
481
  - [Linus Pettersson] Initialize a Git repository when generating a new project
data/FEATURES.md CHANGED
@@ -3,6 +3,14 @@
3
3
 
4
4
  ## Features
5
5
 
6
+ ## v2.0.0.alpha1 - 2019-01-30
7
+
8
+ ## v1.3.3 - 2019-09-20
9
+
10
+ - Standardize file loading for `.env` files (see: https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use)
11
+
12
+ ## v1.3.2 - 2019-07-26
13
+
6
14
  ## v1.3.1 - 2019-01-18
7
15
 
8
16
  ## v1.3.0 - 2018-10-24
@@ -20,7 +28,7 @@
20
28
  - Unobtrusive JavaScript (UJS) (via `hanami-ujs` gem)
21
29
  - Interactive console for development error page (via `hanami-webconsole` gem)
22
30
  - CLI: register callbacks for `hanami` commands (`Hanami::CLI.after("db migrate", MyCallback.new)` or `Hanami::CLI.after("db migrate") { ... }`)
23
- - Project level Rack middleware stack (`Hanami.configure { middleware.use MyRackMiddlewre }`)
31
+ - Project level Rack middleware stack (`Hanami.configure { middleware.use MyRackMiddleware }`)
24
32
  - Plugins can hook into project configuration (`Hanami.plugin { middleware.use AnotherRackMiddleware }`)
25
33
  - Custom repository commands
26
34
  - Coloured logging
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright © 2014-2017 Luca Guidi
1
+ Copyright © 2014-2021 Luca Guidi
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -18,7 +18,6 @@ which provides the glue that ties all the parts together:
18
18
  * [**Hanami::Helpers**](https://github.com/hanami/helpers) - View helpers for Ruby applications
19
19
  * [**Hanami::Mailer**](https://github.com/hanami/mailer) - Mail for Ruby applications
20
20
  * [**Hanami::Assets**](https://github.com/hanami/assets) - Assets management for Ruby
21
- * [**Hanami::CLI**](https://github.com/hanami/cli) - Ruby command line interface
22
21
  * [**Hanami::Utils**](https://github.com/hanami/utils) - Ruby core extensions and class utilities
23
22
 
24
23
  These components are designed to be used independently or together in a Hanami application.
@@ -26,14 +25,14 @@ These components are designed to be used independently or together in a Hanami a
26
25
  ## Status
27
26
 
28
27
  [![Gem Version](https://badge.fury.io/rb/hanami.svg)](https://badge.fury.io/rb/hanami)
29
- [![TravisCI](https://travis-ci.org/hanami/hanami.svg?branch=master)](https://travis-ci.org/hanami/hanami)
30
- [![Test Coverage](https://codecov.io/gh/hanami/hanami/branch/master/graph/badge.svg)](https://codecov.io/gh/hanami/hanami)
28
+ [![CI](https://github.com/hanami/hanami/workflows/ci/badge.svg?branch=unstable)](https://github.com/hanami/hanami/actions?query=workflow%3Aci+branch%3Aunstable)
29
+ [![Test Coverage](https://codecov.io/gh/hanami/hanami/branch/unstable/graph/badge.svg)](https://codecov.io/gh/hanami/hanami)
31
30
  [![Depfu](https://badges.depfu.com/badges/ba000e0f69e6ef1c44cd3038caaa1841/overview.svg)](https://depfu.com/github/hanami/hanami?project=Bundler)
32
31
  [![Inline Docs](http://inch-ci.org/github/hanami/hanami.svg)](http://inch-ci.org/github/hanami/hanami)
33
32
 
34
33
  ## Installation
35
34
 
36
- __Hanami__ supports Ruby (MRI) 2.3+
35
+ __Hanami__ supports Ruby (MRI) 2.6+
37
36
 
38
37
  ```shell
39
38
  gem install hanami
@@ -137,4 +136,4 @@ Released under MIT License.
137
136
 
138
137
  This project was formerly known as Lotus (`lotusrb`).
139
138
 
140
- Copyright © 2014-2018 Luca Guidi.
139
+ Copyright © 2014-2021 Luca Guidi.
data/hanami.gemspec CHANGED
@@ -1,40 +1,36 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("../lib", __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'hanami/version'
5
+ require "hanami/version"
5
6
 
6
- Gem::Specification.new do |spec|
7
- spec.name = 'hanami'
7
+ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
8
+ spec.name = "hanami"
8
9
  spec.version = Hanami::VERSION
9
- spec.authors = ['Luca Guidi']
10
- spec.email = ['me@lucaguidi.com']
11
- spec.summary = 'The web, with simplicity'
12
- spec.description = 'Hanami is a web framework for Ruby'
13
- spec.homepage = 'http://hanamirb.org'
14
- spec.license = 'MIT'
10
+ spec.authors = ["Luca Guidi"]
11
+ spec.email = ["me@lucaguidi.com"]
12
+ spec.summary = "The web, with simplicity"
13
+ spec.description = "Hanami is a web framework for Ruby"
14
+ spec.homepage = "http://hanamirb.org"
15
+ spec.license = "MIT"
15
16
 
16
17
  spec.files = `git ls-files -c -o --exclude-standard -z -- lib/* bin/* LICENSE.md README.md CODE_OF_CONDUCT.md CHANGELOG.md FEATURES.md hanami.gemspec`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test)/})
19
- spec.require_paths = ['lib']
20
- spec.required_ruby_version = '>= 2.3.0'
19
+ spec.require_paths = ["lib"]
20
+ spec.required_ruby_version = ">= 2.6.0"
21
21
 
22
- spec.metadata['allowed_push_host'] = 'https://rubygems.org'
22
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
23
23
 
24
- spec.add_dependency 'hanami-utils', '~> 1.3'
25
- spec.add_dependency 'hanami-validations', '~> 1.3'
26
- spec.add_dependency 'hanami-router', '~> 1.3'
27
- spec.add_dependency 'hanami-controller', '~> 1.3'
28
- spec.add_dependency 'hanami-view', '~> 1.3'
29
- spec.add_dependency 'hanami-helpers', '~> 1.3'
30
- spec.add_dependency 'hanami-mailer', '~> 1.3'
31
- spec.add_dependency 'hanami-assets', '~> 1.3'
32
- spec.add_dependency 'hanami-cli', '~> 0.3'
33
- spec.add_dependency 'concurrent-ruby', '~> 1.0'
34
- spec.add_dependency 'bundler', '>= 1.6', '< 3'
24
+ spec.add_dependency "bundler", ">= 1.16", "< 3"
25
+ spec.add_dependency "dry-core", "~> 0.4"
26
+ spec.add_dependency "dry-inflector", "~> 0.1", ">= 0.1.2"
27
+ spec.add_dependency "dry-monitor"
28
+ spec.add_dependency "dry-system", "~> 0.19", ">= 0.19.0"
29
+ spec.add_dependency "hanami-cli", "~> 2.0.alpha"
30
+ spec.add_dependency "hanami-utils", "~> 2.0.alpha"
31
+ spec.add_dependency "zeitwerk", "~> 2.4"
35
32
 
36
- spec.add_development_dependency 'rspec', '~> 3.7'
37
- spec.add_development_dependency 'rack-test', '~> 1.1'
38
- spec.add_development_dependency 'aruba', '~> 0.14'
39
- spec.add_development_dependency 'rake', '~> 12.0'
33
+ spec.add_development_dependency "rspec", "~> 3.8"
34
+ spec.add_development_dependency "rack-test", "~> 1.1"
35
+ spec.add_development_dependency "rake", "~> 13.0"
40
36
  end
data/lib/hanami.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'thread'
1
+ # frozen_string_literal: true
2
2
 
3
3
  # A complete web framework for Ruby
4
4
  #
@@ -6,277 +6,74 @@ require 'thread'
6
6
  #
7
7
  # @see http://hanamirb.org
8
8
  module Hanami
9
- require 'hanami/version'
10
- require 'hanami/frameworks'
11
- require 'hanami/environment'
12
- require 'hanami/app'
13
- require 'hanami/application'
14
- require 'hanami/components'
15
- require 'hanami/configuration'
9
+ require "hanami/version"
10
+ require "hanami/application"
16
11
 
17
- # @api private
18
- # @since 0.6.0
19
- DEFAULT_PUBLIC_DIRECTORY = 'public'.freeze
20
-
21
- # @api private
22
- # @since 0.9.0
23
12
  @_mutex = Mutex.new
24
- @_plugins = Concurrent::Array.new
25
13
 
26
- # Configure Hanami project
27
- #
28
- # Please note that the code for this method is generated by `hanami new`.
29
- #
30
- # @param blk [Proc] the configuration block
31
- #
32
- # @since 0.9.0
33
- #
34
- # @example
35
- # # config/environment.rb
36
- #
37
- # # ...
38
- #
39
- # Hanami.configure do
40
- # mount Admin::Application, at: "/admin"
41
- # mount Web::Application, at: "/"
42
- #
43
- # model do
44
- # adapter :sql, ENV['DATABASE_URL']
45
- #
46
- # migrations "db/migrations"
47
- # schema "db/schema.sql"
48
- # end
49
- #
50
- # mailer do
51
- # root "lib/bookshelf/mailers"
52
- #
53
- # delivery do
54
- # development :test
55
- # test :test
56
- # # production :smtp, address: ENV['SMTP_HOST'], port: ENV['SMTP_PORT']
57
- # end
58
- # end
59
- # end
60
- def self.configure(&blk)
14
+ def self.application
61
15
  @_mutex.synchronize do
62
- @_configuration = Hanami::Configuration.new(&blk)
63
- end
64
- end
16
+ raise "Hanami.application not configured" unless defined?(@_application)
65
17
 
66
- # Hanami configuration
67
- #
68
- # @return [Hanami::Configuration] the configuration
69
- #
70
- # @see Hanami.configure
71
- #
72
- # @since 0.9.0
73
- # @api private
74
- def self.configuration
75
- @_mutex.synchronize do
76
- raise "Hanami not configured" unless defined?(@_configuration)
77
- @_configuration
18
+ @_application
78
19
  end
79
20
  end
80
21
 
81
- # Configure a plugin
82
- #
83
- # @see Hanami.configure
84
- #
85
- # @since 1.2.0
86
- def self.plugin(&blk)
87
- @_plugins << blk
22
+ def self.application?
23
+ defined?(@_application)
88
24
  end
89
25
 
90
- # Plugins registry
91
- #
92
- # NOTE: We can't use `Components` registry.
93
- #
94
- # Plugins are loaded when Bundler requires `Gemfile` gems.
95
- # During this phase the `Components` that we can resolve are erased by the
96
- # first incoming request in development.
97
- # They are erased by a workaround that we had to put in place in `Hanami.boot`.
98
- # This workaround is `Components.release` and it was introduced because
99
- # `shotgun` failed to reload components, so we have to release for each
100
- # incoming request.
101
- # After the `Components` registry is cleared up, Hanami is able to resolve all
102
- # the components from scratch.
103
- #
104
- # When we'll switch to `hanami-reloader` for development, we can remove
105
- # `Components.release` and we'll be able to store plugins in `Components` and
106
- # remove `Hanami.plugins` as well.
107
- #
108
- # @since 1.2.0
109
- # @api private
110
- def self.plugins
111
- @_plugins
112
- end
26
+ def self.application=(klass)
27
+ @_mutex.synchronize do
28
+ raise "Hanami.application already configured" if defined?(@_application)
113
29
 
114
- # Boot your Hanami project
115
- #
116
- # NOTE: In case this is invoked many times, it guarantees that the boot
117
- # process happens only once.
118
- #
119
- # NOTE: This MUST NOT be wrapped by a Mutex, because it would cause a deadlock.
120
- #
121
- # @return [NilClass]
122
- #
123
- # @since 0.9.0
124
- def self.boot
125
- Components.release if code_reloading?
126
- Components.resolve('all')
127
- Hanami::Model.disconnect if defined?(Hanami::Model)
128
- nil
30
+ @_application = klass unless klass.name.nil?
31
+ end
129
32
  end
130
33
 
131
- # Main application that mounts many Rack and/or Hanami applications.
132
- #
133
- # This is used as integration point for:
134
- #
135
- # * `config.ru` (`run Hanami.app`)
136
- # * Feature tests (`Capybara.app = Hanami.app`)
137
- #
138
- #
139
- #
140
- # It lazily loads your Hanami project, in case it wasn't booted on before.
141
- # This is the case when `hanami server` isn't invoked, but we use different
142
- # ways to run the project (eg. `rackup`).
143
- #
144
- # @return [Hanami::App] the app
145
- #
146
- # @since 0.9.0
147
- # @api private
148
- #
149
- # @see Hanami.boot
150
34
  def self.app
151
- boot
152
- App.new(configuration, environment)
153
- end
154
-
155
- # Check if an application is allowed to load.
156
- #
157
- # The list of applications to be loaded can be set via the `HANAMI_APPS`
158
- # env variable. If the HANAMI_APPS env variable is not set, it defaults
159
- # to loading all applications.
160
- #
161
- # @return [TrueClass,FalseClass] the result of the check
162
- #
163
- # @since 1.1.0
164
- #
165
- # @example
166
- #
167
- # # Mount hanami app for specific app
168
- # Hanami.configure do
169
- # if Hanami.app?(:web)
170
- # require_relative '../apps/web/application'
171
- # mount Web::Application, at: '/'
172
- # end
173
- # end
174
- #
175
- def self.app?(app)
176
- return true unless ENV.key?('HANAMI_APPS')
35
+ @_mutex.synchronize do
36
+ raise "Hanami.app not configured" unless defined?(@_app)
177
37
 
178
- allowed_apps = ENV['HANAMI_APPS'].to_s.split(',')
179
- allowed_apps.include?(app.to_s.downcase)
38
+ @_app
39
+ end
180
40
  end
181
41
 
182
- # Return root of the project (top level directory).
183
- #
184
- # @return [Pathname] root path
185
- #
186
- # @since 0.3.2
187
- #
188
- # @example
189
- # Hanami.root # => #<Pathname:/Users/luca/Code/bookshelf>
190
- def self.root
191
- environment.root
192
- end
42
+ def self.app=(app)
43
+ @_mutex.synchronize do
44
+ raise "Hanami.app already configured" if defined?(@_app)
193
45
 
194
- # Project public directory
195
- #
196
- # @return [Pathname] public directory
197
- #
198
- # @since 0.6.0
199
- #
200
- # @example
201
- # Hanami.public_directory # => #<Pathname:/Users/luca/Code/bookshelf/public>
202
- def self.public_directory
203
- root.join(DEFAULT_PUBLIC_DIRECTORY)
46
+ @_app = app
47
+ end
204
48
  end
205
49
 
206
- # Return the current environment
207
- #
208
- # @return [String] the current environment
209
- #
210
- # @since 0.3.1
211
- #
212
- # @see Hanami::Environment#environment
213
- #
214
- # @example
215
- # Hanami.env => "development"
216
50
  def self.env
217
- environment.environment
51
+ (ENV["HANAMI_ENV"] || "development").to_sym
218
52
  end
219
53
 
220
- # Check to see if specified environment(s) matches the current environment.
221
- #
222
- # If multiple names are given, it returns true, if at least one of them
223
- # matches the current environment.
224
- #
225
- # @return [TrueClass,FalseClass] the result of the check
226
- #
227
- # @since 0.3.1
228
- #
229
- # @see Hanami.env
230
- #
231
- # @example Single name
232
- # puts ENV['HANAMI_ENV'] # => "development"
233
- #
234
- # Hanami.env?(:development) # => true
235
- # Hanami.env?('development') # => true
236
- #
237
- # Hanami.env?(:production) # => false
238
- #
239
- # @example Multiple names
240
- # puts ENV['HANAMI_ENV'] # => "development"
241
- #
242
- # Hanami.env?(:development, :test) # => true
243
- # Hanami.env?(:production, :staging) # => false
244
54
  def self.env?(*names)
245
- environment.environment?(*names)
55
+ names.map(&:to_sym).include?(env)
246
56
  end
247
57
 
248
- # Current environment
249
- #
250
- # @return [Hanami::Environment] environment
251
- #
252
- # @api private
253
- # @since 0.3.2
254
- def self.environment
255
- Components.resolved('environment') do
256
- Environment.new
257
- end
58
+ def self.logger
59
+ application[:logger]
258
60
  end
259
61
 
260
- # Check if code reloading is enabled.
261
- #
262
- # @return [TrueClass,FalseClass] the result of the check
263
- #
264
- # @since 1.0.0
265
- # @api private
266
- #
267
- # @see http://hanamirb.org/guides/projects/code-reloading/
268
- def self.code_reloading?
269
- environment
270
- Components.resolve('code_reloading')
271
- Components['code_reloading']
62
+ def self.init
63
+ application.init
272
64
  end
273
65
 
274
- # Project logger
275
- #
276
- # @return [Hanami::Logger] the logger
277
- #
278
- # @since 1.0.0
279
- def self.logger
280
- Components['logger']
66
+ def self.boot(web: true)
67
+ if defined?(@_app)
68
+ @_app
69
+ else
70
+ application.boot
71
+
72
+ @_app = application.new if web
73
+ end
74
+ end
75
+
76
+ def self.bundler_groups
77
+ [:plugins]
281
78
  end
282
79
  end