spyke 1.8.0 → 1.8.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 +5 -5
- data/lib/spyke/associations.rb +4 -0
- data/lib/spyke/version.rb +1 -1
- data/test/associations_test.rb +13 -7
- data/test/orm_test.rb +2 -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: 8b082d1446203954e1b830026060e1474ee432cc
|
4
|
+
data.tar.gz: 237102ecfff1e95fa2c58fb717e6effa7d0df68f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0cd6f05027b7b3a583855d4d3e4052a968358a108f9970fc630dd861f33d09defbaecb3c078853cbf9430e3fa60448704c647fe3d63c4f231c9906733f3e1227
|
7
|
+
data.tar.gz: 1eff94f334fa7d5a8a14a23741dd6c3a16c6da9b1ff4e7ac3a424ed712663ce07383126d79ae4833864f228f4972a1e8d7b8899f6286a91c71808ff0c0b25896
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ We therefore made Spyke which adds a few fixes/features needed for our projects:
|
|
22
22
|
- Proper support for scopes
|
23
23
|
- Ability to define custom URIs for associations
|
24
24
|
- ActiveRecord-like log output
|
25
|
-
- Handling of
|
25
|
+
- Handling of API-side validations
|
26
26
|
- Googlable name! :)
|
27
27
|
|
28
28
|
## Configuration
|
@@ -36,10 +36,10 @@ gem 'spyke'
|
|
36
36
|
Spyke uses Faraday to handle requests and expects it to parse the response body into a hash in the following format:
|
37
37
|
|
38
38
|
```ruby
|
39
|
-
{ data: { id: 1, name: 'Bob' }, metadata: {}, errors:
|
39
|
+
{ data: { id: 1, name: 'Bob' }, metadata: {}, errors: {} }
|
40
40
|
```
|
41
41
|
|
42
|
-
So, for example for an API that returns JSON
|
42
|
+
So, for example for an API that returns JSON like this:
|
43
43
|
|
44
44
|
```json
|
45
45
|
{ "result": { "id": 1, "name": "Bob" }, "extra": {}, "errors": {} }
|
@@ -140,7 +140,7 @@ Processing by PostsController#index as HTML
|
|
140
140
|
Completed 200 OK in 75ms (Views: 64.6ms | Spyke: 40.3ms | ActiveRecord: 0ms)
|
141
141
|
```
|
142
142
|
|
143
|
-
###
|
143
|
+
### API-side validations
|
144
144
|
|
145
145
|
Spyke expects errors to be formatted in the same way as the
|
146
146
|
ActiveModel::Errors hash, ie:
|
@@ -156,5 +156,5 @@ show errors returned from the server in forms and f.ex using
|
|
156
156
|
|
157
157
|
## Contributing
|
158
158
|
|
159
|
-
If possible please take a look at the [tests marked "wishlisted"](https://github.com/balvig/spyke/search?utf8=%E2%9C%93
|
159
|
+
If possible please take a look at the [tests marked "wishlisted"](https://github.com/balvig/spyke/search?l=ruby&q=wishlisted&utf8=%E2%9C%93)!
|
160
160
|
These are features/fixes we want to implement but haven't gotten around to doing yet :)
|
data/lib/spyke/associations.rb
CHANGED
@@ -36,6 +36,10 @@ module Spyke
|
|
36
36
|
|
37
37
|
def belongs_to(name, options = {})
|
38
38
|
self.associations = associations.merge(name => options.merge(type: BelongsTo))
|
39
|
+
|
40
|
+
define_method "build_#{name}" do |attributes = nil|
|
41
|
+
association(name).build(attributes)
|
42
|
+
end
|
39
43
|
end
|
40
44
|
|
41
45
|
def accepts_nested_attributes_for(*names)
|
data/lib/spyke/version.rb
CHANGED
data/test/associations_test.rb
CHANGED
@@ -118,6 +118,19 @@ module Spyke
|
|
118
118
|
assert_equal 1, recipe.groups.first.recipe_id
|
119
119
|
end
|
120
120
|
|
121
|
+
def test_build_belongs_to_association
|
122
|
+
recipe = Recipe.new(id: 1)
|
123
|
+
recipe.build_user(name: 'Alice')
|
124
|
+
assert_equal recipe.user.name, 'Alice'
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_build_has_one_association
|
128
|
+
recipe = Recipe.new(id: 1)
|
129
|
+
image = recipe.build_image
|
130
|
+
assert_equal 1, image.recipe_id
|
131
|
+
assert_equal 1, recipe.image.recipe_id
|
132
|
+
end
|
133
|
+
|
121
134
|
def test_multiple_builds
|
122
135
|
recipe = Recipe.new
|
123
136
|
recipe.groups.build(name: 'Condiments')
|
@@ -187,13 +200,6 @@ module Spyke
|
|
187
200
|
assert_equal [2], user.recipe_ids
|
188
201
|
end
|
189
202
|
|
190
|
-
def test_build_has_one_association
|
191
|
-
recipe = Recipe.new(id: 1)
|
192
|
-
image = recipe.build_image
|
193
|
-
assert_equal 1, image.recipe_id
|
194
|
-
assert_equal 1, recipe.image.recipe_id
|
195
|
-
end
|
196
|
-
|
197
203
|
def test_custom_class_name
|
198
204
|
stub_request(:get, 'http://sushi.com/recipes/1').to_return_json(result: { background_image: { url: 'bob.jpg' } })
|
199
205
|
|
data/test/orm_test.rb
CHANGED
@@ -80,12 +80,12 @@ module Spyke
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def test_create_with_server_returning_validation_errors
|
83
|
-
endpoint = stub_request(:put, 'http://sushi.com/recipes/1').to_return_json(id: 'write_error:400', errors: { title: [{ error: 'too_short', count: 4 }] })
|
83
|
+
endpoint = stub_request(:put, 'http://sushi.com/recipes/1').to_return_json(id: 'write_error:400', errors: { title: [{ error: 'too_short', count: 4 }], groups: [{ error: 'blank' }] })
|
84
84
|
|
85
85
|
recipe = Recipe.create(id: 1, title: 'sus')
|
86
86
|
|
87
87
|
assert_equal 'sus', recipe.title
|
88
|
-
assert_equal ['Title is too short (minimum is 4 characters)'], recipe.errors.full_messages
|
88
|
+
assert_equal ['Title is too short (minimum is 4 characters)', "Groups can't be blank"], recipe.errors.full_messages
|
89
89
|
assert_requested endpoint
|
90
90
|
end
|
91
91
|
|
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.8.
|
4
|
+
version: 1.8.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: 2015-
|
11
|
+
date: 2015-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|