grape-path-helpers 1.3.0 → 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: 4d73093a0f054919e2ad15c91772f4e7efac0ce0197d49d3be5ad5175df80a98
4
- data.tar.gz: a1e486c0b0c076edc6c6bc5411184c97fbd2e5e861b83747e1d273faffdf0ba3
3
+ metadata.gz: 8734d9daeae94b2a878f9fc18e9c178546e3228132df7ed03a0b3e1ab4de9a2c
4
+ data.tar.gz: 7151c3498b0957a40be8fdf9751aea18a62628c01379a5861116c5f855910c60
5
5
  SHA512:
6
- metadata.gz: 5491f91f2177f6ee3ba5575255a1e693dd6edae69da9a1733a5479e8a2478007b2c07abe0f5d1ac8d01e234dfeae1f45c4ae1fcc3982bb23854a3da16f0def0a
7
- data.tar.gz: f93f9038b288580fe66cc166993eb58dcfb1fa34cde384c49c03fde0d6f1c33961a6b98622a1ab16099dcd92a40b5217ecce965ba6c0649d80db4f5d276fd8fd
6
+ metadata.gz: 0fecfaaab23602b4cc8f50a4a9356e228d69909b36f799000bce239798e443f35cb3aa0d2367d9980a0e58c41dd4f5671c501dab08a6fb94bfffb5148652d200
7
+ data.tar.gz: a6c4dd8fb3cd7bb33a96687a94ac0e96733af8ecfe5096f781b32139c3518b96295763405086d05389f54adf66bf96bd4940352cf322c5135158f274f0420c11
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.2
4
+
5
+ * [Improve performance of route matching](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/33)
6
+
7
+ ## 1.6.1
8
+
9
+ * [Use ruby2_keywords to fix 2.7 warning](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/31)
10
+
11
+ ## 1.6.0
12
+
13
+ * [Extract kwargs to fix 2.7 warnings](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/29)
14
+
15
+ ## 1.5.0
16
+
17
+ * [Relax rake dependency](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/27)
18
+
19
+ ## 1.4.0
20
+
21
+ * [Support using a base class other than Grape::API::Instance](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/23)
22
+
3
23
  ## 1.3.0
4
24
 
5
25
  * [Upgrade to Grape 1.3.1](https://gitlab.com/gitlab-org/grape-path-helpers/-/merge_requests/21)
data/Gemfile.lock CHANGED
@@ -1,40 +1,39 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grape-path-helpers (1.3.0)
4
+ grape-path-helpers (1.6.2)
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.2.1)
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)
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.6)
22
+ concurrent-ruby (1.1.7)
22
23
  diff-lcs (1.3)
23
- dry-configurable (0.11.3)
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.6)
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.3.1)
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.2)
51
+ i18n (1.8.7)
53
52
  concurrent-ruby (~> 1.0)
54
53
  method_source (0.9.0)
55
- minitest (5.14.0)
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)
@@ -64,11 +63,11 @@ GEM
64
63
  pry (0.11.3)
65
64
  coderay (~> 1.1.0)
66
65
  method_source (~> 0.9.0)
67
- rack (2.2.2)
66
+ rack (2.2.3)
68
67
  rack-accept (0.4.5)
69
68
  rack (>= 0.4)
70
69
  rainbow (3.0.0)
71
- rake (12.3.3)
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.6)
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.3.0)
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
- 1.17.3
108
+ 2.2.3
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'bundler'
3
+ require 'bundler/gem_tasks'
3
4
 
4
5
  Bundler.setup :default, :test, :development
5
6
 
@@ -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'
@@ -11,7 +11,7 @@ module GrapePathHelpers
11
11
  end
12
12
 
13
13
  def all_routes
14
- routes = subclasses.flat_map { |s| s.send(:prepare_routes) }
14
+ routes = descendants.flat_map { |s| s.send(:prepare_routes) }
15
15
  routes.uniq { |r| r.options.merge(path: r.path) }
16
16
  end
17
17
  end
@@ -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,28 @@ 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
+ # 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)
10
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
16
- route.send(method_id, *arguments)
22
+ route.send(method_id, *args)
17
23
  else
