grape-path-helpers 1.4.0 → 1.6.3

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
  SHA256:
3
- metadata.gz: e6a9a810d64b890207e58f89f7da7a104827f733953c85e8487d10f45caf14d6
4
- data.tar.gz: b76980cef67c4967fc4b4f49bb736603e67d74579624738ed5affd11317fa681
3
+ metadata.gz: 2bc6c862d4ba4b9cedabaafaf461382721dd87e45cc7796ff13d9a7c643d1d46
4
+ data.tar.gz: d1198670aad0447e4b50821a19e460daced596a51de2ddc0155fd6adea5146aa
5
5
  SHA512:
6
- metadata.gz: 990b3eebe65bae4d982c98900e7a44d9b5a5b992383354bb696612fd27ba90c1738ae28c06c3f679ca854098e03bfbdc2fa30a3471f1e7da03a19006f5262b2e
7
- data.tar.gz: 27e9befba4f4a89a61372bceadc45c27f55d492012cdfa56519e1aed030690c1cdb97591635f317baf225ef6a63788adbcd091e7e37c3abd4ef919ee938bb177
6
+ metadata.gz: 729437ba35e3b8d4e2133dc96d11c9b5eca8a40965099acee11c7795f0514248bf7d45a824bc13cfceeb02e31fff0057f1a8ead11bc9e2f6d629af1b17910ed3
7
+ data.tar.gz: 520a330a0d892189dc2bd4862a717b41423f7c98794082592a961fdddbdee4342b1dbad0a94a9a4a98dbee2fa05c58bdc4c6ff398cddfbd74ad206622fb09fce
data/.gitlab-ci.yml CHANGED
@@ -1,8 +1,9 @@
1
- image: "ruby:2.6-alpine"
1
+ image: "ruby:3.0-alpine"
2
2
 
3
3
  cache:
4
4
  paths:
5
5
  - vendor/ruby
6
+ key: ruby-3.0
6
7
 
7
8
  before_script:
8
9
  - apk add --update git
data/.rubocop.yml CHANGED
@@ -8,3 +8,7 @@ Metrics/MethodLength:
8
8
 
9
9
  Style/FileName:
10
10
  Enabled: false
