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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +110 -6
- data/FEATURES.md +9 -1
- data/LICENSE.md +1 -1
- data/README.md +4 -5
- data/hanami.gemspec +26 -30
- data/lib/hanami.rb +40 -243
- data/lib/hanami/application.rb +338 -174
- data/lib/hanami/application/autoloader/inflector_adapter.rb +22 -0
- data/lib/hanami/application/container/boot/inflector.rb +7 -0
- data/lib/hanami/application/container/boot/logger.rb +8 -0
- data/lib/hanami/application/container/boot/rack_logger.rb +19 -0
- data/lib/hanami/application/container/boot/rack_monitor.rb +12 -0
- data/lib/hanami/application/container/boot/settings.rb +7 -0
- data/lib/hanami/application/router.rb +59 -0
- data/lib/hanami/application/routing/middleware/stack.rb +89 -0
- data/lib/hanami/application/routing/resolver.rb +82 -0
- data/lib/hanami/application/routing/resolver/node.rb +50 -0
- data/lib/hanami/application/routing/resolver/trie.rb +59 -0
- data/lib/hanami/application/settings.rb +23 -0
- data/lib/hanami/application/settings/definition.rb +26 -0
- data/lib/hanami/application/settings/loader.rb +97 -0
- data/lib/hanami/application/settings/struct.rb +65 -0
- data/lib/hanami/boot.rb +5 -0
- data/lib/hanami/cli/application/cli.rb +40 -0
- data/lib/hanami/cli/application/command.rb +47 -0
- data/lib/hanami/cli/application/commands.rb +16 -0
- data/lib/hanami/cli/application/commands/console.rb +81 -0
- data/lib/hanami/cli/base_command.rb +48 -0
- data/lib/hanami/cli/commands.rb +6 -42
- data/lib/hanami/cli/commands/command.rb +20 -30
- data/lib/hanami/cli/commands/server.rb +63 -14
- data/lib/hanami/configuration.rb +248 -190
- data/lib/hanami/configuration/middleware.rb +8 -28
- data/lib/hanami/configuration/router.rb +50 -0
- data/lib/hanami/configuration/sessions.rb +50 -0
- data/lib/hanami/init.rb +5 -0
- data/lib/hanami/server.rb +5 -69
- data/lib/hanami/setup.rb +8 -2
- data/lib/hanami/slice.rb +138 -0
- data/lib/hanami/version.rb +3 -1
- data/lib/hanami/web/rack_logger.rb +96 -0
- metadata +84 -228
- data/bin/hanami +0 -6
- 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.rb +0 -16
- data/lib/hanami/cli/commands/assets/precompile.rb +0 -42
- data/lib/hanami/cli/commands/console.rb +0 -95
- data/lib/hanami/cli/commands/db.rb +0 -32
- 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/destroy.rb +0 -26
- 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/generate.rb +0 -28
- data/lib/hanami/cli/commands/generate/action.rb +0 -321
- 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/app.rb +0 -243
- 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/mailer.rb +0 -104
- 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/migration.rb +0 -41
- data/lib/hanami/cli/commands/generate/migration/migration.erb +0 -4
- data/lib/hanami/cli/commands/generate/model.rb +0 -125
- 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/secret.rb +0 -48
- data/lib/hanami/cli/commands/new.rb +0 -578
- 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 -58
- data/lib/hanami/cli/commands/new/README.md.erb +0 -33
- data/lib/hanami/cli/commands/new/config.ru.erb +0 -3
- 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/gitignore.erb +0 -2
- data/lib/hanami/cli/commands/new/gitignore_with_sqlite.erb +0 -3
- 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/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 -93
- data/lib/hanami/components.rb +0 -156
- 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/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 -103
- data/lib/hanami/configuration/app.rb +0 -18
- data/lib/hanami/early_hints.rb +0 -129
- data/lib/hanami/env.rb +0 -69
- data/lib/hanami/environment.rb +0 -513
- data/lib/hanami/environment_application_configurations.rb +0 -37
- data/lib/hanami/frameworks.rb +0 -22
- 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 -2
- data/lib/hanami/rendering_policy.rb +0 -95
- data/lib/hanami/routes.rb +0 -219
- data/lib/hanami/routing/default.rb +0 -32
- 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 -36
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
module Hanami
|
|
2
|
-
class CLI
|
|
3
|
-
module Commands
|
|
4
|
-
# @since 1.1.0
|
|
5
|
-
# @api private
|
|
6
|
-
class Routes < Command
|
|
7
|
-
requires "routes.inspector"
|
|
8
|
-
|
|
9
|
-
desc "Prints routes"
|
|
10
|
-
|
|
11
|
-
# @since 1.1.0
|
|
12
|
-
# @api private
|
|
13
|
-
def call(*)
|
|
14
|
-
puts requirements['routes.inspector'].inspect
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
register "routes", Commands::Routes
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module Hanami
|
|
2
|
-
class CLI
|
|
3
|
-
module Commands
|
|
4
|
-
# @since 1.1.0
|
|
5
|
-
# @api private
|
|
6
|
-
class Templates
|
|
7
|
-
NAMESPACE = name.sub(Utils::String.demodulize(name), "").freeze
|
|
8
|
-
|
|
9
|
-
# @since 1.1.0
|
|
10
|
-
# @api private
|
|
11
|
-
def initialize(klass)
|
|
12
|
-
word = klass.name.sub(NAMESPACE, "").split("::").map(&:downcase)
|
|
13
|
-
@root = Pathname.new(File.join(__dir__, *word))
|
|
14
|
-
freeze
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# @since 1.1.0
|
|
18
|
-
# @api private
|
|
19
|
-
def find(*names)
|
|
20
|
-
@root.join(*names)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
# @since 1.1.0
|
|
26
|
-
# @api private
|
|
27
|
-
attr_reader :root
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module Hanami
|
|
2
|
-
class CLI
|
|
3
|
-
module Commands
|
|
4
|
-
# @since 1.1.0
|
|
5
|
-
# @api private
|
|
6
|
-
class Version < Command
|
|
7
|
-
desc "Print Hanami version"
|
|
8
|
-
|
|
9
|
-
# @since 1.1.0
|
|
10
|
-
# @api private
|
|
11
|
-
def call(*)
|
|
12
|
-
puts "v#{Hanami::VERSION}"
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
register "version", Commands::Version, aliases: ["v", "-v", "--version"]
|
|
18
|
-
end
|
|
19
|
-
end
|
data/lib/hanami/common_logger.rb
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
require 'rack/common_logger'
|
|
2
|
-
require 'hanami/utils/hash'
|
|
3
|
-
|
|
4
|
-
module Hanami
|
|
5
|
-
# Rack logger for Hanami.app
|
|
6
|
-
#
|
|
7
|
-
# @since 1.0.0
|
|
8
|
-
# @api private
|
|
9
|
-
class CommonLogger < Rack::CommonLogger
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
# @since 1.0.0
|
|
13
|
-
# @api private
|
|
14
|
-
HTTP_VERSION = 'HTTP_VERSION'.freeze
|
|
15
|
-
|
|
16
|
-
# @since 1.0.0
|
|
17
|
-
# @api private
|
|
18
|
-
REQUEST_METHOD = 'REQUEST_METHOD'.freeze
|
|
19
|
-
|
|
20
|
-
# @since 1.0.0
|
|
21
|
-
# @api private
|
|
22
|
-
HTTP_X_FORWARDED_FOR = 'HTTP_X_FORWARDED_FOR'.freeze
|
|
23
|
-
|
|
24
|
-
# @since 1.0.0
|
|
25
|
-
# @api private
|
|
26
|
-
REMOTE_ADDR = 'REMOTE_ADDR'.freeze
|
|
27
|
-
|
|
28
|
-
# @since 1.0.0
|
|
29
|
-
# @api private
|
|
30
|
-
SCRIPT_NAME = 'SCRIPT_NAME'.freeze
|
|
31
|
-
|
|
32
|
-
# @since 1.0.0
|
|
33
|
-
# @api private
|
|
34
|
-
PATH_INFO = 'PATH_INFO'.freeze
|
|
35
|
-
|
|
36
|
-
# @since 1.0.0
|
|
37
|
-
# @api private
|
|
38
|
-
RACK_ERRORS = 'rack.errors'.freeze
|
|
39
|
-
|
|
40
|
-
# @since 1.1.0
|
|
41
|
-
# @api private
|
|
42
|
-
QUERY_HASH = 'rack.request.query_hash'.freeze
|
|
43
|
-
|
|
44
|
-
# @since 1.1.0
|
|
45
|
-
# @api private
|
|
46
|
-
FORM_HASH = 'rack.request.form_hash'.freeze
|
|
47
|
-
|
|
48
|
-
# @since 1.3.0
|
|
49
|
-
# @api private
|
|
50
|
-
ROUTER_PARAMS = 'router.params'.freeze
|
|
51
|
-
|
|
52
|
-
# @since 1.0.0
|
|
53
|
-
# @api private
|
|
54
|
-
#
|
|
55
|
-
# rubocop:disable Metrics/AbcSize
|
|
56
|
-
# rubocop:disable Metrics/MethodLength
|
|
57
|
-
def log(env, status, header, began_at)
|
|
58
|
-
now = Time.now
|
|
59
|
-
length = extract_content_length(header)
|
|
60
|
-
|
|
61
|
-
msg = Hash[
|
|
62
|
-
http: env[HTTP_VERSION],
|
|
63
|
-
verb: env[REQUEST_METHOD],
|
|
64
|
-
status: status.to_s[0..3],
|
|
65
|
-
ip: env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR],
|
|
66
|
-
path: env[SCRIPT_NAME] + env[PATH_INFO].to_s,
|
|
67
|
-
length: length,
|
|
68
|
-
params: extract_params(env),
|
|
69
|
-
elapsed: now - began_at
|
|
70
|
-
]
|
|
71
|
-
|
|
72
|
-
logger = @logger || env[RACK_ERRORS]
|
|
73
|
-
# Standard library logger doesn't support write but it supports << which actually
|
|
74
|
-
# calls to write on the log device without formatting
|
|
75
|
-
if logger.respond_to?(:write)
|
|
76
|
-
logger.write(msg)
|
|
77
|
-
else
|
|
78
|
-
logger.info(msg)
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
# rubocop:enable Metrics/MethodLength
|
|
82
|
-
# rubocop:enable Metrics/AbcSize
|
|
83
|
-
|
|
84
|
-
# @since 1.1.0
|
|
85
|
-
# @api private
|
|
86
|
-
def extract_params(env)
|
|
87
|
-
result = env.fetch(QUERY_HASH, {})
|
|
88
|
-
result.merge!(env.fetch(FORM_HASH, {}))
|
|
89
|
-
result.merge!(Utils::Hash.deep_stringify(env.fetch(ROUTER_PARAMS, {})))
|
|
90
|
-
result
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
data/lib/hanami/components.rb
DELETED
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
require 'concurrent'
|
|
2
|
-
|
|
3
|
-
module Hanami
|
|
4
|
-
# Components API
|
|
5
|
-
#
|
|
6
|
-
# Components are an internal Hanami that provides precise loading mechanism
|
|
7
|
-
# for a project. It is responsible to load frameworks, configurations, code, etc..
|
|
8
|
-
#
|
|
9
|
-
# The implementation is thread-safe
|
|
10
|
-
#
|
|
11
|
-
# @example
|
|
12
|
-
# Hanami::Components.resolved('repo') { UserRepository.new }
|
|
13
|
-
# Hanami::Components['repository.users'] # => #<UserRepository relations=[...]>
|
|
14
|
-
#
|
|
15
|
-
# Also you can use Hanami::Components with dry-auto_inject
|
|
16
|
-
#
|
|
17
|
-
# @example
|
|
18
|
-
# Hanami::Components.resolved('repo') { UserRepository.new }
|
|
19
|
-
# Hanami::Components['repository.users'] # => #<UserRepository relations=[...]>
|
|
20
|
-
#
|
|
21
|
-
# HanamiImport = Dry::AutoInject(Hanami::Components)
|
|
22
|
-
#
|
|
23
|
-
# class CreateUser
|
|
24
|
-
# include HanamiImport['repository.users']
|
|
25
|
-
#
|
|
26
|
-
# def call(payload)
|
|
27
|
-
# users.create(payload)
|
|
28
|
-
# end
|
|
29
|
-
# end
|
|
30
|
-
#
|
|
31
|
-
# CreateUser.new.call # => #<User:...>
|
|
32
|
-
# CreateUser.new(users: MockRepository.new).call # => #<MockUser:...>
|
|
33
|
-
#
|
|
34
|
-
# @since 0.9.0
|
|
35
|
-
# @api private
|
|
36
|
-
module Components
|
|
37
|
-
# Available components
|
|
38
|
-
#
|
|
39
|
-
# @since 0.9.0
|
|
40
|
-
# @api private
|
|
41
|
-
@_components = Concurrent::Hash.new
|
|
42
|
-
|
|
43
|
-
# Resolved components
|
|
44
|
-
#
|
|
45
|
-
# @since 0.9.0
|
|
46
|
-
# @api private
|
|
47
|
-
@_resolved = Concurrent::Map.new
|
|
48
|
-
|
|
49
|
-
# Register a component
|
|
50
|
-
#
|
|
51
|
-
# @param name [String] the unique component name
|
|
52
|
-
# @param blk [Proc] the logic of the component
|
|
53
|
-
#
|
|
54
|
-
# @since 0.9.0
|
|
55
|
-
# @api private
|
|
56
|
-
#
|
|
57
|
-
# @see Hanami::Components::Component
|
|
58
|
-
def self.register(name, &blk)
|
|
59
|
-
@_components[name] = Component.new(name, &blk)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Return a registered component
|
|
63
|
-
#
|
|
64
|
-
# @param name [String] the name of the component
|
|
65
|
-
#
|
|
66
|
-
# @raise [ArgumentError] if the component is unknown
|
|
67
|
-
#
|
|
68
|
-
# @since 0.9.0
|
|
69
|
-
# @api private
|
|
70
|
-
def self.component(name)
|
|
71
|
-
@_components.fetch(name) do
|
|
72
|
-
raise ArgumentError.new("Component not found: `#{name}'.\nAvailable components are: #{@_components.keys.join(', ')}")
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# Mark a component as resolved by providing a value or a block.
|
|
77
|
-
# In the latter case, the returning value of the block is associated with
|
|
78
|
-
# the component.
|
|
79
|
-
#
|
|
80
|
-
# @param name [String] the name of the component to mark as resolved
|
|
81
|
-
# @param value [Object] the optional value of the component
|
|
82
|
-
# @param blk [Proc] the optional block which returning value is associated with the component.
|
|
83
|
-
#
|
|
84
|
-
# @since 0.9.0
|
|
85
|
-
# @api private
|
|
86
|
-
def self.resolved(name, value = nil, &blk)
|
|
87
|
-
if block_given?
|
|
88
|
-
@_resolved.fetch_or_store(name, &blk)
|
|
89
|
-
else
|
|
90
|
-
@_resolved.compute_if_absent(name) { value }
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
# Ask to resolve a component.
|
|
95
|
-
#
|
|
96
|
-
# This is used as dependency mechanism.
|
|
97
|
-
# For instance `model` component depends on `model.configuration`. Before to
|
|
98
|
-
# resolve `model`, `Components` uses this method to resolve that dependency first.
|
|
99
|
-
#
|
|
100
|
-
# @param names [String,Array<String>] one or more components to be resolved
|
|
101
|
-
#
|
|
102
|
-
# @since 0.9.0
|
|
103
|
-
# @api private
|
|
104
|
-
def self.resolve(*names)
|
|
105
|
-
Array(names).flatten.each do |name|
|
|
106
|
-
@_resolved.fetch_or_store(name) do
|
|
107
|
-
component = @_components.fetch(name)
|
|
108
|
-
component.call(Hanami.configuration)
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
# Return the value of an already resolved component. Or raise error for not resolved component.
|
|
114
|
-
#
|
|
115
|
-
# @example
|
|
116
|
-
# Hanami::Components.resolved('repository.users') { UserRepository.new }
|
|
117
|
-
#
|
|
118
|
-
# Hanami::Components['repository.users'] # => #<UserRepository relations=[...]>
|
|
119
|
-
# Hanami::Components['repository.other'] # => error
|
|
120
|
-
#
|
|
121
|
-
# @param name [String] the component name
|
|
122
|
-
#
|
|
123
|
-
# @raise [ArgumentError] if the component is unknown or not resolved yet.
|
|
124
|
-
#
|
|
125
|
-
# @since 0.9.0
|
|
126
|
-
# @api private
|
|
127
|
-
def self.[](name)
|
|
128
|
-
@_resolved.fetch(name) do
|
|
129
|
-
raise ArgumentError.new("Component not resolved: `#{name}'.\nResolved components are: #{@_resolved.keys.join(', ')}")
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
# Release all the resolved components.
|
|
134
|
-
# This is used for code reloading.
|
|
135
|
-
#
|
|
136
|
-
# NOTE: this MUST NOT be used unless you know what you're doing.
|
|
137
|
-
#
|
|
138
|
-
# @example
|
|
139
|
-
# Hanami::Components.resolved('repository.users') { UserRepository.new }
|
|
140
|
-
# Hanami::Components['repository.users'] # => #<UserRepository relations=[...]>
|
|
141
|
-
#
|
|
142
|
-
# Hanami::Components.release
|
|
143
|
-
# Hanami::Components['repository.users']
|
|
144
|
-
# # => ArgumentError: Component not resolved: `repo'.
|
|
145
|
-
# # => Resolved components are: ...
|
|
146
|
-
#
|
|
147
|
-
# @since 1.0.0
|
|
148
|
-
# @api private
|
|
149
|
-
def self.release
|
|
150
|
-
@_resolved.clear
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
require 'hanami/components/component'
|
|
154
|
-
require 'hanami/components/components'
|
|
155
|
-
end
|
|
156
|
-
end
|
|
@@ -1,59 +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-assets configuration for a sigle Hanami application in the project.
|
|
9
|
-
#
|
|
10
|
-
# @since 0.9.0
|
|
11
|
-
# @api private
|
|
12
|
-
class Assets
|
|
13
|
-
# Configure hanami-assets 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?('Assets', false)
|
|
27
|
-
assets = Hanami::Assets.duplicate(namespace) do
|
|
28
|
-
root config.root
|
|
29
|
-
|
|
30
|
-
scheme config.scheme
|
|
31
|
-
host config.host
|
|
32
|
-
port config.port
|
|
33
|
-
|
|
34
|
-
public_directory Hanami.public_directory
|
|
35
|
-
prefix Utils::PathPrefix.new('/assets').join(config.path_prefix)
|
|
36
|
-
|
|
37
|
-
manifest Hanami.public_directory.join('assets.json')
|
|
38
|
-
compile true
|
|
39
|
-
|
|
40
|
-
config.assets.__apply(self)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
assets.configure do
|
|
44
|
-
cdn host != config.host
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
namespace.const_set('Assets', assets)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
name = "#{app.app_name}.assets"
|
|
51
|
-
Components.resolved(name, namespace.const_get('Assets').configuration)
|
|
52
|
-
Components[name]
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
# rubocop:enable Metrics/MethodLength
|
|
56
|
-
# rubocop:enable Metrics/AbcSize
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
@@ -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 sigle 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
|