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 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