zaikio-directory 0.0.9 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7653b475ee39d478558afbbb71d480e290d68d611a41bbb0de24a3e3a50c100e
4
- data.tar.gz: ee3b15b9e502a5dad7a9ce93dad1d04c16ff580dbab7a8b4271edf17d0cd6c6b
3
+ metadata.gz: 8dc2956d9034111c7ad80906d9f705c98503817f6cc6cb938f787646ca31cd7f
4
+ data.tar.gz: f8418bfc9b9c98ae9d245f24c50d5ac5f62493a56f36d5a1bfd5b769a24d7e9e
5
5
  SHA512:
6
- metadata.gz: 9cf7796e0a543846086b72f9aa4efca2801a4c6bc406348f540f4b3a5759ba0849c644aae429e1db2580ce3480ec5c862f39a00ec7ebfdbe32aae7a2349cd3c6
7
- data.tar.gz: d2d639c0786810fb6a05e91372627f390e9742246bcf6fe5f4593fe467fc39c7180b1d64ae39e16c27701485157691ea492843a2527021d307650b17012c3ffb
6
+ metadata.gz: 00a3f4b24da97e0a6b7ecf041fe466e4ea30554f4ccc0b05cb51a5b1f14051c9c4516fec892b675d54f747b524b0dd0cf8b3eea8bdeaefc22388cf731762a0a1
7
+ data.tar.gz: a28cb5c4cae83c646c815019a41b0f6f0e592a7398caeaf582cbe52c2b7ba492e817d98255649c119a00ad1d25f88343897ffe1d40f16ae4cb0064770c066884
@@ -0,0 +1,29 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.2.0] - 2020-01-21
11
+
12
+ ### Added
13
+
14
+ - `Zaikio::Directory::TestAccount`
15
+
16
+ ## [0.1.1] - 2020-09-02
17
+
18
+ ### Fixed
19
+ - Thread-Safety on current access token
20
+
21
+ ## [0.1.0] - 2020-08-24
22
+
23
+ ### Added
24
+ - Added subscriptions (migration required)
25
+
26
+ [Unreleased]: https://github.com/zaikio/zaikio-directory-ruby/compare/v0.2.0...HEAD
27
+ [0.2.0]: https://github.com/zaikio/zaikio-directory-ruby/compare/v0.1.1...v.0.2.0
28
+ [0.1.1]: https://github.com/zaikio/zaikio-directory-ruby/compare/5c6cb4dbcac316733560ddb2b1e13b53e55eb66e...v0.1.1
29
+ [0.1.0]: https://github.com/zaikio/zaikio-directory-ruby/compare/d149fb4c0abe6005f123def3952d2dd2ef6404bb...29889d8a6a496542a81e05688da2a46cf4c44188
data/README.md CHANGED
@@ -26,7 +26,7 @@ $ gem install zaikio-directory
26
26
  # config/initializers/zaikio_directory.rb
27
27
 
28
28
  Zaikio::Directory.configure do |config|
29
- config.host :production # sandbox or production
29
+ config.environment = :production # sandbox or production
30
30
  end
31
31
  ```
32
32
 
@@ -35,7 +35,7 @@ end
35
35
 
36
36
  The Directory Client has an ORM like design. However, we distinguish between the contexts of the organization and the person.
37
37
 
38
- For the requests to work, a valid JSON Web token with the correct OAuth Scopes must always be provided. Please refer to [zakio-oauth_client](#todo).
38
+ For the requests to work, a valid JSON Web token with the correct OAuth Scopes must always be provided. Please refer to [zakio-oauth_client](https://github.com/zaikio/zaikio-oauth_client).
39
39
 
40
40
  If you want to know which actions are available and which scopes are required, please refer to the [Directory API Reference](https://docs.zaikio.com/api/directory/directory.html).
41
41
 
@@ -97,6 +97,19 @@ end
97
97
  ```rb
98
98
  Zaikio::Directory.with_basic_auth(client_id, client_secret) do
99
99
  connections = Zaikio::Directory::Connection.all
100
+ subscription = Zaikio::Directory::Subscription.find("Organization-b1475f65-236c-58b8-96e1-e1778b43beb7")
101
+ subscription.plan # => "advanced"
102
+ subscription.activate!
103
+ subscription.increment_usage_by!(:orders_created, 12)
104
+ end
105
+
106
+ Zaikio::Directory.with_basic_auth(client_id, client_secret) do
107
+ Zaikio::Directory::TestAccount.create(
108
+ name: "My Test Org",
109
+ country_code: "DE",
110
+ kinds: ["printer"],
111
+ connection_attributes: ["procurement_consumer"]
112
+ )
100
113
  end
101
114
 
102
115
  roles = Zaikio::Directory::Role.all
@@ -23,29 +23,33 @@ require "zaikio/directory/current_organization"
23
23
  require "zaikio/directory/role"
24
24
  require "zaikio/directory/revoked_access_token"
25
25
  require "zaikio/directory/connection"
26
+ require "zaikio/directory/subscription"
27
+ require "zaikio/directory/test_account"
26
28
 
27
29
  module Zaikio
28
30
  module Directory
