hanami 1.1.1 → 1.2.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|