json_api_client 1.21.1 → 1.23.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f67e7946b46b9e5f0a0cf9d445d366f990926da3c758a9b86a9d554cdf599e9d
4
- data.tar.gz: b331bebea3994b2e3a342eab136d6ac4494b6021f3ba030a6813374179f51489
3
+ metadata.gz: 15b4315b1e13b217c676e0915ab247724164a6e6debd6c4abf24f881f0fd8285
4
+ data.tar.gz: 37521318c26c77c27eb76c02e4a1f88c3dd0920cf15a208dd598abe8a23c2c12
5
5
  SHA512:
6
- metadata.gz: babc0059c16c3386935942264968cccd309b7268b130a2170dd2e78669861659c5844c080750cf54e1314357c9c88798a75a63df32f3e29af8400670a4dba43e
7
- data.tar.gz: 4b9e3b6cbaae50653a896d4fdb02364eb9c34456e721ff8dd1b83e9106c11b502d138721f249b334317b015be791b8102dbb867303855bd54304bec229f01a5e
6
+ metadata.gz: 8332c87747e3f256c73471867b4c361c2d7d5a2990de0aaa2f928092a1d7e063ad083167bf70dfcbc5275bf1bed100547d959b13444e471050995a2504cd69bc
7
+ data.tar.gz: 784aa84e674c28c2b77fb97959a8fdb0ebb7258741008cc6983050be3d9264f3b61f0e69bccff5996f24bbab1d265737185dc918aecd5f130aa5c74384538468
@@ -13,8 +13,8 @@ module JsonApiClient
13
13
  builder.request :json
14
14
  builder.use Middleware::JsonRequest
15
15
  builder.use Middleware::Status, status_middleware_options
16
- builder.use Middleware::ParseJson
17
- builder.use ::FaradayMiddleware::Gzip
16
+ builder.response :json
17
+ builder.use ::Faraday::Gzip::Middleware
18
18
  builder.adapter(*adapter_options)
19
19
  end
20
20
  yield(self) if block_given?
@@ -24,7 +24,7 @@ module JsonApiClient
24
24
  # inserted middleware will run after json parsed
25
25
  def use(middleware, *args, &block)
26
26
  return if faraday.builder.locked?
27
- faraday.builder.insert_before(Middleware::ParseJson, middleware, *args, &block)
27
+ faraday.builder.insert_before(::Faraday::Response::Json, middleware, *args, &block)
28
28
  end
29
29
 
30
30
  def delete(middleware)
@@ -1,7 +1,6 @@
1
1
  module JsonApiClient
2
2
  module Middleware
3
3
  autoload :JsonRequest, 'json_api_client/middleware/json_request'
4
- autoload :ParseJson, 'json_api_client/middleware/parse_json'
5
4
  autoload :Status, 'json_api_client/middleware/status'
6
5
  end
7
- end
6
+ end
@@ -136,7 +136,7 @@ module JsonApiClient
136
136
  primary_key: opts.fetch( :primary_key, @primary_key ),
137
137
  pagination_params: @pagination_params.merge( opts.fetch( :pagination_params, {} ) ),
138
138
  path_params: @path_params.merge( opts.fetch( :path_params, {} ) ),
139
- additional_params: @additional_params.merge( opts.fetch( :additional_params, {} ) ),
139
+ additional_params: @additional_params.deep_merge( opts.fetch( :additional_params, {} ) ),
140
140
  filters: @filters.merge( opts.fetch( :filters, {} ) ),
141
141
  includes: @includes + opts.fetch( :includes, [] ),
142
142
  orders: @orders + opts.fetch( :orders, [] ),
@@ -260,10 +260,11 @@ module JsonApiClient
260
260
  metaclass = class << self
261
261
  self
262
262
  end
263
+ endpoint_name = _name_for_route_format(name)
263
264
  metaclass.instance_eval do
264
265
  define_method(name) do |*params|
265
266
  request_params = params.first || {}
266
- requestor.custom(name, options, request_params)
267
+ requestor.custom(endpoint_name, options, request_params)
267
268
  end
268
269
  end
269
270
  end
@@ -274,10 +275,11 @@ module JsonApiClient
274
275
  # @param options [Hash] endpoint options
275
276
  # @option options [Symbol] :request_method The request method (:get, :post, etc)
276
277
  def member_endpoint(name, options = {})
278
+ endpoint_name = self._name_for_route_format(name)
277
279
  define_method name do |*params|
278
280
  request_params = params.first || {}
279
281
  request_params[self.class.primary_key] = attributes.fetch(self.class.primary_key)
280
- self.class.requestor.custom(name, options, request_params)
282
+ self.class.requestor.custom(endpoint_name, options, request_params)
281
283
  end
282
284
  end
283
285
 