29
31
  class << self
30
32
  attr_accessor :configuration
31
33
 
34
+ class_attribute :connection
35
+
32
36
  def configure
33
- @connection = nil
37
+ self.connection = nil
34
38
  self.configuration ||= Configuration.new
35
39
  yield(configuration)
36
40
 
37
- Base.connection = connection
41
+ Base.connection = create_connection
38
42
  end
39
43
 
40
44
  def with_token(token)
41
- AuthorizationMiddleware.token token
45
+ AuthorizationMiddleware.token = token
42
46
  yield
43
47
  ensure
44
48
  AuthorizationMiddleware.reset_token
45
49
  end
46
50
 
47
51
  def with_basic_auth(login, password)
48
- BasicAuthMiddleware.credentials [login, password]
52
+ BasicAuthMiddleware.credentials = [login, password]
49
53
  yield
50
54
  ensure
51
55
  BasicAuthMiddleware.reset_credentials
@@ -59,8 +63,9 @@ module Zaikio
59
63
  create_token_data(payload)
60
64
  end
61
65
 
62
- def connection
63
- @connection ||= Faraday.new(url: "#{configuration.host}/api/v1") do |c|
66
+ def create_connection
67
+ self.connection = Faraday.new(url: "#{configuration.host}/api/v1",
68
+ ssl: { verify: configuration.environment != :test }) do |c|
64
69
  c.request :json
65
70
  c.response :logger, configuration&.logger
66
71
  c.use JSONParser
@@ -72,7 +77,7 @@ module Zaikio
72
77
 
73
78
  private
74
79
 
75
- def create_token_data(payload) # rubocop:disable Metrics/AbcSize
80
+ def create_token_data(payload)
76
81
  subjects = payload["sub"].split(">")
77
82
 
