grape-path-helpers 1.6.1 → 1.6.2

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: 66a92790c192b884c021f5f6aa77544060f9386d036cfde63954b77b0930da2b
4
- data.tar.gz: 9eb7630323cbd4adea877cf93c3c3061a14a4c14ec110a9ddf26dfe8e31b6387
3
+ metadata.gz: 8734d9daeae94b2a878f9fc18e9c178546e3228132df7ed03a0b3e1ab4de9a2c
4
+ data.tar.gz: 7151c3498b0957a40be8fdf9751aea18a62628c01379a5861116c5f855910c60
5
5
  SHA512:
6
- metadata.gz: fc02941d380ee7316267feedd073e02c95f542a0dcbaad3ef55e97290e761f4bb29b7de80eb4156d34eefc36344f7f336a30abcfe82b6ede0d05cf05aa2bea4e
7
- data.tar.gz: c157b188857534b828f19a7ad28eaeeff9c004f23946ef4e3aeab30352e02460b5d200d527a68dcd43fe477d187ea555d3e58e8e7bcef9e95dd90887b65f1ee6
6
+ metadata.gz: 0fecfaaab23602b4cc8f50a4a9356e228d69909b36f799000bce239798e443f35cb3aa0d2367d9980a0e58c41dd4f5671c501dab08a6fb94bfffb5148652d200
7
+ data.tar.gz: a6c4dd8fb3cd7bb33a96687a94ac0e96733af8ecfe5096f781b32139c3518b96295763405086d05389f54adf66bf96bd4940352cf322c5135158f274f0420c11
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.2
4
+
5
+ * [Improve performance of route matching](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/33)
6
+
3
7
  ## 1.6.1
4
8
 
5
9
  * [Use ruby2_keywords to fix 2.7 warning](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/31)
data/Gemfile.lock CHANGED
@@ -1,40 +1,39 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grape-path-helpers (1.4.0)
4
+ grape-path-helpers (1.6.2)
5
5
  activesupport
6
6
  grape (~> 1.3)
7
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.1)
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
22
  concurrent-ruby (1.1.7)
22
23
  diff-lcs (1.3)
23
- dry-configurable (0.11.6)
24
+ dry-configurable (0.12.0)
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
32
  dry-equalizer (0.3.0)
33
33
  dry-inflector (0.2.0)
34
- dry-logic (1.0.8)
34
+ dry-logic (1.1.0)
35
35
  concurrent-ruby (~> 1.0)
36
- dry-core (~> 0.2)
37
- dry-equalizer (~> 0.2)
36
+ dry-core (~> 0.5, >= 0.5)
38
37
  dry-types (1.4.0)
39
38
  concurrent-ruby (~> 1.0)
40
39
  dry-container (~> 0.3)
@@ -42,17 +41,17 @@ GEM
42
41
  dry-equalizer (~> 0.3)
43
42
  dry-inflector (~> 0.1, >= 0.1.2)
44
43
  dry-logic (~> 1.0, >= 1.0.2)
45
- grape (1.5.0)
44
+ grape (1.5.1)
46
45
  activesupport
47
46
  builder
48
47
  dry-types (>= 1.1)
49
48
  mustermann-grape (~> 1.0.0)
50
49
  rack (>= 1.3.0)
51
50
  rack-accept
52
- i18n (1.8.5)
51
+ i18n (1.8.7)
53
52
  concurrent-ruby (~> 1.0)
54
53
  method_source (0.9.0)
55
- minitest (5.14.2)
54
+ minitest (5.14.3)
56
55
  mustermann (1.1.1)
57
56
  ruby2_keywords (~> 0.0.1)
58
57
  mustermann-grape (1.0.1)
@@ -68,7 +67,7 @@ GEM
68
67
  rack-accept (0.4.5)
69
68
  rack (>= 0.4)
70
69
  rainbow (3.0.0)
71
- rake (13.0.1)
70
+ rake (13.0.3)
72
71
  rspec (3.7.0)
73
72
  rspec-core (~> 3.7.0)
74
73
  rspec-expectations (~> 3.7.0)
@@ -91,11 +90,10 @@ GEM
91
90
  unicode-display_width (~> 1.0, >= 1.0.1)
92
91
  ruby-progressbar (1.9.0)
93
92
  ruby2_keywords (0.0.2)
