json_api_client 1.6.1 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|