simple_jsonapi_client 0.2.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 18294e3191d6e67529299f8cea4904f1806cc976
4
- data.tar.gz: ed25742b8c53fd515ce5be58dd38cf25fac13305
2
+ SHA256:
3
+ metadata.gz: 8e72a2d0cea7bff8938a532d200fe3da6f87d20050f24fe0b8ddb77cb3b6854c
4
+ data.tar.gz: 239dd8b6acab3f55408c3335fdc94c475a94f6b69144f8eb26b7082589d4162a
5
5
  SHA512:
6
- metadata.gz: 13b9634cc3cb4aa94197948d3c5d49bfbc9058bbdd21254a0669d44cc77b37a0d7885304778b574353aed351a1ad0054ff77e592b497ac2bf424aeec650ecc9b
7
- data.tar.gz: 0b561a8849b3d9a3b8f28ebae2a2a5ba53427a892f2f6bc0a99fbae83e16c5be4f2ccf3c3e45d90eee1543f425ea54f4a4216ef656ba71a7c52059402a80a125
6
+ metadata.gz: a41f9dcb9329fab138f1034e6a71150d5e0e73feff8b6543b0f441c256169d844f682abf565a6336a7e2b6dafcf43518005563db8d91ebd2fae92e2c1946954f
7
+ data.tar.gz: f56c4a42c6d07be0edab577677b128aabef784c9c410da23eb656cfae7a09f6a33fd7fc2851d969a7afc7cc430a999b54534b5d6c26bb2bed15dfb718df2d837
data/.travis.yml CHANGED
@@ -4,5 +4,7 @@ services:
4
4
  - docker
5
5
  before_install:
6
6
  - bin/setup
7
+ - gem install -v 2.2 bundler -N
8
+ - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
7
9
  script:
8
10
  - rake
data/Dockerfile CHANGED
@@ -1,6 +1,8 @@
1
- FROM ruby:2.4.0
1
+ FROM ruby:2.6.6
2
2
  RUN apt-get update -qq
3
- RUN gem update bundler
3
+ RUN gem update --system
4
+ RUN gem install -v 2.2.3 bundler -N
5
+ ENV BUNDLER_VERSION=2.2
4
6
  RUN mkdir /simple_jsonapi_client
5
7
  WORKDIR /simple_jsonapi_client
6
8
  ADD . .
data/docker-compose.yml CHANGED
@@ -2,6 +2,10 @@ version: '3'
2
2
  services:
3
3
  db:
4
4
  image: postgres
5
+ environment:
6
+ POSTGRES_HOST_AUTH_METHOD: trust
7
+ ports:
8
+ - "5432:5432"
5
9
  spec:
6
10
  build: .
7
11
  entrypoint: bin/wait_for_it jsonapi_app_spec:3001 -t 30 --
@@ -15,10 +19,9 @@ services:
15
19
  API_PORT: 3001
16
20
  jsonapi_app_spec:
17
21
  build: ./spec/jsonapi_app
18
- entrypoint: bin/wait_for_it db:5432 -t 30 --
19
- volumes:
20
- - ./spec/jsonapi_app:/jsonapi_app
21
- - /jsonapi_app/tmp/
22
+ entrypoint: bin/wait_for_it db:5432 -t 60 --
23
+ # volumes:
24
+ # - ./spec/jsonapi_app:/jsonapi_app
22
25
  command: bundle exec rails s -p 3001 -b '0.0.0.0'
23
26
  ports:
24
27
  - "3001:3001"
@@ -39,10 +42,9 @@ services:
39
42
  API_PORT: 3002
40
43
  jsonapi_app_console:
41
44
  build: ./spec/jsonapi_app
42
- entrypoint: bin/wait_for_it db:5432 -t 30 --
43
- volumes:
44
- - ./spec/jsonapi_app:/jsonapi_app
45
- - /jsonapi_app/tmp/
45
+ entrypoint: bin/wait_for_it db:5432 -t 60 --
46
+ # volumes:
47
+ # - ./spec/jsonapi_app:/jsonapi_app
46
48
  command: bundle exec rails s -p 3002 -b '0.0.0.0'
47
49
  ports:
48
50
  - "3002:3002"
@@ -1,5 +1,4 @@
1
- require 'active_support/core_ext/hash/keys'
2
- require 'active_support/core_ext/hash/transform_values'
1
+ require 'simple_jsonapi_client/utils'
3
2
  require 'simple_jsonapi_client/error'
4
3
  require 'simple_jsonapi_client/relationships/relationship'
5
4
  require 'simple_jsonapi_client/redirection/fetch_all'
@@ -111,20 +110,21 @@ module SimpleJSONAPIClient
111
110
  end
112
111
 
113
112
  def operation(request_method, response_type, opts)
114
- response = send(request_method, opts)
113
+ response = send(request_method, **opts)
115
114
  handling_error(response) do
