zaikio-hub 0.4.0 → 0.6.2

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: 4a9640d7936210115f20948864594d3c7d27b27fb0258213c5a3d8733dde9491
4
- data.tar.gz: 249d78a7f720728047357dd321b721a46f010d6131b21269ed8dd7a81c53a1e2
3
+ metadata.gz: 41182413d16f0e32529d683822ca39dfdd86e35186ba9197c936e00cb25b3a60
4
+ data.tar.gz: 975d3e33def4f1dbd77ddb3020ca2d072e142d2f32ba63cb524b8c86f852f3f6
5
5
  SHA512:
6
- metadata.gz: cfc8d23635b8d32c18cf64994aa84be85ba9dc5041ce6eedf3f4904614dfd4444c5e8f60996b311182281cbadd5a975d6934f736a18d74263525722a6d13024e
7
- data.tar.gz: 6e64d3cbc98a528b6c475485a350f32fd1e0ff6a36cd7831955e45bf7a3bfdb418afaf73502aaef76cb1f0f6debe6bf70f68c06b2eb46cfa70d805061e73e46f
6
+ metadata.gz: 998198e1e90035fbe5bb2f25539d0b27b28f291de13b00784dc7ec4207af18145729284e5dc599839236e20c38c3d1d8b75b42e57ac2e170bbad558dcf212fb6
7
+ data.tar.gz: 80f7dbe3fe80a6d9699ba96d3794b43b7020d9e874f0d8c43002174f7e4032c0286ee135957eccac419f3867190e227885baa7d3f9a93eebe4df160ab0ae24c3
data/CHANGELOG.md CHANGED
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.6.2] - 2021-04-27
11
+
12
+ * Include `id` property in `CurrentPerson#attributes` and `CurrentOrganization#attributes`
13
+
14
+ ## [0.6.1] - 2020-04-12
15
+
16
+ * Fixed that `each_page` works correctly with client instance
17
+
18
+ ## [0.6.0] - 2020-04-12
19
+
20
+ * Added pagination features for `Subscription` and `Connection`
21
+
22
+ ## [0.5.0] - 2020-04-08
23
+
24
+ * Added `granted_oauth_scopes`, `requested_oauth_scopes`, and `requested_oauth_scopes_waiting_for_approval` to Person and Organization
25
+ * Added `requested_oauth_scopes`, and `requested_oauth_scopes_waiting_for_approval` to Connection
26
+
27
+ ## [0.4.1] - 2020-03-04
28
+
29
+ * Add `state` property for `Zaikio::Hub::Address` model
30
+
10
31
  ## [0.4.0] - 2020-02-23
11
32
 
12
33
  ### Changed
@@ -40,7 +61,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
40
61
  ### Added
41
62
  - Added subscriptions (migration required)
42
63
 
