zaikio-directory 0.0.6 → 0.0.7
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 +4 -4
- data/README.md +35 -0
- data/lib/zaikio/directory/current_organization.rb +10 -6
- data/lib/zaikio/directory/current_person.rb +5 -1
- data/lib/zaikio/directory/json_parser.rb +21 -1
- data/lib/zaikio/directory/version.rb +1 -1
- data/lib/zaikio/directory.rb +1 -0
- data/lib/zaikio/error.rb +10 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 425d810f240fc3a9a78e86b8a7216621dc2276c34fb1125816df5b4b8d514bb3
|
4
|
+
data.tar.gz: 7795f54139e370afe28994137d34614985fb5553f5df6e078fb53c440b8a29a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e248bd3df0c8f53b40d63c141b6f3b8c0ee4f1af7f3aecc0ca2765595bbfd072319e983e7685c3d0328ee9c156e9094b9f051634a922435bbafbd596e897d6bd
|
7
|
+
data.tar.gz: 99f5c598b8a6369525dc90904bce3c75dd781a1de13e4abfd7589a149c527333187acddfa4db064d34398541a866d9cea3d524e865ff68607ee41fba17bcb76b
|
data/README.md
CHANGED
@@ -106,3 +106,38 @@ Zaikio::Directory.with_token(token) do
|
|
106
106
|
Zaikio::Directory::RevokedAccessToken.create
|
107
107
|
end
|
108
108
|
```
|
109
|
+
|
110
|
+
### Error Handling
|
111
|
+
|
112
|
+
If an unexpected error occurs with an API call (i.e. an error that has no status code `2xx`, `404` or `422`) then a `Zaikio::ConnectionError` is thrown automatically (for `404` there will be a `Zaikio::ResourceNotFound`).
|
113
|
+
|
114
|
+
This can be easily caught using the `with_fallback` method. We recommend to always work with fallbacks.
|
115
|
+
|
116
|
+
```rb
|
117
|
+
Zaikio::Directory.with_token(token) do
|
118
|
+
person = Zaikio::Directory::CurrentPerson
|
119
|
+
.find_with_fallback(Zaikio::Directory::CurrentPerson.new(full_name: "Hello World"))
|
120
|
+
|
121
|
+
person.organizations # Automatically uses empty array as fallback
|
122
|
+
end
|
123
|
+
|
124
|
+
Zaikio::Directory.with_token(token) do
|
125
|
+
organization = Zaikio::Directory::CurrentOrganization.new
|
126
|
+
|
127
|
+
organization.machines.with_fallback.all
|
128
|
+
organization.machines
|
129
|
+
.with_fallback(Zaikio::Directory::Machine.new(name: 'My Machine'))
|
130
|
+
.find('machine-id')
|
131
|
+
|
132
|
+
|
133
|
+
organization.machines
|
134
|
+
.with_fallback(Zaikio::Directory::Machine.new(name: 'My Machine'))
|
135
|
+
.find('machine-does-not-exist') # => raises Zaikio::ResourceNotFound
|
136
|
+
|
137
|
+
begin
|
138
|
+
organization.machines.create(name: "Machine Name")
|
139
|
+
rescue Zaikio::ConnectionError
|
140
|
+
# Do something
|
141
|
+
end
|
142
|
+
end
|
143
|
+
```
|
@@ -9,24 +9,28 @@ module Zaikio
|
|
9
9
|
all.find_one
|
10
10
|
end
|
11
11
|
|
12
|
+
def self.find_with_fallback(fallback)
|
13
|
+
all.with_fallback(fallback).find_one
|
14
|
+
end
|
15
|
+
|
12
16
|
# Associations
|
13
17
|
has_many :memberships, class_name: "Zaikio::Directory::Membership",
|
14
|
-
uri: "organization/memberships"
|
18
|
+
uri: "organization/memberships(/:id)"
|
15
19
|
has_many :business_relationships, class_name: "Zaikio::Directory::BusinessRelationship",
|
16
|
-
uri: "organization/business_relationships"
|
20
|
+
uri: "organization/business_relationships(/:id)"
|
17
21
|
has_many :software, class_name: "Zaikio::Directory::Software",
|
18
|
-
uri: "software"
|
22
|
+
uri: "software(/:id)"
|
19
23
|
has_many :machines, class_name: "Zaikio::Directory::Machine",
|
20
|
-
uri: "machines"
|
24
|
+
uri: "machines(/:id)"
|
21
25
|
has_many :sites, class_name: "Zaikio::Directory::Site",
|
22
|
-
uri: "sites"
|
26
|
+
uri: "sites(/:id)"
|
23
27
|
|
24
28
|
def fetch
|
25
29
|
self.attributes = get
|
26
30
|
end
|
27
31
|
|
28
32
|
def members
|
29
|
-
memberships.map(&:person)
|
33
|
+
memberships.with_fallback.map(&:person)
|
30
34
|
end
|
31
35
|
end
|
32
36
|
end
|
@@ -9,6 +9,10 @@ module Zaikio
|
|
9
9
|
all.find_one
|
10
10
|
end
|
11
11
|
|
12
|
+
def self.find_with_fallback(fallback)
|
13
|
+
all.with_fallback(fallback).find_one
|
14
|
+
end
|
15
|
+
|
12
16
|
# Associations
|
13
17
|
has_many :organization_memberships, class_name: "Zaikio::Directory::OrganizationMembership",
|
14
18
|
uri: nil
|
@@ -18,7 +22,7 @@ module Zaikio
|
|
18
22
|
end
|
19
23
|
|
20
24
|
def organizations
|
21
|
-
organization_memberships.map(&:organization)
|
25
|
+
organization_memberships.with_fallback.map(&:organization)
|
22
26
|
end
|
23
27
|
|
24
28
|
def admin_organizations
|
@@ -3,13 +3,33 @@ require "multi_json"
|
|
3
3
|
module Zaikio
|
4
4
|
module Directory
|
5
5
|
class JSONParser < Faraday::Response::Middleware
|
6
|
-
def
|
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::Directory.configuration.logger
|
16
|
+
.error("Zaikio::Directory Status Code #{env.status}, #{env.body}")
|
17
|
+
raise Spyke::ConnectionError, "Status Code #{env.status}, #{env.body}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def parse_body(body)
|
7
21
|
json = MultiJson.load(body, symbolize_keys: true)
|
8
22
|
{
|
9
23
|
data: json,
|
10
24
|
metadata: {},
|
11
25
|
errors: json.is_a?(Hash) ? json[:errors] : {}
|
12
26
|
}
|
27
|
+
rescue MultiJson::ParseError
|
28
|
+
{
|
29
|
+
data: {},
|
30
|
+
metadata: {},
|
31
|
+
errors: {}
|
32
|
+
}
|
13
33
|
end
|
14
34
|
end
|
15
35
|
end
|
data/lib/zaikio/directory.rb
CHANGED
@@ -6,6 +6,7 @@ require "zaikio/directory/authorization_middleware"
|
|
6
6
|
require "zaikio/directory/basic_auth_middleware"
|
7
7
|
|
8
8
|
# Models
|
9
|
+
require "zaikio/error"
|
9
10
|
require "zaikio/directory/base"
|
10
11
|
require "zaikio/directory/organization_membership"
|
11
12
|
require "zaikio/directory/business_relationship"
|
data/lib/zaikio/error.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
module Zaikio
|
2
|
+
class Error < StandardError; end
|
3
|
+
class ConnectionError < Zaikio::Error; end
|
4
|
+
class ResourceNotFound < Zaikio::Error; end
|
5
|
+
end
|
6
|
+
|
7
|
+
module Spyke
|
8
|
+
ConnectionError = Class.new Zaikio::ConnectionError
|
9
|
+
ResourceNotFound = Class.new Zaikio::ResourceNotFound
|
10
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zaikio-directory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zaikio GmbH
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jwt
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/zaikio/directory/site.rb
|
97
97
|
- lib/zaikio/directory/software.rb
|
98
98
|
- lib/zaikio/directory/version.rb
|
99
|
+
- lib/zaikio/error.rb
|
99
100
|
homepage: https://www.zaikio.com/
|
100
101
|
licenses:
|
101
102
|
- MIT
|