zaikio-hub 0.5.0 → 0.6.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
2
  SHA256:
3
- metadata.gz: 37396907fc8988823d0bf57d8dcfc78996cb9a7b25e002cd3ea87f69275665ac
4
- data.tar.gz: 841126a5089074d2dc542ac8eb6b291f3a03687c0b13418803e1cdf68b051dd7
3
+ metadata.gz: 71418bf55d46197710099e666b3db5b04fb9e08264b0c21f874f7ea9680dd9b0
4
+ data.tar.gz: cccda672c5c0149bc602605278b61e28ac2bef9b930e98bf0b17664562a62d2c
5
5
  SHA512:
6
- metadata.gz: 0303e88a5236f1990573aa18b091385ca386547d297f2a82be273d7b43cb1752f7ec081a3aaff36e6c3c7c4b659b420f6662abd633decc8058e1518a587ca185
7
- data.tar.gz: 6206196f9229cc183d7c6eca80c3350e475115c54d8baf9114310844206425f9220431adae1e75ca99368c22ac841b834cb9181ece5486e5bb92ded66f107b99
6
+ metadata.gz: e0acec4f0cd530d9f4cb52b49eb53a86bf9aff30a576b02ab0ddd6573c3ef031b97a14ef3d13b451e61f9d7233e0232c4b50ad8bfd9afbeceaaf5d341df09256
7
+ data.tar.gz: '09c81fcb75e68d73e27ce8b69f2d0bc329b42e0fd7286b8fc0e825df50b40fbfabd1c4f1fd13a344126c79a99a1a52c4e77f70c27f6c26c9f13e40f0cbfcfa90'
data/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.6.0] - 2020-04-12
11
+
12
+ * Added pagination features for `Subscription` and `Connection`
13
+
10
14
  ## [0.5.0] - 2020-04-08
11
15
 
12
16
  * Added `granted_oauth_scopes`, `requested_oauth_scopes`, and `requested_oauth_scopes_waiting_for_approval` to Person and Organization
@@ -49,7 +53,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
49
53
  ### Added
50
54
  - Added subscriptions (migration required)
51
55
 