43
- [Unreleased]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.4.0...HEAD
64
+ [Unreleased]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.6.2..HEAD
65
+ [0.6.2]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.6.1..v0.6.2
66
+ [0.6.1]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.6.0..v0.6.1
67
+ [0.6.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.5.0..v0.6.0
68
+ [0.5.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.4.1..v0.5.0
69
+ [0.4.1]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.4.0...v0.4.1
44
70
  [0.4.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.3.0...v0.4.0
45
71
  [0.3.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.2.0...v.0.3.0
46
72
  [0.2.0]: https://github.com/zaikio/zaikio-hub-ruby/compare/v0.1.1...v.0.2.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
@@ -2,8 +2,14 @@ module Zaikio
2
2
  module Hub
3
3
  class Address < Base
4
4
  # Attributes
5
- attributes :addressee, :text, :country_code, :town,
6
- :street_and_number, :zip_code, :addition
5
+ attributes :addressee,
6
+ :addition,
7
+ :country_code,
8
+ :state,
9
+ :street_and_number,
10
+ :text,
11
+ :town,
12
+ :zip_code
7
13
 
8
14
  # Associations
9
15
  belongs_to :site, uri: nil, class_name: "Zaikio::Hub::Site"
@@ -19,6 +19,13 @@ module Zaikio
19
19
  result
20
20
  end
21
21
  end
22
+
23
+ def each_page
24
+ super() do |page|
25
+ page = RequestWrapper.new(page, @client)
26
+ yield(page)
27
+ end
28
+ end
22
29
  end
23
30
 
24
31
  class Client
@@ -1,13 +1,16 @@
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
7
9
 
8
10
  # Attributes
9
11
  attributes :updated_at, :created_at, :connectable_type, :connectable_id,
10
- :app_name, :granted_oauth_scopes
12
+ :app_name, :granted_oauth_scopes, :requested_oauth_scopes,
13
+ :requested_oauth_scopes_waiting_for_approval
11
14
 
12
15
  def initialize(attributes = {})
13
16
  if attributes["connectable_id"]
@@ -16,9 +16,11 @@ module Zaikio
16
16
  include_root_in_json :organization
17
17
 
18
18
  # Attributes
19
- attributes :name, :slug, :logo_url, :connected, :subscription,
19
+ attributes :id, :name, :slug, :logo_url, :connected, :subscription,
20
20
  :created_at, :updated_at, :country_code, :kinds,
21
- :sections, :currency, :brand_color, :test_account_owner_id
21
+ :sections, :currency, :brand_color, :test_account_owner_id,
22
+ :granted_oauth_scopes, :requested_oauth_scopes,
23
+ :requested_oauth_scopes_waiting_for_approval
22
24
 
23
25
  # Associations
24
26
  has_many :memberships, class_name: "Zaikio::Hub::Membership",
@@ -6,11 +6,12 @@ module Zaikio
6
6
  uri "person"
7
7
 
8
8
  # Attributes
9
- attributes :updated_at, :created_at, :first_name, :name, :full_name, :email,
9
+ attributes :id, :updated_at, :created_at, :first_name, :name, :full_name, :email,
10
10
  :pronoun, :locale, :country_code, :currency, :unit_system, :connected,
11
11
  :test_account_owner_id, :time_zone, :email_confirmed,
12
12
  :two_factor_authentication_enabled, :avatar_url, :subscription,
13
- :accessible_apps
13
+ :accessible_apps, :granted_oauth_scopes, :requested_oauth_scopes,
14
+ :requested_oauth_scopes_waiting_for_approval
14
15
 
15
16
  def self.find
16
17
  all.find_one
@@ -8,7 +8,9 @@ module Zaikio
8
8
  # Attributes
9
9
  attributes :name, :slug, :logo_url, :connected, :subscription,
10
10
  :created_at, :updated_at, :country_code, :kinds,
11
- :sections, :currency, :brand_color, :test_account_owner_id
11
+ :sections, :currency, :brand_color, :test_account_owner_id,
12
+ :granted_oauth_scopes, :requested_oauth_scopes,
13
+ :requested_oauth_scopes_waiting_for_approval
12
14
 
13
15
  # Associations
14
16
  has_many :memberships, class_name: "Zaikio::Hub::Membership",
@@ -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
@@ -5,7 +5,9 @@ module Zaikio
5
5
  attributes :updated_at, :created_at, :first_name, :name, :full_name, :email,
6
6
  :pronoun, :locale, :country_code, :currency, :unit_system, :connected,
7
7
  :test_account_owner_id, :time_zone, :email_confirmed,
8
- :two_factor_authentication_enabled, :avatar_url, :subscription
8
+ :two_factor_authentication_enabled, :avatar_url, :subscription,
9
+ :granted_oauth_scopes, :requested_oauth_scopes,
10
+ :requested_oauth_scopes_waiting_for_approval
9
11
  end
10
12
  end
11
13
  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.4.0".freeze
3
+ VERSION = "0.6.2".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.4.0
4
+ version: 0.6.2
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-02-23 00:00:00.000000000 Z
13
+ date: 2021-04-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: concurrent-ruby
@@ -84,16 +84,22 @@ dependencies:
84
84
  name: spyke
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: 5.3.4
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: 5.5.0
90
93
  type: :runtime
91
94
  prerelease: false
92
95
  version_requirements: !ruby/object:Gem::Requirement
93
96
  requirements:
94
- - - "~>"
97
+ - - ">="
95
98
  - !ruby/object:Gem::Version
96
99
  version: 5.3.4
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: 5.5.0
97
103
  description: Ruby API Client for Zaikio's Hub
98
104
  email:
99
105
  - op@crispymtn.com
@@ -125,6 +131,10 @@ files:
125
131
  - lib/zaikio/hub/membership.rb
126
132
  - lib/zaikio/hub/organization.rb
127
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
128
138
  - lib/zaikio/hub/person.rb
129
139
  - lib/zaikio/hub/revoked_access_token.rb
130
140
  - lib/zaikio/hub/role.rb