rails-rfc6570 2.4.0 → 2.5.0
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 +33 -0
- data/README.md +2 -2
- data/lib/rails/rfc6570.rb +27 -21
- data/lib/rails/rfc6570/formatter.rb +3 -1
- data/lib/rails/rfc6570/version.rb +1 -1
- data/lib/rails/rfc6570/visitor.rb +3 -5
- data/rails-rfc6570.gemspec +2 -2
- data/spec/dummy/log/test.log +2992 -28
- data/spec/rails/rfc6570/visitor_spec.rb +23 -3
- data/spec/{rfc6570_spec.rb → rails/rfc6570_spec.rb} +27 -27
- data/spec/spec_helper.rb +7 -4
- metadata +7 -7
@@ -3,110 +3,130 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
RSpec.describe ::Rails::RFC6570::Visitor do
|
6
|
+
subject(:accept) { visitor.accept(node) }
|
7
|
+
|
6
8
|
let(:visitor) { described_class.new }
|
7
9
|
let(:node) { ::ActionDispatch::Journey::Parser.new.parse(path) }
|
8
10
|
|
9
|
-
subject { visitor.accept(node) }
|
10
|
-
|
11
11
|
describe '/' do
|
12
12
|
let(:path) { '/' }
|
13
|
+
|
13
14
|
it { is_expected.to eq %w[/] }
|
14
15
|
end
|
15
16
|
|
16
17
|
describe '/path/path' do
|
17
18
|
let(:path) { '/path/path' }
|
19
|
+
|
18
20
|
it { is_expected.to eq %w[/ path / path] }
|
19
21
|
end
|
20
22
|
|
21
23
|
describe '/:title' do
|
22
24
|
let(:path) { '/:title' }
|
25
|
+
|
23
26
|
it { is_expected.to eq %w[/ {title}] }
|
24
27
|
end
|
25
28
|
|
26
29
|
describe '/:title(.:format)' do
|
27
30
|
let(:path) { '/:title(.:format)' }
|
31
|
+
|
28
32
|
it { is_expected.to eq %w[/ {title} {.format}] }
|
29
33
|
end
|
30
34
|
|
31
35
|
describe '/path/:title' do
|
32
36
|
let(:path) { '/path/:title' }
|
37
|
+
|
33
38
|
it { is_expected.to eq %w[/ path / {title}] }
|
34
39
|
end
|
35
40
|
|
36
41
|
describe '/path/pre-(:id)-post' do
|
37
42
|
let(:path) { '/path/pre-(:id)-post' }
|
43
|
+
|
38
44
|
it { is_expected.to eq %w[/ path / pre- {id} -post] }
|
39
45
|
end
|
40
46
|
|
41
47
|
describe '/path(/:title)' do
|
42
48
|
let(:path) { '/path(/:title)' }
|
49
|
+
|
43
50
|
it { is_expected.to eq %w[/ path {/title}] }
|
44
51
|
end
|
45
52
|
|
46
53
|
describe '/path/*capture/:title' do
|
47
54
|
let(:path) { '/path/*capture/:title' }
|
55
|
+
|
48
56
|
it { is_expected.to eq %w[/ path {/capture*} / {title}] }
|
49
57
|
end
|
50
58
|
|
51
59
|
describe '/path(/*capture)/:title' do
|
52
60
|
let(:path) { '/path(/*capture)/:title' }
|
61
|
+
|
53
62
|
it { is_expected.to eq %w[/ path {/capture*} / {title}] }
|
54
63
|
end
|
55
64
|
|
56
65
|
describe '/path(/*capture)(/:title)' do
|
57
66
|
let(:path) { '/path(/*capture)(/:title)' }
|
67
|
+
|
58
68
|
it { is_expected.to eq %w[/ path {/capture*} {/title}] }
|
59
69
|
end
|
60
70
|
|
61
71
|
describe '*a/path/*b' do
|
62
72
|
let(:path) { '*a/path/*b' }
|
73
|
+
|
63
74
|
it { is_expected.to eq %w[{/a*} / path {/b*}] }
|
64
75
|
end
|
65
76
|
|
66
77
|
describe 'path/*a/path/*b' do
|
67
78
|
let(:path) { 'path/*a/path/*b' }
|
79
|
+
|
68
80
|
it { is_expected.to eq %w[path {/a*} / path {/b*}] }
|
69
81
|
end
|
70
82
|
|
71
83
|
describe 'path/*a/*b' do
|
72
84
|
let(:path) { 'path/*a/*b' }
|
85
|
+
|
73
86
|
it { is_expected.to eq %w[path {/a*} {/b*}] }
|
74
87
|
end
|
75
88
|
|
76
89
|
describe 'path/*a/:title' do
|
77
90
|
let(:path) { 'path/*a/:title' }
|
91
|
+
|
78
92
|
it { is_expected.to eq %w[path {/a*} / {title}] }
|
79
93
|
end
|
80
94
|
|
81
95
|
describe 'path/*a(/:title)' do
|
82
96
|
let(:path) { 'path/*a(/:title)' }
|
97
|
+
|
83
98
|
it { is_expected.to eq %w[path {/a*} {/title}] }
|
84
99
|
end
|
85
100
|
|
86
101
|
describe '/(:title)' do
|
87
102
|
let(:path) { '/(:title)' }
|
103
|
+
|
88
104
|
it { is_expected.to eq %w[/ {title}] }
|
89
105
|
end
|
90
106
|
|
91
107
|
describe '(/:title)' do
|
92
108
|
let(:path) { '(/:title)' }
|
109
|
+
|
93
110
|
it { is_expected.to eq %w[{/title}] }
|
94
111
|
end
|
95
112
|
|
96
113
|
describe '(/:title/)' do
|
97
114
|
let(:path) { '(/:title/)' }
|
115
|
+
|
98
116
|
it { is_expected.to eq %w[{/title} /] }
|
99
117
|
end
|
100
118
|
|
101
119
|
describe '(/:a(/:b))' do
|
102
120
|
let(:path) { '(/:a(/:b))' }
|
121
|
+
|
103
122
|
it { is_expected.to eq %w[{/a} {/b}] }
|
104
123
|
end
|
105
124
|
|
106
125
|
describe '(/a)|(/b)' do
|
107
126
|
let(:path) { '(/a)|(/b)' }
|
127
|
+
|
108
128
|
it do
|
109
|
-
expect {
|
129
|
+
expect { accept }.to \
|
110
130
|
raise_error 'OR nodes cannot be serialized to URI templates'
|
111
131
|
end
|
112
132
|
end
|
@@ -9,7 +9,8 @@ end
|
|
9
9
|
Dummy::Application.routes.draw do
|
10
10
|
get '/' => 'api#index', as: :root
|
11
11
|
|
12
|
-
|
12
|
+
# Unnamed routes should be ignored
|
13
|
+
get '/path/to/unnamed' => 'api#index', as: nil
|
13
14
|
|
14
15
|
get '/action' => 'api#action', as: :action
|
15
16
|
|
@@ -55,35 +56,36 @@ describe Rails::RFC6570, type: :request do
|
|
55
56
|
context 'root' do
|
56
57
|
before { get '/' }
|
57
58
|
|
58
|
-
it '
|
59
|
-
expect(json.keys).to match_array
|
59
|
+
it 'returns list of all parsed and named routes' do
|
60
|
+
expect(json.keys).to match_array \
|
61
|
+
%w[root action test1 test2 test3 test4 test5 test6]
|
60
62
|
end
|
61
63
|
|
62
|
-
it '
|
64
|
+
it 'includes known parameters' do
|
63
65
|
expect(json['action']).to eq "#{host}/action{?param1,param2}"
|
64
66
|
end
|
65
67
|
|
66
|
-
it '
|
68
|
+
it 'parses capture symbols' do
|
67
69
|
expect(json['test1']).to eq "#{host}/path/{title}"
|
68
70
|
end
|
69
71
|
|
70
|
-
it '
|
72
|
+
it 'parses capture group' do
|
71
73
|
expect(json['test2']).to eq "#{host}/path/pp-{title}-abc"
|
72
74
|
end
|
73
75
|
|
74
|
-
it '
|
76
|
+
it 'parses capture group with slash included' do
|
75
77
|
expect(json['test3']).to eq "#{host}/path{/title}"
|
76
78
|
end
|
77
79
|
|
78
|
-
it '
|
80
|
+
it 'parses splash operator (I)' do
|
79
81
|
expect(json['test4']).to eq "#{host}/path{/capture*}/{title}"
|
80
82
|
end
|
81
83
|
|
82
|
-
it '
|
84
|
+
it 'parses splash operator (II)' do
|
83
85
|
expect(json['test5']).to eq "#{host}/path{/capture*}/{title}"
|
84
86
|
end
|
85
87
|
|
86
|
-
it '
|
88
|
+
it 'parses splash operator (III)' do
|
87
89
|
expect(json['test6']).to eq "#{host}/path{/capture*}{/title}"
|
88
90
|
end
|
89
91
|
end
|
@@ -91,46 +93,44 @@ describe Rails::RFC6570, type: :request do
|
|
91
93
|
context 'action' do
|
92
94
|
before { get '/action', headers: headers }
|
93
95
|
|
94
|
-
it '
|
96
|
+
it 'includes URL helpers' do
|
95
97
|
expect(response.status).to eq 200
|
96
98
|
end
|
97
99
|
|
98
|
-
it '
|
100
|
+
it 'allows to return and render templates' do
|
99
101
|
expect(json['template']).to eq "#{host}/action{?param1,param2}"
|
100
102
|
end
|
101
103
|
|
102
|
-
it '
|
104
|
+
it 'allows to return and render url templates' do
|
103
105
|
expect(json['template_url']).to eq "#{host}/action{?param1,param2}"
|
104
106
|
end
|
105
107
|
|
106
|
-
it '
|
108
|
+
it 'allows to return and render path templates' do
|
107
109
|
expect(json['template_path']).to eq '/action{?param1,param2}'
|
108
110
|
end
|
109
111
|
|
110
|
-
it '
|
112
|
+
it 'allows to return and render partial expanded templates' do
|
111
113
|
expect(json['partial']).to eq "#{host}/path{/capture*}/TITLE"
|
112
114
|
end
|
113
115
|
|
114
|
-
it '
|
116
|
+
it 'allows to return and render expanded templates (I)' do
|
115
117
|
expect(json['ignore']).to eq "#{host}/path{/capture*}{.format}"
|
116
118
|
end
|
117
119
|
|
118
|
-
it '
|
120
|
+
it 'allows to return and render expanded templates (II)' do
|
119
121
|
expect(json['expand']).to eq "#{host}/path/a/b/TITLE"
|
120
122
|
end
|
121
123
|
|
122
|
-
|
123
|
-
|
124
|
-
let(:headers) { {'__OSN' => '/fuubar'} }
|
124
|
+
context 'with origin_script_name' do
|
125
|
+
let(:headers) { {'__OSN' => '/fuubar'} }
|
125
126
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
127
|
+
before do
|
128
|
+
# Consistency check with normal URL helper
|
129
|
+
expect(json['ref']).to eq "#{host}/fuubar/action"
|
130
|
+
end
|
130
131
|
|
131
|
-
|
132
|
-
|
133
|
-
end
|
132
|
+
it 'prefixes origin script name' do
|
133
|
+
expect(json['template']).to eq "#{host}/fuubar/action{?param1,param2}"
|
134
134
|
end
|
135
135
|
end
|
136
136
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# Coverage
|
4
|
-
require '
|
5
|
-
|
6
|
-
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.start
|
6
|
+
|
7
|
+
if ENV['CI']
|
8
|
+
require 'codecov'
|
9
|
+
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
7
10
|
end
|
8
11
|
|
9
12
|
ENV['RAILS_ENV'] ||= 'test'
|
@@ -14,7 +17,7 @@ Rails.backtrace_cleaner.remove_silencers!
|
|
14
17
|
|
15
18
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
16
19
|
# in spec/support/ and its subdirectories.
|
17
|
-
Dir[File.expand_path('support/**/*.rb', __dir__)].each {|f| require f }
|
20
|
+
Dir[File.expand_path('support/**/*.rb', __dir__)].sort.each {|f| require f }
|
18
21
|
|
19
22
|
# Checks for pending migrations before tests are run.
|
20
23
|
# If you are not using ActiveRecord, you can remove this line.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-rfc6570
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Graichen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '4.2'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '6.
|
22
|
+
version: '6.2'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '4.2'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '6.
|
32
|
+
version: '6.2'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: addressable
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,7 +104,7 @@ files:
|
|
104
104
|
- spec/dummy/public/500.html
|
105
105
|
- spec/dummy/public/favicon.ico
|
106
106
|
- spec/rails/rfc6570/visitor_spec.rb
|
107
|
-
- spec/rfc6570_spec.rb
|
107
|
+
- spec/rails/rfc6570_spec.rb
|
108
108
|
- spec/spec_helper.rb
|
109
109
|
homepage: https://github.com/jgraichen/rails-rfc6570
|
110
110
|
licenses:
|
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
requirements: []
|
128
|
-
rubygems_version: 3.
|
128
|
+
rubygems_version: 3.1.2
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: Pragmatical access to your Rails routes as RFC6570 URI templates.
|
@@ -160,5 +160,5 @@ test_files:
|
|
160
160
|
- spec/dummy/public/500.html
|
161
161
|
- spec/dummy/public/favicon.ico
|
162
162
|
- spec/rails/rfc6570/visitor_spec.rb
|
163
|
-
- spec/rfc6570_spec.rb
|
163
|
+
- spec/rails/rfc6570_spec.rb
|
164
164
|
- spec/spec_helper.rb
|