11
+
12
+ # Removed in newer versions of Rubocop
13
+ Lint/SplatKeywordArguments:
14
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.3
4
+
5
+ * [Fix route matcher when method ends in path and arg isn't a Hash](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/35)
6
+
7
+ ## 1.6.2
8
+
9
+ * [Improve performance of route matching](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/33)
10
+
11
+ ## 1.6.1
12
+
13
+ * [Use ruby2_keywords to fix 2.7 warning](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/31)
14
+
15
+ ## 1.6.0
16
+
17
+ * [Extract kwargs to fix 2.7 warnings](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/29)
18
+
19
+ ## 1.5.0
20
+
21
+ * [Relax rake dependency](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/27)
22
+
3
23
  ## 1.4.0
4
24
 
5
25
  * [Support using a base class other than Grape::API::Instance](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/23)
data/Gemfile.lock CHANGED
@@ -1,58 +1,55 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grape-path-helpers (1.4.0)
4
+ grape-path-helpers (1.6.3)
5
5
  activesupport
6
6
  grape (~> 1.3)
7
- rake (~> 12)
7
+ rake (> 12)
8
+ ruby2_keywords (~> 0.0.2)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
- activesupport (6.0.3.4)
13
+ activesupport (6.1.3.2)
13
14
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
- i18n (>= 0.7, < 2)
15
- minitest (~> 5.1)
16
- tzinfo (~> 1.1)
17
- zeitwerk (~> 2.2, >= 2.2.2)
15
+ i18n (>= 1.6, < 2)
16
+ minitest (>= 5.1)
17
+ tzinfo (~> 2.0)
18
+ zeitwerk (~> 2.3)
18
19
  ast (2.4.0)
19
20
  builder (3.2.4)
20
21
  coderay (1.1.2)
21
- concurrent-ruby (1.1.7)
22
+ concurrent-ruby (1.1.8)
22
23
  diff-lcs (1.3)
23
- dry-configurable (0.11.6)
24
+ dry-configurable (0.12.1)
24
25
  concurrent-ruby (~> 1.0)
25
- dry-core (~> 0.4, >= 0.4.7)
26
- dry-equalizer (~> 0.2)
26
+ dry-core (~> 0.5, >= 0.5.0)
27
27
  dry-container (0.7.2)
28
28
  concurrent-ruby (~> 1.0)
29
29
  dry-configurable (~> 0.1, >= 0.1.3)
30
- dry-core (0.4.9)
30
+ dry-core (0.5.0)
31
31
  concurrent-ruby (~> 1.0)
32
- dry-equalizer (0.3.0)
33
32
  dry-inflector (0.2.0)
34
- dry-logic (1.0.8)
33
+ dry-logic (1.2.0)
35
34
  concurrent-ruby (~> 1.0)
36
- dry-core (~> 0.2)
37
- dry-equalizer (~> 0.2)
38
- dry-types (1.4.0)
35
+ dry-core (~> 0.5, >= 0.5)
36
+ dry-types (1.5.1)
39
37
  concurrent-ruby (~> 1.0)
40
38
  dry-container (~> 0.3)
41
- dry-core (~> 0.4, >= 0.4.4)
42
- dry-equalizer (~> 0.3)
39
+ dry-core (~> 0.5, >= 0.5)
43
40
  dry-inflector (~> 0.1, >= 0.1.2)
44
41
  dry-logic (~> 1.0, >= 1.0.2)
45
- grape (1.5.0)
42
+ grape (1.5.3)
46
43
  activesupport
47
44
  builder
48
45
  dry-types (>= 1.1)
49
46
  mustermann-grape (~> 1.0.0)
50
47
  rack (>= 1.3.0)
51
48
  rack-accept
52
- i18n (1.8.5)
49
+ i18n (1.8.10)
53
50
  concurrent-ruby (~> 1.0)
54
51
  method_source (0.9.0)
55
- minitest (5.14.2)
52
+ minitest (5.14.4)
56
53
  mustermann (1.1.1)
57
54
  ruby2_keywords (~> 0.0.1)
58
55
  mustermann-grape (1.0.1)
@@ -68,7 +65,7 @@ GEM
68
65
  rack-accept (0.4.5)
69
66
  rack (>= 0.4)
70
67
  rainbow (3.0.0)
71
- rake (12.3.3)
68
+ rake (13.0.3)
72
69
  rspec (3.7.0)
73
70
  rspec-core (~> 3.7.0)
74
71
  rspec-expectations (~> 3.7.0)
@@ -90,12 +87,11 @@ GEM
90
87
  ruby-progressbar (~> 1.7)
91
88
  unicode-display_width (~> 1.0, >= 1.0.1)
92
89
  ruby-progressbar (1.9.0)
93
- ruby2_keywords (0.0.2)
94
- thread_safe (0.3.6)
95
- tzinfo (1.2.7)
96
- thread_safe (~> 0.1)
90
+ ruby2_keywords (0.0.4)
91
+ tzinfo (2.0.4)
92
+ concurrent-ruby (~> 1.0)
97
93
  unicode-display_width (1.3.3)
98
- zeitwerk (2.4.0)
94
+ zeitwerk (2.4.2)
99
95
 
100
96
  PLATFORMS
101
97
  ruby
@@ -107,4 +103,4 @@ DEPENDENCIES
107
103
  rubocop (~> 0.56)
108
104
 
109
105
  BUNDLED WITH
110
- 1.17.3
106
+ 2.2.3
@@ -13,7 +13,8 @@ Gem::Specification.new do |gem|
13
13
 
14
14
  gem.add_runtime_dependency 'activesupport'
15
15
  gem.add_runtime_dependency 'grape', '~> 1.3'
16
- gem.add_runtime_dependency 'rake', '~> 12'
16
+ gem.add_runtime_dependency 'rake', '> 12'
17
+ gem.add_runtime_dependency 'ruby2_keywords', '~> 0.0.2'
17
18
 
18
19
  gem.add_development_dependency 'pry', '~> 0.11'
19
20
  gem.add_development_dependency 'rspec', '~> 3.7'
@@ -147,10 +147,10 @@ module GrapePathHelpers
147
147
  def uses_segments_in_path_helper?(segments)
148
148
  segments = segments.reject { |x| special_keys.include?(x) }
149
149
 
150
- if required_helper_segments.empty? && segments.any?
150
+ if helper_arguments.empty? && segments.any?
151
151
  false
152
152
  else
153
- required_helper_segments.all? { |x| segments.include?(x) }
153
+ helper_arguments.all? { |x| segments.include?(x) }
154
154
  end
155
155
  end
156
156
 
@@ -3,21 +3,26 @@ module GrapePathHelpers
3
3
  # to unknown methods will look for a route with a matching
4
4
  # helper function name
5
5
  module NamedRouteMatcher
6
- def method_missing(method_id, *arguments)
6
+ def method_missing(method_id, *args)
7
7
  return super unless method_id.to_s =~ /_path$/
8
8
 
9
- segments = arguments.first || {}
9
+ segments = args.first || {}
10
+
11
+ return super unless segments.is_a?(Hash)
12
+
13
+ requested_segments = segments.keys.map(&:to_s)
10
14
 
11
15
  route = Grape::API::Instance.decorated_routes.detect do |r|
12
- route_match?(r, method_id, segments)
16
+ route_match?(r, method_id, requested_segments)
13
17
  end
14
18
 
15
19
  if route
16
- route.send(method_id, *arguments)
20
+ route.send(method_id, *args)
17
21
  else
18
22
  super
19
23
  end
20
24
  end
25
+ ruby2_keywords(:method_missing)
21
26
 
22
27
  def respond_to_missing?(method_name, _include_private = false)
23
28
  return super unless method_name =~ /_path$/
@@ -29,12 +34,9 @@ module GrapePathHelpers
29
34
  super
30
35
  end
31
36
 
32
- def route_match?(route, method_name, segments)
37
+ def route_match?(route, method_name, requested_segments)
33
38
  return false unless route.respond_to?(method_name)
34
- # rubocop:disable Metrics/LineLength
35
- raise ArgumentError, 'Helper options must be a hash' unless segments.is_a?(Hash)
36
- # rubocop:enable Metrics/LineLength
37
- requested_segments = segments.keys.map(&:to_s)
39
+
38
40
  route.uses_segments_in_path_helper?(requested_segments)
39
41
  end
40
42
  end
@@ -1,4 +1,4 @@
1
1
  # Gem version
2
2
  module GrapePathHelpers
3
- VERSION = '1.4.0'.freeze
3
+ VERSION = '1.6.3'.freeze
4
4
  end
@@ -30,8 +30,8 @@ describe GrapePathHelpers::NamedRouteMatcher do
30
30
  fake_class = Class.new do
31
31
  prepend GrapePathHelpers::NamedRouteMatcher
32
32
 
33
- def method_missing(_method_id, *_args)
34
- 'whatever' || super
33
+ def method_missing(method_id, *args, **kwargs)
34
+ [method_id, args, kwargs] || super
35
35
  end
36
36
 
37
37
  def respond_to_missing?(_method_name, _include_private = false)
@@ -46,13 +46,29 @@ describe GrapePathHelpers::NamedRouteMatcher do
46
46
  it 'returns super method_missing if the method does not end with path' do
47
47
  expect(Grape::API::Instance).not_to receive(:decorated_routes)
48
48
 
49
- helper_class.test_method
49
+ expect(helper_class.test_method(:arg1, kwarg1: :kwarg1))
50
+ .to eq([:test_method, [:arg1], { kwarg1: :kwarg1 }])
50
51
  end
51
52
 
52
- it 'search for the route if the method ends with path' do
53
- expect(Grape::API::Instance).to receive(:decorated_routes).and_call_original # rubocop:disable Metrics/LineLength
53
+ context 'when method ends with path' do
54
+ it 'returns super method_missing if first arg is not a hash' do
55
+ expect(Grape::API::Instance).not_to receive(:decorated_routes)
56
+
57
+ expect(helper_class.test_method_path(:arg1, kwarg1: :kwarg1))
58
+ .to eq([:test_method_path, [:arg1], { kwarg1: :kwarg1 }])
59
+ end
60
+
61
+ it 'search for the route if there are no args' do
62
+ expect(Grape::API::Instance).to receive(:decorated_routes).and_call_original # rubocop:disable Metrics/LineLength
63
+
64
+ helper_class.test_method_path
65
+ end
66
+
67
+ it 'search for the route if the first arg is a hash' do
68
+ expect(Grape::API::Instance).to receive(:decorated_routes).and_call_original # rubocop:disable Metrics/LineLength
54
69
 
55
- helper_class.test_method_path
70
+ helper_class.test_method_path(id: 5)
71
+ end
56
72
  end
57
73
  end
58
74
 
@@ -62,14 +78,6 @@ describe GrapePathHelpers::NamedRouteMatcher do
62
78
  let(:method_name) { :api_v1_ping_path }
63
79
  let(:segments) { {} }
64
80
 
65
- context 'when segments is not a hash' do
66
- it 'raises an ArgumentError' do
67
- expect do
68
- route_match?(route, method_name, 1234)
69
- end.to raise_error(ArgumentError)
70
- end
71
- end
72
-
73
81
  it 'returns true' do
74
82
  is_match = route_match?(route, method_name, segments)
75
83
  expect(is_match).to eq(true)
@@ -105,7 +113,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
105
113
  context 'when route requires the requested segments' do
106
114
  let(:route) { show_route }
107
115
  let(:method_name) { :api_v1_cats_path }
108
- let(:segments) { { id: 1 } }
116
+ let(:segments) { { 'id' => 1 } }
109
117
 
110
118
  it 'returns true' do
111
119
  is_match = route_match?(route, method_name, segments)
@@ -114,7 +122,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
114
122
  end
115
123
 
116
124
  context 'when route does not require the requested segments' do
117
- let(:segments) { { some_option: 'some value' } }
125
+ let(:segments) { { 'some_option' => 'some value' } }
118
126
 
119
127
  it 'returns false' do
120
128
  is_match = route_match?(route, method_name, segments)
@@ -124,7 +132,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
124
132
  end
125
133
 
126
134
  context 'when segments contains unexpected options' do
127
- let(:segments) { { some_option: 'some value' } }
135
+ let(:segments) { { 'some_option' => 'some value' } }
128
136
 
129
137
  it 'returns false' do
130
138
  is_match = route_match?(route, method_name, segments)
@@ -189,14 +197,6 @@ describe GrapePathHelpers::NamedRouteMatcher do
189
197
  path = api_v1_ping_path
190
198
  expect(path).to eq('/api/v1/ping.json')
191
199
  end
192
-
193
- context 'when argument to the helper is not a hash' do
194
- it 'raises an ArgumentError' do
195
- expect do
196
- api_v1_ping_path(1234)
197
- end.to raise_error(ArgumentError)
198
- end
199
- end
200
200
  end
201
201
 
202
202
  context 'when method name does not match a Grape::Route path helper name' do
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-path-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Drew Blessing
8
8
  - Harper Henn
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-10-14 00:00:00.000000000 Z
12
+ date: 2021-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -43,16 +43,30 @@ dependencies:
43
43
  name: rake
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "~>"
46
+ - - ">"
47
47
  - !ruby/object:Gem::Version
48
48
  version: '12'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - "~>"
53
+ - - ">"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '12'
56
+ - !ruby/object:Gem::Dependency
57
+ name: ruby2_keywords
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 0.0.2
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 0.0.2
56
70
  - !ruby/object:Gem::Dependency
57
71
  name: pry
58
72
  requirement: !ruby/object:Gem::Requirement
@@ -131,7 +145,7 @@ homepage: https://gitlab.com/gitlab-org/grape-path-helpers
131
145
  licenses:
132
146
  - MIT
133
147
  metadata: {}
134
- post_install_message:
148
+ post_install_message:
135
149
  rdoc_options: []
136
150
  require_paths:
137
151
  - lib
@@ -146,8 +160,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
160
  - !ruby/object:Gem::Version
147
161
  version: '0'
148
162
  requirements: []
149
- rubygems_version: 3.0.3
150
- signing_key:
163
+ rubygems_version: 3.2.3
164
+ signing_key:
151
165
  specification_version: 4
152
166
  summary: Route path helpers for Grape
153
167
  test_files: []