bps-google-api 0.4.0 → 0.4.6

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
- SHA1:
3
- metadata.gz: 5e879f7388cbb93030b4c0ebb10ba8a7f0ebbce2
4
- data.tar.gz: 2db793f99ffe1de7c5170b95e3c7d14278f30681
2
+ SHA256:
3
+ metadata.gz: f9ffa3df8c2ddfecc62cfe5a9830ea2c48293aef1952240e9dd5acd12b260ca1
4
+ data.tar.gz: 1f3079fcec7a957a890fa217ee44e4ddcf664c31c0bc8129502ca70b92b0503f
5
5
  SHA512:
6
- metadata.gz: 15b9400b2a26b43ea093798a9129115d61d3106b21f4d491075aaf191f2f86a729ff024fd39b7ba8ac341e9bf1bc85d664a9bc613c1f89279583e186501b005b
7
- data.tar.gz: 22b09c587f8b7f831d31e586e1118660b1a7d1dca4d1ba88240209a6b38b413f4b9913d2eedb4aedd6a127f8a35973af71207ca16c5c6098cb484b8f7ac34b15
6
+ metadata.gz: 6412ddc986f1aff995bde999836779c649d9025fd885ab98e7ebb6dd1cc1e35c02f7685648cfa5308069e641e9c1da4bcb435c48a1274ccf7621bfc191849253
7
+ data.tar.gz: 7745f51650c013b668e1bdb535db57f5957f9ad5cf5b49b785e8280b91f0aeab2bef2f9964c1e6735b50ec87d45b48a954ee89e516098c4f3b36d7b1c8ee348a
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  config/
2
2
  coverage/
3
- tmp/
3
+ tmp/
4
+ lib/google_api/tmp
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bps-google-api (0.4.0)
5
- exp_retry (~> 0.0.11)
4
+ bps-google-api (0.4.6)
5
+ exp_retry (~> 0.0.13)
6
6
  fileutils (~> 1.2)
7
7
  google-api-client (~> 0.23.4)
8
8
  ruby-progressbar (~> 1.10)
@@ -10,17 +10,17 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- addressable (2.6.0)
14
- public_suffix (>= 2.0.2, < 4.0)
13
+ addressable (2.7.0)
14
+ public_suffix (>= 2.0.2, < 5.0)
15
15
  ast (2.4.0)
16
- declarative (0.0.10)
16
+ declarative (0.0.20)
17
17
  declarative-option (0.1.0)
18
18
  diff-lcs (1.3)
19
19
  docile (1.3.2)
20
- exp_retry (0.0.12)
21
- faraday (0.15.4)
20
+ exp_retry (0.0.13)
21
+ faraday (0.17.3)
22
22
  multipart-post (>= 1.2, < 3)
23
- fileutils (1.2.0)
23
+ fileutils (1.5.0)
24
24
  google-api-client (0.23.9)
25
25
  addressable (~> 2.5, >= 2.5.1)
26
26
  googleauth (>= 0.5, < 0.7.0)
@@ -38,19 +38,19 @@ GEM
38
38
  signet (~> 0.7)
39
39
  httpclient (2.8.3)
40
40
  jaro_winkler (1.5.3)
41
- json (2.2.0)
42
- jwt (2.2.1)
43
- memoist (0.16.0)
44
- mime-types (3.2.2)
41
+ json (2.3.1)
42
+ jwt (2.2.2)
43
+ memoist (0.16.2)
44
+ mime-types (3.3.1)
45
45
  mime-types-data (~> 3.2015)
46
- mime-types-data (3.2019.0331)
47
- multi_json (1.13.1)
46
+ mime-types-data (3.2020.1104)
47
+ multi_json (1.15.0)
48
48
  multipart-post (2.1.1)
49
- os (1.0.1)
49
+ os (1.1.1)
50
50
  parallel (1.17.0)
51
51
  parser (2.6.3.0)
52
52
  ast (~> 2.4.0)
53
- public_suffix (3.1.1)
53
+ public_suffix (4.0.6)
54
54
  rainbow (3.0.0)
55
55
  representable (3.0.4)
56
56
  declarative (< 0.1.0)
