spyke 5.4.1 → 6.1.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/.travis.yml +2 -0
- data/lib/spyke/http.rb +25 -12
- data/lib/spyke/relation.rb +5 -1
- data/lib/spyke/version.rb +1 -1
- data/spyke.gemspec +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 +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0503658448e2cd567bfa85ec96f1a339dbb7c59690bff9b3cda1c2a0d727bab7'
|
4
|
+
data.tar.gz: 4ecd65b52680c1dce5f30eddad68fa544a781ea5f30984c55804aa839d93fe91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b143845d229f8b712b2d6f1d5d14ba36939a2bab6b90e835f35e5a499a1b06ee93087ecce81f46b9ebc9e7a4c92b9988d53c1ff2798f378e4e76fd9b12ceeb88
|
7
|
+
data.tar.gz: 22b3baeeac2cbaa4c0667c805eb4a33f011e6d0c333777b89766ba857e19f322374e215412d42b92c993b6f64ca80b2fb9cd89d14efaa42279d50ce3bdd2d68b
|
data/.travis.yml
CHANGED
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
|
@@ -105,7 +113,12 @@ module Spyke
|
|
105
113
|
errors_hash.each do |field, field_errors|
|
106
114
|
field_errors.each do |error_attributes|
|
107
115
|
error = NormalizedValidationError.new(error_attributes)
|
108
|
-
|
116
|
+
|
117
|
+
if errors.method(:add).arity == -2
|
118
|
+
errors.add(field.to_sym, error.message, **error.options)
|
119
|
+
else
|
120
|
+
errors.add(field.to_sym, error.message, error.options)
|
121
|
+
end
|
109
122
|
end
|
110
123
|
end
|
111
124
|
end
|
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/spyke.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency 'addressable', '>= 2.5.2'
|
26
26
|
|
27
27
|
spec.add_development_dependency 'actionpack', '>= 4.0.0'
|
28
|
-
spec.add_development_dependency 'bundler', '
|
28
|
+
spec.add_development_dependency 'bundler', '>= 1.6'
|
29
29
|
spec.add_development_dependency 'coveralls', '~> 0.7'
|
30
30
|
spec.add_development_dependency 'minitest'
|
31
31
|
spec.add_development_dependency 'minitest-line'
|
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.0
|
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-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -110,14 +110,14 @@ dependencies:
|
|
110
110
|
name: bundler
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
112
112
|
requirements:
|
113
|
-
- - "
|
113
|
+
- - ">="
|
114
114
|
- !ruby/object:Gem::Version
|
115
115
|
version: '1.6'
|
116
116
|
type: :development
|
117
117
|
prerelease: false
|
118
118
|
version_requirements: !ruby/object:Gem::Requirement
|
119
119
|
requirements:
|
120
|
-
- - "
|
120
|
+
- - ">="
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '1.6'
|
123
123
|
- !ruby/object:Gem::Dependency
|