json_api_client 1.16.1 → 1.19.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/README.md +1 -1
- data/lib/json_api_client/associations/base_association.rb +1 -1
- data/lib/json_api_client/associations/has_one.rb +1 -1
- data/lib/json_api_client/errors.rb +27 -12
- data/lib/json_api_client/middleware/status.rb +10 -0
- data/lib/json_api_client/query/builder.rb +2 -2
- data/lib/json_api_client/query/requestor.rb +12 -8
- data/lib/json_api_client/resource.rb +2 -2
- data/lib/json_api_client/schema.rb +1 -1
- data/lib/json_api_client/version.rb +1 -1
- metadata +18 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e8f9fadfa22191ced6400cea007f0f62a05e8e6fbebc2af2fb5ac4180de5fe6
|
4
|
+
data.tar.gz: 02eda05ecb80f46b09ce66773c997e00dbb1fa3bb72d340f596b9eb84cee22ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98abc203b52e5718f1d8b7ef1427536fd06d6ff257c4c01969a60a87d27eff2a471b46dabcd17917e877233fb810810758e6bcaa277b31708487cdacd322b358
|
7
|
+
data.tar.gz: 1526cad7c4c92ebe245d74d7fdf09c803e078f4454be7f351ef5c5644fbc8d78e9a1aa356eecbcbbd0f0d1a310f0e502c0f9cd9100da838271a4fcbf9191d272
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# JsonApiClient [](https://travis-ci.org/JsonApiClient/json_api_client) [](https://codeclimate.com/github/JsonApiClient/json_api_client) [](https://codeclimate.com/github/JsonApiClient/json_api_client)
|
1
|
+
# JsonApiClient [](https://travis-ci.org/JsonApiClient/json_api_client) [](https://codeclimate.com/github/JsonApiClient/json_api_client) [](https://codeclimate.com/github/JsonApiClient/json_api_client)
|
2
2
|
|
3
3
|
This gem is meant to help you build an API client for interacting with REST APIs as laid out by [http://jsonapi.org](http://jsonapi.org). It attempts to give you a query building framework that is easy to understand (it is similar to ActiveRecord scopes).
|
4
4
|
|
@@ -24,7 +24,7 @@ module JsonApiClient
|
|
24
24
|
|
25
25
|
def load_records(data)
|
26
26
|
data.map do |d|
|
27
|
-
record_class = Utils.compute_type(klass, d["type"].classify)
|
27
|
+
record_class = Utils.compute_type(klass, klass.key_formatter.unformat(d["type"]).classify)
|
28
28
|
record_class.load id: d["id"]
|
29
29
|
end
|
30
30
|
end
|
@@ -7,7 +7,7 @@ module JsonApiClient
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def load_records(data)
|
10
|
-
record_class = Utils.compute_type(klass, data["type"].classify)
|
10
|
+
record_class = Utils.compute_type(klass, klass.key_formatter.unformat(data["type"]).classify)
|
11
11
|
record_class.load id: data["id"]
|
12
12
|
end
|
13
13
|
end
|
@@ -44,6 +44,28 @@ module JsonApiClient
|
|
44
44
|
class NotAuthorized < ClientError
|
45
45
|
end
|
46
46
|
|
47
|
+
class NotFound < ClientError
|
48
|
+
attr_reader :uri
|
49
|
+
def initialize(uri)
|
50
|
+
@uri = uri
|
51
|
+
|
52
|
+
msg = "Resource not found: #{uri.to_s}"
|
53
|
+
super nil, msg
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class RequestTimeout < ClientError
|
58
|
+
end
|
59
|
+
|
60
|
+
class Conflict < ClientError
|
61
|
+
def initialize(env, msg = 'Resource already exists')
|
62
|
+
super env, msg
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class TooManyRequests < ClientError
|
67
|
+
end
|
68
|
+
|
47
69
|
class ConnectionError < ApiError
|
48
70
|
end
|
49
71
|
|
@@ -59,23 +81,16 @@ module JsonApiClient
|
|
59
81
|
end
|
60
82
|
end
|
61
83
|
|
62
|
-
class
|
63
|
-
def initialize(env, msg = 'Resource already exists')
|
64
|
-
super env, msg
|
65
|
-
end
|
84
|
+
class InternalServerError < ServerError
|
66
85
|
end
|
67
86
|
|
68
|
-
class
|
69
|
-
|
70
|
-
def initialize(uri)
|
71
|
-
@uri = uri
|
87
|
+
class BadGateway < ServerError
|
88
|
+
end
|
72
89
|
|
73
|
-
|
74
|
-
super nil, msg
|
75
|
-
end
|
90
|
+
class ServiceUnavailable < ServerError
|
76
91
|
end
|
77
92
|
|
78
|
-
class
|
93
|
+
class GatewayTimeout < ServerError
|
79
94
|
end
|
80
95
|
|
81
96
|
class UnexpectedStatus < ServerError
|
@@ -38,14 +38,24 @@ module JsonApiClient
|
|
38
38
|
raise Errors::AccessDenied, env
|
39
39
|
when 404
|
40
40
|
raise Errors::NotFound, env[:url]
|
41
|
+
when 408
|
42
|
+
raise Errors::RequestTimeout, env
|
41
43
|
when 409
|
42
44
|
raise Errors::Conflict, env
|
43
45
|
when 422
|
44
46
|
# Allow to proceed as resource errors will be populated
|
47
|
+
when 429
|
48
|
+
raise Errors::TooManyRequests, env
|
45
49
|
when 400..499
|
46
50
|
raise Errors::ClientError, env
|
47
51
|
when 500
|
48
52
|
raise Errors::InternalServerError, env
|
53
|
+
when 502
|
54
|
+
raise Errors::BadGateway, env
|
55
|
+
when 503
|
56
|
+
raise Errors::ServiceUnavailable, env
|
57
|
+
when 504
|
58
|
+
raise Errors::GatewayTimeout, env
|
49
59
|
when 501..599
|
50
60
|
raise Errors::ServerError, env
|
51
61
|
else
|
@@ -67,11 +67,11 @@ module JsonApiClient
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def build(attrs = {})
|
70
|
-
klass.new @path_params.merge(attrs.
|
70
|
+
klass.new @path_params.merge(attrs.with_indifferent_access)
|
71
71
|
end
|
72
72
|
|
73
73
|
def create(attrs = {})
|
74
|
-
klass.create @path_params.merge(attrs.
|
74
|
+
klass.create @path_params.merge(attrs.with_indifferent_access)
|
75
75
|
end
|
76
76
|
|
77
77
|
def params
|
@@ -10,17 +10,21 @@ module JsonApiClient
|
|
10
10
|
|
11
11
|
# expects a record
|
12
12
|
def create(record)
|
13
|
-
request(
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
request(
|
14
|
+
:post,
|
15
|
+
klass.path(record.path_attributes),
|
16
|
+
body: { data: record.as_json_api },
|
17
|
+
params: record.request_params.to_params
|
18
|
+
)
|
17
19
|
end
|
18
20
|
|
19
21
|
def update(record)
|
20
|
-
request(
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
request(
|
23
|
+
:patch,
|
24
|
+
resource_path(record.path_attributes),
|
25
|
+
body: { data: record.as_json_api },
|
26
|
+
params: record.request_params.to_params
|
27
|
+
)
|
24
28
|
end
|
25
29
|
|
26
30
|
def get(params = {})
|
@@ -348,7 +348,7 @@ module JsonApiClient
|
|
348
348
|
#
|
349
349
|
# @param params [Hash] Attributes, links, and relationships
|
350
350
|
def initialize(params = {})
|
351
|
-
params = params.
|
351
|
+
params = params.with_indifferent_access
|
352
352
|
@persisted = nil
|
353
353
|
@destroyed = nil
|
354
354
|
self.links = self.class.linker.new(params.delete(:links) || {})
|
@@ -538,7 +538,7 @@ module JsonApiClient
|
|
538
538
|
end
|
539
539
|
|
540
540
|
def path_attributes
|
541
|
-
_belongs_to_params.merge attributes.slice( self.class.primary_key ).
|
541
|
+
_belongs_to_params.merge attributes.slice( self.class.primary_key ).with_indifferent_access
|
542
542
|
end
|
543
543
|
|
544
544
|
protected
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_api_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Ching
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -28,36 +28,42 @@ dependencies:
|
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.15'
|
34
31
|
- - ">="
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: 0.15.2
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.2.0
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - "~>"
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0.15'
|
44
41
|
- - ">="
|
45
42
|
- !ruby/object:Gem::Version
|
46
43
|
version: 0.15.2
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.2.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: faraday_middleware
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.0
|
54
|
+
- - "<"
|
52
55
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
56
|
+
version: 1.2.0
|
54
57
|
type: :runtime
|
55
58
|
prerelease: false
|
56
59
|
version_requirements: !ruby/object:Gem::Requirement
|
57
60
|
requirements:
|
58
|
-
- - "
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.9.0
|
64
|
+
- - "<"
|
59
65
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
66
|
+
version: 1.2.0
|
61
67
|
- !ruby/object:Gem::Dependency
|
62
68
|
name: addressable
|
63
69
|
requirement: !ruby/object:Gem::Requirement
|