bps-google-api 0.1.5 → 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 +4 -4
- data/.gitignore +3 -1
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -0
- data/.travis.yml +20 -0
- data/Gemfile.lock +25 -2
- data/bps-google-api.gemspec +7 -2
- data/lib/google_api.rb +4 -0
- data/lib/google_api/calendar.rb +17 -8
- data/lib/google_api/calendar/clear_test_calendar.rb +9 -4
- data/spec/.rubocop.yml +4 -0
- data/spec/lib/google_api/base_spec.rb +13 -0
- data/spec/lib/google_api/calendar_spec.rb +75 -0
- data/spec/lib/google_api/group_spec.rb +43 -0
- data/spec/spec_helper.rb +16 -0
- metadata +51 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bb3f5af2dbe6a57df4945c7d082aab5e6f68edb
|
4
|
+
data.tar.gz: 225fd27b21ae836d6d051bf32a81b96e17ed71f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 031d62aac72e1de816ac5d309fed95d8886c7b205633f25c9accf6ca8e43fa389c62334943a57f9ed4a0f85c47583149daab492eff8be4db403b7018c90b09a7
|
7
|
+
data.tar.gz: 3e5e6374f3731ba02d763d515bf3877d35e635a0c5f1f87a465ac8fb891581aa288a42c83eed1fbf93a963dba681115269a497efe864d71c31116f0580940e45
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.4.4
|
data/.travis.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.4.4
|
4
|
+
branches:
|
5
|
+
except:
|
6
|
+
- "/^v[0-9]+\\.[0-9]+\\.[0-9]+(?:-.*)?/"
|
7
|
+
notifications:
|
8
|
+
email:
|
9
|
+
on_success: change
|
10
|
+
on_failure: always
|
11
|
+
before_install:
|
12
|
+
- gem install bundler -v '< 2'
|
13
|
+
before_script:
|
14
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
15
|
+
- chmod +x ./cc-test-reporter
|
16
|
+
- ./cc-test-reporter before-build
|
17
|
+
script:
|
18
|
+
- bundle exec rspec
|
19
|
+
after_script:
|
20
|
+
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bps-google-api (0.
|
4
|
+
bps-google-api (0.2.0)
|
5
5
|
exp_retry (~> 0.0.11)
|
6
6
|
fileutils (~> 1.2)
|
7
7
|
google-api-client (~> 0.23.4)
|
@@ -14,7 +14,9 @@ GEM
|
|
14
14
|
public_suffix (>= 2.0.2, < 4.0)
|
15
15
|
declarative (0.0.10)
|
16
16
|
declarative-option (0.1.0)
|
17
|
-
|
17
|
+
diff-lcs (1.3)
|
18
|
+
docile (1.3.2)
|
19
|
+
exp_retry (0.0.12)
|
18
20
|
faraday (0.15.4)
|
19
21
|
multipart-post (>= 1.2, < 3)
|
20
22
|
fileutils (1.2.0)
|
@@ -34,6 +36,7 @@ GEM
|
|
34
36
|
os (>= 0.9, < 2.0)
|
35
37
|
signet (~> 0.7)
|
36
38
|
httpclient (2.8.3)
|
39
|
+
json (2.2.0)
|
37
40
|
jwt (2.2.1)
|
38
41
|
memoist (0.16.0)
|
39
42
|
mime-types (3.2.2)
|
@@ -48,12 +51,30 @@ GEM
|
|
48
51
|
declarative-option (< 0.2.0)
|
49
52
|
uber (< 0.2.0)
|
50
53
|
retriable (3.1.2)
|
54
|
+
rspec (3.8.0)
|
55
|
+
rspec-core (~> 3.8.0)
|
56
|
+
rspec-expectations (~> 3.8.0)
|
57
|
+
rspec-mocks (~> 3.8.0)
|
58
|
+
rspec-core (3.8.1)
|
59
|
+
rspec-support (~> 3.8.0)
|
60
|
+
rspec-expectations (3.8.4)
|
61
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
62
|
+
rspec-support (~> 3.8.0)
|
63
|
+
rspec-mocks (3.8.1)
|
64
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
65
|
+
rspec-support (~> 3.8.0)
|
66
|
+
rspec-support (3.8.2)
|
51
67
|
ruby-progressbar (1.10.1)
|
52
68
|
signet (0.11.0)
|
53
69
|
addressable (~> 2.3)
|
54
70
|
faraday (~> 0.9)
|
55
71
|
jwt (>= 1.5, < 3.0)
|
56
72
|
multi_json (~> 1.10)
|
73
|
+
simplecov (0.16.1)
|
74
|
+
docile (~> 1.1)
|
75
|
+
json (>= 1.8, < 3)
|
76
|
+
simplecov-html (~> 0.10.0)
|
77
|
+
simplecov-html (0.10.2)
|
57
78
|
uber (0.1.0)
|
58
79
|
|
59
80
|
PLATFORMS
|
@@ -61,6 +82,8 @@ PLATFORMS
|
|
61
82
|
|
62
83
|
DEPENDENCIES
|
63
84
|
bps-google-api!
|
85
|
+
rspec (~> 3.8, >= 3.8.0)
|
86
|
+
simplecov (~> 0.16, >= 0.16.1)
|
64
87
|
|
65
88
|
BUNDLED WITH
|
66
89
|
1.17.3
|
data/bps-google-api.gemspec
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'bps-google-api'
|
5
|
-
s.version = '0.
|
6
|
-
s.date = '2019-06-
|
5
|
+
s.version = '0.2.0'
|
6
|
+
s.date = '2019-06-20'
|
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'
|
@@ -13,8 +13,13 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.require_paths = %w[lib]
|
14
14
|
s.files = `git ls-files`.split("\n")
|
15
15
|
|
16
|
+
s.required_ruby_version = '~> 2.4'
|
17
|
+
|
16
18
|
s.add_runtime_dependency 'exp_retry', '~> 0.0.11'
|
17
19
|
s.add_runtime_dependency 'fileutils', '~> 1.2'
|
18
20
|
s.add_runtime_dependency 'google-api-client', '~> 0.23.4'
|
19
21
|
s.add_runtime_dependency 'ruby-progressbar', '~> 1.10'
|
22
|
+
|
23
|
+
s.add_development_dependency 'rspec', '~> 3.8', '>= 3.8.0'
|
24
|
+
s.add_development_dependency 'simplecov', '~> 0.16', '>= 0.16.1'
|
20
25
|
end
|
data/lib/google_api.rb
CHANGED
data/lib/google_api/calendar.rb
CHANGED
@@ -33,27 +33,30 @@ module GoogleAPI
|
|
33
33
|
:event_not_found
|
34
34
|
end
|
35
35
|
|
36
|
-
def permit(calendar, user)
|
36
|
+
def permit(calendar, user = nil, email: nil)
|
37
|
+
email ||= user&.email
|
38
|
+
|
37
39
|
rule = Google::Apis::CalendarV3::AclRule.new(
|
38
|
-
scope: { type: 'user', value:
|
40
|
+
scope: { type: 'user', value: email }, role: 'writer'
|
39
41
|
)
|
40
42
|
|
41
|
-
|
42
|
-
user.update(calendar_rule_id: result.id)
|
43
|
+
user&.update(calendar_rule_id: call(:insert_acl, calendar, rule).id)
|
43
44
|
end
|
44
45
|
|
45
|
-
def unpermit(calendar, user)
|
46
|
-
|
46
|
+
def unpermit(calendar, user = nil, calendar_rule_id: nil)
|
47
|
+
calendar_rule_id ||= user&.calendar_rule_id
|
48
|
+
|
49
|
+
call(:delete_acl, calendar, calendar_rule_id)
|
47
50
|
rescue Google::Apis::ClientError
|
48
51
|
:permission_not_found
|
49
52
|
ensure
|
50
|
-
user
|
53
|
+
user&.update(calendar_rule_id: nil)
|
51
54
|
end
|
52
55
|
|
53
56
|
private
|
54
57
|
|
55
58
|
def event(event_options)
|
56
|
-
event_options
|
59
|
+
validate_event_options(event_options)
|
57
60
|
event_options[:start] = date(event_options[:start])
|
58
61
|
event_options[:end] = date(event_options[:end])
|
59
62
|
|
@@ -69,5 +72,11 @@ module GoogleAPI
|
|
69
72
|
path = %w[tmp run last_page_token]
|
70
73
|
defined?(Rails) ? Rails.root.join(*path) : File.join(*path)
|
71
74
|
end
|
75
|
+
|
76
|
+
def validate_event_options(event_options)
|
77
|
+
return unless event_options.respond_to?(:assert_valid_keys)
|
78
|
+
|
79
|
+
event_options.assert_valid_keys(VALID_EVENT_KEYS)
|
80
|
+
end
|
72
81
|
end
|
73
82
|
end
|
@@ -12,7 +12,7 @@ module GoogleAPI
|
|
12
12
|
rescue Google::Apis::RateLimitError
|
13
13
|
puts "\n\n*** Google::Apis::RateLimitError (Rate Limit Exceeded)"
|
14
14
|
ensure
|
15
|
-
log_last_page_token
|
15
|
+
log_last_page_token if token?
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
@@ -20,18 +20,23 @@ module GoogleAPI
|
|
20
20
|
def choose_page_token(page_token)
|
21
21
|
last_token = last_token_path
|
22
22
|
@page_token ||= File.read(last_token) if File.exist?(last_token)
|
23
|
-
@page_token = page_token if page_token
|
23
|
+
@page_token = page_token if token?(page_token)
|
24
|
+
end
|
25
|
+
|
26
|
+
def token?(token = nil)
|
27
|
+
token ||= @token
|
28
|
+
token != ''
|
24
29
|
end
|
25
30
|
|
26
31
|
def loop_over_pages(cal_id, page_limit: 50)
|
27
|
-
puts "*** Starting with page token: #{@page_token}" if @verbose &&
|
32
|
+
puts "*** Starting with page token: #{@page_token}" if @verbose && token?
|
28
33
|
|
29
34
|
page_limit -= 1 while (@page_token = clear_page(cal_id)) && page_limit.positive?
|
30
35
|
end
|
31
36
|
|
32
37
|
def clear_page(cal_id)
|
33
38
|
response = list(cal_id, page_token: @page_token)
|
34
|
-
clear_events_from_page(cal_id, response.items) unless response.items.
|
39
|
+
clear_events_from_page(cal_id, response.items) unless response.items.empty?
|
35
40
|
response.next_page_token
|
36
41
|
end
|
37
42
|
|
data/spec/.rubocop.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe GoogleAPI::Base do
|
6
|
+
subject { described_class.new }
|
7
|
+
|
8
|
+
it 'does not have a service class' do
|
9
|
+
expect { subject }.to raise_error(
|
10
|
+
NameError, 'uninitialized constant GoogleAPI::Base::SERVICE_CLASS'
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe GoogleAPI::Calendar do
|
6
|
+
subject { described_class.new }
|
7
|
+
|
8
|
+
it 'has a service class' do
|
9
|
+
expect { subject.send(:service_class) }.not_to raise_error
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'has the correct service class' do
|
13
|
+
expect(subject.send(:service_class)).to eql(Google::Apis::CalendarV3::CalendarService)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'list' do
|
17
|
+
it 'returns not found for a nonexistent calendar' do
|
18
|
+
expect { subject.list('not-a-calendar') }.to raise_error(
|
19
|
+
Google::Apis::ClientError, 'notFound: Not Found'
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'create' do
|
25
|
+
it 'returns not found for a nonexistent calendar' do
|
26
|
+
expect { subject.create('not-a-calendar') }.to raise_error(
|
27
|
+
Google::Apis::ClientError, 'notFound: Not Found'
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'get' do
|
33
|
+
it 'returns not found for a nonexistent calendar' do
|
34
|
+
expect { subject.get('not-a-calendar', 'not-an-event') }.to raise_error(
|
35
|
+
Google::Apis::ClientError, 'notFound: Not Found'
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'update' do
|
41
|
+
it 'returns not found for a nonexistent calendar' do
|
42
|
+
expect { subject.update('not-a-calendar', 'not-an-event') }.to raise_error(
|
43
|
+
Google::Apis::ClientError, 'notFound: Not Found'
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'delete' do
|
49
|
+
it 'returns event not found for a nonexistent calendar' do
|
50
|
+
expect(subject.delete('not-a-calendar', 'not-an-event')).to eql(
|
51
|
+
:event_not_found
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'permit' do
|
57
|
+
it 'returns nil for a nonexistent calendar' do
|
58
|
+
expect(subject.permit('not-a-calendar', email: 'not-a-user')).to be_nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'unpermit' do
|
63
|
+
it 'returns permission not found for a nonexistent calendar' do
|
64
|
+
expect(subject.unpermit('not-a-calendar', calendar_rule_id: 'not-a-user')).to eql(
|
65
|
+
:permission_not_found
|
66
|
+
)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe 'clear test calendar' do
|
71
|
+
it 'does not raise any errors' do
|
72
|
+
expect { subject.clear_test_calendar }.not_to raise_error
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe GoogleAPI::Group do
|
6
|
+
subject { described_class.new('test-group@example.com') }
|
7
|
+
|
8
|
+
it 'has a service class' do
|
9
|
+
expect { subject.send(:service_class) }.not_to raise_error
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'has the correct service class' do
|
13
|
+
expect(subject.send(:service_class)).to eql(Google::Apis::AdminDirectoryV1::DirectoryService)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'get' do
|
17
|
+
it 'returns not found for a nonexistent group' do
|
18
|
+
expect { subject.get }.to raise_error(
|
19
|
+
Google::Apis::ClientError, 'forbidden: Not Authorized to access this resource/api'
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'members' do
|
25
|
+
it 'returns forbidden for a nonexistent group' do
|
26
|
+
expect { subject.members }.to raise_error(
|
27
|
+
Google::Apis::ClientError, 'forbidden: Not Authorized to access this resource/api'
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'add' do
|
33
|
+
it 'returns not found for a nonexistent group' do
|
34
|
+
expect(subject.add('test-member@example.com')).to eql(:already_exists)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'remove' do
|
39
|
+
it 'returns not found for a nonexistent group' do
|
40
|
+
expect(subject.remove('test-member@example.com')).to eql(:not_found)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
Bundler.setup
|
5
|
+
require 'simplecov'
|
6
|
+
SimpleCov.start do
|
7
|
+
add_filter '/spec'
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'google_api'
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.before(:suite) do
|
14
|
+
FileUtils.mkdir_p('tmp/run')
|
15
|
+
end
|
16
|
+
end
|
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
|
+
version: 0.2.0
|
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-
|
11
|
+
date: 2019-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: exp_retry
|
@@ -66,6 +66,46 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.8'
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 3.8.0
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - "~>"
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '3.8'
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 3.8.0
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: simplecov
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0.16'
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.16.1
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0.16'
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 0.16.1
|
69
109
|
description: A configured Google API wrapper.
|
70
110
|
email: julian@fiander.one
|
71
111
|
executables: []
|
@@ -74,6 +114,8 @@ extra_rdoc_files: []
|
|
74
114
|
files:
|
75
115
|
- ".gitignore"
|
76
116
|
- ".rubocop.yml"
|
117
|
+
- ".ruby-version"
|
118
|
+
- ".travis.yml"
|
77
119
|
- Gemfile
|
78
120
|
- Gemfile.lock
|
79
121
|
- Readme.md
|
@@ -84,6 +126,11 @@ files:
|
|
84
126
|
- lib/google_api/calendar.rb
|
85
127
|
- lib/google_api/calendar/clear_test_calendar.rb
|
86
128
|
- lib/google_api/group.rb
|
129
|
+
- spec/.rubocop.yml
|
130
|
+
- spec/lib/google_api/base_spec.rb
|
131
|
+
- spec/lib/google_api/calendar_spec.rb
|
132
|
+
- spec/lib/google_api/group_spec.rb
|
133
|
+
- spec/spec_helper.rb
|
87
134
|
homepage: http://rubygems.org/gems/bps-google-api
|
88
135
|
licenses:
|
89
136
|
- GPL-3.0
|
@@ -94,9 +141,9 @@ require_paths:
|
|
94
141
|
- lib
|
95
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
143
|
requirements:
|
97
|
-
- - "
|
144
|
+
- - "~>"
|
98
145
|
- !ruby/object:Gem::Version
|
99
|
-
version: '
|
146
|
+
version: '2.4'
|
100
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
148
|
requirements:
|
102
149
|
- - ">="
|