@@ -78,9 +78,9 @@ GEM
78
78
  ruby-progressbar (~> 1.7)
79
79
  unicode-display_width (>= 1.4.0, < 1.7)
80
80
  ruby-progressbar (1.10.1)
81
- signet (0.11.0)
81
+ signet (0.14.1)
82
82
  addressable (~> 2.3)
83
- faraday (~> 0.9)
83
+ faraday (>= 0.17.3, < 2.0)
84
84
  jwt (>= 1.5, < 3.0)
85
85
  multi_json (~> 1.10)
86
86
  simplecov (0.16.1)
data/Readme.md CHANGED
@@ -36,6 +36,12 @@ GoogleAPI.configure do |config|
36
36
  end
37
37
  ```
38
38
 
39
+ You can also alter the logging level using:
40
+
41
+ ```ruby
42
+ GoogleAPI.logging!(:FATAL) # %i[INFO WARN ERROR FATAL]
43
+ ```
44
+
39
45
  Then add the following in `config/application.rb`:
40
46
 
41
47
  ```ruby
@@ -62,13 +68,22 @@ TZ # Timezone
62
68
  By default, if no configuration is available, `.new` will automatically run
63
69
  `.authorize!` and return a URL to generate an authorization token.
64
70
 
71
+ ### Configured Classes
72
+
73
+ There are configured classes for both calendars and groups. This allows you to
74
+ only specify the parent id once.
75
+
65
76
  ```ruby
66
77
  calendar = GoogleAPI::Configured::Calendar.new(calendar_id)
67
78
 
68
79
  calendar.create(event_options)
69
80
  calendar.list(max_results: 2500, page_token: nil)
81
+ calendar.list_all
70
82
  calendar.get(event_id)
71
- calendar.update(event_id, event_options)
83
+ calendar.patch(event_id, patch_options)
84
+ calendar.update(event_id, updated_event_options)
85
+ calendar.add_conference(event_id)
86
+ calendar.conference_info(event_id, all: false)
72
87
  calendar.delete(event_id)
73
88
 
74
89
  calendar.permit(user)
@@ -84,6 +99,19 @@ group.add('somebody@example.com')
84
99
  group.remove('somebody@example.com')
85
100
  ```
86
101
 
102
+ There is also an event-specific configured class:
103
+
104
+ ```ruby
105
+ event = GoogleAPI::Configured::Calendar::Event.new(calendar_id, event_id)
106
+
107
+ event.get
108
+ event.patch(patch_options)
109
+ event.update(updated_event_options)
110
+ event.add_conference
111
+ event.conference_info(all: false)
112
+ event.delete
113
+ ```
114
+
87
115
  ### Event Options
88
116
 
89
117
  Available event options are listed in `GoogleAPI::Calendar::VALID_EVENT_KEYS`.
@@ -104,3 +132,32 @@ To add a Meet call to an event, merge the following into `event_options`:
104
132
  ```ruby
105
133
  { conference: { id: meeting_id, signature: meeting_signature } }
106
134
  ```