116
115
  send(:"interpret_#{response_type}_response", response, opts[:connection])
117
116
  end
118
117
  end
119
118
 
120
119
  def create_request(connection:,
120
+ id: nil,
121
121
  url_opts: {},
122
122
  url: self::COLLECTION_URL % url_opts,
123
123
  attributes: {},
124
124
  relationships: {},
125
125
  **attrs)
126
126
  attributes, relationships = extract_attrs(attrs, attributes, relationships)
127
- body = template(attributes: attributes, relationships: relationships)
127
+ body = template(id: id, attributes: attributes, relationships: relationships)
128
128
  connection.post(url, body)
129
129
  end
130
130
 
@@ -208,12 +208,22 @@ module SimpleJSONAPIClient
208
208
  def interpret_empty_response(response, connection)
209
209
  end
210
210
 
211
- def interpreted_relationships(relationships)
212
- relationships.transform_values { |value|
213
- if (relationship = relationship_from(value))
214
- { data: relationship }
215
- end
216
- }
211
+ if {}.respond_to?(:transform_values)
212
+ def interpreted_relationships(relationships)
213
+ relationships.transform_values { |value|
214
+ if (relationship = relationship_from(value))
215
+ { data: relationship }
216
+ end
217
+ }
218
+ end
219
+ else
220
+ def interpreted_relationships(relationships)
221
+ Utils.transform_values(relationships) { |value|
222
+ if (relationship = relationship_from(value))
223
+ { data: relationship }
224
+ end
225
+ }
226
+ end
217
227
  end
218
228
 
219
229
  def relationship_from(value)
@@ -238,12 +248,12 @@ module SimpleJSONAPIClient
238
248
  attr_reader :id, :context
239
249
 
240
250
  def initialize(meta: nil, id:, attributes: nil, relationships: nil, included: {}, connection:, context: nil)
241
- @meta = meta.symbolize_keys if meta
251
+ @meta = Utils.symbolize_keys(meta) if meta
242
252
  @id = id
243
253
  @included = included
244
254
  @connection = connection
245
255
  @context = context
246
- @attributes = attributes.symbolize_keys if attributes
256
+ @attributes = Utils.symbolize_keys(attributes) if attributes
247
257
  @input_relationships = relationships
248
258
  end
249
259
 
@@ -267,7 +277,7 @@ module SimpleJSONAPIClient
267
277
  @relationships ||=
268
278
  begin
269
279
  if input_relationships
270
- relationships_to_models(input_relationships.symbolize_keys)
280
+ relationships_to_models(Utils.symbolize_keys(input_relationships))
271
281
  else
272
282
  loaded_record.relationships
273
283
  end
@@ -1,4 +1,5 @@
1
1
  require 'delegate'
2
+ require 'forwardable'
2
3
 
3
4
  module SimpleJSONAPIClient
4
5
  module Errors
@@ -3,9 +3,9 @@ require 'simple_jsonapi_client/redirection/proxy'
3
3
  module SimpleJSONAPIClient
4
4
  module Redirection
5
5
  class FetchAll < ::SimpleJSONAPIClient::Redirection::Proxy
6
- def_delegators :internal_object, *(Array.instance_methods(false) - instance_methods)
7
6
  def_delegators :internal_enumerator, *(Enumerator.instance_methods(false) - instance_methods)
8
7
  def_delegators :internal_enumerator, *(Enumerable.instance_methods(false) - instance_methods)
8
+ def_delegators :internal_object, :size, *(Array.instance_methods(false) - instance_methods)
9
9
 
10
10
  def initialize(base_opts, &operation)
11
11
  @base_opts = base_opts
@@ -30,7 +30,7 @@ module SimpleJSONAPIClient
30
30
  current_response['data'].each do |record|
31
31
  yielder << record
32
32
  end
33
- break unless (next_link = current_response.dig('links', 'next'))
33
+ break unless (next_link = Utils.hash_dig(current_response, 'links', 'next'))
34
34
  current_opts.merge!(url_opts: {}, url: next_link)
35
35
  current_opts.delete(:page_opts)
36
36
  end