52
- [Unreleased]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.5.0..HEAD
56
+ [Unreleased]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.6.0..HEAD
57
+ [0.6.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.5.0..v0.6.0
53
58
  [0.5.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.4.1..v0.5.0
54
59
  [0.4.1]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.4.0...v0.4.1
55
60
  [0.4.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.3.0...v0.4.0
data/README.md CHANGED
@@ -122,7 +122,17 @@ client.test_accounts.create(
122
122
 
123
123
  ```rb
124
124
  Zaikio::Hub.with_basic_auth(client_id, client_secret) do
125
- connections = Zaikio::Hub::Connection.all
125
+ # Iterate through pages
126
+ Zaikio::Hub::Connection.per_page(10).each_page do |connections|
127
+ connections.size # e.g. 10
128
+ connections.total_count
129
+ connections.total_pages
130
+ end
131
+ # Load 2nd page
132
+ Zaikio::Hub::Connection.per_page(10).page(2)
133
+ # All
134
+ all_connections = Zaikio::Hub::Connection.all.each_page.flat_map(&:to_a)
135
+
126
136
  subscription = Zaikio::Hub::Subscription.find("Organization-b1475f65-236c-58b8-96e1-e1778b43beb7")
127
137
  subscription.plan # => "advanced"
128
138
  subscription.activate!
data/lib/zaikio/hub.rb CHANGED
@@ -5,6 +5,9 @@ require "zaikio/hub/json_parser"
5
5
  require "zaikio/hub/authorization_middleware"
6
6
  require "zaikio/hub/basic_auth_middleware"
7
7
 
8
+ # Pagination
9
+ require "zaikio/hub/pagination"
10
+
8
11
  # Models
9
12
  require "zaikio/error"
10
13
  require "zaikio/hub/client"
@@ -70,6 +73,7 @@ module Zaikio
70
73
  ssl: { verify: configuration.environment != :test }) do |c|
71
74
  c.request :json
72
75
  c.response :logger, configuration&.logger, headers: false
76
+ c.use Zaikio::Hub::Pagination::HeaderParser
73
77
  c.use JSONParser
74
78
  c.use AuthorizationMiddleware
75
79
  c.use BasicAuthMiddleware
@@ -1,6 +1,8 @@
1
1
  module Zaikio
2
2
  module Hub
3
3
  class Connection < Base
4
+ include Zaikio::Hub::Pagination::Scopes
5
+
4
6
  uri "connections(/:id)"
5
7
 
6
8
  include_root_in_json :connection
@@ -0,0 +1,19 @@
1
+ # adapted from https://github.com/balvig/spyke-kaminari
2
+
3
+ module Zaikio
4
+ module Hub
5
+ module Pagination
6
+ HEADERS = {
7
+ total_count: "Total-Count",
8
+ total_pages: "Total-Pages",
9
+ current_page: "Current-Page"
10
+ }.freeze
11
+
12
+ METADATA_KEY = :pagination
13
+ end
14
+ end
15
+ end
16
+
17
+ require "zaikio/hub/pagination/scopes"
18
+ require "zaikio/hub/pagination/relation"
19
+ require "zaikio/hub/pagination/header_parser"
@@ -0,0 +1,25 @@
1
+ module Zaikio
2
+ module Hub
3
+ module Pagination
4
+ class HeaderParser < Faraday::Response::Middleware
5
+ def on_complete(env)
6
+ @env = env
7
+
8
+ metadata = Zaikio::Hub::Pagination::HEADERS.transform_values do |key|
9
+ header(key)
10
+ end
11
+
12
+ @env.body[:metadata] ||= {}
13
+ @env.body[:metadata][Zaikio::Hub::Pagination::METADATA_KEY] = metadata
14
+ end
15
+
16
+ private
17
+
18
+ def header(key)
19
+ value = @env.response_headers[key]
20
+ value.try(:to_i)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,41 @@
1
+ module Zaikio
2
+ module Hub
3
+ module Pagination
4
+ class Relation < Spyke::Relation
5
+ Zaikio::Hub::Pagination::HEADERS.each_key do |symbol|
6
+ define_method(symbol) do
7
+ find_some.metadata[Zaikio::Hub::Pagination::METADATA_KEY][symbol]
8
+ end
9
+ end
10
+
11
+ def first_page?
12
+ current_page == 1
13
+ end
14
+
15
+ def next_page
16
+ current_page + 1
17
+ end
18
+
19
+ def last_page?
20
+ current_page == total_pages
21
+ end
22
+
23
+ def out_of_range?
24
+ current_page > total_pages
25
+ end
26
+
27
+ def each_page
28
+ return to_enum(:each_page) unless block_given?
29
+
30
+ relation = clone
31
+ yield relation
32
+ return if relation.last_page? || relation.out_of_range?
33
+
34
+ (relation.next_page..relation.total_pages).each do |number|
35
+ yield clone.page(number)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,23 @@
1
+ module Zaikio
2
+ module Hub
3
+ module Pagination
4
+ module Scopes
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ %i[page per_page].each do |symbol|
9
+ scope symbol, ->(value) { where(symbol => value) }
10
+ end
11
+ end
12
+
13
+ module ClassMethods
14
+ # Overrides the method included by Spyke::Scoping to return paginated
15
+ # relations.
16
+ def all
17
+ current_scope || Zaikio::Hub::Pagination::Relation.new(self, uri: uri)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,6 +1,8 @@
1
1
  module Zaikio
2
2
  module Hub
3
3
  class Subscription < Base
4
+ include Zaikio::Hub::Pagination::Scopes
5
+
4
6
  uri "subscriptions(/:id)"
5
7
 
6
8
  include_root_in_json :subscription
@@ -1,5 +1,5 @@
1
1
  module Zaikio
2
2
  module Hub
3
- VERSION = "0.5.0".freeze
3
+ VERSION = "0.6.0".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zaikio-hub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - crispymtn
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-04-08 00:00:00.000000000 Z
13
+ date: 2021-04-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: concurrent-ruby
@@ -131,6 +131,10 @@ files:
131
131
  - lib/zaikio/hub/membership.rb
132
132
  - lib/zaikio/hub/organization.rb
133
133
  - lib/zaikio/hub/organization_membership.rb
134
+ - lib/zaikio/hub/pagination.rb
135
+ - lib/zaikio/hub/pagination/header_parser.rb
136
+ - lib/zaikio/hub/pagination/relation.rb
137
+ - lib/zaikio/hub/pagination/scopes.rb
134
138
  - lib/zaikio/hub/person.rb
135
139
  - lib/zaikio/hub/revoked_access_token.rb
136
140
  - lib/zaikio/hub/role.rb