hanami-controller 1.0.0.beta2 → 1.0.0.beta3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a55f1d51fe4e8c7f3d631f070eab1233fadc0c3e
4
- data.tar.gz: c9eb6f944227efb95943885e866adf40be3614dd
3
+ metadata.gz: 051cedd7011bacf9ca4f4fd4b98d8b61c618ef63
4
+ data.tar.gz: bfbc96dddca32aab07238ba15068fedae3abddae
5
5
  SHA512:
6
- metadata.gz: 01cbf64f7661609247d8eeb2ed3b73168a0e21dbcd69f48f60bd79d828db788099bdd70f4192a47090e8babd007faa75ac50d6d480dc9235d5aa39a1fe141961
7
- data.tar.gz: f24e1ee54fe5b990d4261c92889d602dd9e6fd9dfaef31dc975a6ff122a32ffc69c5c806b07cc24931919dac68d2a7ad152b841c9a1c61f61c6a3627fadc99cb
6
+ metadata.gz: 45d30eefef1706ddb0db5ff78083c778e6ae8eff2f34c3a434ec2df94883898a4ad5a9c9d6b5747664b9d17d4f872d0bf7b18c1dbce77bc1fce3f3e810c19d45
7
+ data.tar.gz: 9303820f4bd07c513945ec6008a52b2abf03b12b4b785853de7cc2aed436e91f08aa6ee08bf611f465d8351890e8f053d16b28be05afb697b3c7976fb5202da4
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Hanami::Controller
2
2
  Complete, fast and testable actions for Rack
3
3
 
4
+ ## v1.0.0.beta3 - 2017-03-17
5
+ ### Changed
6
+ - [Luca Guidi] `Action#flash` is now public API
7
+
4
8
  ## v1.0.0.beta2 - 2017-03-02
5
9
  ### Added
6
10
  - [Marcello Rocha] Add `Action#unsafe_send_file` to send files outside of the public directory of a project
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright © 2014-2016 Luca Guidi
1
+ Copyright © 2014-2017 Luca Guidi
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -202,8 +202,8 @@ class Signup
202
202
  params do
203
203
  required(:first_name).filled(:str?)
204
204
  required(:last_name).filled(:str?)
205
- required(:email).confirmation.filled?(:str?, format?: /@/)
206
- required(:password).confirmation.filled(:str?)
205
+ required(:email).filled?(:str?, format?: /\A.+@.+\z/)
206
+ required(:password).filled(:str?).confirmation
207
207
  required(:terms_of_service).filled(:bool?)
208
208
  required(:age).filled(:int?, included_in?: 18..99)
209
209
  optional(:avatar).filled(size?: 1..(MEGABYTE * 3))
@@ -940,7 +940,7 @@ class Csv
940
940
  self.format = :csv
941
941
  self.body = Enumerator.new do |yielder|
942
942
  yielder << csv_header
943
-
943
+
944
944
  # Expensive operation is streamed as each line becomes available
945
945
  csv_body.each_line do |line|
946
946
  yielder << line
@@ -950,7 +950,7 @@ class Csv
950
950
  end