135
+
136
+ To create a new Meet call on an event, merge the following into
137
+ `event_options` instead:
138
+
139
+ ```ruby
140
+ { conference: { id: :new } }
141
+ ```
142
+
143
+ ## Testing
144
+
145
+ ### Rspec
146
+
147
+ Rspec testing is available:
148
+
149
+ `bundle exec rspec`
150
+
151
+ The spec suite will fail if under 100% coverage.
152
+
153
+ ### Rubocop
154
+
155
+ Rubocop formatting validation is available:
156
+
157
+ `bundle exec rubocop`
158
+
159
+ ### Automatic Builds
160
+
161
+ Builds are generated automatically by [Travis CI](https://travis-ci.org/jfiander/bps-google-api).
162
+
163
+ Build success requires both `rspec` and `rubocop` to pass.
@@ -2,8 +2,8 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'bps-google-api'
5
- s.version = '0.4.0'
6
- s.date = '2019-06-27'
5
+ s.version = '0.4.6'
6
+ s.date = '2021-01-30'
7
7
  s.summary = 'Configured Google API'
8
8
  s.description = 'A configured Google API wrapper.'
9
9
  s.homepage = 'http://rubygems.org/gems/bps-google-api'
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
 
16
16
  s.required_ruby_version = '~> 2.4'
17
17
 
18
- s.add_runtime_dependency 'exp_retry', '~> 0.0.11'
18
+ s.add_runtime_dependency 'exp_retry', '~> 0.0.13'
19
19
  s.add_runtime_dependency 'fileutils', '~> 1.2'
20
20
  s.add_runtime_dependency 'google-api-client', '~> 0.23.4'
21
21
  s.add_runtime_dependency 'ruby-progressbar', '~> 1.10'
@@ -29,6 +29,12 @@ class GoogleAPI
29
29
  configuration
30
30
  end
31
31
 
32
+ def self.logging!(level = :FATAL)
33
+ raise ArgumentError, 'Unknown logging level' unless %i[INFO WARN ERROR FATAL].include?(level)
34
+
35
+ Google::Apis.logger.level = Logger.const_get(level)
36
+ end
37
+
32
38
  # Internal requires
33
39
  require 'google_api/base'
34
40
  require 'google_api/calendar'
@@ -14,8 +14,7 @@ class GoogleAPI
14
14
 
15
15
  SERVICE_CLASS = Google::Apis::CalendarV3::CalendarService
16
16
  VALID_EVENT_KEYS ||= %i[
17
- summary start end description location recurrence conference
18
- conference_data
17
+ summary start end description location recurrence conference conference_data
19
18
  ].freeze
20
19
  VALID_PATCH_KEYS ||= %i[
21
20
  summary start end description location recurrence conference_data created reminders creator
@@ -30,6 +29,22 @@ class GoogleAPI
30
29
  call(:list_events, calendar_id, max_results: max_results, page_token: page_token)
31
30
  end
32
31
 
32
+ def list_all(calendar_id, verbose: false)
33
+ events = []
34
+
35
+ list = call(:list_events, calendar_id)
36
+ events += list.items
37
+
38
+ while (page_token = list.next_page_token)
39
+ list = call(:list_events, calendar_id, page_token: page_token)
40
+ page_token = list.next_page_token
41
+ events += list.items
42
+ print('.') if verbose
43
+ end
44
+
45
+ events
46
+ end
47
+
33
48
  def get(calendar_id, event_id)
34
49
  call(:get_event, calendar_id, event_id)
35
50
  end
@@ -15,6 +15,13 @@ class GoogleAPI
15
15
  call(:patch_event, calendar_id, event_id, patch_options, conference_data_version: 1)
16
16
  end
17
17
 
18
+ def conference_info(calendar_id, event_id, all: false)
19
+ conf = call(:get_event, calendar_id, event_id).conference_data
20
+ return conf if all || conf.nil?
21
+
22
+ { id: conf.conference_id, signature: conf.signature }
23
+ end
24
+
18
25
  private
19
26
 
20
27
  def format_conference_data(event_options)
@@ -6,7 +6,7 @@ class GoogleAPI
6
6
  attr_writer :keys
7
7
 
8
8
  def initialize
9
- self.root = __dir__
9
+ self.root = File.join(__dir__, 'tmp')
10
10
 
11
11
  yield self if block_given?
12
12
  end
@@ -17,6 +17,10 @@ class GoogleAPI
17
17
  self.class.api.list(calendar_id, max_results: max_results, page_token: page_token)
18
18
  end
19
19
 
20
+ def list_all
21
+ self.class.api.list_all(calendar_id)
22
+ end
23
+
20
24
  def create(event_options = {})
21
25
  self.class.api.create(calendar_id, event_options)
22
26
  end
@@ -54,6 +58,10 @@ class GoogleAPI
54
58
  def add_conference(event_id)
55
59
  self.class.api.add_conference(calendar_id, event_id)
56
60
  end
61
+
62
+ def conference_info(event_id, all: false)
63
+ self.class.api.conference_info(calendar_id, event_id, all: all)
64
+ end
57
65
  end
58
66
  end
59
67
  end
@@ -34,6 +34,10 @@ class GoogleAPI
34
34
  def add_conference
35
35
  self.class.api.add_conference(calendar_id, event_id)
36
36
  end
37
+
38
+ def conference_info(all: false)
39
+ self.class.api.conference_info(calendar_id, event_id, all: all)
40
+ end
37
41
  end
38
42
  end
39
43
  end
@@ -77,26 +77,45 @@ RSpec.describe GoogleAPI::Calendar do
77
77
  expect(subject.list).to be_a(Google::Apis::CalendarV3::Events)
78
78
  end
79
79
 
80
+ it 'returns the array of all events from list_all' do
81
+ subject.create(test_event) # Ensure at least one event exists
82
+
83
+ expect(subject.list_all.map(&:class).uniq).to eql([Google::Apis::CalendarV3::Event])
84
+ end
85
+
80
86
  it 'creates an event' do
81
87
  expect(subject.create(test_event)).to be_a(Google::Apis::CalendarV3::Event)
82
88
  end
83
89
 
84
- it 'creates an event with a new conference' do
85
- event = test_event.merge(conference: { id: :new })
86
- expect(subject.create(event)).to be_a(Google::Apis::CalendarV3::Event)
87
- end
90
+ describe 'conference data' do
91
+ it 'creates an event with a new conference' do
92
+ event = test_event.merge(conference: { id: :new })
88
93
 
89
- it 'creates an event with conference data' do
90
- event = subject.create(test_event)
91
- event = subject.add_conference(event.id)
92
- event_options = test_event.merge(
93
- conference: {
94
+ expect(subject.create(event)).to be_a(Google::Apis::CalendarV3::Event)
95
+ end
96
+
97
+ it 'creates an event with conference data' do
98
+ event = subject.create(test_event)
99
+ event = subject.add_conference(event.id)
100
+ event_options = test_event.merge(
101
+ conference: {
102
+ id: event.conference_data.conference_id,
103
+ signature: event.conference_data.signature
104
+ }
105
+ )
106
+
107
+ expect(subject.create(event_options)).to be_a(Google::Apis::CalendarV3::Event)
108
+ end
109
+
110
+ it 'returns valid conference information' do
111
+ event = subject.create(test_event)
112
+ event = subject.add_conference(event.id)
113
+
114
+ expect(subject.conference_info(event.id)).to eql(
94
115
  id: event.conference_data.conference_id,
95
116
  signature: event.conference_data.signature
96
- }
97
- )
98
-
99
- expect(subject.create(event_options)).to be_a(Google::Apis::CalendarV3::Event)
117
+ )
118
+ end
100
119
  end
101
120
 
102
121
  it 'gets an event ' do
@@ -40,7 +40,18 @@ RSpec.describe GoogleAPI::Configured::Calendar::Event do
40
40
  expect(subject.delete).to eql('')
41
41
  end
42
42
 
43
- it 'adds conference data' do
44
- expect(subject.add_conference).to be_a(Google::Apis::CalendarV3::Event)
43
+ describe 'conference data' do
44
+ it 'adds conference data' do
45
+ expect(subject.add_conference).to be_a(Google::Apis::CalendarV3::Event)
46
+ end
47
+
48
+ it 'returns valid conference information' do
49
+ event = subject.add_conference
50
+
51
+ expect(subject.conference_info).to eql(
52
+ id: event.conference_data.conference_id,
53
+ signature: event.conference_data.signature
54
+ )
55
+ end
45
56
  end
46
57
  end
@@ -25,6 +25,8 @@ RSpec.configure do |config|
25
25
  c.keys = 'tmp/spec/keys'
26
26
  end
27
27
 
28
+ GoogleAPI.logging!(:INFO)
29
+
28
30
  FileUtils.rm(Dir.glob(GoogleAPI.configuration.local_path('*', &:keys)))
29
31
 
30
32
  ENV['GOOGLE_AUTHORIZATION_CODE'] = 'test-auth-code'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bps-google-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Fiander
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-27 00:00:00.000000000 Z
11
+ date: 2021-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: exp_retry
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.11
19
+ version: 0.0.13
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.11
26
+ version: 0.0.13
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fileutils
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -179,8 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  requirements: []
182
- rubyforge_project:
183
- rubygems_version: 2.6.14.1
182
+ rubygems_version: 3.2.7
184
183
  signing_key:
185
184
  specification_version: 4
186
185
  summary: Configured Google API