94
- thread_safe (0.3.6)
95
- tzinfo (1.2.7)
96
- thread_safe (~> 0.1)
93
+ tzinfo (2.0.4)
94
+ concurrent-ruby (~> 1.0)
97
95
  unicode-display_width (1.3.3)
98
- zeitwerk (2.4.1)
96
+ zeitwerk (2.4.2)
99
97
 
100
98
  PLATFORMS
101
99
  ruby
@@ -107,4 +105,4 @@ DEPENDENCIES
107
105
  rubocop (~> 0.56)
108
106
 
109
107
  BUNDLED WITH
110
- 2.1.4
108
+ 2.2.3
@@ -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
 
@@ -8,8 +8,14 @@ module GrapePathHelpers
8
8
 
9
9
  segments = args.first || {}
10
10
 
11
+ # rubocop:disable Metrics/LineLength
12
+ raise ArgumentError, 'Helper options must be a hash' unless segments.is_a?(Hash)
13
+ # rubocop:enable Metrics/LineLength
14
+
15
+ requested_segments = segments.keys.map(&:to_s)
16
+
11
17
  route = Grape::API::Instance.decorated_routes.detect do |r|
12
- route_match?(r, method_id, segments)
18
+ route_match?(r, method_id, requested_segments)
13
19
  end
14
20
 
15
21
  if route
@@ -30,12 +36,9 @@ module GrapePathHelpers
30
36
  super
31
37
  end
32
38
 
33
- def route_match?(route, method_name, segments)
39
+ def route_match?(route, method_name, requested_segments)
34
40
  return false unless route.respond_to?(method_name)
35
- # rubocop:disable Metrics/LineLength
36
- raise ArgumentError, 'Helper options must be a hash' unless segments.is_a?(Hash)
37
- # rubocop:enable Metrics/LineLength
38
- requested_segments = segments.keys.map(&:to_s)
41
+
39
42
  route.uses_segments_in_path_helper?(requested_segments)
40
43
  end
41
44
  end
@@ -1,4 +1,4 @@
1
1
  # Gem version
2
2
  module GrapePathHelpers
3
- VERSION = '1.6.1'.freeze
3
+ VERSION = '1.6.2'.freeze
4
4
  end
@@ -55,6 +55,14 @@ describe GrapePathHelpers::NamedRouteMatcher do
55
55
 
56
56
  helper_class.test_method_path
57
57
  end
58
+
59
+ context 'when segments is not a hash' do
60
+ it 'raises an ArgumentError' do
61
+ expect do
62
+ helper_class.test_method_path(1234)
63
+ end.to raise_error(ArgumentError)
64
+ end
65
+ end
58
66
  end
59
67
 
60
68
  describe '#route_match?' do
@@ -63,14 +71,6 @@ describe GrapePathHelpers::NamedRouteMatcher do
63
71
  let(:method_name) { :api_v1_ping_path }
64
72
  let(:segments) { {} }
65
73
 
66
- context 'when segments is not a hash' do
67
- it 'raises an ArgumentError' do
68
- expect do
69
- route_match?(route, method_name, 1234)
70
- end.to raise_error(ArgumentError)
71
- end
72
- end
73
-
74
74
  it 'returns true' do
75
75
  is_match = route_match?(route, method_name, segments)
76
76
  expect(is_match).to eq(true)
@@ -106,7 +106,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
106
106
  context 'when route requires the requested segments' do
107
107
  let(:route) { show_route }
108
108
  let(:method_name) { :api_v1_cats_path }
109
- let(:segments) { { id: 1 } }
109
+ let(:segments) { { 'id' => 1 } }
110
110
 
111
111
  it 'returns true' do
112
112
  is_match = route_match?(route, method_name, segments)
@@ -115,7 +115,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
115
115
  end
116
116
 
117
117
  context 'when route does not require the requested segments' do
118
- let(:segments) { { some_option: 'some value' } }
118
+ let(:segments) { { 'some_option' => 'some value' } }
119
119
 
120
120
  it 'returns false' do
121
121
  is_match = route_match?(route, method_name, segments)
@@ -125,7 +125,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
125
125
  end
126
126
 
127
127
  context 'when segments contains unexpected options' do
128
- let(:segments) { { some_option: 'some value' } }
128
+ let(:segments) { { 'some_option' => 'some value' } }
129
129
 
130
130
  it 'returns false' do
131
131
  is_match = route_match?(route, method_name, segments)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-path-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 1.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Drew Blessing
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-01-12 00:00:00.000000000 Z
12
+ date: 2021-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport