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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +51 -41
- data/FEATURES.md +2 -12
- data/LICENSE.md +1 -1
- data/README.md +5 -8
- data/bin/hanami +6 -4
- data/hanami.gemspec +24 -28
- data/lib/hanami/application.rb +44 -176
- data/lib/hanami/boot.rb +6 -0
- data/lib/hanami/cli/commands/command.rb +21 -29
- data/lib/hanami/cli/commands/server.rb +63 -14
- data/lib/hanami/cli/commands.rb +5 -42
- data/lib/hanami/configuration/cookies.rb +24 -0
- data/lib/hanami/configuration/middleware.rb +8 -28
- data/lib/hanami/configuration/security.rb +141 -0
- data/lib/hanami/configuration/sessions.rb +50 -0
- data/lib/hanami/configuration.rb +181 -191
- data/lib/hanami/container.rb +107 -0
- data/lib/hanami/frameworks.rb +24 -18
- data/lib/hanami/routes.rb +17 -205
- data/lib/hanami/server.rb +5 -69
- data/lib/hanami/version.rb +3 -1
- data/lib/hanami.rb +39 -243
- metadata +36 -233
- data/lib/hanami/action/csrf_protection.rb +0 -211
- data/lib/hanami/action/routing_helpers.rb +0 -40
- data/lib/hanami/app.rb +0 -96
- data/lib/hanami/application_configuration.rb +0 -1495
- data/lib/hanami/application_name.rb +0 -108
- data/lib/hanami/application_namespace.rb +0 -14
- data/lib/hanami/assets/asset.rb +0 -72
- data/lib/hanami/assets/static.rb +0 -102
- data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
- data/lib/hanami/cli/commands/assets.rb +0 -16
- data/lib/hanami/cli/commands/console.rb +0 -95
- data/lib/hanami/cli/commands/db/apply.rb +0 -32
- data/lib/hanami/cli/commands/db/console.rb +0 -44
- data/lib/hanami/cli/commands/db/create.rb +0 -32
- data/lib/hanami/cli/commands/db/drop.rb +0 -32
- data/lib/hanami/cli/commands/db/migrate.rb +0 -39
- data/lib/hanami/cli/commands/db/prepare.rb +0 -32
- data/lib/hanami/cli/commands/db/rollback.rb +0 -59
- data/lib/hanami/cli/commands/db/version.rb +0 -32
- data/lib/hanami/cli/commands/db.rb +0 -32
- data/lib/hanami/cli/commands/destroy/action.rb +0 -137
- data/lib/hanami/cli/commands/destroy/app.rb +0 -159
- data/lib/hanami/cli/commands/destroy/mailer.rb +0 -74
- data/lib/hanami/cli/commands/destroy/migration.rb +0 -51
- data/lib/hanami/cli/commands/destroy/model.rb +0 -84
- data/lib/hanami/cli/commands/destroy.rb +0 -26
- data/lib/hanami/cli/commands/generate/action/action.erb +0 -7
- data/lib/hanami/cli/commands/generate/action/action_spec.minitest.erb +0 -11
- data/lib/hanami/cli/commands/generate/action/action_spec.rspec.erb +0 -9
- data/lib/hanami/cli/commands/generate/action/action_without_view.erb +0 -7
- data/lib/hanami/cli/commands/generate/action/view.erb +0 -7
- data/lib/hanami/cli/commands/generate/action/view_spec.minitest.erb +0 -12
- data/lib/hanami/cli/commands/generate/action/view_spec.rspec.erb +0 -10
- data/lib/hanami/cli/commands/generate/action.rb +0 -321
- data/lib/hanami/cli/commands/generate/app/application.erb +0 -313
- data/lib/hanami/cli/commands/generate/app/favicon.ico +0 -0
- data/lib/hanami/cli/commands/generate/app/gitkeep.erb +0 -0
- data/lib/hanami/cli/commands/generate/app/layout.erb +0 -7
- data/lib/hanami/cli/commands/generate/app/layout_spec.minitest.erb +0 -10
- data/lib/hanami/cli/commands/generate/app/layout_spec.rspec.erb +0 -10
- data/lib/hanami/cli/commands/generate/app/routes.erb +0 -5
- data/lib/hanami/cli/commands/generate/app/template.erb.erb +0 -10
- data/lib/hanami/cli/commands/generate/app/template.haml.erb +0 -7
- data/lib/hanami/cli/commands/generate/app/template.slim.erb +0 -8
- data/lib/hanami/cli/commands/generate/app.rb +0 -243
- data/lib/hanami/cli/commands/generate/mailer/mailer.erb +0 -9
- data/lib/hanami/cli/commands/generate/mailer/mailer_spec.minitest.erb +0 -7
- data/lib/hanami/cli/commands/generate/mailer/mailer_spec.rspec.erb +0 -5
- data/lib/hanami/cli/commands/generate/mailer.rb +0 -104
- data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
- data/lib/hanami/cli/commands/generate/migration.rb +0 -41
- data/lib/hanami/cli/commands/generate/model/entity.erb +0 -2
- data/lib/hanami/cli/commands/generate/model/entity_spec.minitest.erb +0 -5
- data/lib/hanami/cli/commands/generate/model/entity_spec.rspec.erb +0 -3
- data/lib/hanami/cli/commands/generate/model/migration.erb +0 -10
- data/lib/hanami/cli/commands/generate/model/repository.erb +0 -5
- data/lib/hanami/cli/commands/generate/model/repository_spec.minitest.erb +0 -5
- data/lib/hanami/cli/commands/generate/model/repository_spec.rspec.erb +0 -3
- data/lib/hanami/cli/commands/generate/model.rb +0 -125
- data/lib/hanami/cli/commands/generate/secret.rb +0 -48
- data/lib/hanami/cli/commands/generate.rb +0 -28
- data/lib/hanami/cli/commands/new/.env.development.erb +0 -3
- data/lib/hanami/cli/commands/new/.env.test.erb +0 -3
- data/lib/hanami/cli/commands/new/.gitkeep.erb +0 -0
- data/lib/hanami/cli/commands/new/Gemfile.erb +0 -57
- data/lib/hanami/cli/commands/new/README.md.erb +0 -33
- data/lib/hanami/cli/commands/new/config/boot.erb +0 -2
- data/lib/hanami/cli/commands/new/config/environment.erb +0 -49
- data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
- data/lib/hanami/cli/commands/new/gitignore.erb +0 -4
- data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -5
- data/lib/hanami/cli/commands/new/hanamirc.erb +0 -3
- data/lib/hanami/cli/commands/new/lib/project.erb +0 -2
- data/lib/hanami/cli/commands/new/minitest/Rakefile.erb +0 -12
- data/lib/hanami/cli/commands/new/minitest/features_helper.erb +0 -11
- data/lib/hanami/cli/commands/new/minitest/spec_helper.erb +0 -7
- data/lib/hanami/cli/commands/new/rspec/Rakefile.erb +0 -9
- data/lib/hanami/cli/commands/new/rspec/capybara.erb +0 -8
- data/lib/hanami/cli/commands/new/rspec/features_helper.erb +0 -12
- data/lib/hanami/cli/commands/new/rspec/rspec.erb +0 -2
- data/lib/hanami/cli/commands/new/rspec/spec_helper.erb +0 -103
- data/lib/hanami/cli/commands/new/schema.sql.erb +0 -0
- data/lib/hanami/cli/commands/new.rb +0 -578
- data/lib/hanami/cli/commands/project.rb +0 -421
- data/lib/hanami/cli/commands/routes.rb +0 -21
- data/lib/hanami/cli/commands/templates.rb +0 -31
- data/lib/hanami/cli/commands/version.rb +0 -19
- data/lib/hanami/common_logger.rb +0 -109
- data/lib/hanami/components/app/assets.rb +0 -59
- data/lib/hanami/components/app/controller.rb +0 -74
- data/lib/hanami/components/app/routes.rb +0 -59
- data/lib/hanami/components/app/view.rb +0 -44
- data/lib/hanami/components/component.rb +0 -182
- data/lib/hanami/components/components.rb +0 -479
- data/lib/hanami/components/routes_inspector.rb +0 -72
- data/lib/hanami/components.rb +0 -156
- data/lib/hanami/config/cookies.rb +0 -69
- data/lib/hanami/config/framework_configuration.rb +0 -43
- data/lib/hanami/config/load_paths.rb +0 -46
- data/lib/hanami/config/mapper.rb +0 -47
- data/lib/hanami/config/routes.rb +0 -20
- data/lib/hanami/config/security.rb +0 -110
- data/lib/hanami/config/sessions.rb +0 -119
- data/lib/hanami/configuration/app.rb +0 -21
- data/lib/hanami/early_hints.rb +0 -129
- data/lib/hanami/env.rb +0 -69
- data/lib/hanami/environment.rb +0 -541
- data/lib/hanami/environment_application_configurations.rb +0 -37
- data/lib/hanami/hanamirc.rb +0 -169
- data/lib/hanami/mailer/glue.rb +0 -27
- data/lib/hanami/middleware_stack.rb +0 -172
- data/lib/hanami/rake_helper.rb +0 -78
- data/lib/hanami/rake_tasks.rb +0 -3
- data/lib/hanami/rendering_policy.rb +0 -94
- data/lib/hanami/routing/default.rb +0 -32
- data/lib/hanami/setup.rb +0 -3
- data/lib/hanami/static.rb +0 -63
- data/lib/hanami/templates/default.html.erb +0 -30
- data/lib/hanami/templates/welcome.html.erb +0 -52
- data/lib/hanami/views/default.rb +0 -37
- data/lib/hanami/views/default_template_finder.rb +0 -22
- data/lib/hanami/views/null_view.rb +0 -15
- data/lib/hanami/welcome.rb +0 -41
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1c197523a333228ef0596099b121a0f3a3e02c4a5a0da3f3f4fe837e794b7cf8
|
|
4
|
+
data.tar.gz: 5a7526ef47fc6f64ebffdae725d26a17944e390274dbc478ff52d593c7ba63b9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dd55bf77935140473affae77676eae8afe042f385dee3288dd9d80729fb887899f89950f26b83e2b793161545347cdc3dab8a5f6e0915013aa333c2caf2e080d
|
|
7
|
+
data.tar.gz: d254599b55640e0e3a27b718c1ae7141a40662c7291e60463d9620383cc419d49f06f5c8d1712b484f50ba758b71bf3f0ae79729452243532a0769e00478af8b
|
data/CHANGELOG.md
CHANGED
|
@@ -1,44 +1,54 @@
|
|
|
1
1
|
# Hanami
|
|
2
2
|
The web, with simplicity.
|
|
3
3
|
|
|
4
|
-
##
|
|
5
|
-
### Fixed
|
|
6
|
-
- [Ivan Kabluchkov] Ensure to properly store exceptions in Rack environment
|
|
7
|
-
- [Sean Collins] Explicitly limit in gemspec the supported rubies (>= 2.3 and < 3) for Hanami 1
|
|
8
|
-
|
|
9
|
-
### Changed
|
|
10
|
-
- [Luca Guidi] Use JSON as default HTTP session serializer for cookie session storage
|
|
11
|
-
|
|
12
|
-
## v1.3.4 - 2021-05-02
|
|
13
|
-
### Fixed
|
|
14
|
-
- [Slava Kardakov] Fix generated `config.ru` `require_relative` statement
|
|
15
|
-
- [Armin] Fix `Hanami::CommonLogger` elapsed time compatibility with `rack` 2.1.0+
|
|
16
|
-
- [Adam Daniels] Fix generated tests compatibility with `minitest` 6.0+
|
|
17
|
-
|
|
18
|
-
## v1.3.3 - 2019-09-20
|
|
19
|
-
### Added
|
|
20
|
-
- [Gray Manley] Standardize file loading for `.env` files (see: https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use)
|
|
21
|
-
|
|
22
|
-
### Fixed
|
|
23
|
-
- [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"`)
|
|
24
|
-
|
|
25
|
-
## v1.3.2 - 2019-07-26
|
|
26
|
-
### Added
|
|
27
|
-
- [Luca Guidi] Support both `hanami-validations` 1 and 2
|
|
28
|
-
|
|
29
|
-
### Fixed
|
|
30
|
-
- [Wisnu Adi Nurcahyo] Ensure `hanami generate` syntax for Welcome page is compatible with ZSH
|
|
31
|
-
- [Luca Guidi] Don't let `hanami` to crash when called without `bundle exec`
|
|
32
|
-
|
|
33
|
-
## v1.3.1 - 2019-01-18
|
|
4
|
+
## v2.0.0.alpha1 - 2019-01-30
|
|
34
5
|
### Added
|
|
35
|
-
- [Luca Guidi]
|
|
36
|
-
- [Luca Guidi]
|
|
6
|
+
- [Luca Guidi] Implemented from scratch `hanami version`
|
|
7
|
+
- [Luca Guidi] Implemented from scratch `hanami server`
|
|
8
|
+
- [Luca Guidi] Main configuration is opinionated: when a setting is not specified in generated code, it uses a framework default.
|
|
9
|
+
- [Luca Guidi] Main configuration setting `environment`: to yield env based settings (e.g. `config.environment(:production) { |c| c.logger = {...} }`)
|
|
10
|
+
- [Luca Guidi] Main configuration setting `base_url`: to set the base URL of the app (e.g. `config.base_url = "https://example.com"`)
|
|
11
|
+
- [Luca Guidi] Main configuration setting `logger`: to set the logger options (e.g. `config.logger = { level: :info, format: :json }`)
|
|
12
|
+
- [Luca Guidi] Main configuration setting `routes`: to set the path to routes file (e.g. `config.routes = "path/to/routes"`)
|
|
13
|
+
- [Luca Guidi] Main configuration setting `cookies`: to set cookies options (e.g. `config.cookies = { max_age: 300 }`)
|
|
14
|
+
- [Luca Guidi] Main configuration setting `sessions`: to set session options (e.g. `config.sessions = :cookie, { secret: "abc" }`)
|
|
15
|
+
- [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`)
|
|
16
|
+
- [Luca Guidi] Main configuration setting `default_response_format`: to set the default response format (aka MIME Type) (e.g. `config.default_response_format = :json`)
|
|
17
|
+
- [Luca Guidi] Main configuration setting `middleware` to mount Rack middleware (e.g. `config.middleware.use MyMiddleware, "argument"`)
|
|
18
|
+
- [Luca Guidi] Main configuration setting `security` to set security settings (see below)
|
|
19
|
+
- [Luca Guidi] Main configuration setting `inflections` to configure inflections (e.g. `config.inflections { |i| i.plural "virus", "viruses" }`)
|
|
20
|
+
- [Luca Guidi] Main configuration security setting `x_frame_options`: defaults to `"deny"` (e.g. `config.security.x_frame_options = "sameorigin"`)
|
|
21
|
+
- [Luca Guidi] Main configuration security setting `x_content_type_options`: defaults to `"nosniff"` (e.g. `config.security.x_content_type_options = nil`)
|
|
22
|
+
- [Luca Guidi] Main configuration security setting `x_xss_protection`: defaults to `"1; mode=block"` (e.g. `config.security.x_xss_protection = "1"`)
|
|
23
|
+
- [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'"`
|
|
24
|
+
(e.g. `config.security.content_security_policy[:style_src] += " https://my.cdn.example"` to add another source)
|
|
25
|
+
(e.g. `config.security.content_security_policy[:plugin_types] = nil` to override the settings)
|
|
37
26
|
|
|
38
|
-
###
|
|
39
|
-
- [
|
|
40
|
-
- [
|
|
41
|
-
- [
|
|
27
|
+
### Changed
|
|
28
|
+
- [Luca Guidi] Drop support for Ruby: MRI 2.3, and 2.4.
|
|
29
|
+
- [Luca Guidi] `Hanami::Application` must be used as superclass for main application under `config/application.rb` (e.g. `Bookshelf::Application`)
|
|
30
|
+
- [Luca Guidi] Main configuration is available at `config/application.rb` instead of `config/enviroment.rb`
|
|
31
|
+
- [Luca Guidi] Removed `Hanami.configure` in favor of main application configuration (e.g. `Bookshelf::Application.config`)
|
|
32
|
+
- [Luca Guidi] Removed DSL syntax for main configuration (from `cookies max_age: 600` to `config.cookies = { max_age: 600 }`)
|
|
33
|
+
- [Luca Guidi] Per enviroment settings must be wrapped in a block (e.g. `config.enviroment(:production) { |c| c.logger = {} }`)
|
|
34
|
+
- [Luca Guidi] Concrete applications are no longer supported (e.g. `Web::Application` in `apps/web/application.rb`)
|
|
35
|
+
- [Luca Guidi] Main routes must be configured at `config/routes.rb`:
|
|
36
|
+
```ruby
|
|
37
|
+
# frozen_string_literal: true
|
|
38
|
+
|
|
39
|
+
Hanami.application.routes do
|
|
40
|
+
mount :web, at: "/" do
|
|
41
|
+
root to: "home#index"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
mount :admin, at: "/admin" do
|
|
45
|
+
root to: "home#index"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
```
|
|
49
|
+
- [Luca Guidi] Per application routes are no longer supported (e.g. `apps/web/config/routes.rb`)
|
|
50
|
+
- [Luca Guidi] Removed `shotgun` and code reloading from the core. Code reloading is implemented by `hanami-reloader` gem.
|
|
51
|
+
- [Luca Guidi] Removed support for `.hanamirc`
|
|
42
52
|
|
|
43
53
|
## v1.3.0 - 2018-10-24
|
|
44
54
|
### Added
|
|
@@ -55,7 +65,7 @@ The web, with simplicity.
|
|
|
55
65
|
|
|
56
66
|
### Fixed
|
|
57
67
|
- [Anton Davydov] Make possible to pass extra settings for custom logger instances (eg. `logger SemanticLogger.new, :foo, :bar`)
|
|
58
|
-
- [graywolf] Ensure `hanami generate app` to work without `require_relative` entries in `config/
|
|
68
|
+
- [graywolf] Ensure `hanami generate app` to work without `require_relative` entries in `config/enviroment.rb`
|
|
59
69
|
- [Makoto Tajitsu & Luca Guidi] Fixed regression for `hanami new .` that used to generate a broken project
|
|
60
70
|
|
|
61
71
|
### Fixed
|
|
@@ -172,7 +182,7 @@ The web, with simplicity.
|
|
|
172
182
|
- [Luca Guidi] Make compatible with Rack 2.0 only
|
|
173
183
|
- [Luca Guidi] Removed `logger` settings from Hanami applications
|
|
174
184
|
- [Luca Guidi] Removed logger for Hanami applications (eg `Web.logger`)
|
|
175
|
-
- [Luca Guidi] Changed mailer syntax in `config/
|
|
185
|
+
- [Luca Guidi] Changed mailer syntax in `config/enviroment.rb`
|
|
176
186
|
|
|
177
187
|
## v0.9.2 - 2016-12-19
|
|
178
188
|
## Added
|
|
@@ -261,11 +271,11 @@ The web, with simplicity.
|
|
|
261
271
|
|
|
262
272
|
## v0.7.2 - 2016-02-09
|
|
263
273
|
### Fixed
|
|
264
|
-
- [Alfonso Uceda Pompa] Fixed routing issue when static assets server tried to
|
|
274
|
+
- [Alfonso Uceda Pompa] Fixed routing issue when static assets server tried to hijiack paths that are matching directories in public directory
|
|
265
275
|
|
|
266
276
|
## v0.7.1 - 2016-02-05
|
|
267
277
|
### Fixed
|
|
268
|
-
- [Anton Davydov] Fixed routing issue when static assets server tried to
|
|
278
|
+
- [Anton Davydov] Fixed routing issue when static assets server tried to hijiack requests belonging to dynamic endpoints
|
|
269
279
|
- [Anatolii Didukh] Ensure to fallback to default engine for `hanami console`
|
|
270
280
|
|
|
271
281
|
## v0.7.0 - 2016-01-22
|
|
@@ -400,7 +410,7 @@ The web, with simplicity.
|
|
|
400
410
|
## v0.3.0 - 2015-03-23
|
|
401
411
|
### Added
|
|
402
412
|
- [Luca Guidi] Introduced action generator. Eg. `bundle exec lotus generate action web dashboard#index`
|
|
403
|
-
- [Alfonso Uceda Pompa] Allow to specify default
|
|
413
|
+
- [Alfonso Uceda Pompa] Allow to specify default coookies options in application configuration. Eg. `cookies true, { domain: 'lotusrb.org' }`
|
|
404
414
|
- [Tom Kadwill] Include `Lotus::Helpers` in views.
|
|
405
415
|
- [Linus Pettersson] Allow to specify `--database` CLI option when generate a new project. Eg. `lotus new bookshelf --database=postgresql`
|
|
406
416
|
- [Linus Pettersson] Initialize a Git repository when generating a new project
|
data/FEATURES.md
CHANGED
|
@@ -3,17 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
## Features
|
|
5
5
|
|
|
6
|
-
##
|
|
7
|
-
|
|
8
|
-
## v1.3.4 - 2021-05-02
|
|
9
|
-
|
|
10
|
-
## v1.3.3 - 2019-09-20
|
|
11
|
-
|
|
12
|
-
- Standardize file loading for `.env` files (see: https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use)
|
|
13
|
-
|
|
14
|
-
## v1.3.2 - 2019-07-26
|
|
15
|
-
|
|
16
|
-
## v1.3.1 - 2019-01-18
|
|
6
|
+
## v2.0.0.alpha1 - 2019-01-30
|
|
17
7
|
|
|
18
8
|
## v1.3.0 - 2018-10-24
|
|
19
9
|
|
|
@@ -30,7 +20,7 @@
|
|
|
30
20
|
- Unobtrusive JavaScript (UJS) (via `hanami-ujs` gem)
|
|
31
21
|
- Interactive console for development error page (via `hanami-webconsole` gem)
|
|
32
22
|
- CLI: register callbacks for `hanami` commands (`Hanami::CLI.after("db migrate", MyCallback.new)` or `Hanami::CLI.after("db migrate") { ... }`)
|
|
33
|
-
- Project level Rack middleware stack (`Hanami.configure { middleware.use
|
|
23
|
+
- Project level Rack middleware stack (`Hanami.configure { middleware.use MyRackMiddlewre }`)
|
|
34
24
|
- Plugins can hook into project configuration (`Hanami.plugin { middleware.use AnotherRackMiddleware }`)
|
|
35
25
|
- Custom repository commands
|
|
36
26
|
- Coloured logging
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
The web, with simplicity.
|
|
4
4
|
|
|
5
|
-
## Version
|
|
6
|
-
|
|
7
|
-
**This branch contains the code for `hanami` 1.3.x.**
|
|
8
|
-
|
|
9
5
|
## Frameworks
|
|
10
6
|
|
|
11
7
|
Hanami is a **full-stack** Ruby web framework.
|
|
@@ -22,6 +18,7 @@ which provides the glue that ties all the parts together:
|
|
|
22
18
|
* [**Hanami::Helpers**](https://github.com/hanami/helpers) - View helpers for Ruby applications
|
|
23
19
|
* [**Hanami::Mailer**](https://github.com/hanami/mailer) - Mail for Ruby applications
|
|
24
20
|
* [**Hanami::Assets**](https://github.com/hanami/assets) - Assets management for Ruby
|
|
21
|
+
* [**Hanami::CLI**](https://github.com/hanami/cli) - Ruby command line interface
|
|
25
22
|
* [**Hanami::Utils**](https://github.com/hanami/utils) - Ruby core extensions and class utilities
|
|
26
23
|
|
|
27
24
|
These components are designed to be used independently or together in a Hanami application.
|
|
@@ -29,14 +26,14 @@ These components are designed to be used independently or together in a Hanami a
|
|
|
29
26
|
## Status
|
|
30
27
|
|
|
31
28
|
[](https://badge.fury.io/rb/hanami)
|
|
32
|
-
[](https://travis-ci.org/hanami/hanami)
|
|
30
|
+
[](https://codecov.io/gh/hanami/hanami)
|
|
34
31
|
[](https://depfu.com/github/hanami/hanami?project=Bundler)
|
|
35
32
|
[](http://inch-ci.org/github/hanami/hanami)
|
|
36
33
|
|
|
37
34
|
## Installation
|
|
38
35
|
|
|
39
|
-
__Hanami__ supports Ruby (MRI) 2.
|
|
36
|
+
__Hanami__ supports Ruby (MRI) 2.5+
|
|
40
37
|
|
|
41
38
|
```shell
|
|
42
39
|
gem install hanami
|
|
@@ -140,4 +137,4 @@ Released under MIT License.
|
|
|
140
137
|
|
|
141
138
|
This project was formerly known as Lotus (`lotusrb`).
|
|
142
139
|
|
|
143
|
-
Copyright © 2014-
|
|
140
|
+
Copyright © 2014-2019 Luca Guidi.
|
data/bin/hanami
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
require 'hanami/cli/commands'
|
|
2
|
+
# frozen_string_literal: true
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
require "bundler"
|
|
5
|
+
require "hanami/cli/commands"
|
|
6
|
+
|
|
7
|
+
Bundler.require(*Hanami.bundler_groups) if File.exist?(ENV["BUNDLE_GEMFILE"] || "Gemfile")
|
|
8
|
+
Hanami::CLI.new(Hanami::CLI::Commands).call
|
data/hanami.gemspec
CHANGED
|
@@ -1,40 +1,36 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
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
|
|
5
|
+
require "hanami/version"
|
|
5
6
|
|
|
6
7
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name =
|
|
8
|
+
spec.name = "hanami"
|
|
8
9
|
spec.version = Hanami::VERSION
|
|
9
|
-
spec.authors = [
|
|
10
|
-
spec.email = [
|
|
11
|
-
spec.summary =
|
|
12
|
-
spec.description =
|
|
13
|
-
spec.homepage =
|
|
14
|
-
spec.license =
|
|
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
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
19
|
spec.test_files = spec.files.grep(%r{^(test)/})
|
|
19
|
-
spec.require_paths = [
|
|
20
|
-
spec.required_ruby_version =
|
|
20
|
+
spec.require_paths = ["lib"]
|
|
21
|
+
spec.required_ruby_version = ">= 2.5.0"
|
|
21
22
|
|
|
22
|
-
spec.metadata[
|
|
23
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
23
24
|
|
|
24
|
-
spec.add_dependency
|
|
25
|
-
spec.add_dependency
|
|
26
|
-
spec.add_dependency
|
|
27
|
-
spec.add_dependency
|
|
28
|
-
spec.add_dependency
|
|
29
|
-
spec.add_dependency
|
|
30
|
-
spec.add_dependency
|
|
31
|
-
spec.add_dependency 'hanami-assets', '~> 1.3'
|
|
32
|
-
spec.add_dependency 'dry-cli', '~> 0.5'
|
|
33
|
-
spec.add_dependency 'concurrent-ruby', '~> 1.0'
|
|
34
|
-
spec.add_dependency 'bundler', '>= 1.6', '< 3'
|
|
25
|
+
spec.add_dependency "hanami-utils", "~> 2.0.alpha"
|
|
26
|
+
spec.add_dependency "hanami-router", "~> 2.0.alpha"
|
|
27
|
+
spec.add_dependency "hanami-controller", "~> 2.0.alpha"
|
|
28
|
+
spec.add_dependency "hanami-cli", "~> 1.0.alpha"
|
|
29
|
+
spec.add_dependency "dry-system", "~> 0.10"
|
|
30
|
+
spec.add_dependency "dry-inflector", "~> 0.1", ">= 0.1.2"
|
|
31
|
+
spec.add_dependency "bundler", ">= 1.16", "< 3"
|
|
35
32
|
|
|
36
|
-
spec.add_development_dependency
|
|
37
|
-
spec.add_development_dependency
|
|
38
|
-
spec.add_development_dependency
|
|
39
|
-
spec.add_development_dependency 'rake', '~> 13.0'
|
|
33
|
+
spec.add_development_dependency "rspec", "~> 3.8"
|
|
34
|
+
spec.add_development_dependency "rack-test", "~> 1.1"
|
|
35
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
|
40
36
|
end
|
data/lib/hanami/application.rb
CHANGED
|
@@ -1,202 +1,70 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require 'hanami/environment_application_configurations'
|
|
7
|
-
require 'hanami/rendering_policy'
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "hanami/configuration"
|
|
4
|
+
require "hanami/routes"
|
|
5
|
+
require "hanami/router"
|
|
8
6
|
|
|
9
7
|
module Hanami
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
# @since 0.1.0
|
|
13
|
-
#
|
|
14
|
-
# @example
|
|
15
|
-
# require 'hanami'
|
|
8
|
+
# Hanami application
|
|
16
9
|
#
|
|
17
|
-
#
|
|
18
|
-
# class Application < Hanami::Application
|
|
19
|
-
# end
|
|
20
|
-
# end
|
|
10
|
+
# @since 2.0.0
|
|
21
11
|
class Application
|
|
22
|
-
|
|
23
|
-
#
|
|
24
|
-
# @since 0.2.0
|
|
25
|
-
# @api private
|
|
26
|
-
#
|
|
27
|
-
# @see http://www.ruby-doc.org/core/Class.html#method-i-inherited
|
|
28
|
-
def self.inherited(base)
|
|
29
|
-
super
|
|
12
|
+
@_mutex = Mutex.new
|
|
30
13
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
# @api public
|
|
40
|
-
#
|
|
41
|
-
# @example
|
|
42
|
-
#
|
|
43
|
-
# Web.routes
|
|
44
|
-
# Admin.routes
|
|
45
|
-
attr_accessor :routes
|
|
14
|
+
def self.inherited(app)
|
|
15
|
+
@_mutex.synchronize do
|
|
16
|
+
app.class_eval do
|
|
17
|
+
@_mutex = Mutex.new
|
|
18
|
+
@_configuration = Hanami::Configuration.new(env: Hanami.env)
|
|
19
|
+
|
|
20
|
+
extend ClassMethods
|
|
21
|
+
include InstanceMethods
|
|
46
22
|
end
|
|
23
|
+
|
|
24
|
+
Hanami.application = app
|
|
47
25
|
end
|
|
48
26
|
end
|
|
49
27
|
|
|
50
|
-
# Class interface
|
|
28
|
+
# Class method interface
|
|
51
29
|
#
|
|
52
|
-
# @since 0.
|
|
53
|
-
# @api private
|
|
30
|
+
# @since 2.0.0
|
|
54
31
|
module ClassMethods
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
# @api private
|
|
59
|
-
#
|
|
60
|
-
# @see http://www.ruby-doc.org/core/Class.html#method-i-extended
|
|
61
|
-
def self.extended(base) # rubocop:disable Metrics/MethodLength
|
|
62
|
-
super
|
|
63
|
-
|
|
64
|
-
base.class_eval do
|
|
65
|
-
@namespace = ApplicationNamespace.resolve(name)
|
|
66
|
-
@configurations = EnvironmentApplicationConfigurations.new
|
|
67
|
-
@_lock = Mutex.new
|
|
32
|
+
def configuration
|
|
33
|
+
@_configuration
|
|
34
|
+
end
|
|
68
35
|
|
|
69
|
-
|
|
70
|
-
# @since 0.9.0
|
|
71
|
-
# @api private
|
|
72
|
-
attr_reader :namespace
|
|
36
|
+
alias config configuration
|
|
73
37
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
38
|
+
def routes(&blk)
|
|
39
|
+
@_mutex.synchronize do
|
|
40
|
+
if blk.nil?
|
|
41
|
+
raise "Hanami.application.routes not configured" unless defined?(@_routes)
|
|
77
42
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
43
|
+
@_routes
|
|
44
|
+
else
|
|
45
|
+
@_routes = Routes.new(&blk)
|
|
81
46
|
end
|
|
82
47
|
end
|
|
83
48
|
end
|
|
49
|
+
end
|
|
84
50
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
#
|
|
95
|
-
# module Web
|
|
96
|
-
# class Application < Hanami::Application
|
|
97
|
-
# end
|
|
98
|
-
# end
|
|
99
|
-
#
|
|
100
|
-
# Web::Application.app_name # => "web"
|
|
101
|
-
def app_name
|
|
102
|
-
ApplicationName.new(name).to_s
|
|
103
|
-
end
|
|
51
|
+
# Instance method interface
|
|
52
|
+
#
|
|
53
|
+
# @since 2.0.0
|
|
54
|
+
module InstanceMethods
|
|
55
|
+
def initialize(configuration: self.class.configuration, routes: self.class.routes)
|
|
56
|
+
@app = Rack::Builder.new do
|
|
57
|
+
configuration.for_each_middleware do |m, *args|
|
|
58
|
+
use m, *args
|
|
59
|
+
end
|
|
104
60
|
|
|
105
|
-
|
|
106
|
-
#
|
|
107
|
-
# @param configuration [Hanami::ApplicationConfiguration] the application configuration
|
|
108
|
-
#
|
|
109
|
-
# @raise [RuntimeError] if the configuration is assigned more than once
|
|
110
|
-
#
|
|
111
|
-
# @since 0.1.0
|
|
112
|
-
# @api private
|
|
113
|
-
def configuration=(configuration)
|
|
114
|
-
@_lock.synchronize do
|
|
115
|
-
# raise "Can't assign configuration more than once (#{app_name})" unless @configuration.nil?
|
|
116
|
-
@configuration = configuration
|
|
61
|
+
run Hanami::Router.new(**configuration.router_settings, &routes)
|
|
117
62
|
end
|
|
118
63
|
end
|
|
119
64
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
#
|
|
123
|
-
# @param environment [Symbol,nil] the configuration environment name
|
|
124
|
-
# @param blk [Proc] the configuration block
|
|
125
|
-
#
|
|
126
|
-
# @since 0.1.0
|
|
127
|
-
#
|
|
128
|
-
# @see Hanami::ApplicationConfiguration
|
|
129
|
-
#
|
|
130
|
-
# @example
|
|
131
|
-
# require 'hanami'
|
|
132
|
-
#
|
|
133
|
-
# module Bookshelf
|
|
134
|
-
# Application < Hanami::Application
|
|
135
|
-
# configure do
|
|
136
|
-
# # ...
|
|
137
|
-
# end
|
|
138
|
-
# end
|
|
139
|
-
# end
|
|
140
|
-
def configure(environment = nil, &blk)
|
|
141
|
-
configurations.add(environment, &blk)
|
|
65
|
+
def call(env)
|
|
66
|
+
@app.call(env)
|
|
142
67
|
end
|
|
143
68
|
end
|
|
144
|
-
|
|
145
|
-
# Initialize and load a new instance of the application
|
|
146
|
-
#
|
|
147
|
-
# @return [Hanami::Application] a new instance of the application
|
|
148
|
-
#
|
|
149
|
-
# @since 0.1.0
|
|
150
|
-
# @api private
|
|
151
|
-
def initialize
|
|
152
|
-
@renderer = RenderingPolicy.new(configuration)
|
|
153
|
-
@middleware = configuration.middleware
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
# Process a request.
|
|
157
|
-
# This method makes Hanami applications compatible with the Rack protocol.
|
|
158
|
-
#
|
|
159
|
-
# @param env [Hash] a Rack env
|
|
160
|
-
#
|
|
161
|
-
# @return [Array] a serialized Rack response
|
|
162
|
-
#
|
|
163
|
-
# @since 0.1.0
|
|
164
|
-
#
|
|
165
|
-
# @see http://rack.github.io
|
|
166
|
-
# @see Hanami::RenderingPolicy#render
|
|
167
|
-
# @see Hanami::Application#middleware
|
|
168
|
-
def call(env)
|
|
169
|
-
renderer.render(env, middleware.call(env))
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
private
|
|
173
|
-
|
|
174
|
-
# Return the configuration for this application
|
|
175
|
-
#
|
|
176
|
-
# @since 0.1.0
|
|
177
|
-
# @api private
|
|
178
|
-
#
|
|
179
|
-
# @see Hanami::Application.configuration
|
|
180
|
-
def configuration
|
|
181
|
-
self.class.configuration
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
# Rendering policy
|
|
185
|
-
#
|
|
186
|
-
# @since 0.2.0
|
|
187
|
-
# @api private
|
|
188
|
-
#
|
|
189
|
-
# @see Hanami::RenderingPolicy
|
|
190
|
-
attr_reader :renderer
|
|
191
|
-
|
|
192
|
-
# Rack middleware stack
|
|
193
|
-
#
|
|
194
|
-
# @return [Hanami::MiddlewareStack] the middleware stack
|
|
195
|
-
#
|
|
196
|
-
# @since 0.1.0
|
|
197
|
-
# @api private
|
|
198
|
-
#
|
|
199
|
-
# @see Hanami::MiddlewareStack
|
|
200
|
-
attr_reader :middleware
|
|
201
69
|
end
|
|
202
70
|
end
|
data/lib/hanami/boot.rb
ADDED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require 'hanami/utils/files'
|
|
9
|
-
require 'erb'
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "hanami"
|
|
4
|
+
require "hanami/cli/command"
|
|
5
|
+
require "concurrent"
|
|
6
|
+
require "hanami/utils/files"
|
|
7
|
+
require "erb"
|
|
10
8
|
|
|
11
9
|
module Hanami
|
|
12
10
|
# Hanami CLI
|
|
@@ -17,7 +15,7 @@ module Hanami
|
|
|
17
15
|
# Abstract command
|
|
18
16
|
#
|
|
19
17
|
# @since 1.1.0
|
|
20
|
-
class Command <
|
|
18
|
+
class Command < Hanami::CLI::Command
|
|
21
19
|
# @since 1.1.0
|
|
22
20
|
# @api private
|
|
23
21
|
def self.inherited(component)
|
|
@@ -72,17 +70,8 @@ module Hanami
|
|
|
72
70
|
# @since 1.1.0
|
|
73
71
|
# @api private
|
|
74
72
|
def call(**options)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
environment.require_project_environment
|
|
78
|
-
|
|
79
|
-
requirements.resolved('environment', environment)
|
|
80
|
-
requirements.resolve(self.class.requirements)
|
|
81
|
-
|
|
82
|
-
options = environment.to_options.merge(options)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
super(**options)
|
|
73
|
+
# FIXME: merge ENV vars (like HANAMI_ENV) into **options
|
|
74
|
+
super(options)
|
|
86
75
|
rescue StandardError => e
|
|
87
76
|
warn e.message
|
|
88
77
|
warn e.backtrace.join("\n\t")
|
|
@@ -92,10 +81,11 @@ module Hanami
|
|
|
92
81
|
|
|
93
82
|
# @since 1.1.0
|
|
94
83
|
# @api private
|
|
95
|
-
def initialize(out: $stdout, files: Utils::Files)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
@
|
|
84
|
+
def initialize(command_name:, out: $stdout, files: Utils::Files)
|
|
85
|
+
super(command_name: command_name)
|
|
86
|
+
|
|
87
|
+
@out = out
|
|
88
|
+
@files = files
|
|
99
89
|
end
|
|
100
90
|
|
|
101
91
|
private
|
|
@@ -107,7 +97,7 @@ module Hanami
|
|
|
107
97
|
class Renderer
|
|
108
98
|
# @since 1.1.0
|
|
109
99
|
# @api private
|
|
110
|
-
TRIM_MODE = "-"
|
|
100
|
+
TRIM_MODE = "-"
|
|
111
101
|
|
|
112
102
|
# @since 1.1.0
|
|
113
103
|
# @api private
|
|
@@ -124,7 +114,7 @@ module Hanami
|
|
|
124
114
|
|
|
125
115
|
# @since 1.1.0
|
|
126
116
|
# @api private
|
|
127
|
-
SAY_FORMATTER = "%<operation>12s %<path>s\n"
|
|
117
|
+
SAY_FORMATTER = "%<operation>12s %<path>s\n"
|
|
128
118
|
|
|
129
119
|
# @since 1.1.0
|
|
130
120
|
# @api private
|
|
@@ -165,13 +155,15 @@ module Hanami
|
|
|
165
155
|
# @since 1.1.0
|
|
166
156
|
# @api private
|
|
167
157
|
def project
|
|
168
|
-
|
|
158
|
+
# FIXME: is this still useful?
|
|
159
|
+
raise "it used to be implemented as Project"
|
|
169
160
|
end
|
|
170
161
|
|
|
171
162
|
# @since 1.1.0
|
|
172
163
|
# @api private
|
|
173
164
|
def requirements
|
|
174
|
-
Hanami::
|
|
165
|
+
# FIXME: require components via the new Hanami::Container
|
|
166
|
+
raise "it used to be implemented as Hanami::Components"
|
|
175
167
|
end
|
|
176
168
|
end
|
|
177
169
|
end
|