hanami-router 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c4c9e9cca50f4347eebb07e6028d00e3085ac08d
4
- data.tar.gz: 53c659f0ee4e89ad910ccf3e6f59e07daa855d5c
3
+ metadata.gz: e9bd14745a1b63c2038d62532a7866d514ceb58f
4
+ data.tar.gz: 7ec9a711c3f691e7440b7cc9a2d6ea406ef0211d
5
5
  SHA512:
6
- metadata.gz: abd6ed28d60cb4fc621dca483c40b2a34360d1a86b86f559727c8b13f162f30119b9f7cb89a76843055087484fb2d0e06545a84de5ae81090dceb26caeb8be31
7
- data.tar.gz: 012172f6cf032845a56e4fec34173f5b7003a11ac8b6ccadf701debd7cb0854336df0253ad921118021fde4efb1a17fc1926f2a8a7bfed4ac84967adfdeb45ec
6
+ metadata.gz: 2b6ddfe2f03a008ea24d20da2ea7c6dce5a82c23861f3efd939e8c8858002d70321acb5bf1bc1582d8da210f505d19f394136edf516ace2822adaadb36058e14
7
+ data.tar.gz: 360579d8463cfb8e2bd7c26b77167f7095f7a39941ddd9ae0f68873ee2de117880142dcce79e625d1e31f72403f4591480126bcad21615ba2a80bec39ff964df
@@ -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
@@ -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
@@ -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
- get(path).redirect @router.find(options), options[:code] || 301
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
@@ -1,6 +1,6 @@
1
1
  module Hanami
2
2
  class Router
3
3
  # @since 0.1.0
4
- VERSION = '1.0.0'.freeze
4
+ VERSION = '1.0.1'.freeze
5
5
  end
6
6
  end
@@ -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 unless routable?
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.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-04-06 00:00:00.000000000 Z
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: minitest
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '5'
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: '5'
82
+ version: '11'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rake
84
+ name: rack-test
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '11'
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: '11'
96
+ version: '0.6'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rack-test
98
+ name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.6'
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: '0.6'
110
+ version: '3.5'
111
111
  description: Rack compatible HTTP router for Ruby
112
112
  email:
113
113
  - me@lucaguidi.com