hanami-router 1.0.0 → 1.0.1
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 +7 -0
- data/hanami-router.gemspec +1 -1
- data/lib/hanami/router.rb +4 -1
- data/lib/hanami/router/version.rb +1 -1
- data/lib/hanami/routing/endpoint.rb +32 -0
- data/lib/hanami/routing/recognized_route.rb +49 -2
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9bd14745a1b63c2038d62532a7866d514ceb58f
|
4
|
+
data.tar.gz: 7ec9a711c3f691e7440b7cc9a2d6ea406ef0211d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b6ddfe2f03a008ea24d20da2ea7c6dce5a82c23861f3efd939e8c8858002d70321acb5bf1bc1582d8da210f505d19f394136edf516ace2822adaadb36058e14
|
7
|
+
data.tar.gz: 360579d8463cfb8e2bd7c26b77167f7095f7a39941ddd9ae0f68873ee2de117880142dcce79e625d1e31f72403f4591480126bcad21615ba2a80bec39ff964df
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# Hanami::Router
|
2
2
|
Rack compatible HTTP router for Ruby
|
3
3
|
|
4
|
+
## v1.0.1 - 2017-07-10
|
5
|
+
### Added
|
6
|
+
- [Luca Guidi] Introduce new introspection methods (`#redirect?` and `#redirection_path`) for recognized routes (see `Hanami::Router#recognize`)
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
- [Luca Guidi] Ensure `Hanami::Router#redirect` to be compatible with `#recognize`
|
10
|
+
|
4
11
|
## v1.0.0 - 2017-04-06
|
5
12
|
|
6
13
|
## v1.0.0.rc1 - 2017-03-31
|
data/hanami-router.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency 'hanami-utils', '~> 1.0'
|
25
25
|
|
26
26
|
spec.add_development_dependency 'bundler', '~> 1.5'
|
27
|
-
spec.add_development_dependency 'minitest', '~> 5'
|
28
27
|
spec.add_development_dependency 'rake', '~> 11'
|
29
28
|
spec.add_development_dependency 'rack-test', '~> 0.6'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3.5'
|
30
30
|
end
|
data/lib/hanami/router.rb
CHANGED
@@ -622,7 +622,10 @@ module Hanami
|
|
622
622
|
# router = Hanami::Router.new
|
623
623
|
# router.redirect '/legacy', to: '/new_endpoint'
|
624
624
|
def redirect(path, options = {}, &endpoint)
|
625
|
-
|
625
|
+
destination_path = @router.find(options)
|
626
|
+
get(path).redirect(destination_path, options[:code] || 301).tap do |route|
|
627
|
+
route.dest = Hanami::Routing::RedirectEndpoint.new(destination_path, route.dest)
|
628
|
+
end
|
626
629
|
end
|
627
630
|
|
628
631
|
# Defines a Ruby block: all the routes defined within it will be namespaced
|
@@ -53,6 +53,17 @@ module Hanami
|
|
53
53
|
!__getobj__.nil?
|
54
54
|
rescue ArgumentError
|
55
55
|
end
|
56
|
+
|
57
|
+
# @since 1.0.1
|
58
|
+
# @api private
|
59
|
+
def redirect?
|
60
|
+
false
|
61
|
+
end
|
62
|
+
|
63
|
+
# @since 1.0.1
|
64
|
+
# @api private
|
65
|
+
def destination_path
|
66
|
+
end
|
56
67
|
end
|
57
68
|
|
58
69
|
# Routing endpoint
|
@@ -159,5 +170,26 @@ module Hanami
|
|
159
170
|
raise EndpointNotFound.new(e.message)
|
160
171
|
end
|
161
172
|
end
|
173
|
+
|
174
|
+
# @since 1.0.1
|
175
|
+
# @api private
|
176
|
+
class RedirectEndpoint < Endpoint
|
177
|
+
# @since 1.0.1
|
178
|
+
# @api private
|
179
|
+
attr_reader :destination_path
|
180
|
+
|
181
|
+
# @since 1.0.1
|
182
|
+
# @api private
|
183
|
+
def initialize(destination_path, destination)
|
184
|
+
@destination_path = destination_path
|
185
|
+
super(destination)
|
186
|
+
end
|
187
|
+
|
188
|
+
# @since 1.0.1
|
189
|
+
# @api private
|
190
|
+
def redirect?
|
191
|
+
true
|
192
|
+
end
|
193
|
+
end
|
162
194
|
end
|
163
195
|
end
|
@@ -115,7 +115,7 @@ module Hanami
|
|
115
115
|
#
|
116
116
|
# puts router.recognize('/books/23').action # => "books#show"
|
117
117
|
def action
|
118
|
-
return
|
118
|
+
return if !routable? || redirect?
|
119
119
|
namespace = NAMESPACE % @namespace
|
120
120
|
|
121
121
|
if destination.match(namespace)
|
@@ -146,7 +146,54 @@ module Hanami
|
|
146
146
|
# puts router.recognize('/').routable? # => true
|
147
147
|
# puts router.recognize('/foo').routable? # => false
|
148
148
|
def routable?
|
149
|
-
@endpoint&.routable?
|
149
|
+
@endpoint&.routable? || false
|
150
|
+
end
|
151
|
+
|
152
|
+
# Check if redirect
|
153
|
+
#
|
154
|
+
# @return [TrueClass,FalseClass]
|
155
|
+
#
|
156
|
+
# @since 1.0.1
|
157
|
+
# @api public
|
158
|
+
#
|
159
|
+
# @see Hanami::Router#recognize
|
160
|
+
#
|
161
|
+
# @example
|
162
|
+
# require 'hanami/router'
|
163
|
+
#
|
164
|
+
# router = Hanami::Router.new do
|
165
|
+
# get '/', to: 'home#index'
|
166
|
+
# redirect '/home', to: '/'
|
167
|
+
# end
|
168
|
+
#
|
169
|
+
# puts router.recognize('/home').redirect? # => true
|
170
|
+
# puts router.recognize('/').redirect? # => false
|
171
|
+
def redirect?
|
172
|
+
@endpoint&.redirect? || false
|
173
|
+
end
|
174
|
+
|
175
|
+
# Returns the redirect destination path
|
176
|
+
#
|
177
|
+
# @return [String,NilClass] the destination path, if it's a redirect
|
178
|
+
#
|
179
|
+
# @since 1.0.1
|
180
|
+
# @api public
|
181
|
+
#
|
182
|
+
# @see Hanami::Router#recognize
|
183
|
+
# @see #redirect?
|
184
|
+
#
|
185
|
+
# @example
|
186
|
+
# require 'hanami/router'
|
187
|
+
#
|
188
|
+
# router = Hanami::Router.new do
|
189
|
+
# get '/', to: 'home#index'
|
190
|
+
# redirect '/home', to: '/'
|
191
|
+
# end
|
192
|
+
#
|
193
|
+
# puts router.recognize('/home').destination_path # => "/"
|
194
|
+
# puts router.recognize('/').destination_path # => nil
|
195
|
+
def redirection_path
|
196
|
+
@endpoint&.destination_path
|
150
197
|
end
|
151
198
|
|
152
199
|
private
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-router
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -67,47 +67,47 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.5'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '11'
|
76
76
|
type: :development
|
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: '11'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rack-test
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '0.6'
|
90
90
|
type: :development
|
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: '0.6'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '3.5'
|
104
104
|
type: :development
|
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: '3.5'
|
111
111
|
description: Rack compatible HTTP router for Ruby
|
112
112
|
email:
|
113
113
|
- me@lucaguidi.com
|