@@ -348,6 +350,17 @@ module JsonApiClient
348
350
  yield(conn) if block_given?
349
351
  end
350
352
  end
353
+
354
+ def _name_for_route_format(name)
355
+ case self.route_format
356
+ when :dasherized_route
357
+ name.to_s.dasherize
358
+ when :camelized_route
359
+ name.to_s.camelize(:lower)
360
+ else
361
+ name
362
+ end
363
+ end
351
364
  end
352
365
 
353
366
  # Instantiate a new resource object
@@ -7,6 +7,11 @@ module JsonApiClient
7
7
  # the type_name is an absolute reference.
8
8
  return type_name.constantize if type_name.match(/^::/)
9
9
 
10
+ # Check the klass association definitions
11
+ association_klass_match = klass.associations.find { |a| a.attr_name.to_s.singularize == type_name.underscore }
12
+ association_klass = association_klass_match.options[:class] if association_klass_match
13
+ return association_klass if association_klass
14
+
10
15
  # Build a list of candidates to search for
11
16
  candidates = []
12
17
  klass.name.scan(/::|$/) { candidates.unshift "#{$`}::#{type_name}" }
@@ -1,3 +1,3 @@
1
1
  module JsonApiClient
2
- VERSION = "1.21.1"
2
+ VERSION = "1.23.0"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  require 'faraday'
2
- require 'faraday_middleware'
2
+ require 'faraday/gzip'
3
3
  require 'json'
4
4
  require 'addressable/uri'
5
5
  require 'json_api_client/formatter'
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.21.1
4
+ version: 1.23.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: 2023-06-05 00:00:00.000000000 Z
11
+ date: 2024-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,54 +16,54 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.0
19
+ version: 6.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 3.2.0
26
+ version: 6.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.15.2
33
+ version: '1.10'
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: '2.0'
36
+ version: '3.0'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 0.15.2
43
+ version: '1.10'
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
- version: '2.0'
46
+ version: '3.0'
47
47
  - !ruby/object:Gem::Dependency
48
- name: faraday_middleware
48
+ name: faraday-gzip
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.9.0
53
+ version: '1.0'
54
54
  - - "<"
55
55
  - !ruby/object:Gem::Version
56
- version: '2.0'
56
+ version: '3.0'
57
57
  type: :runtime
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.9.0
63
+ version: '1.0'
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
- version: '2.0'
66
+ version: '3.0'
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: addressable
69
69
  requirement: !ruby/object:Gem::Requirement
@@ -84,14 +84,14 @@ dependencies:
84
84
  requirements:
85
85
  - - ">="
86
86
  - !ruby/object:Gem::Version
87
- version: 3.2.0
87
+ version: 6.0.0
88
88
  type: :runtime
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
- version: 3.2.0
94
+ version: 6.0.0
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: rack
97
97
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +134,20 @@ dependencies:
134
134
  - - ">="
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: appraisal
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
137
151
  description: Build client libraries compliant with specification defined by jsonapi.org
138
152
  email: ching.jeff@gmail.com
139
153
  executables: []
@@ -167,7 +181,6 @@ files:
167
181
  - lib/json_api_client/meta_data.rb
168
182
  - lib/json_api_client/middleware.rb
169
183
  - lib/json_api_client/middleware/json_request.rb
170
- - lib/json_api_client/middleware/parse_json.rb
171
184
  - lib/json_api_client/middleware/status.rb
172
185
  - lib/json_api_client/paginating.rb
173
186
  - lib/json_api_client/paginating/nested_param_paginator.rb
@@ -205,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
218
  - !ruby/object:Gem::Version
206
219
  version: '0'
207
220
  requirements: []
208
- rubygems_version: 3.3.7
221
+ rubygems_version: 3.0.3
209
222
  signing_key:
210
223
  specification_version: 4
211
224
  summary: Build client libraries compliant with specification defined by jsonapi.org
@@ -1,31 +0,0 @@
1
- module JsonApiClient
2
- module Middleware
3
- class ParseJson < Faraday::Middleware
4
-
5
- def call(environment)
6
- @app.call(environment).on_complete do |env|
7
- if process_response_type?(response_type(env))
8
- env[:raw_body] = env[:body]
9
- env[:body] = parse(env[:body])
10
- end
11
- end
12
- end
13
-
14
- private
15
-
16
- def parse(body)
17
- ::JSON.parse(body) unless body.strip.empty?
18
- end
19
-
20
- def response_type(env)
21
- type = env[:response_headers]['Content-Type'].to_s
22
- type = type.split(';', 2).first if type.index(';')
23
- type
24
- end
25
-
26
- def process_response_type?(type)
27
- !!type.match(/\bjson$/)
28
- end
29
- end
30
- end
31
- end