json_api_client 1.6.1 → 1.6.2
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/belongs_to.rb +0 -9
- data/lib/json_api_client/associations/has_many.rb +0 -8
- data/lib/json_api_client/associations/has_one.rb +0 -8
- data/lib/json_api_client/helpers/associatable.rb +64 -0
- data/lib/json_api_client/helpers/dynamic_attributes.rb +1 -6
- data/lib/json_api_client/helpers.rb +1 -0
- data/lib/json_api_client/middleware/status.rb +1 -1
- data/lib/json_api_client/resource.rb +33 -18
- data/lib/json_api_client/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5dc92bcac4713e71d886a74ff2e510a77cd938b2
|
4
|
+
data.tar.gz: 690731e4d4f2565c8f812f03fe7b7e0f0ba24543
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52daf62f539cb691ef0edf517e00c6f9359c9d2afec757af24f1cd6a642f5bd54477c257802b4f65c0a058b67acf9cc5f372d87c58709d245e08bce4db2de07e
|
7
|
+
data.tar.gz: c53470bc17b38e6c2a8aaaa8bec98c1f37f782c2d1e198e8803c0b12b7b2851f81a4791d5df1c185d10a3e0627b8fad730a860ded10a6c7afa770dc91f07b1ac
|
@@ -1,15 +1,6 @@
|
|
1
1
|
module JsonApiClient
|
2
2
|
module Associations
|
3
3
|
module BelongsTo
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
module ClassMethods
|
7
|
-
def belongs_to(attr_name, options = {})
|
8
|
-
# self.associations = self.associations + [HasOne::Association.new(attr_name, self, options)]
|
9
|
-
self.associations += [BelongsTo::Association.new(attr_name, self, options)]
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
4
|
class Association < BaseAssociation
|
14
5
|
include Helpers::URI
|
15
6
|
def param
|
@@ -1,14 +1,6 @@
|
|
1
1
|
module JsonApiClient
|
2
2
|
module Associations
|
3
3
|
module HasMany
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
module ClassMethods
|
7
|
-
def has_many(attr_name, options = {})
|
8
|
-
self.associations = self.associations + [HasMany::Association.new(attr_name, self, options)]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
4
|
class Association < BaseAssociation
|
13
5
|
end
|
14
6
|
end
|
@@ -1,14 +1,6 @@
|
|
1
1
|
module JsonApiClient
|
2
2
|
module Associations
|
3
3
|
module HasOne
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
module ClassMethods
|
7
|
-
def has_one(attr_name, options = {})
|
8
|
-
self.associations += [HasOne::Association.new(attr_name, self, options)]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
4
|
class Association < BaseAssociation
|
13
5
|
def from_result_set(result_set)
|
14
6
|
result_set.first
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module JsonApiClient
|
2
|
+
module Helpers
|
3
|
+
module Associatable
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
class_attribute :associations, instance_accessor: false
|
8
|
+
self.associations = []
|
9
|
+
attr_accessor :__cached_associations
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
def _define_association(attr_name, association_klass, options = {})
|
14
|
+
attr_name = attr_name.to_sym
|
15
|
+
association = association_klass.new(attr_name, self, options)
|
16
|
+
self.associations += [association]
|
17
|
+
|
18
|
+
define_method(attr_name) do
|
19
|
+
_cached_relationship(attr_name) do
|
20
|
+
relationship_definition = relationship_definition_for(attr_name)
|
21
|
+
return unless relationship_definition
|
22
|
+
relationship_data_for(attr_name, relationship_definition)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
define_method("#{attr_name}=") do |value|
|
27
|
+
_clear_cached_relationship(attr_name)
|
28
|
+
relationships.public_send("#{attr_name}=", value)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def belongs_to(attr_name, options = {})
|
33
|
+
_define_association(attr_name, JsonApiClient::Associations::BelongsTo::Association, options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def has_many(attr_name, options = {})
|
37
|
+
_define_association(attr_name, JsonApiClient::Associations::HasMany::Association, options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def has_one(attr_name, options = {})
|
41
|
+
_define_association(attr_name, JsonApiClient::Associations::HasOne::Association, options)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def _cached_associations
|
46
|
+
self.__cached_associations ||= {}
|
47
|
+
end
|
48
|
+
|
49
|
+
def _clear_cached_relationships
|
50
|
+
self.__cached_associations = {}
|
51
|
+
end
|
52
|
+
|
53
|
+
def _clear_cached_relationship(attr_name)
|
54
|
+
_cached_associations.delete(attr_name)
|
55
|
+
end
|
56
|
+
|
57
|
+
def _cached_relationship(attr_name)
|
58
|
+
return _cached_associations[attr_name] if _cached_associations.has_key?(attr_name)
|
59
|
+
_cached_associations[attr_name] = yield
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -39,12 +39,7 @@ module JsonApiClient
|
|
39
39
|
|
40
40
|
def method_missing(method, *args, &block)
|
41
41
|
if has_attribute?(method)
|
42
|
-
|
43
|
-
define_method(method) do
|
44
|
-
attributes[method]
|
45
|
-
end
|
46
|
-
end
|
47
|
-
return send(method)
|
42
|
+
return attributes[method]
|
48
43
|
end
|
49
44
|
|
50
45
|
normalized_method = safe_key_formatter.unformat(method.to_s)
|
@@ -12,6 +12,7 @@ module JsonApiClient
|
|
12
12
|
|
13
13
|
include Helpers::DynamicAttributes
|
14
14
|
include Helpers::Dirty
|
15
|
+
include Helpers::Associatable
|
15
16
|
|
16
17
|
attr_accessor :last_result_set,
|
17
18
|
:links,
|
@@ -29,7 +30,6 @@ module JsonApiClient
|
|
29
30
|
:relationship_linker,
|
30
31
|
:read_only_attributes,
|
31
32
|
:requestor_class,
|
32
|
-
:associations,
|
33
33
|
:json_key_format,
|
34
34
|
:route_format,
|
35
35
|
:request_params_class,
|
@@ -47,7 +47,6 @@ module JsonApiClient
|
|
47
47
|
self.relationship_linker = Relationships::Relations
|
48
48
|
self.read_only_attributes = [:id, :type, :links, :meta, :relationships]
|
49
49
|
self.requestor_class = Query::Requestor
|
50
|
-
self.associations = []
|
51
50
|
self.request_params_class = RequestParams
|
52
51
|
self.keep_request_params = false
|
53
52
|
self.add_defaults_to_changes = false
|
@@ -58,10 +57,6 @@ module JsonApiClient
|
|
58
57
|
#:underscored_route, :camelized_route, :dasherized_route, or custom
|
59
58
|
self.route_format = :underscored_route
|
60
59
|
|
61
|
-
include Associations::BelongsTo
|
62
|
-
include Associations::HasMany
|
63
|
-
include Associations::HasOne
|
64
|
-
|
65
60
|
class << self
|
66
61
|
extend Forwardable
|
67
62
|
def_delegators :_new_scope, :where, :order, :includes, :select, :all, :paginate, :page, :with_params, :first, :find, :last
|
@@ -253,6 +248,12 @@ module JsonApiClient
|
|
253
248
|
# @option options [Symbol] :default The default value for the property
|
254
249
|
def property(name, options = {})
|
255
250
|
schema.add(name, options)
|
251
|
+
define_method(name) do
|
252
|
+
attributes[name]
|
253
|
+
end
|
254
|
+
define_method("#{name}=") do |value|
|
255
|
+
set_attribute(name, value)
|
256
|
+
end
|
256
257
|
end
|
257
258
|
|
258
259
|
# Declare multiple properties with the same optional options
|
@@ -430,8 +431,10 @@ module JsonApiClient
|
|
430
431
|
self.attributes = updated.attributes
|
431
432
|
self.links.attributes = updated.links.attributes
|
432
433
|
self.relationships.attributes = updated.relationships.attributes
|
434
|
+
self.relationships.last_result_set = last_result_set
|
433
435
|
clear_changes_information
|
434
436
|
self.relationships.clear_changes_information
|
437
|
+
_clear_cached_relationships
|
435
438
|
end
|
436
439
|
true
|
437
440
|
end
|
@@ -447,6 +450,9 @@ module JsonApiClient
|
|
447
450
|
false
|
448
451
|
else
|
449
452
|
self.attributes.clear
|
453
|
+
self.relationships.attributes.clear
|
454
|
+
self.relationships.last_result_set = nil
|
455
|
+
_clear_cached_relationships
|
450
456
|
true
|
451
457
|
end
|
452
458
|
end
|
@@ -491,27 +497,36 @@ module JsonApiClient
|
|
491
497
|
end
|
492
498
|
end
|
493
499
|
|
494
|
-
def
|
495
|
-
|
496
|
-
|
497
|
-
return super unless association || (relationships && relationships.has_attribute?(method))
|
500
|
+
def relationship_definition_for(name)
|
501
|
+
relationships[name] if relationships && relationships.has_attribute?(name)
|
502
|
+
end
|
498
503
|
|
499
|
-
|
504
|
+
def included_data_for(name, relationship_definition)
|
505
|
+
last_result_set.included.data_for(name, relationship_definition)
|
506
|
+
end
|
500
507
|
|
508
|
+
def relationship_data_for(name, relationship_definition)
|
501
509
|
# look in included data
|
502
|
-
if
|
503
|
-
return
|
510
|
+
if relationship_definition.key?("data")
|
511
|
+
return included_data_for(name, relationship_definition)
|
504
512
|
end
|
505
513
|
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
return association.data(url)
|
510
|
-
end
|
514
|
+
url = relationship_definition["links"]["related"]
|
515
|
+
if relationship_definition["links"] && url
|
516
|
+
return association_for(name).data(url)
|
511
517
|
end
|
518
|
+
|
512
519
|
nil
|
513
520
|
end
|
514
521
|
|
522
|
+
def method_missing(method, *args)
|
523
|
+
relationship_definition = relationship_definition_for(method)
|
524
|
+
|
525
|
+
return super unless relationship_definition
|
526
|
+
|
527
|
+
relationship_data_for(method, relationship_definition)
|
528
|
+
end
|
529
|
+
|
515
530
|
def respond_to_missing?(symbol, include_all = false)
|
516
531
|
return true if relationships && relationships.has_attribute?(symbol)
|
517
532
|
return true if association_for(symbol)
|
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.6.
|
4
|
+
version: 1.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Ching
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- lib/json_api_client/errors.rb
|
135
135
|
- lib/json_api_client/formatter.rb
|
136
136
|
- lib/json_api_client/helpers.rb
|
137
|
+
- lib/json_api_client/helpers/associatable.rb
|
137
138
|
- lib/json_api_client/helpers/callbacks.rb
|
138
139
|
- lib/json_api_client/helpers/dirty.rb
|
139
140
|
- lib/json_api_client/helpers/dynamic_attributes.rb
|