spyke 5.4.2 → 6.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/lib/spyke/associations/builder.rb +1 -1
- data/lib/spyke/http.rb +19 -11
- data/lib/spyke/relation.rb +5 -1
- data/lib/spyke/version.rb +1 -1
- data/test/associations_test.rb +9 -0
- data/test/path_test.rb +2 -2
- data/test/scopes_test.rb +8 -0
- data/test/support/fixtures.rb +3 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8a623ec5e619581883a58962e9961e7bc04f889e7c4dfdfd5712d2e7e82953b
|
4
|
+
data.tar.gz: e9730e060fbcd6cfb3bf4a718a779d9de490878da0728d1643fbb18f2004968f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec2cacb0215d0d780484fb184e5e06aab71cc06e5b7312c41cbf337830e3ad5e1167a00fd255c0354d4293409763e03d076a53362654512f4da19fa925980485
|
7
|
+
data.tar.gz: 80607d11d9501f9b6f69cfbf311a099130c0904e37879b58a30df4794f758f131360b6c19eadd9d3086e5b8c284c4eed7399219f2edf82f8a260625c992a7997
|
data/README.md
CHANGED
@@ -131,8 +131,6 @@ Post.find(4) # => GET http://api.com/posts/4
|
|
131
131
|
Custom request methods and the `with` scope methods allow you to
|
132
132
|
perform requests for non-REST actions:
|
133
133
|
|
134
|
-
The `.with` scope:
|
135
|
-
|
136
134
|
```ruby
|
137
135
|
Post.with('posts/recent') # => GET http://api.com/posts/recent
|
138
136
|
Post.with(:recent) # => GET http://api.com/posts/recent
|
@@ -172,7 +170,7 @@ Spyke expects errors to be formatted in the same way as the
|
|
172
170
|
[ActiveModel::Errors details hash](https://cowbell-labs.com/2015-01-22-active-model-errors-details.html), ie:
|
173
171
|
|
174
172
|
```ruby
|
175
|
-
{ title: [{ error: 'blank'}, { error: 'too_short', count: 10 }]}
|
173
|
+
{ title: [{ error: 'blank'}, { error: 'too_short', count: 10 }] }
|
176
174
|
```
|
177
175
|
|
178
176
|
If the API you're using returns errors in a different format you can
|
@@ -29,7 +29,7 @@ module Spyke
|
|
29
29
|
candidates << type_name
|
30
30
|
|
31
31
|
candidates.each do |candidate|
|
32
|
-
constant =
|
32
|
+
constant = candidate.safe_constantize
|
33
33
|
return constant if candidate == constant.to_s
|
34
34
|
end
|
35
35
|
raise NameError.new("uninitialized constant #{candidates.first}", candidates.first)
|
data/lib/spyke/http.rb
CHANGED
@@ -41,20 +41,28 @@ module Spyke
|
|
41
41
|
@uri ||= uri_template || default_uri
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
private
|
45
|
+
|
46
|
+
def send_request(method, path, params)
|
47
|
+
connection.send(method) do |request|
|
48
|
+
if method == :get
|
49
|
+
path, params = merge_query_params(path, params)
|
50
|
+
request.url path, params
|
51
|
+
else
|
52
|
+
request.url path.to_s
|
53
|
+
request.body = params
|
54
|
+
end
|
51
55
|
end
|
56
|
+
rescue Faraday::ConnectionFailed, Faraday::TimeoutError
|
57
|
+
raise ConnectionError
|
52
58
|
end
|
53
|
-
rescue Faraday::ConnectionFailed, Faraday::TimeoutError
|
54
|
-
raise ConnectionError
|
55
|
-
end
|
56
59
|
|
57
|
-
|
60
|
+
def merge_query_params(path, params)
|
61
|
+
parsed_uri = Addressable::URI.parse(path.to_s)
|
62
|
+
path = parsed_uri.path
|
63
|
+
params = params.merge(parsed_uri.query_values || {})
|
64
|
+
[path, params]
|
65
|
+
end
|
58
66
|
|
59
67
|
def scoped_request(method)
|
60
68
|
uri = new.uri
|
data/lib/spyke/relation.rb
CHANGED
@@ -5,7 +5,7 @@ module Spyke
|
|
5
5
|
include Enumerable
|
6
6
|
|
7
7
|
attr_reader :klass
|
8
|
-
|
8
|
+
attr_reader :params
|
9
9
|
delegate :to_ary, :[], :any?, :empty?, :last, :size, :metadata, to: :find_some
|
10
10
|
|
11
11
|
def initialize(klass, options = {})
|
@@ -21,6 +21,10 @@ module Spyke
|
|
21
21
|
relation
|
22
22
|
end
|
23
23
|
|
24
|
+
def params=(params)
|
25
|
+
@params = params.symbolize_keys
|
26
|
+
end
|
27
|
+
|
24
28
|
def with(uri)
|
25
29
|
if uri.is_a? Symbol
|
26
30
|
@options[:uri] = File.join @options[:uri], uri.to_s
|
data/lib/spyke/version.rb
CHANGED
data/test/associations_test.rb
CHANGED
@@ -241,6 +241,15 @@ module Spyke
|
|
241
241
|
assert_requested endpoint
|
242
242
|
end
|
243
243
|
|
244
|
+
|
245
|
+
def test_using_where_with_custom_uri_including_query_params
|
246
|
+
endpoint = stub_request(:get, 'http://sushi.com/featured_ingredients?filter[group_id]=1&filter[status]=published')
|
247
|
+
|
248
|
+
Group.new(id: 1).featured_ingredients.where(filter: { status: 'published' }).to_a
|
249
|
+
|
250
|
+
assert_requested endpoint
|
251
|
+
end
|
252
|
+
|
244
253
|
def test_path_inferred_from_name
|
245
254
|
endpoint = stub_request(:get, 'http://sushi.com/recipes/1/gallery_images')
|
246
255
|
Recipe.new(id: 1).gallery_images.to_a
|
data/test/path_test.rb
CHANGED
@@ -21,13 +21,13 @@ module Spyke
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_required_variables
|
24
|
-
assert_raises
|
24
|
+
assert_raises InvalidPathError, 'Missing required variables: user_id in /users/:user_id/recipes/(:id)' do
|
25
25
|
Path.new('/users/:user_id/recipes/(:id)', id: 2).to_s
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_mix_of_required_and_unrequired_variables
|
30
|
-
assert_raises
|
30
|
+
assert_raises InvalidPathError, 'Missing required variables: part2, part4' do
|
31
31
|
Path.new('/1/profiles(/:part1)/:part2(/:part3)/:part4.xml').to_s
|
32
32
|
end
|
33
33
|
end
|
data/test/scopes_test.rb
CHANGED
@@ -61,6 +61,14 @@ module Spyke
|
|
61
61
|
assert_requested endpoint
|
62
62
|
end
|
63
63
|
|
64
|
+
def test_where_with_stringified_keys
|
65
|
+
endpoint = stub_request(:get, 'http://sushi.com/recipes/1/image')
|
66
|
+
|
67
|
+
RecipeImage.where("recipe_id" => 1).to_a
|
68
|
+
|
69
|
+
assert_requested endpoint
|
70
|
+
end
|
71
|
+
|
64
72
|
def test_chainable_class_method
|
65
73
|
endpoint = stub_request(:get, 'http://sushi.com/recipes?status=published&per_page=3')
|
66
74
|
|
data/test/support/fixtures.rb
CHANGED
@@ -79,6 +79,7 @@ end
|
|
79
79
|
|
80
80
|
class Group < Spyke::Base
|
81
81
|
has_many :ingredients, uri: nil
|
82
|
+
has_many :featured_ingredients, uri: 'featured_ingredients?filter[group_id]=:group_id', class_name: "Ingredient"
|
82
83
|
accepts_nested_attributes_for :ingredients
|
83
84
|
|
84
85
|
def self.build_default
|
@@ -119,10 +120,10 @@ end
|
|
119
120
|
class OtherRecipe < OtherApi
|
120
121
|
uri 'recipes/(:id)'
|
121
122
|
|
122
|
-
def self.
|
123
|
+
def self.request(method, path, params)
|
123
124
|
super
|
124
125
|
rescue Spyke::ConnectionError
|
125
|
-
Recipe.
|
126
|
+
Recipe.request(method, path, params)
|
126
127
|
end
|
127
128
|
end
|
128
129
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spyke
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Balvig
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -318,7 +318,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
318
318
|
- !ruby/object:Gem::Version
|
319
319
|
version: '0'
|
320
320
|
requirements: []
|
321
|
-
rubygems_version: 3.
|
321
|
+
rubygems_version: 3.2.3
|
322
322
|
signing_key:
|
323
323
|
specification_version: 4
|
324
324
|
summary: Interact with REST services in an ActiveRecord-like manner
|