18
24
  super
19
25
  end
20
26
  end
27
+ ruby2_keywords(:method_missing)
21
28
 
22
29
  def respond_to_missing?(method_name, _include_private = false)
23
30
  return super unless method_name =~ /_path$/
@@ -29,12 +36,9 @@ module GrapePathHelpers
29
36
  super
30
37
  end
31
38
 
32
- def route_match?(route, method_name, segments)
39
+ def route_match?(route, method_name, requested_segments)
33
40
  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)
41
+
38
42
  route.uses_segments_in_path_helper?(requested_segments)
39
43
  end
40
44
  end
@@ -1,4 +1,4 @@
1
1
  # Gem version
2
2
  module GrapePathHelpers
3
- VERSION = '1.3.0'.freeze
3
+ VERSION = '1.6.2'.freeze
4
4
  end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
+ # rubocop:disable Metrics/BlockLength
3
4
  describe GrapePathHelpers::AllRoutes do
4
5
  Grape::API::Instance.extend described_class
5
6
 
@@ -32,6 +33,14 @@ describe GrapePathHelpers::AllRoutes do
32
33
  expect(all_routes.map(&:path)).to include(*expected_routes)
33
34
  end
34
35
  end
36
+
37
+ context 'when an API is created via an intermediate class' do
38
+ it 'includes those routes on both Grape::API::Instance and the base class' do
39
+ expect(Spec::Support::BaseAPI.all_routes.map(&:origin)).to include('/derived_ping')
40
+ expect(Grape::API::Instance.all_routes.map(&:origin)).to include('/derived_ping')
41
+ end
42
+ end
35
43
  # rubocop:enable Metrics/LineLength
36
44
  end
37
45
  end
46
+ # rubocop:enable Metrics/BlockLength
@@ -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,7 +46,8 @@ 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
53
  it 'search for the route if the method ends with path' do
@@ -54,6 +55,14 @@ describe GrapePathHelpers::NamedRouteMatcher do
54
55
 
55
56
  helper_class.test_method_path
56
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
57
66
  end
58
67
 
59
68
  describe '#route_match?' do
@@ -62,14 +71,6 @@ describe GrapePathHelpers::NamedRouteMatcher do
62
71
  let(:method_name) { :api_v1_ping_path }
63
72
  let(:segments) { {} }
64
73
 
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
74
  it 'returns true' do
74
75
  is_match = route_match?(route, method_name, segments)
75
76
  expect(is_match).to eq(true)
@@ -105,7 +106,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
105
106
  context 'when route requires the requested segments' do
106
107
  let(:route) { show_route }
107
108
  let(:method_name) { :api_v1_cats_path }
108
- let(:segments) { { id: 1 } }
109
+ let(:segments) { { 'id' => 1 } }
109
110
 
110
111
  it 'returns true' do
111
112
  is_match = route_match?(route, method_name, segments)
@@ -114,7 +115,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
114
115
  end
115
116
 
116
117
  context 'when route does not require the requested segments' do
117
- let(:segments) { { some_option: 'some value' } }
118
+ let(:segments) { { 'some_option' => 'some value' } }
118
119
 
119
120
  it 'returns false' do
120
121
  is_match = route_match?(route, method_name, segments)
@@ -124,7 +125,7 @@ describe GrapePathHelpers::NamedRouteMatcher do
124
125
  end
125
126
 
126
127
  context 'when segments contains unexpected options' do
127
- let(:segments) { { some_option: 'some value' } }
128
+ let(:segments) { { 'some_option' => 'some value' } }
128
129
 
129
130
  it 'returns false' do
130
131
  is_match = route_match?(route, method_name, segments)
data/spec/support/api.rb CHANGED
@@ -81,5 +81,14 @@ module Spec
81
81
  end
82
82
  end
83
83
  end
84
+
85
+ class BaseAPI < Grape::API::Instance
86
+ end
87
+
88
+ class DerivedAPI < BaseAPI
89
+ get 'derived_ping' do
90
+ 'pong'
91
+ end
92
+ end
84
93
  end
85
94
  end
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.3.0
4
+ version: 1.6.2
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-03-15 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
@@ -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: []