json_api_client 1.15.0 → 1.18.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/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/connection.rb +1 -0
- data/lib/json_api_client/errors.rb +6 -0
- data/lib/json_api_client/query/requestor.rb +12 -8
- data/lib/json_api_client/resource.rb +26 -0
- 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: 3b057aa807765f05d20cfb89d4eadfe4b88737b246242a33632107fb8d6199c2
|
4
|
+
data.tar.gz: 21872ac5864207638b55504eea5fd7e8b7ecbae4e1a35c2fc5e3b89e2245323b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 076ca94be2e0c032aeaf40b282deb7786bf151e493f7bd639523fb5bc6f7b97940c0549e57853f5bb550b903ec84dac2e1c2eb37e676d81055565f3223bfba45
|
7
|
+
data.tar.gz: bd0cace4b70cfa5879d06dbb793fcfac842ab589498ec41d4f49542f0519c833f7612d153d64338bc18eb1b778799869feb3bdb5f1d02641038646fd1cf7ffc6
|
@@ -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
|
@@ -14,6 +14,7 @@ module JsonApiClient
|
|
14
14
|
builder.use Middleware::JsonRequest
|
15
15
|
builder.use Middleware::Status, status_middleware_options
|
16
16
|
builder.use Middleware::ParseJson
|
17
|
+
builder.use ::FaradayMiddleware::Gzip
|
17
18
|
builder.adapter(*adapter_options)
|
18
19
|
end
|
19
20
|
yield(self) if block_given?
|
@@ -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 = {})
|
@@ -40,6 +40,11 @@ module JsonApiClient
|
|
40
40
|
instance_accessor: false
|
41
41
|
class_attribute :add_defaults_to_changes,
|
42
42
|
instance_writer: false
|
43
|
+
|
44
|
+
class_attribute :_immutable,
|
45
|
+
instance_writer: false,
|
46
|
+
default: false
|
47
|
+
|
43
48
|
self.primary_key = :id
|
44
49
|
self.parser = Parsers::Parser
|
45
50
|
self.paginator = Paginating::Paginator
|
@@ -94,6 +99,19 @@ module JsonApiClient
|
|
94
99
|
table_name
|
95
100
|
end
|
96
101
|
|
102
|
+
# Indicates whether this resource is mutable or immutable;
|
103
|
+
# by default, all resources are mutable.
|
104
|
+
#
|
105
|
+
# @return [Boolean]
|
106
|
+
def immutable(flag = true)
|
107
|
+
self._immutable = flag
|
108
|
+
end
|
109
|
+
|
110
|
+
def inherited(subclass)
|
111
|
+
subclass._immutable = false
|
112
|
+
super
|
113
|
+
end
|
114
|
+
|
97
115
|
# Specifies the relative path that should be used for this resource;
|
98
116
|
# by default, this is inferred from the resource class name.
|
99
117
|
#
|
@@ -215,6 +233,11 @@ module JsonApiClient
|
|
215
233
|
# @option [Symbol] :on One of [:collection or :member] to decide whether it's a collect or member method
|
216
234
|
# @option [Symbol] :request_method The request method (:get, :post, etc)
|
217
235
|
def custom_endpoint(name, options = {})
|
236
|
+
if _immutable
|
237
|
+
request_method = options.fetch(:request_method, :get).to_sym
|
238
|
+
raise JsonApiClient::Errors::ResourceImmutableError if request_method != :get
|
239
|
+
end
|
240
|
+
|
218
241
|
if :collection == options.delete(:on)
|
219
242
|
collection_endpoint(name, options)
|
220
243
|
else
|
@@ -440,6 +463,7 @@ module JsonApiClient
|
|
440
463
|
# @return [Boolean] Whether or not the save succeeded
|
441
464
|
def save
|
442
465
|
return false unless valid?
|
466
|
+
raise JsonApiClient::Errors::ResourceImmutableError if _immutable
|
443
467
|
|
444
468
|
self.last_result_set = if persisted?
|
445
469
|
self.class.requestor.update(self)
|
@@ -470,6 +494,8 @@ module JsonApiClient
|
|
470
494
|
#
|
471
495
|
# @return [Boolean] Whether or not the destroy succeeded
|
472
496
|
def destroy
|
497
|
+
raise JsonApiClient::Errors::ResourceImmutableError if _immutable
|
498
|
+
|
473
499
|
self.last_result_set = self.class.requestor.destroy(self)
|
474
500
|
if last_result_set.has_errors?
|
475
501
|
fill_errors
|
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.18.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: 2020-12-02 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
|