78
83
  OpenStruct.new(
@@ -1,15 +1,22 @@
1
1
  require "faraday"
2
2
  require "jwt"
3
+ require "concurrent"
3
4
 
4
5
  module Zaikio
5
6
  module Directory
6
7
  class AuthorizationMiddleware < Faraday::Middleware
7
- def self.reset_token
8
- @token = nil
8
+ def self.token
9
+ @token ||= Concurrent::ThreadLocalVar.new { nil }
10
+ @token.value
11
+ end
12
+
13
+ def self.token=(value)
14
+ @token ||= Concurrent::ThreadLocalVar.new { nil }
15
+ @token.value = value
9
16
  end
10
17
 
11
- def self.token(token = nil)
12
- @token = token || @token
18
+ def self.reset_token
19
+ self.token = nil
13
20
  end
14
21
 
15
22
  def call(request_env)
@@ -4,12 +4,20 @@ require "base64"
4
4
  module Zaikio
5
5
  module Directory
6
6
  class BasicAuthMiddleware < Faraday::Middleware
7
- def self.reset_credentials
8
- @credentials = nil
7
+ class_attribute :credentials
8
+
9
+ def self.credentials
10
+ @credentials ||= Concurrent::ThreadLocalVar.new { nil }
11
+ @credentials.value
9
12
  end
10
13
 
11
- def self.credentials(credentials = nil)
12
- @credentials = credentials || @credentials
14
+ def self.credentials=(value)
15
+ @credentials ||= Concurrent::ThreadLocalVar.new { nil }
16
+ @credentials.value = value
17
+ end
18
+
19
+ def self.reset_credentials
20
+ self.credentials = nil
13
21
  end
14
22
 
15
23
  def call(request_env)
@@ -4,11 +4,11 @@ module Zaikio
4
4
  module Directory
5
5
  class Configuration
6
6
  HOSTS = {
7
- development: "http://directory.zaikio.test",
8
- test: "http://directory.zaikio.test",
9
- staging: "https://directory.staging.zaikio.com",
10
- sandbox: "https://directory.sandbox.zaikio.com",
11
- production: "https://directory.zaikio.com"
7
+ development: "https://hub.zaikio.test",
8
+ test: "https://hub.zaikio.test",
9
+ staging: "https://hub.staging.zaikio.com",
10
+ sandbox: "https://hub.sandbox.zaikio.com",
11
+ production: "https://hub.zaikio.com"
12
12
  }.freeze
13
13
 
14
14
  attr_accessor :host
@@ -20,7 +20,7 @@ module Zaikio
20
20
  end
21
21
 
22
22
  def logger
23
- @logger ||= Logger.new(STDOUT)
23
+ @logger ||= Logger.new($stdout)
24
24
  end
25
25
 
26
26
  def environment=(env)
@@ -1,9 +1,19 @@
1
1
  module Zaikio
2
2
  module Directory
3
3
  class Connection < Base
4
- uri "connections"
4
+ uri "connections(/:id)"
5
5
 
6
6
  include_root_in_json :connection
7
+
8
+ def initialize(attributes = {})
9
+ if attributes["connectable_id"]
10
+ super(attributes.merge(
11
+ "id" => "#{attributes['connectable_type']}-#{attributes['connectable_id']}"
12
+ ))
13
+ else
14
+ super
15
+ end
16
+ end
7
17
  end
8
18
  end
9
19
  end
@@ -0,0 +1,27 @@
1
+ module Zaikio
2
+ module Directory
3
+ class Subscription < Base
4
+ uri "subscriptions(/:id)"
5
+
6
+ include_root_in_json :subscription
7
+
8
+ def initialize(attributes = {})
9
+ if attributes["subscriber_id"]
10
+ super(attributes.merge(
11
+ "id" => "#{attributes['subscriber_type']}-#{attributes['subscriber_id']}"
12
+ ))
13
+ else
14
+ super
15
+ end
16
+ end
17
+
18
+ def activate!
19
+ update(status: "active")
20
+ end
21
+
22
+ def increment_usage_by!(usage, by = 1)
23
+ update(increment_usages_in_current_billing_period: { usage => by })
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ module Zaikio
2
+ module Directory
3
+ class TestAccount < Base
4
+ uri "test_accounts(/:id)"
5
+
6
+ include_root_in_json :test_account
7
+
8
+ # Associations
9
+ has_many :memberships, class_name: "Zaikio::Directory::Membership",
10
+ uri: nil
11
+ has_many :sites, class_name: "Zaikio::Directory::Site",
12
+ uri: nil
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  module Zaikio
2
2
  module Directory
3
- VERSION = "0.0.9".freeze
3
+ VERSION = "0.2.0".freeze
4
4
  end
5
5
  end
@@ -1,6 +1,8 @@
1
1
  module Zaikio
2
2
  class Error < StandardError; end
3
+
3
4
  class ConnectionError < Zaikio::Error; end
5
+
4
6
  class ResourceNotFound < Zaikio::Error; end
5
7
  end
6
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zaikio-directory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - crispymtn
@@ -10,8 +10,22 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-05-18 00:00:00.000000000 Z
13
+ date: 2021-01-21 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: concurrent-ruby
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
15
29
  - !ruby/object:Gem::Dependency
16
30
  name: jwt
17
31
  requirement: !ruby/object:Gem::Requirement
@@ -30,30 +44,42 @@ dependencies:
30
44
  name: multi_json
31
45
  requirement: !ruby/object:Gem::Requirement
32
46
  requirements:
33
- - - "~>"
47
+ - - ">="
34
48
  - !ruby/object:Gem::Version
35
49
  version: 1.14.1
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: 1.16.0
36
53
  type: :runtime
37
54
  prerelease: false
38
55
  version_requirements: !ruby/object:Gem::Requirement
39
56
  requirements:
40
- - - "~>"
57
+ - - ">="
41
58
  - !ruby/object:Gem::Version
42
59
  version: 1.14.1
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: 1.16.0
43
63
  - !ruby/object:Gem::Dependency
44
64
  name: oj
45
65
  requirement: !ruby/object:Gem::Requirement
46
66
  requirements:
47
- - - "~>"
67
+ - - ">="
48
68
  - !ruby/object:Gem::Version
49
69
  version: 3.10.5
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: 3.12.0
50
73
  type: :runtime
51
74
  prerelease: false
52
75
  version_requirements: !ruby/object:Gem::Requirement
53
76
  requirements:
54
- - - "~>"
77
+ - - ">="
55
78
  - !ruby/object:Gem::Version
56
79
  version: 3.10.5
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.12.0
57
83
  - !ruby/object:Gem::Dependency
58
84
  name: spyke
59
85
  requirement: !ruby/object:Gem::Requirement
@@ -77,6 +103,7 @@ executables: []
77
103
  extensions: []
78
104
  extra_rdoc_files: []
79
105
  files:
106
+ - CHANGELOG.md
80
107
  - MIT-LICENSE
81
108
  - README.md
82
109
  - Rakefile
@@ -101,12 +128,15 @@ files:
101
128
  - lib/zaikio/directory/site.rb
102
129
  - lib/zaikio/directory/software.rb
103
130
  - lib/zaikio/directory/specialist.rb
131
+ - lib/zaikio/directory/subscription.rb
132
+ - lib/zaikio/directory/test_account.rb
104
133
  - lib/zaikio/directory/version.rb
105
134
  - lib/zaikio/error.rb
106
135
  homepage: https://www.zaikio.com/
107
136
  licenses:
108
137
  - MIT
109
- metadata: {}
138
+ metadata:
139
+ changelog_uri: https://github.com/zaikio/zaikio-directory-ruby/blob/master/CHANGELOG.md
110
140
  post_install_message:
111
141
  rdoc_options: []
112
142
  require_paths:
@@ -115,14 +145,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
145
  requirements:
116
146
  - - ">="
117
147
  - !ruby/object:Gem::Version
118
- version: '0'
148
+ version: 2.6.5
119
149
  required_rubygems_version: !ruby/object:Gem::Requirement
120
150
  requirements:
121
151
  - - ">="
122
152
  - !ruby/object:Gem::Version
123
153
  version: '0'
124
154
  requirements: []
125
- rubygems_version: 3.1.2
155
+ rubygems_version: 3.1.4
126
156
  signing_key:
127
157
  specification_version: 4
128
158
  summary: Ruby API Client for Zaikio's Directory