spyke 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -7
- data/lib/spyke/http.rb +16 -6
- data/lib/spyke/result.rb +1 -1
- data/lib/spyke/version.rb +1 -1
- data/test/orm_test.rb +10 -0
- data/test/support/api.rb +3 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54db6401a61650bf3c2a4eb03c31c7bad268e08f
|
4
|
+
data.tar.gz: 32f5992d2ad3dc9c412d254e276374e38b862e9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 464225c61b899a3fa8c0b67c50e89a6b7899d77ab16d2fdecc965305d010047cbaa2a91ff6afe981352093b97529f43204bc829fc539b7e650d00747c6db7a44
|
7
|
+
data.tar.gz: 720b15b5ee804462d4120e271fc03d3a1bc54fb15054fc1d8f370c15a0c35d5914d7533b5d601f554cadb3beec3f90ebcde55e1e1a82559d60d89d7d4cacc036
|
data/README.md
CHANGED
@@ -47,10 +47,11 @@ class JSONParser < Faraday::Response::Middleware
|
|
47
47
|
json = MultiJson.load(body, symbolize_keys: true)
|
48
48
|
{
|
49
49
|
data: json[:result],
|
50
|
-
metadata: json[:metadata]
|
50
|
+
metadata: json[:metadata],
|
51
|
+
errors: [json[:message]]
|
51
52
|
}
|
52
53
|
rescue MultiJson::ParseError => exception
|
53
|
-
{
|
54
|
+
{ errors: [exception.cause] }
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
@@ -70,19 +71,19 @@ class User < Spyke::Base
|
|
70
71
|
has_many :posts
|
71
72
|
end
|
72
73
|
|
73
|
-
user = User.find(3)
|
74
|
+
user = User.find(3)
|
74
75
|
# => GET http://api.com/users/3
|
75
76
|
|
76
|
-
user.posts
|
77
|
+
user.posts
|
77
78
|
# => find embedded in returned JSON or GET http://api.com/users/3/posts
|
78
79
|
|
79
|
-
user.update_attributes(name: 'Alice')
|
80
|
+
user.update_attributes(name: 'Alice')
|
80
81
|
# => PUT http://api.com/users/3 - { user: { name: 'Alice' } }
|
81
82
|
|
82
|
-
user.destroy
|
83
|
+
user.destroy
|
83
84
|
# => DELETE http://api.com/users/3
|
84
85
|
|
85
|
-
User.create(name: 'Bob')
|
86
|
+
User.create(name: 'Bob')
|
86
87
|
# => POST http://api.com/users - { user: { name: 'Bob' } }
|
87
88
|
```
|
88
89
|
|
data/lib/spyke/http.rb
CHANGED
@@ -62,17 +62,27 @@ module Spyke
|
|
62
62
|
METHODS.each do |method|
|
63
63
|
define_method(method) do |action = nil, params = {}|
|
64
64
|
params = action if action.is_a?(Hash)
|
65
|
-
path =
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
self.attributes =
|
65
|
+
path = resolve_path_from_action(action)
|
66
|
+
|
67
|
+
result = self.class.send("#{method}_raw", path, params)
|
68
|
+
|
69
|
+
result.errors.each { |error| errors.add(:base, error) }
|
70
|
+
self.attributes = result.data
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
74
|
def uri
|
75
75
|
Path.new(@uri_template, attributes)
|
76
76
|
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def resolve_path_from_action(action)
|
81
|
+
case action
|
82
|
+
when Symbol then uri.join(action)
|
83
|
+
when String then Path.new(action, attributes)
|
84
|
+
else uri
|
85
|
+
end
|
86
|
+
end
|
77
87
|
end
|
78
88
|
end
|
data/lib/spyke/result.rb
CHANGED
data/lib/spyke/version.rb
CHANGED
data/test/orm_test.rb
CHANGED
@@ -79,6 +79,16 @@ module Spyke
|
|
79
79
|
assert_requested endpoint
|
80
80
|
end
|
81
81
|
|
82
|
+
def test_create_with_server_failure
|
83
|
+
endpoint = stub_request(:put, 'http://sushi.com/recipes/1').to_return_json(id: 'write_error:400', message: 'Unable to save recipe')
|
84
|
+
|
85
|
+
recipe = Recipe.create(id: 1, title: 'Sushi')
|
86
|
+
|
87
|
+
assert_equal 'Sushi', recipe.title
|
88
|
+
assert_equal ['Unable to save recipe'], recipe.errors[:base]
|
89
|
+
assert_requested endpoint
|
90
|
+
end
|
91
|
+
|
82
92
|
def test_find_using_custom_uri_template
|
83
93
|
endpoint = stub_request(:get, 'http://sushi.com/images/photos/1').to_return_json(result: { id: 1 })
|
84
94
|
Photo.find(1)
|
data/test/support/api.rb
CHANGED
@@ -4,10 +4,11 @@ class JSONParser < Faraday::Response::Middleware
|
|
4
4
|
json = MultiJson.load(body, symbolize_keys: true)
|
5
5
|
{
|
6
6
|
data: json[:result],
|
7
|
-
metadata: json[:metadata]
|
7
|
+
metadata: json[:metadata],
|
8
|
+
errors: [json[:message]]
|
8
9
|
}
|
9
10
|
rescue MultiJson::ParseError => exception
|
10
|
-
{
|
11
|
+
{ errors: [exception.cause] }
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
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: 1.
|
4
|
+
version: 1.3.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:
|
11
|
+
date: 2015-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|