swapir 1.0.3 → 2.0.1

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
2
  SHA1:
3
- metadata.gz: 404826b301e9dbde596f73bdbffeb5d6dba9a079
4
- data.tar.gz: 9fb4230d8ed2c3fe30f4ee22e688d7f8c9497778
3
+ metadata.gz: 2d2a8e7bac0bf47a87c77dc2c926f355f9a9c7a3
4
+ data.tar.gz: a2b01bc6228379f1108103136f27910cd7b5fc5f
5
5
  SHA512:
6
- metadata.gz: b789af461e734f40a2da061e957d25f1c0dde486ae757129ddae9446e85c62a787f84e9485ba449cc4431893bb05e9fe4606198395dad589be77b5c896511970
7
- data.tar.gz: 4a408280301cf658adc3958b86d9f3c1adee2065c1ffccedf0b451d67fdde547752d609e838ba35616d6316a5ba6574b9a55ccf1e200ddd2e425fb0bb1ed8121
6
+ metadata.gz: b1bf0ae045ae400da0c8942ca5aca1d9f5f3ab9f5f7f70505930e7375b120aa6722b6ba14662c6f99fab4c60419240242b082267f8811e28d25c93198772133d
7
+ data.tar.gz: c1db00aa94f84ab487577576d528280cd5660a524a11624f4ec269fe8d94fbeb8d86d5d306952611924a2cfa05a41eba8b0419e241f0c9b1b6328814f6216c92
data/Gemfile CHANGED
@@ -6,7 +6,3 @@ gemspec :name => "swapir"
6
6
 
7
7
  gem "rest-client"
8
8
  gem "json"
9
-
10
- group :development do
11
- gem "byebug"
12
- end
@@ -6,7 +6,6 @@
6
6
  # external gem dependencies
7
7
  require "rest-client"
8
8
  require "json"
9
- require "byebug"
10
9
 
11
10
  # internal dependencies
12
11
  require "swapir/resource_api"
@@ -28,15 +27,15 @@ class Swapir
28
27
  # handle the raised exception
29
28
  begin
30
29
  RestClient.get(api_base_url).code == 200
31
- rescue Errno::ECONNREFUSED => e
30
+ rescue RestClient::ExceptionWithResponse => e
32
31
  false
33
32
  end
34
33
  end
35
34
 
36
35
  def self.request(resource)
37
- return "" unless self.api_available?
38
- # call the Star Wars Api endpoint returns the api response
39
- # and does not raise an exception when it fails
36
+ return "Star Wars API is not available" unless self.api_available?
37
+ # rest-client returns the swapi response with status 200
38
+ # it does not raise an exception when the request fails
40
39
  begin
41
40
  RestClient.get(api_base_url + resource)
42
41
  rescue RestClient::ExceptionWithResponse => e
@@ -45,7 +44,7 @@ class Swapir
45
44
  end
46
45
 
47
46
  def self.decode(response)
48
- # convert the Star Wars Api response body
47
+ # convert the Star Wars Api response body for a single resource
49
48
  # return the data in a Ruby Hash
50
49
  JSON.parse(response.body)
51
50
  end
@@ -55,4 +54,24 @@ class Swapir
55
54
  # return the data collection in a Ruby Hash
56
55
  JSON.parse(response.body)["results"]
57
56
  end
57
+
58
+ def self.paginated_request(resource)
59
+ next_url = api_base_url + resource
60
+ total_records = nil
61
+ collection = []
62
+
63
+ loop do
64
+ response = RestClient.get(next_url)
65
+ break if response.code != 200
66
+
67
+ total_records = decode(response)["count"]
68
+ data = decode_results(response)
69
+ collection += data
70
+
71
+ break if (data.empty? || collection.length >= total_records)
72
+ next_url = decode(response)["next"]
73
+ end
74
+
75
+ collection
76
+ end
58
77
  end
@@ -14,7 +14,7 @@ module ResourceListApi
14
14
  # define_method creates a closure which can hold references
15
15
  # to large objects that will never be garbage collected
16
16
  define_method("get_all_#{resource}") do
17
- decode_results(request(resource))
17
+ paginated_request(resource)
18
18
  end
19
19
  end
20
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swapir
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Riana Ferreira
@@ -10,20 +10,6 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2017-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: byebug
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '9.0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '9.0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: json
29
15
  requirement: !ruby/object:Gem::Requirement