go_to_webinar 0.1.8 → 0.2.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: 136217a3a77ef551798b55f54000561d146d6e8f17e2b6ffa1f6e3719d55a64b
4
- data.tar.gz: b49329c4a3d2d7e5f1f2d81a884c8dc30d3f97aebf75167088d16bd860745f09
3
+ metadata.gz: 0a2265519e8d2f5d9d9b9ce7fcc5207cb54579f4628b3f7c38fe3cfa5eaabe56
4
+ data.tar.gz: a0c2b5c34ba0e70aa5fed593120f36b70adef980d3eb6dffb07d371b4dd313cb
5
5
  SHA512:
6
- metadata.gz: 3a2d38999de7195ea845e1ea94c53dd6f0911238b74bc62b40d2b2b5d728cfbfee36db1cccbb557bd63176db776251ca68d7a6cb8d45528a36d4fc3e39cf89b6
7
- data.tar.gz: adbd478ee539827cdb1596e4b811da9b963e60d3e3933bbf21c5eaa55227d8362cb116cd5559e15ad8247b3818b31ca1646398b49633d7d11d9c76a76c48e20e
6
+ metadata.gz: d818d064acb6f3dd0c30d105d337e15f97369a038fcb60f5b586f32f6168575f60b56997ec986f6813231efbd52d447ac9d547f57011e92e201f222df9191b56
7
+ data.tar.gz: 276a3365cf9e87581045d976b8b094c81684fe79eb69e7843a444b061fcefc961d259c5a26e490fbce53dc6473bf2cbfa48f069be9981c77f99dccc2842ba979
@@ -23,6 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ['lib']
24
24
 
25
25
  spec.add_dependency 'rest-client','~> 2.0'
26
+ spec.add_dependency 'oauth2', '~> 1.4.4'
27
+ spec.add_dependency 'redis', '~> 4.0'
26
28
 
27
29
  spec.add_development_dependency 'bundler', '~> 2.1.4'
28
30
  spec.add_development_dependency 'rake', '~> 10.0'
data/lib/go_to_webinar.rb CHANGED
@@ -1,11 +1,12 @@
1
1
  require 'rest-client'
2
2
  require 'json'
3
- require 'go_to_webinar/version'
4
3
  require 'go_to_webinar/attendee'
5
4
  require 'go_to_webinar/client'
6
5
  require 'go_to_webinar/configuration'
6
+ require 'go_to_webinar/oauth2'
7
7
  require 'go_to_webinar/registrant'
8
8
  require 'go_to_webinar/session'
9
+ require 'go_to_webinar/version'
9
10
  require 'go_to_webinar/webinar'
10
11
 
11
12
  module GoToWebinar
@@ -49,3 +49,19 @@ module GoToWebinar
49
49
  end
50
50
  end
51
51
  end
52
+
53
+ # invitations = event.invitations
54
+ # corrupted = []
55
+ # attendees.each do |attendee|
56
+ # invitation = invitations.where(g2w_registrant_key: attendee.registrant_key)
57
+
58
+ # if invitation
59
+ # begin
60
+ # invitation.update(
61
+ # arrived_at: attendee.attendance.first["joinTime"].to_datetime
62
+ # )
63
+ # rescue StandardError => e
64
+ # corrupted << { invitation: invitation, attendee: attendee, exception: e }
65
+ # end
66
+ # end
67
+ # end
@@ -2,11 +2,12 @@ module GoToWebinar
2
2
  class Client
3
3
  attr_accessor :url, :organizer_key, :access_token
4
4
 
5
- def initialize(access_token: nil, organizer_key: nil, url: nil)
5
+ def initialize(organizer_key: nil, url: nil)
6
6
  config = GoToWebinar.configuration
7
7
  @url = url || config.url
8
8
  @organizer_key = organizer_key || config.organizer_key
9
- @access_token = access_token || config.access_token
9
+ @g2w_oauth2_client = GoToWebinar::OAuth2::Client.new
10
+ @access_token = @g2w_oauth2_client.access_token&.token || config.access_token
10
11
  end
11
12
 
12
13
  def headers
@@ -17,28 +18,48 @@ module GoToWebinar
17
18
  end
18
19
 
19
20
  def get(path, data = {})
20
- response = RestClient.get(make_path(path), data.merge(headers))
21
- JSON.parse(response.body)
21
+ attempt { parse(RestClient.get(make_path(path), data.merge(headers))) }
22
22
  end
23
23
 
24
24
  def post(path, data)
25
- response = RestClient.post(make_path(path), data, headers)
26
- JSON.parse(response.body)
25
+ attempt { parse(RestClient.post(make_path(path), data, headers)) }
27
26
  end
28
27
 
29
28
  def put(path, data)
30
- response = RestClient.put(make_path(path), data, headers)
31
- JSON.parse(response.body)
29
+ attempt { parse(RestClient.put(make_path(path), data, headers)) }
32
30
  end
33
31
 
34
32
  def delete
35
- response = RestClient.delete(make_path(path), data, headers)
36
- JSON.parse(response.body)
33
+ attempt { parse(RestClient.delete(make_path(path), data, headers)) }
37
34
  end
38
35
 
39
36
  def make_path(path)
40
37
  path.gsub!(':organizer_key:', organizer_key)
41
38
  "#{url}#{path}"
42
39
  end
40
+
41
+ private
42
+
43
+ def attempt
44
+ begin
45
+ retries ||= 0
46
+ yield
47
+ rescue RestClient::Forbidden => exception
48
+ raise unless (retires += 1) < 2
49
+ raise unless int_error_code(exception) == "InvalidToken"
50
+ raise unless @access_token&.expired?
51
+
52
+ @access_token = @g2w_oauth2_client.refresh_access_token.token
53
+ retry
54
+ end
55
+ end
56
+
57
+ def int_error_code(exception)
58
+ JSON.parse(exception&.http_body)&.[]("int_err_code")
59
+ end
60
+
61
+ def parse(response)
62
+ JSON.parse(response.body)
63
+ end
43
64
  end
44
65
  end
@@ -1,3 +1,3 @@
1
1
  module GoToWebinar
2
- VERSION = "0.1.8"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: go_to_webinar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danilo Jeremias da Silva
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-03-19 00:00:00.000000000 Z
12
+ date: 2020-03-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -25,6 +25,34 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '2.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: oauth2
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 1.4.4
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 1.4.4
42
+ - !ruby/object:Gem::Dependency
43
+ name: redis
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '4.0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '4.0'
28
56
  - !ruby/object:Gem::Dependency
29
57
  name: bundler
30
58
  requirement: !ruby/object:Gem::Requirement