hanami 1.1.1 → 1.2.0.beta1
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/hanami.gemspec +9 -9
- data/lib/hanami.rb +34 -0
- data/lib/hanami/app.rb +23 -3
- data/lib/hanami/cli/commands/new.rb +1 -1
- data/lib/hanami/cli/commands/new/Gemfile.erb +2 -0
- data/lib/hanami/cli/commands/new/config/environment.erb +2 -2
- data/lib/hanami/components/components.rb +13 -1
- data/lib/hanami/configuration.rb +32 -12
- data/lib/hanami/configuration/app.rb +18 -0
- data/lib/hanami/configuration/middleware.rb +37 -0
- data/lib/hanami/early_hints.rb +129 -0
- data/lib/hanami/version.rb +1 -1
- metadata +43 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a9410374b4c5778d39a7929a839012e22563268752d4937c4afe6343a74cd0c
|
4
|
+
data.tar.gz: 9fb8af94de128436c1e1cde83c79dc52c2321baa3ddf3605da7b97cb5a5e6195
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 021c99d12215c9932a830cfd1b00efa6f4049eebd98513b0469f6a38a811557a7da1c6e040cf9cdbae15ace92a3fc9d4fe349c5f492817868647c65f51b61b2e
|
7
|
+
data.tar.gz: 04a48aedeb9a843f63b4ed5cee9523f1d94fcc088034b8335bc94c6e8774af737a3b44601979d3609312ccba403a1283d8e0e92fac3539ade749a22675735277
|
data/hanami.gemspec
CHANGED
@@ -21,15 +21,15 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
23
23
|
|
24
|
-
spec.add_dependency 'hanami-utils', '
|
25
|
-
spec.add_dependency 'hanami-validations', '
|
26
|
-
spec.add_dependency 'hanami-router', '
|
27
|
-
spec.add_dependency 'hanami-controller', '
|
28
|
-
spec.add_dependency 'hanami-view', '
|
29
|
-
spec.add_dependency 'hanami-helpers', '
|
30
|
-
spec.add_dependency 'hanami-mailer', '
|
31
|
-
spec.add_dependency 'hanami-assets', '
|
32
|
-
spec.add_dependency 'hanami-cli', '
|
24
|
+
spec.add_dependency 'hanami-utils', '1.2.0.beta1'
|
25
|
+
spec.add_dependency 'hanami-validations', '1.2.0.beta1'
|
26
|
+
spec.add_dependency 'hanami-router', '1.2.0.beta1'
|
27
|
+
spec.add_dependency 'hanami-controller', '1.2.0.beta1'
|
28
|
+
spec.add_dependency 'hanami-view', '1.2.0.beta1'
|
29
|
+
spec.add_dependency 'hanami-helpers', '1.2.0.beta1'
|
30
|
+
spec.add_dependency 'hanami-mailer', '1.2.0.beta1'
|
31
|
+
spec.add_dependency 'hanami-assets', '1.2.0.beta1'
|
32
|
+
spec.add_dependency 'hanami-cli', '0.2.0.beta1'
|
33
33
|
spec.add_dependency 'concurrent-ruby', '~> 1.0'
|
34
34
|
spec.add_dependency 'bundler'
|
35
35
|
|
data/lib/hanami.rb
CHANGED
@@ -21,6 +21,7 @@ module Hanami
|
|
21
21
|
# @api private
|
22
22
|
# @since 0.9.0
|
23
23
|
@_mutex = Mutex.new
|
24
|
+
@_plugins = Concurrent::Array.new
|
24
25
|
|
25
26
|
# Configure Hanami project
|
26
27
|
#
|
@@ -77,6 +78,39 @@ module Hanami
|
|
77
78
|
end
|
78
79
|
end
|
79
80
|
|
81
|
+
# Configure a plugin
|
82
|
+
#
|
83
|
+
# @see Hanami.configure
|
84
|
+
#
|
85
|
+
# @since x.x.x
|
86
|
+
def self.plugin(&blk)
|
87
|
+
@_plugins << blk
|
88
|
+
end
|
89
|
+
|
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 x.x.x
|
109
|
+
# @api private
|
110
|
+
def self.plugins
|
111
|
+
@_plugins
|
112
|
+
end
|
113
|
+
|
80
114
|
# Boot your Hanami project
|
81
115
|
#
|
82
116
|
# NOTE: In case this is invoked many times, it guarantees that the boot
|
data/lib/hanami/app.rb
CHANGED
@@ -26,8 +26,10 @@ module Hanami
|
|
26
26
|
@routes = Hanami::Router.new
|
27
27
|
|
28
28
|
mount(configuration)
|
29
|
-
middleware(environment)
|
29
|
+
middleware(configuration, environment)
|
30
30
|
builder.run(routes)
|
31
|
+
|
32
|
+
@app = builder.to_app
|
31
33
|
end
|
32
34
|
|
33
35
|
# Implements Rack SPEC
|
@@ -39,11 +41,15 @@ module Hanami
|
|
39
41
|
# @since 0.9.0
|
40
42
|
# @api private
|
41
43
|
def call(env)
|
42
|
-
|
44
|
+
app.call(env)
|
43
45
|
end
|
44
46
|
|
45
47
|
private
|
46
48
|
|
49
|
+
# @since x.x.x
|
50
|
+
# @api private
|
51
|
+
attr_reader :app
|
52
|
+
|
47
53
|
# @since 0.9.0
|
48
54
|
# @api private
|
49
55
|
attr_reader :builder
|
@@ -62,15 +68,29 @@ module Hanami
|
|
62
68
|
|
63
69
|
# @since 0.9.0
|
64
70
|
# @api private
|
65
|
-
|
71
|
+
#
|
72
|
+
# rubocop:disable Metrics/AbcSize
|
73
|
+
# rubocop:disable Metrics/MethodLength
|
74
|
+
def middleware(configuration, environment)
|
66
75
|
builder.use Hanami::CommonLogger, Hanami.logger unless Hanami.logger.nil?
|
67
76
|
builder.use Rack::ContentLength
|
68
77
|
|
78
|
+
configuration.middleware.each do |m, args, blk|
|
79
|
+
builder.use(m, *args, &blk)
|
80
|
+
end
|
81
|
+
|
82
|
+
if configuration.early_hints
|
83
|
+
require 'hanami/early_hints'
|
84
|
+
builder.use Hanami::EarlyHints
|
85
|
+
end
|
86
|
+
|
69
87
|
if middleware = environment.static_assets_middleware # rubocop:disable Lint/AssignmentInCondition
|
70
88
|
builder.use middleware
|
71
89
|
end
|
72
90
|
|
73
91
|
builder.use Rack::MethodOverride
|
74
92
|
end
|
93
|
+
# rubocop:enable Metrics/MethodLength
|
94
|
+
# rubocop:enable Metrics/AbcSize
|
75
95
|
end
|
76
96
|
end
|
@@ -299,7 +299,7 @@ module Hanami
|
|
299
299
|
application_name: options.fetch(:application_name),
|
300
300
|
application_base_url: options.fetch(:application_base_url),
|
301
301
|
hanami_head: options.fetch(:hanami_head),
|
302
|
-
hanami_model_version: '
|
302
|
+
hanami_model_version: '1.2.0.beta1',
|
303
303
|
code_reloading: code_reloading?,
|
304
304
|
hanami_version: hanami_version,
|
305
305
|
project_module: Utils::String.classify(project),
|
@@ -16,7 +16,7 @@ Hanami.configure do
|
|
16
16
|
# adapter :sql, 'postgresql://localhost/<%= project %>_development'
|
17
17
|
# adapter :sql, 'mysql://localhost/<%= project %>_development'
|
18
18
|
#
|
19
|
-
adapter :<%= database_config_hash[:type] %>, ENV
|
19
|
+
adapter :<%= database_config_hash[:type] %>, ENV.fetch('DATABASE_URL')
|
20
20
|
|
21
21
|
<%- if database_config.sql? -%>
|
22
22
|
##
|
@@ -43,7 +43,7 @@ Hanami.configure do
|
|
43
43
|
logger level: :info, formatter: :json, filter: []
|
44
44
|
|
45
45
|
mailer do
|
46
|
-
delivery :smtp, address: ENV
|
46
|
+
delivery :smtp, address: ENV.fetch('SMTP_HOST'), port: ENV.fetch('SMTP_PORT')
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -323,7 +323,7 @@ module Hanami
|
|
323
323
|
# @since 0.9.0
|
324
324
|
# @api private
|
325
325
|
register 'finalizers' do
|
326
|
-
requires 'finalizers.initializers'
|
326
|
+
requires 'plugins', 'finalizers.initializers'
|
327
327
|
|
328
328
|
resolve { true }
|
329
329
|
end
|
@@ -340,6 +340,18 @@ module Hanami
|
|
340
340
|
end
|
341
341
|
end
|
342
342
|
|
343
|
+
# Load plugins
|
344
|
+
#
|
345
|
+
# @since x.x.x
|
346
|
+
# @api private
|
347
|
+
register 'plugins' do
|
348
|
+
resolve do |configuration|
|
349
|
+
Hanami.plugins.each do |plugin_configuration|
|
350
|
+
configuration.instance_eval(&plugin_configuration)
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
343
355
|
# Configure, load and finalize a Hanami application in the project
|
344
356
|
#
|
345
357
|
# @since 0.9.0
|
data/lib/hanami/configuration.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'concurrent'
|
2
|
-
require 'delegate'
|
3
2
|
require 'hanami/application'
|
4
3
|
require 'hanami/utils/class'
|
5
4
|
require 'hanami/utils/string'
|
@@ -7,17 +6,8 @@ require 'hanami/utils/string'
|
|
7
6
|
module Hanami
|
8
7
|
# @api private
|
9
8
|
class Configuration
|
10
|
-
|
11
|
-
|
12
|
-
# @api private
|
13
|
-
attr_reader :path_prefix
|
14
|
-
|
15
|
-
# @api private
|
16
|
-
def initialize(app, path_prefix)
|
17
|
-
super(app)
|
18
|
-
@path_prefix = path_prefix
|
19
|
-
end
|
20
|
-
end
|
9
|
+
require "hanami/configuration/app"
|
10
|
+
require "hanami/configuration/middleware"
|
21
11
|
|
22
12
|
# @api private
|
23
13
|
def initialize(&blk)
|
@@ -107,6 +97,36 @@ module Hanami
|
|
107
97
|
settings.fetch_or_store(:mounted, {})
|
108
98
|
end
|
109
99
|
|
100
|
+
# @since x.x.x
|
101
|
+
def middleware
|
102
|
+
settings.fetch_or_store(:middleware, Configuration::Middleware.new)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Setup Early Hints feature
|
106
|
+
#
|
107
|
+
# @since x.x.x
|
108
|
+
#
|
109
|
+
# @example Enable for all the environments
|
110
|
+
# # config/environment.rb
|
111
|
+
# Hanami.configure do
|
112
|
+
# early_hints true
|
113
|
+
# end
|
114
|
+
#
|
115
|
+
# @example Enable only for production
|
116
|
+
# # config/environment.rb
|
117
|
+
# Hanami.configure do
|
118
|
+
# environment :production do
|
119
|
+
# early_hints true
|
120
|
+
# end
|
121
|
+
# end
|
122
|
+
def early_hints(value = nil)
|
123
|
+
if value.nil?
|
124
|
+
settings.fetch(:early_hints, false)
|
125
|
+
else
|
126
|
+
settings[:early_hints] = value
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
110
130
|
# @since 0.9.0
|
111
131
|
# @api private
|
112
132
|
def apps
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "delegate"
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
# @api private
|
5
|
+
class Configuration
|
6
|
+
# @api private
|
7
|
+
class App < SimpleDelegator
|
8
|
+
# @api private
|
9
|
+
attr_reader :path_prefix
|
10
|
+
|
11
|
+
# @api private
|
12
|
+
def initialize(app, path_prefix)
|
13
|
+
super(app)
|
14
|
+
@path_prefix = path_prefix
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "concurrent"
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
# @api private
|
5
|
+
class Configuration
|
6
|
+
# Middleware configuration
|
7
|
+
class Middleware
|
8
|
+
# @api private
|
9
|
+
def initialize
|
10
|
+
@middleware = Concurrent::Array.new
|
11
|
+
end
|
12
|
+
|
13
|
+
# Use a Rack middleware
|
14
|
+
#
|
15
|
+
# @param middleware [#call] a Rack middleware
|
16
|
+
# @param args [Array<Object>] an optional set of options
|
17
|
+
# @param blk [Proc] an optional block to pass to the middleware
|
18
|
+
#
|
19
|
+
# @since x.x.x
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# # config/environment.rb
|
23
|
+
# # ...
|
24
|
+
# Hanami.configure do
|
25
|
+
# middleware.use MyRackMiddleware
|
26
|
+
# end
|
27
|
+
def use(middleware, *args, &blk)
|
28
|
+
@middleware.push([middleware, args, blk])
|
29
|
+
end
|
30
|
+
|
31
|
+
# @api private
|
32
|
+
def each(&blk)
|
33
|
+
@middleware.each(&blk)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
# HTTP/2 Early Hints Rack middleware
|
5
|
+
#
|
6
|
+
# It sends extra responses **before** the main reponse is sent.
|
7
|
+
# These extra responses are HTTP/2 Early Hints (103).
|
8
|
+
# They specify the web assets (javascripts, stylesheets, etc..) to be "pushed",
|
9
|
+
# so modern browsers pre-fetch them in parallel with the main HTTP response.
|
10
|
+
#
|
11
|
+
# @see https://tools.ietf.org/html/draft-ietf-httpbis-early-hints-05
|
12
|
+
#
|
13
|
+
# @since x.x.x
|
14
|
+
# @api private
|
15
|
+
class EarlyHints
|
16
|
+
# @since x.x.x
|
17
|
+
# @api private
|
18
|
+
class NotSupportedByServerError < ::StandardError
|
19
|
+
# @since x.x.x
|
20
|
+
# @api private
|
21
|
+
def initialize
|
22
|
+
super("Current Ruby server doesn't support Early Hints.\nPlease make sure to use a web server with Early Hints enabled (only Puma for now).")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# @since x.x.x
|
27
|
+
# @api private
|
28
|
+
def initialize(app)
|
29
|
+
@app = app
|
30
|
+
end
|
31
|
+
|
32
|
+
# @param env [Hash] Rack env
|
33
|
+
#
|
34
|
+
# @return [Array,Rack::Response] a Rack response
|
35
|
+
#
|
36
|
+
# @raise [Hanami::EarlyHints::NotSupportedByServerError] if the current Ruby
|
37
|
+
# server doesn't support Early Hints
|
38
|
+
#
|
39
|
+
# @since x.x.x
|
40
|
+
# @api private
|
41
|
+
def call(env)
|
42
|
+
@app.call(env).tap do
|
43
|
+
send_early_hints(env)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# Pushing a lot of assets may exceed the limit of HTTP headers of a single
|
50
|
+
# Early Hints (103) response.
|
51
|
+
#
|
52
|
+
# For this reason we send multiple Early Hints (103) responses for each `n`
|
53
|
+
# assets. We call this `n` number `BATCH_SIZE`.
|
54
|
+
#
|
55
|
+
# If the current page needs to push 23 assets, it will send 3 Early Hints
|
56
|
+
# (103) responses:
|
57
|
+
#
|
58
|
+
# 1. Response #1: 10 assets
|
59
|
+
# 2. Response #2: 10 assets
|
60
|
+
# 3. Response #3: 3 assets
|
61
|
+
#
|
62
|
+
# @since x.x.x
|
63
|
+
# @api private
|
64
|
+
BATCH_SIZE = 10
|
65
|
+
|
66
|
+
# Rack servers that support Early Hints (only Puma for now),
|
67
|
+
# inject an object into the Rack env to send multiple Early Hints (103)
|
68
|
+
# responses.
|
69
|
+
#
|
70
|
+
# @since x.x.x
|
71
|
+
# @api private
|
72
|
+
#
|
73
|
+
# @see https://github.com/puma/puma/pull/1403
|
74
|
+
RACK_EARLY_HINTS_ENV_KEY = "rack.early_hints"
|
75
|
+
|
76
|
+
# This cache key is used by `hanami-assets` to collect the assets that are
|
77
|
+
# eligible to be pushed.
|
78
|
+
#
|
79
|
+
# It stores these values in a thread-local variable.
|
80
|
+
#
|
81
|
+
# NOTE: if changing this key here, it MUST be changed into `hanami-assets` as well
|
82
|
+
#
|
83
|
+
# @since x.x.x
|
84
|
+
# @api private
|
85
|
+
CACHE_KEY = :__hanami_assets
|
86
|
+
|
87
|
+
# Tries to send multiple Early Hints (103) HTTP responses, if there are
|
88
|
+
# assets eligible.
|
89
|
+
#
|
90
|
+
# @param env [Hash] Rack env
|
91
|
+
#
|
92
|
+
# @raise [Hanami::EarlyHints::NotSupportedByServerError] if the current Ruby
|
93
|
+
# server doesn't support Early Hints
|
94
|
+
#
|
95
|
+
# @since x.x.x
|
96
|
+
# @api private
|
97
|
+
def send_early_hints(env)
|
98
|
+
return if Thread.current[CACHE_KEY].nil?
|
99
|
+
|
100
|
+
Thread.current[CACHE_KEY].each_slice(BATCH_SIZE) do |slice|
|
101
|
+
link = slice.map do |asset, options|
|
102
|
+
ret = %(<#{asset}>; rel=preload)
|
103
|
+
ret += "; as=#{options[:as]}" unless options[:as].nil?
|
104
|
+
ret += "; crossorigin" if options[:crossorigin]
|
105
|
+
ret
|
106
|
+
end.join("\n")
|
107
|
+
|
108
|
+
send_early_hints_response(env, link)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Tries to send an Early Hints (103) HTTP response for a batch of assets
|
113
|
+
#
|
114
|
+
# @param env [Hash] Rack env
|
115
|
+
# @param link [String] the serialized HTTP `Link` headers
|
116
|
+
#
|
117
|
+
# @raise [Hanami::EarlyHints::NotSupportedByServerError] if the current Ruby
|
118
|
+
# server doesn't support Early Hints
|
119
|
+
#
|
120
|
+
# @since x.x.x
|
121
|
+
# @api private
|
122
|
+
def send_early_hints_response(env, link)
|
123
|
+
env[RACK_EARLY_HINTS_ENV_KEY].call("Link" => link)
|
124
|
+
rescue NoMethodError => exception
|
125
|
+
raise exception if env.key?(RACK_EARLY_HINTS_ENV_KEY)
|
126
|
+
raise NotSupportedByServerError
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
data/lib/hanami/version.rb
CHANGED
metadata
CHANGED
@@ -1,141 +1,141 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hanami-utils
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.2.0.beta1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.2.0.beta1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: hanami-validations
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.2.0.beta1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.2.0.beta1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hanami-router
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 1.2.0.beta1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 1.2.0.beta1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: hanami-controller
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 1.2.0.beta1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 1.2.0.beta1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: hanami-view
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 1.2.0.beta1
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 1.2.0.beta1
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: hanami-helpers
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 1.2.0.beta1
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 1.2.0.beta1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: hanami-mailer
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 1.2.0.beta1
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 1.2.0.beta1
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: hanami-assets
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 1.2.0.beta1
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: 1.2.0.beta1
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: hanami-cli
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 0.2.0.beta1
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 0.2.0.beta1
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: concurrent-ruby
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -344,6 +344,9 @@ files:
|
|
344
344
|
- lib/hanami/config/security.rb
|
345
345
|
- lib/hanami/config/sessions.rb
|
346
346
|
- lib/hanami/configuration.rb
|
347
|
+
- lib/hanami/configuration/app.rb
|
348
|
+
- lib/hanami/configuration/middleware.rb
|
349
|
+
- lib/hanami/early_hints.rb
|
347
350
|
- lib/hanami/env.rb
|
348
351
|
- lib/hanami/environment.rb
|
349
352
|
- lib/hanami/environment_application_configurations.rb
|
@@ -382,9 +385,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
382
385
|
version: 2.3.0
|
383
386
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
384
387
|
requirements:
|
385
|
-
- - "
|
388
|
+
- - ">"
|
386
389
|
- !ruby/object:Gem::Version
|
387
|
-
version:
|
390
|
+
version: 1.3.1
|
388
391
|
requirements: []
|
389
392
|
rubyforge_project:
|
390
393
|
rubygems_version: 2.7.5
|