@@ -0,0 +1,47 @@
1
+ module SimpleJSONAPIClient
2
+ module Utils
3
+ class << self
4
+ # Implementation adapted from ActiveSupport
5
+ # Copyright (c) 2005-2019 David Heinemeier Hansson
6
+ # https://github.com/rails/rails/blob/b9ca94caea2ca6a6cc09abaffaad67b447134079/activesupport/lib/active_support/core_ext/hash/keys.rb
7
+ def symbolize_keys(hash)
8
+ result = {}
9
+ hash.each_key do |key|
10
+ result[(key.to_sym rescue key)] = hash[key]
11
+ end
12
+ result
13
+ end
14
+
15
+ def hash_dig(hash, *keys)
16
+ if hash.respond_to?(:dig)
17
+ hash.dig(*keys)
18
+ else
19
+ dig(hash, keys)
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ # Implementation adapted from the hash_dig gem, Copyright (c) 2015 Colin Kelley, MIT License
26
+ # https://github.com/Invoca/ruby_dig/blob/19fa8c1d2cc7706d015a3004f028169a2ff83391/lib/ruby_dig.rb
27
+ def dig(hash, key, *rest)
28
+ value = hash[key]
29
+ if value.nil? || rest.empty?
30
+ value
31
+ elsif value.is_a?(Hash) || value.is_a?(Array)
32
+ dig(value, *rest)
33
+ else
34
+ fail TypeError, "#{value.class} does not work with #dig" # should not happen with our use of #dig
35
+ end
36
+ end
37
+
38
+ def transform_values(hash)
39
+ result = {}
40
+ hash.each do |key, value|
41
+ result[key] = yield(value)
42
+ end
43
+ result
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,3 +1,3 @@
1
1
  module SimpleJSONAPIClient
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -20,11 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "faraday", "~> 0.12"
24
- spec.add_dependency "faraday_middleware", "~> 0.11"
25
- spec.add_dependency "activesupport", ">= 3.1.12", "< 6"
23
+ spec.add_dependency "faraday", ">= 0.12", "< 2.0"
24
+ spec.add_dependency "faraday_middleware", "> 0.11", "< 2.0"
26
25
 
27
- spec.add_development_dependency "bundler", "~> 1.15"
26
+ spec.add_development_dependency "bundler", "~> 2.2"
28
27
  spec.add_development_dependency "rake", "~> 10.0"
29
28
  spec.add_development_dependency "rspec", "~> 3.0"
30
29
  spec.add_development_dependency "pry", "~> 0"
metadata CHANGED
@@ -1,77 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_jsonapi_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ariel Caplan
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-13 00:00:00.000000000 Z
11
+ date: 2022-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.12'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0.12'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: faraday_middleware
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">"
32
38
  - !ruby/object:Gem::Version
33
39
  version: '0.11'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.11'
41
- - !ruby/object:Gem::Dependency
42
- name: activesupport
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 3.1.12
48
40
  - - "<"
49
41
  - !ruby/object:Gem::Version
50
- version: '6'
42
+ version: '2.0'
51
43
  type: :runtime
52
44
  prerelease: false
53
45
  version_requirements: !ruby/object:Gem::Requirement
54
46
  requirements:
55
- - - ">="
47
+ - - ">"
56
48
  - !ruby/object:Gem::Version
57
- version: 3.1.12
49
+ version: '0.11'
58
50
  - - "<"
59
51
  - !ruby/object:Gem::Version
60
- version: '6'
52
+ version: '2.0'
61
53
  - !ruby/object:Gem::Dependency
62
54
  name: bundler
63
55
  requirement: !ruby/object:Gem::Requirement
64
56
  requirements:
65
57
  - - "~>"
66
58
  - !ruby/object:Gem::Version
67
- version: '1.15'
59
+ version: '2.2'
68
60
  type: :development
69
61
  prerelease: false
70
62
  version_requirements: !ruby/object:Gem::Requirement
71
63
  requirements:
72
64
  - - "~>"
73
65
  - !ruby/object:Gem::Version
74
- version: '1.15'
66
+ version: '2.2'
75
67
  - !ruby/object:Gem::Dependency
76
68
  name: rake
77
69
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +106,7 @@ dependencies:
114
106
  - - "~>"
115
107
  - !ruby/object:Gem::Version
116
108
  version: '0'
117
- description:
109
+ description:
118
110
  email:
119
111
  - arielmcaplan@gmail.com
120
112
  executables: []
@@ -151,13 +143,14 @@ files:
151
143
  - lib/simple_jsonapi_client/relationships/relationship.rb
152
144
  - lib/simple_jsonapi_client/relationships/singular_data_relationship.rb
153
145
  - lib/simple_jsonapi_client/relationships/singular_link_relationship.rb
146
+ - lib/simple_jsonapi_client/utils.rb
154
147
  - lib/simple_jsonapi_client/version.rb
155
148
  - simple_jsonapi_client.gemspec
156
149
  homepage: https://github.com/amcaplan/simple_jsonapi_client
157
150
  licenses:
158
151
  - MIT
159
152
  metadata: {}
160
- post_install_message:
153
+ post_install_message:
161
154
  rdoc_options: []
162
155
  require_paths:
163
156
  - lib
@@ -172,9 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
165
  - !ruby/object:Gem::Version
173
166
  version: '0'
174
167
  requirements: []
175
- rubyforge_project:
176
- rubygems_version: 2.2.2
177
- signing_key:
168
+ rubygems_version: 3.2.22
169
+ signing_key:
178
170
  specification_version: 4
179
171
  summary: Framework for writing clients for JSONAPI APIs in Ruby.
180
172
  test_files: []