zaikio-hub 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -1
- data/README.md +11 -10
- data/lib/zaikio/hub.rb +4 -6
- data/lib/zaikio/hub/base.rb +3 -1
- data/lib/zaikio/hub/connection.rb +0 -2
- data/lib/zaikio/hub/subscription.rb +0 -2
- data/lib/zaikio/hub/version.rb +1 -1
- metadata +18 -9
- data/lib/zaikio/hub/json_parser.rb +0 -36
- data/lib/zaikio/hub/pagination.rb +0 -19
- data/lib/zaikio/hub/pagination/header_parser.rb +0 -25
- data/lib/zaikio/hub/pagination/relation.rb +0 -41
- data/lib/zaikio/hub/pagination/scopes.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e562039d2b3f9feb71cd94761df5ee9beb0bb3152d6e87bcf4ee0385a6357a7
|
4
|
+
data.tar.gz: 4302ba8ecdb9493280abf4402e69f9750bb2b3ecd0294d23977bbd748a73082e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d75dfed1d42bbffdecffcf1543ecf9d9f98e2ccef507e6f2f56bfe847553e17921619273be2e7eac610f82091ef5eb586db5626d287e0877e531461db01c44e1
|
7
|
+
data.tar.gz: 23babf7a088b8aca679f11241448a8f2d468488cbe6f213dfe7280f186320d739dc6a539411bd3feaac52979d2ed458479cf1138ebe4a3e7ba21525619e60ca4
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [0.7.0] - 2021-06-18
|
11
|
+
|
12
|
+
* **BREAKING** `Relation#all` now fetches all following paginated resources by default
|
13
|
+
(endpoints which don't support pagination are unaffected).
|
14
|
+
* **BREAKING** Removed `Relation#each_page` method. You should just use the `all` method now
|
15
|
+
instead:
|
16
|
+
|
17
|
+
```diff
|
18
|
+
-Model.all.each_page.flat_map(&:to_a)
|
19
|
+
+Model.all.to_a
|
20
|
+
```
|
21
|
+
|
10
22
|
## [0.6.2] - 2021-04-27
|
11
23
|
|
12
24
|
* Include `id` property in `CurrentPerson#attributes` and `CurrentOrganization#attributes`
|
@@ -61,7 +73,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
61
73
|
### Added
|
62
74
|
- Added subscriptions (migration required)
|
63
75
|
|
64
|
-
[Unreleased]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.
|
76
|
+
[Unreleased]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.7.0..HEAD
|
77
|
+
[0.7.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.6.2..v0.7.0
|
65
78
|
[0.6.2]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.6.1..v0.6.2
|
66
79
|
[0.6.1]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.6.0..v0.6.1
|
67
80
|
[0.6.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.5.0..v0.6.0
|
data/README.md
CHANGED
@@ -46,8 +46,10 @@ token = "..." # Your valid JWT for an organization
|
|
46
46
|
Zaikio::Hub.with_token(token) do
|
47
47
|
organization = Zaikio::Hub::CurrentOrganization.new
|
48
48
|
|
49
|
-
# Fetch
|
49
|
+
# Fetch data
|
50
50
|
organization.memberships.find('abc')
|
51
|
+
|
52
|
+
# Note that .all understands pagination headers and will fetch all pages
|
51
53
|
organization.members.all
|
52
54
|
organization.machines.all
|
53
55
|
organization.software.all
|
@@ -122,16 +124,15 @@ client.test_accounts.create(
|
|
122
124
|
|
123
125
|
```rb
|
124
126
|
Zaikio::Hub.with_basic_auth(client_id, client_secret) do
|
125
|
-
#
|
126
|
-
Zaikio::Hub::Connection.per_page(10).
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
Zaikio::Hub::Connection.per_page(10).page(2)
|
127
|
+
# Get total number of records
|
128
|
+
Zaikio::Hub::Connection.per_page(10).total_count
|
129
|
+
#=> 20
|
130
|
+
|
131
|
+
# Fetch just the second page
|
132
|
+
Zaikio::Hub::Connection.per_page(10).page(2).find_some
|
133
|
+
|
133
134
|
# All
|
134
|
-
all_connections = Zaikio::Hub::Connection.all.
|
135
|
+
all_connections = Zaikio::Hub::Connection.all.to_a
|
135
136
|
|
136
137
|
subscription = Zaikio::Hub::Subscription.find("Organization-b1475f65-236c-58b8-96e1-e1778b43beb7")
|
137
138
|
subscription.plan # => "advanced"
|
data/lib/zaikio/hub.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
require "faraday"
|
2
2
|
require "spyke"
|
3
|
+
require "zaikio-client-helpers"
|
4
|
+
|
3
5
|
require "zaikio/hub/configuration"
|
4
|
-
require "zaikio/hub/json_parser"
|
5
6
|
require "zaikio/hub/authorization_middleware"
|
6
7
|
require "zaikio/hub/basic_auth_middleware"
|
7
8
|
|
8
|
-
# Pagination
|
9
|
-
require "zaikio/hub/pagination"
|
10
|
-
|
11
9
|
# Models
|
12
10
|
require "zaikio/error"
|
13
11
|
require "zaikio/hub/client"
|
@@ -73,8 +71,8 @@ module Zaikio
|
|
73
71
|
ssl: { verify: configuration.environment != :test }) do |c|
|
74
72
|
c.request :json
|
75
73
|
c.response :logger, configuration&.logger, headers: false
|
76
|
-
c.use Zaikio::
|
77
|
-
c.use JSONParser
|
74
|
+
c.use Zaikio::Client::Helpers::Pagination::FaradayMiddleware
|
75
|
+
c.use Zaikio::Client::Helpers::JSONParser
|
78
76
|
c.use AuthorizationMiddleware
|
79
77
|
c.use BasicAuthMiddleware
|
80
78
|
c.adapter Faraday.default_adapter
|
data/lib/zaikio/hub/base.rb
CHANGED
data/lib/zaikio/hub/version.rb
CHANGED
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.
|
4
|
+
version: 0.7.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-
|
13
|
+
date: 2021-06-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: concurrent-ruby
|
@@ -89,7 +89,7 @@ dependencies:
|
|
89
89
|
version: 5.3.4
|
90
90
|
- - "<"
|
91
91
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
92
|
+
version: 6.1.0
|
93
93
|
type: :runtime
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -99,7 +99,21 @@ dependencies:
|
|
99
99
|
version: 5.3.4
|
100
100
|
- - "<"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
102
|
+
version: 6.1.0
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: zaikio-client-helpers
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
103
117
|
description: Ruby API Client for Zaikio's Hub
|
104
118
|
email:
|
105
119
|
- op@crispymtn.com
|
@@ -126,15 +140,10 @@ files:
|
|
126
140
|
- lib/zaikio/hub/connection.rb
|
127
141
|
- lib/zaikio/hub/current_organization.rb
|
128
142
|
- lib/zaikio/hub/current_person.rb
|
129
|
-
- lib/zaikio/hub/json_parser.rb
|
130
143
|
- lib/zaikio/hub/machine.rb
|
131
144
|
- lib/zaikio/hub/membership.rb
|
132
145
|
- lib/zaikio/hub/organization.rb
|
133
146
|
- 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
|
138
147
|
- lib/zaikio/hub/person.rb
|
139
148
|
- lib/zaikio/hub/revoked_access_token.rb
|
140
149
|
- lib/zaikio/hub/role.rb
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require "multi_json"
|
2
|
-
|
3
|
-
module Zaikio
|
4
|
-
module Hub
|
5
|
-
class JSONParser < Faraday::Response::Middleware
|
6
|
-
def on_complete(env)
|
7
|
-
connection_error(env) unless /^(2\d\d)|422|404$/.match?(env.status.to_s)
|
8
|
-
|
9
|
-
raise Spyke::ResourceNotFound if env.status.to_s == "404"
|
10
|
-
|
11
|
-
env.body = parse_body(env.body)
|
12
|
-
end
|
13
|
-
|
14
|
-
def connection_error(env)
|
15
|
-
Zaikio::Hub.configuration.logger
|
16
|
-
.error("Zaikio::Hub Status Code #{env.status}, #{env.body}")
|
17
|
-
raise Spyke::ConnectionError, "Status Code #{env.status}, #{env.body}"
|
18
|
-
end
|
19
|
-
|
20
|
-
def parse_body(body)
|
21
|
-
json = MultiJson.load(body, symbolize_keys: true)
|
22
|
-
{
|
23
|
-
data: json,
|
24
|
-
metadata: {},
|
25
|
-
errors: json.is_a?(Hash) ? json[:errors] : {}
|
26
|
-
}
|
27
|
-
rescue MultiJson::ParseError
|
28
|
-
{
|
29
|
-
data: {},
|
30
|
-
metadata: {},
|
31
|
-
errors: {}
|
32
|
-
}
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,19 +0,0 @@
|
|
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"
|
@@ -1,25 +0,0 @@
|
|
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
|
@@ -1,41 +0,0 @@
|
|
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
|
@@ -1,23 +0,0 @@
|
|
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
|