951
951
  ```
952
952
 
953
- Note:
953
+ Note:
954
954
  * In development, Hanami' code reloading needs to be disabled for streaming to work. This is because `Shotgun` interferes with the streaming action. You can disable it like this `hanami server --code-reloading=false`
955
955
  * Streaming does not work with WEBrick as it buffers its response. We recommend using `puma`, though you may find success with other servers
956
956
 
@@ -1204,6 +1204,6 @@ __Hanami::Controller__ uses [Semantic Versioning 2.0.0](http://semver.org)
1204
1204
 
1205
1205
  ## Copyright
1206
1206
 
1207
- Copyright © 2014-2016 Luca Guidi – Released under MIT License
1207
+ Copyright © 2014-2017 Luca Guidi – Released under MIT License
1208
1208
 
1209
1209
  This project was formerly known as Lotus (`lotus-controller`).
@@ -7,12 +7,14 @@ module Hanami
7
7
  # The key that returns raw input from the Rack env
8
8
  #
9
9
  # @since 0.7.0
10
+ # @api private
10
11
  RACK_INPUT = 'rack.input'.freeze
11
12
 
12
13
  # The key that returns router params from the Rack env
13
14
  # This is a builtin integration for Hanami::Router
14
15
  #
15
16
  # @since 0.7.0
17
+ # @api private
16
18
  ROUTER_PARAMS = 'router.params'.freeze
17
19
 
18
20
  # The key that returns Rack session params from the Rack env
@@ -46,6 +48,7 @@ module Hanami
46
48
  # @return [Params]
47
49
  #
48
50
  # @since 0.7.0
51
+ # @api private
49
52
  def initialize(env)
50
53
  @env = env
51
54
  @raw = _extract_params
@@ -20,7 +20,7 @@ module Hanami
20
20
  # @since 0.3.0
21
21
  # @api private
22
22
  #
23
- # @see http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-included
23
+ # @see http://www.ruby-doc.org/core/Module.html#method-i-included
24
24
  def self.included(base)
25
25
  base.class_eval do
26
26
  include CacheControl, Expires
@@ -51,7 +51,6 @@ module Hanami
51
51
  # @return void
52
52
  #
53
53
  # @since 0.3.0
54
- # @api public
55
54
  #
56
55
  # @example
57
56
  # require 'hanami/controller'
@@ -74,7 +73,6 @@ module Hanami
74
73
  #
75
74
  # end
76
75
  # end
77
- #
78
76
  def cache_control(*values)
79
77
  cache_control = CacheControl::Directives.new(*values)
80
78
  headers.merge!(cache_control.headers)
@@ -91,7 +89,6 @@ module Hanami
91
89
  # @return void
92
90
  #
93
91
  # @since 0.3.0
94
- # @api public
95
92
  #
96
93
  # @example
97
94
  # require 'hanami/controller'
@@ -115,7 +112,6 @@ module Hanami
115
112
  #
116
113
  # end
117
114
  # end
118
- #
119
115
  def expires(amount, *values)
120
116
  expires = Expires::Directives.new(amount, *values)
121
117
  headers.merge!(expires.headers)
@@ -132,7 +128,6 @@ module Hanami
132
128
  # @return void
133
129
  #
134
130
  # @since 0.3.0
135
- # @api public
136
131
  #
137
132
  # @example
138
133
  # require 'hanami/controller'
@@ -3,19 +3,19 @@ require 'hanami/action/cache/directives'
3
3
  module Hanami
4
4
  module Action
5
5
  module Cache
6
-
7
6
  # Module with Cache-Control logic
8
7
  #
9
8
  # @since 0.3.0
10
9
  # @api private
11
10
  module CacheControl
12
-
13
11
  # The HTTP header for Cache-Control
14
12
  #
15
13
  # @since 0.3.0
16
14
  # @api private
17
15
  HEADER = 'Cache-Control'.freeze
18
16
 
17
+ # @since 0.3.0
18
+ # @api private
19
19
  def self.included(base)
20
20
  base.class_eval do
21
21
  extend ClassMethods
@@ -23,11 +23,17 @@ module Hanami
23
23
  end
24
24
  end
25
25
 
26
+ # @since 0.3.0
27
+ # @api private
26
28
  module ClassMethods
29
+ # @since 0.3.0
30
+ # @api private
27
31
  def cache_control(*values)
28
32
  @cache_control_directives ||= Directives.new(*values)
29
33
  end
30
34
 
35
+ # @since 0.3.0
36
+ # @api private
31
37
  def cache_control_directives
32
38
  @cache_control_directives || Object.new.tap do |null_object|
33
39
  def null_object.headers
@@ -51,14 +57,16 @@ module Hanami
51
57
  # Class which stores CacheControl values
52
58
  #
53
59
  # @since 0.3.0
54
- #
55
60
  # @api private
56
- #
57
61
  class Directives
62
+ # @since 0.3.0
63
+ # @api private
58
64
  def initialize(*values)
59
65
  @directives = Hanami::Action::Cache::Directives.new(*values)
60
66
  end
61
67
 
68
+ # @since 0.3.0
69
+ # @api private
62
70
  def headers
63
71
  if @directives.any?
64
72
  { HEADER => @directives.join(', ') }
@@ -25,22 +25,29 @@ module Hanami
25
25
  #
26
26
  # @since 0.3.0
27
27
  # @api private
28
- #
29
28
  class ETag
29
+ # @since 0.3.0
30
+ # @api private
30
31
  def initialize(env, value)
31
32
  @env, @value = env, value
32
33
  end
33
34
 
35
+ # @since 0.3.0
36
+ # @api private
34
37
  def fresh?
35
38
  none_match && @value == none_match
36
39
  end
37
40
 
41
+ # @since 0.3.0
42
+ # @api private
38
43
  def header
39
44
  { ETAG => @value } if none_match
40
45
  end
41
46
 
42
47
  private
43
48
 
49
+ # @since 0.3.0
50
+ # @api private
44
51
  def none_match
45
52
  @env[IF_NONE_MATCH]
46
53
  end
@@ -51,20 +58,28 @@ module Hanami
51
58
  # @since 0.3.0
52
59
  # @api private
53
60
  class LastModified
61
+ # @since 0.3.0
62
+ # @api private
54
63
  def initialize(env, value)
55
64
  @env, @value = env, value
56
65
  end
57
66
 
67
+ # @since 0.3.0
68
+ # @api private
58
69
  def fresh?
59
70
  !Hanami::Utils::Blank.blank?(modified_since) && Time.httpdate(modified_since).to_i >= @value.to_i
60
71
  end
61
72
 
73
+ # @since 0.3.0
74
+ # @api private
62
75
  def header
63
76
  { LAST_MODIFIED => @value.httpdate } if modified_since
64
77
  end
65
78
 
66
79
  private
67
80
 
81
+ # @since 0.3.0
82
+ # @api private
68
83
  def modified_since
69
84
  @env[IF_MODIFIED_SINCE]
70
85
  end
@@ -76,14 +91,20 @@ module Hanami
76
91
  # @since 0.3.0
77
92
  # @api private
78
93
  class ConditionalGet
94
+ # @since 0.3.0
95
+ # @api private
79
96
  def initialize(env, options)
80
97
  @validations = [ ETag.new(env, options[:etag]), LastModified.new(env, options[:last_modified]) ]
81
98
  end
82
99
 
100
+ # @since 0.3.0
101
+ # @api private
83
102
  def fresh?
84
103
  yield if @validations.any?(&:fresh?)
85
104
  end
86
105
 
106
+ # @since 0.3.0
107
+ # @api private
87
108
  def headers
88
109
  @validations.map(&:header).compact.reduce Hash.new, :merge
89
110
  end
@@ -1,7 +1,6 @@
1
1
  module Hanami
2
2
  module Action
3
3
  module Cache
4
-
5
4
  # Cache-Control directives which have values
6
5
  #
7
6
  # @since 0.3.0
@@ -21,16 +20,24 @@ module Hanami
21
20
  # @since 0.3.0
22
21
  # @api private
23
22
  class ValueDirective
23
+ # @since 0.3.0
24
+ # @api private
24
25
  attr_reader :name
25
26
 
27
+ # @since 0.3.0
28
+ # @api private
26
29
  def initialize(name, value)
27
30
  @name, @value = name, value
28
31
  end
29
32
 
33
+ # @since 0.3.0
34
+ # @api private
30
35
  def to_str
31
36
  "#{@name.to_s.tr('_', '-')}=#{@value.to_i}"
32
37
  end
33
38
 
39
+ # @since 0.3.0
40
+ # @api private
34
41
  def valid?
35
42
  VALUE_DIRECTIVES.include? @name
36
43
  end
@@ -43,16 +50,24 @@ module Hanami
43
50
  # @since 0.3.0
44
51
  # @api private
45
52
  class NonValueDirective
53
+ # @since 0.3.0
54
+ # @api private
46
55
  attr_reader :name
47
56
 
57
+ # @since 0.3.0
58
+ # @api private
48
59
  def initialize(name)
49
60
  @name = name
50
61
  end
51
62
 
63
+ # @since 0.3.0
64
+ # @api private
52
65
  def to_str
53
66
  @name.to_s.tr('_', '-')
54
67
  end
55
68
 
69
+ # @since 0.3.0
70
+ # @api private
56
71
  def valid?
57
72
  NON_VALUE_DIRECTIVES.include? @name
58
73
  end
@@ -65,6 +80,8 @@ module Hanami
65
80
  class Directives
66
81
  include Enumerable
67
82
 
83
+ # @since 0.3.0
84
+ # @api private
68
85
  def initialize(*values)
69
86
  @directives = []
70
87
  values.each do |directive_key|
@@ -76,20 +93,28 @@ module Hanami
76
93
  end
77
94
  end
78
95
 
96
+ # @since 0.3.0
97
+ # @api private
79
98
  def each
80
99
  @directives.each { |d| yield d }
81
100
  end
82
101
 
102
+ # @since 0.3.0
103
+ # @api private
83
104
  def <<(directive)
84
105
  @directives << directive if directive.valid?
85
106
  end
86
107
 
108
+ # @since 0.3.0
109
+ # @api private
87
110
  def values
88
111
  @directives.delete_if do |directive|
89
112
  directive.name == :public && @directives.map(&:name).include?(:private)
90
113
  end
91
114
  end
92
115
 
116
+ # @since 0.3.0
117
+ # @api private
93
118
  def join(separator)
94
119
  values.join(separator)
95
120
  end
@@ -3,19 +3,19 @@ require 'hanami/action/cache/cache_control'
3
3
  module Hanami
4
4
  module Action
5
5
  module Cache
6
-
7
6
  # Module with Expires logic
8
7
  #
9
8
  # @since 0.3.0
10
9
  # @api private
11
10
  module Expires
12
-
13
11
  # The HTTP header for Expires
14
12
  #
15
13
  # @since 0.3.0
16
14
  # @api private
17
15
  HEADER = 'Expires'.freeze
18
16
 
17
+ # @since 0.3.0
18
+ # @api private
19
19
  def self.included(base)
20
20
  base.class_eval do
21
21
  extend ClassMethods
@@ -23,11 +23,17 @@ module Hanami
23
23
  end
24
24
  end
25
25
 
26
+ # @since 0.3.0
27
+ # @api private
26
28
  module ClassMethods
29
+ # @since 0.3.0
30
+ # @api private
27
31
  def expires(amount, *values)
28
32
  @expires_directives ||= Directives.new(amount, *values)
29
33
  end
30
34
 
35
+ # @since 0.3.0
36
+ # @api private
31
37
  def expires_directives
32
38
  @expires_directives || Object.new.tap do |null_object|
33
39
  def null_object.headers
@@ -51,21 +57,25 @@ module Hanami
51
57
  # Class which stores Expires directives
52
58
  #
53
59
  # @since 0.3.0
54
- #
55
60
  # @api private
56
- #
57
61
  class Directives
62
+ # @since 0.3.0
63
+ # @api private
58
64
  def initialize(amount, *values)
59
65
  @amount = amount
60
66
  @cache_control = Hanami::Action::Cache::CacheControl::Directives.new(*(values << { max_age: amount }))
61
67
  end
62
68
 
69
+ # @since 0.3.0
70
+ # @api private
63
71
  def headers
64
72
  { HEADER => time.httpdate }.merge(@cache_control.headers)
65
73
  end
66
74
 
67
75
  private
68
76
 
77
+ # @since 0.3.0
78
+ # @api private
69
79
  def time
70
80
  Time.now + @amount.to_i
71
81
  end
@@ -197,10 +197,14 @@ module Hanami
197
197
  end
198
198
 
199
199
  private
200
+ # @since 0.1.0
201
+ # @api private
200
202
  def _run_before_callbacks(params)
201
203
  self.class.before_callbacks.run(self, params)
202
204
  end
203
205
 
206
+ # @since 0.1.0
207
+ # @api private
204
208
  def _run_after_callbacks(params)
205
209
  self.class.after_callbacks.run(self, params)
206
210
  end
@@ -41,6 +41,7 @@ module Hanami
41
41
 
42
42
  private
43
43
 
44
+ # @since 0.2.0
44
45
  def configuration
45
46
  self.class.configuration
46
47
  end
@@ -23,7 +23,6 @@ module Hanami
23
23
  # @return [Hanami::Action::CookieJar] cookies
24
24
  #
25
25
  # @since 0.1.0
26
- # @api public
27
26
  #
28
27
  # @see Hanami::Controller::Configuration#cookies
29
28
  # @see Hanami::Action::CookieJar#[]=
@@ -15,6 +15,7 @@ module Hanami
15
15
  # Prevents exposure of reserved words
16
16
  #
17
17
  # @since 0.7.1
18
+ # @api private
18
19
  #
19
20
  # @see Hanami::Action::Exposable::Guard::ClassMethods#expose
20
21
  # @see Hanami::Action::Exposable::Guard::ClassMethods#reserved_word?
@@ -47,6 +48,7 @@ module Hanami
47
48
  # @return [void]
48
49
  #
49
50
  # @since 0.7.1
51
+ # @api private
50
52
  def expose(*names)
51
53
  detect_reserved_words!(names)
52
54
 
@@ -78,7 +78,6 @@ module Hanami
78
78
  # quota via <tt>X-Rate-Limit</tt>.
79
79
  #
80
80
  # @since 0.5.0
81
- # @api public
82
81
  #
83
82
  # @see Hanami::Action::HEAD#finish
84
83
  #
@@ -40,7 +40,7 @@ module Hanami
40
40
  # @api private
41
41
  DEFAULT_CHARSET = 'utf-8'.freeze
42
42
 
43
- # Most commom mime types used for responses
43
+ # Most commom MIME Types used for responses
44
44
  #
45
45
  # @since 1.0.0.beta1
46
46
  # @api private
@@ -26,6 +26,34 @@ module Hanami
26
26
  end
27
27
  end
28
28
 
29
+ # Define params validations
30
+ #
31
+ # @param blk [Proc] the validations definitions
32
+ #
33
+ # @since 0.7.0
34
+ #
35
+ # @see http://hanamirb.org/guides/validations/overview/
36
+ #
37
+ # @example
38
+ # class Signup
39
+ # MEGABYTE = 1024 ** 2
40
+ # include Hanami::Action
41
+ #
42
+ # params do
43
+ # required(:first_name).filled(:str?)
44
+ # required(:last_name).filled(:str?)
45
+ # required(:email).filled?(:str?, format?: /\A.+@.+\z/)
46
+ # required(:password).filled(:str?).confirmation
47
+ # required(:terms_of_service).filled(:bool?)
48
+ # required(:age).filled(:int?, included_in?: 18..99)
49
+ # optional(:avatar).filled(size?: 1..(MEGABYTE * 3))
50
+ # end
51
+ #
52
+ # def call(params)
53
+ # halt 400 unless params.valid?
54
+ # # ...
55
+ # end
56
+ # end
29
57
  def self.params(&blk)
30
58
  validations(&blk || ->() {})
31
59
  end
@@ -37,6 +65,7 @@ module Hanami
37
65
  # @return [Params]
38
66
  #
39
67
  # @since 0.1.0
68
+ # @api private
40
69
  def initialize(env)
41
70
  @env = env
42
71
  super(_extract_params)
@@ -115,6 +144,7 @@ module Hanami
115
144
 
116
145
  private
117
146
 
147
+ # @api private
118
148
  def _params
119
149
  @result.output.merge(_router_params)
120
150
  end
@@ -98,10 +98,12 @@ module Hanami
98
98
  end
99
99
  end
100
100
 
101
+ # @api private
101
102
  module ClassMethods
102
103
  # Build rack builder
103
104
  #
104
105
  # @return [Rack::Builder]
106
+ # @api private
105
107
  def rack_builder
106
108
  @rack_builder ||= begin
107
109
  extend Hanami::Action::Rack::Callable
@@ -242,6 +244,7 @@ module Hanami
242
244
  @request ||= ::Hanami::Action::Request.new(@_env)
243
245
  end
244
246
 
247
+ # Return parsed request body
245
248
  def parsed_request_body
246
249
  @_env.fetch(ROUTER_PARSED_BODY, nil)
247
250
  end
@@ -1,4 +1,3 @@
1
-
2
1
  module Hanami
3
2
  module Action
4
3
  module Rack
@@ -10,6 +9,7 @@ module Hanami
10
9
  # see the examples below.
11
10
  #
12
11
  # @since 0.4.0
12
+ # @api private
13
13
  #
14
14
  # @see Hanami::Action::Rack::ClassMethods#rack_builder
15
15
  # @see Hanami::Action::Rack::ClassMethods#use
@@ -9,7 +9,6 @@ module Hanami
9
9
  #
10
10
  # @see http://www.rubydoc.info/gems/rack/Rack/Request
11
11
  class Request < ::Rack::Request
12
-
13
12
  # @raise [NotImplementedError]
14
13
  #
15
14
  # @since 0.3.1
@@ -80,7 +80,6 @@ module Hanami
80
80
  # @return [Hanami::Action::Flash] a Flash instance
81
81
  #
82
82
  # @since 0.3.0
83
- # @api private
84
83
  #
85
84
  # @see Hanami::Action::Flash
86
85
  def flash
@@ -28,6 +28,8 @@ module Hanami
28
28
  # @see https://github.com/hanami/controller/issues/133
29
29
  RACK_EXCEPTION = 'rack.exception'.freeze
30
30
 
31
+ # @since 0.1.0
32
+ # @api private
31
33
  def self.included(base)
32
34
  base.extend ClassMethods
33
35
  end
@@ -9,6 +9,8 @@ module Hanami
9
9
  # @since 0.3.0
10
10
  PARAMS_CLASS_NAME = 'Params'.freeze
11
11
 
12
+ # @api private
13
+ # @since 0.1.0
12
14
  def self.included(base)
13
15
  base.extend ClassMethods
14
16
  end
@@ -48,6 +50,7 @@ module Hanami
48
50
  # @since 0.3.0
49
51
  #
50
52
  # @see Hanami::Action::Params
53
+ # @see http://hanamirb.org/guides/validations/overview/
51
54
  #
52
55
  # @example Anonymous Block
53
56
  # require 'hanami/controller'
@@ -56,9 +59,9 @@ module Hanami
56
59
  # include Hanami::Action
57
60
  #
58
61
  # params do
59
- # param :first_name
60
- # param :last_name
61
- # param :email
62
+ # required(:first_name)
63
+ # required(:last_name)
64
+ # required(:email)
62
65
  # end
63
66
  #
64
67
  # def call(params)
@@ -74,9 +77,9 @@ module Hanami
74
77
  # require 'hanami/controller'
75
78
  #
76
79
  # class SignupParams < Hanami::Action::Params
77
- # param :first_name
78
- # param :last_name
79
- # param :email
80
+ # required(:first_name)
81
+ # required(:last_name)
82
+ # required(:email)
80
83
  # end
81
84
  #
82
85
  # class Signup
@@ -4,6 +4,9 @@ require 'hanami/controller/configuration'
4
4
  require 'hanami/controller/version'
5
5
  require 'hanami/controller/error'
6
6
 
7
+ # Hanami
8
+ #
9
+ # @since 0.1.0
7
10
  module Hanami
8
11
  # A set of logically grouped actions
9
12
  #
@@ -37,6 +40,8 @@ module Hanami
37
40
  #
38
41
  # @see Hanami::Action::Mime#format=
39
42
  class UnknownFormatError < Hanami::Controller::Error
43
+ # @since 0.2.0
44
+ # @api private
40
45
  def initialize(format)
41
46
  super("Cannot find a corresponding Mime type for '#{ format }'. Please configure it with Hanami::Controller::Configuration#format.")
42
47
  end
@@ -130,7 +135,7 @@ module Hanami
130
135
  #
131
136
  # @return [Module] a copy of Hanami::Controller
132
137
  #
133
- # @since 0.2.0
138
+ # @since 0.2.0
134
139
  #
135
140
  # @see Hanami::Controller#dupe
136
141
  # @see Hanami::Controller::Configuration
@@ -252,4 +257,3 @@ module Hanami
252
257
  end
253
258
  end
254
259
  end
255
-
@@ -3,6 +3,6 @@ module Hanami
3
3
  # Defines the version
4
4
  #
5
5
  # @since 0.1.0
6
- VERSION = '1.0.0.beta2'.freeze
6
+ VERSION = '1.0.0.beta3'.freeze
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-controller
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta2
4
+ version: 1.0.0.beta3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-03-02 00:00:00.000000000 Z
13
+ date: 2017-03-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack