uptime_reports_spreadsheet 0.1.0.pre.beta → 0.1.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
  SHA1:
3
- metadata.gz: f31dcfb2c834856ce4b5d7b79dc7819484979bf1
4
- data.tar.gz: 9d68f06a64a8d400e0e5d9e112d5ff51784b0c98
3
+ metadata.gz: 5bc3d84c24886b60339b48d9fdfc19be03f33312
4
+ data.tar.gz: 883fcb2736606b0bae9d63225f69c11d2b5b7040
5
5
  SHA512:
6
- metadata.gz: 82f03f4a3dd0d114896641697d927e09c7f66ec484a49b96a0870f2acd12c376d7d08f4b947ee7ec33da42f9b271eab88550d5caa52d8fc37d2979b761716149
7
- data.tar.gz: daebba01f21f16056dcbec9ca06f487eb725f734d4224a6d45e0fb1c4fa8440c6ee03f7b815d4696385fe43a606b14c796f1a84446b9e57c631bbabd49ece5d1
6
+ metadata.gz: 97603bc814a3ca7a6af5c85d0211c6ceb818b2ee6e6909ad5cd7f62f0dd8839f36947976c1bf88b3114aef83a206185822e5d95115588321c04e5f000bedf69f
7
+ data.tar.gz: d9dd0ad941ac26b44f9027dcd6f5e54a728d621521c3eb6625e96ddfccb900b14af020d65bf02711fd0e605ab4de2927dfb01f890abf6f2f18d9a71a25e2d9ca
@@ -0,0 +1 @@
1
+ 2.4.1
@@ -12,12 +12,15 @@ GEM
12
12
  addressable (2.5.2)
13
13
  public_suffix (>= 2.0.2, < 4.0)
14
14
  byebug (9.1.0)
15
+ coderay (1.1.2)
15
16
  declarative (0.0.10)
16
17
  declarative-option (0.1.0)
17
18
  diff-lcs (1.3)
18
19
  dotenv (2.2.1)
19
20
  faraday (0.13.1)
20
21
  multipart-post (>= 1.2, < 3)
22
+ ffi (1.9.18)
23
+ formatador (0.2.5)
21
24
  google-api-client (0.16.0)
22
25
  addressable (~> 2.5, >= 2.5.1)
23
26
  googleauth (>= 0.5, < 0.7.0)
@@ -33,21 +36,51 @@ GEM
33
36
  multi_json (~> 1.11)
34
37
  os (~> 0.9)
35
38
  signet (~> 0.7)
39
+ guard (2.14.1)
40
+ formatador (>= 0.2.4)
41
+ listen (>= 2.7, < 4.0)
42
+ lumberjack (~> 1.0)
43
+ nenv (~> 0.1)
44
+ notiffany (~> 0.0)
45
+ pry (>= 0.9.12)
46
+ shellany (~> 0.0)
47
+ thor (>= 0.18.1)
48
+ guard-compat (1.2.1)
49
+ guard-rspec (4.7.3)
50
+ guard (~> 2.1)
51
+ guard-compat (~> 1.1)
52
+ rspec (>= 2.99.0, < 4.0)
36
53
  httpclient (2.8.3)
37
54
  jwt (2.1.0)
55
+ listen (3.1.5)
56
+ rb-fsevent (~> 0.9, >= 0.9.4)
57
+ rb-inotify (~> 0.9, >= 0.9.7)
58
+ ruby_dep (~> 1.2)
38
59
  little-plugger (1.1.4)
39
60
  logging (2.2.2)
40
61
  little-plugger (~> 1.1)
41
62
  multi_json (~> 1.10)
63
+ lumberjack (1.0.12)
42
64
  memoist (0.16.0)
65
+ method_source (0.9.0)
43
66
  mime-types (3.1)
44
67
  mime-types-data (~> 3.2015)
45
68
  mime-types-data (3.2016.0521)
46
69
  multi_json (1.12.2)
47
70
  multipart-post (2.0.0)
71
+ nenv (0.3.0)
72
+ notiffany (0.1.1)
73
+ nenv (~> 0.1)
74
+ shellany (~> 0.0)
48
75
  os (0.9.6)
76
+ pry (0.11.3)
77
+ coderay (~> 1.1.0)
78
+ method_source (~> 0.9.0)
49
79
  public_suffix (3.0.0)
50
80
  rake (10.5.0)
81
+ rb-fsevent (0.10.2)
82
+ rb-inotify (0.9.10)
83
+ ffi (>= 0.5.0, < 2)
51
84
  representable (3.0.4)
52
85
  declarative (< 0.1.0)
53
86
  declarative-option (< 0.2.0)
@@ -66,11 +99,14 @@ GEM
66
99
  diff-lcs (>= 1.2.0, < 2.0)
67
100
  rspec-support (~> 3.7.0)
68
101
  rspec-support (3.7.0)
102
+ ruby_dep (1.5.0)
103
+ shellany (0.0.1)
69
104
  signet (0.8.1)
70
105
  addressable (~> 2.3)
71
106
  faraday (~> 0.9)
72
107
  jwt (>= 1.5, < 3.0)
73
108
  multi_json (~> 1.10)
109
+ thor (0.20.0)
74
110
  uber (0.1.0)
75
111
 
76
112
  PLATFORMS
@@ -78,6 +114,7 @@ PLATFORMS
78
114
 
79
115
  DEPENDENCIES
80
116
  bundler (~> 1.16.a)
117
+ guard-rspec (~> 4.7)
81
118
  rake (~> 10.0)
82
119
  rspec (~> 3.0)
83
120
  uptime_reports_spreadsheet!
@@ -0,0 +1,22 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+ #
18
+ guard :rspec, cmd: 'rspec' do
19
+ watch(%r{^spec/.+_spec\.rb$})
20
+ watch(%r{^lib/uptime_reports_spreadsheet/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
21
+ watch('spec/spec_helper.rb') { "spec" }
22
+ end
data/README.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/uptime_reports_spreadsheet`. To experiment with that code, run `bin/console` for an interactive prompt.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
6
-
7
5
  ## Installation
8
6
 
9
7
  Add this line to your application's Gemfile:
@@ -22,7 +20,11 @@ Or install it yourself as:
22
20
 
23
21
  ## Usage
24
22
 
25
- TODO: Write usage instructions here
23
+ To have a connection you have to create 2 files:
24
+
25
+ - .env (to setup the ENV variables like GOOGLE_API_AUTH_CODE)
26
+ - client_secret.json (with your client secret data of Google console))
27
+
26
28
 
27
29
  ## Development
28
30
 
@@ -32,7 +34,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
34
 
33
35
  ## Contributing
34
36
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/uptime_reports_spreadsheet. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
37
+ Bug reports and pull requests are welcome on GitHub at https://github.com/diegopiccinini/uptime_reports_spreadsheet. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
38
 
37
39
  ## Code of Conduct
38
40
 
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "uptime_reports_spreadsheet"
4
+
5
+ auth=UptimeReportsSpreadsheet::Auth.new
6
+ auth.save_credentials
@@ -1,5 +1,6 @@
1
1
  require "uptime_reports_spreadsheet/version"
2
2
  require "uptime_reports_spreadsheet/auth"
3
+ require "uptime_reports_spreadsheet/spreadsheet"
3
4
  require 'dotenv/load'
4
5
 
5
6
  module UptimeReportsSpreadsheet
@@ -1,7 +1,7 @@
1
1
  require 'google/apis/sheets_v4'
2
2
  require 'googleauth'
3
3
  require 'googleauth/stores/file_token_store'
4
-
4
+ require 'google/apis/drive_v3'
5
5
  require 'fileutils'
6
6
  module UptimeReportsSpreadsheet
7
7
 
@@ -10,46 +10,114 @@ module UptimeReportsSpreadsheet
10
10
  OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
11
11
  APPLICATION_NAME = 'Google Sheets API Ruby Quickstart'
12
12
  CLIENT_SECRETS_PATH = 'client_secret.json'
13
- CREDENTIALS_PATH = File.join(Dir.home, '.credentials',
14
- "sheets.googleapis.com-ruby-quickstart.yaml")
15
- SCOPE = Google::Apis::SheetsV4::AUTH_SPREADSHEETS_READONLY
16
-
17
- ##
18
- # Ensure valid credentials, either by restoring from the saved credentials
19
- # files or intitiating an OAuth2 authorization. If authorization is required,
20
- # the user's default browser will be launched to approve the request.
21
- #
22
- # @return [Google::Auth::UserRefreshCredentials] OAuth2 credentials
23
- def authorize
24
- FileUtils.mkdir_p(File.dirname(CREDENTIALS_PATH))
13
+ INVALID_SCOPE_ERROR = "Sorry, this is an invalid scope"
14
+
15
+ attr_accessor :service, :response, :spreadsheet
16
+ attr_reader :scope, :user_id
17
+
18
+ def initialize scope=nil
19
+ @scope=scope || [5]
20
+ @service = Google::Apis::SheetsV4::SheetsService.new
21
+ @service.client_options.application_name = APPLICATION_NAME
22
+ @user_id='default'
23
+ end
25
24
 
25
+ def authorize
26
26
  client_id = Google::Auth::ClientId.from_file(CLIENT_SECRETS_PATH)
27
- token_store = Google::Auth::Stores::FileTokenStore.new(file: CREDENTIALS_PATH)
28
- authorizer = Google::Auth::UserAuthorizer.new(
29
- client_id, SCOPE, token_store)
30
- user_id = 'default'
31
- credentials = authorizer.get_credentials(user_id)
32
- if credentials.nil?
33
- #url = authorizer.get_authorization_url(base_url: OOB_URI)
34
- code = ENV['GOOGLE_API_AUTH_CODE']
35
- credentials = authorizer.get_and_store_credentials_from_code(
36
- user_id: user_id, code: code, base_url: OOB_URI)
27
+ token_store = Google::Auth::Stores::FileTokenStore.new(file: credentials_path)
28
+ authorizer = Google::Auth::UserAuthorizer.new(client_id, scope_url, token_store)
29
+ authorizer.get_credentials(user_id)
30
+ end
31
+
32
+ def choose_scope
33
+
34
+ puts "Choose one scope:"
35
+ scopes.each_pair do |k,v|
36
+ puts "#{k}.- #{v[:name]}"
37
+ puts "\t#{v[:desc]}"
38
+ end
39
+
40
+ s=gets(chomp: true)
41
+
42
+ s=s.split
43
+ @scope=s.map do |option|
44
+ raise INVALID_SCOPE_ERROR if !scopes.keys.include?(option.to_i)
45
+ option.to_i
37
46
  end
38
- credentials
47
+
48
+ end
49
+
50
+ def save_credentials
51
+
52
+ choose_scope
53
+
54
+ FileUtils.mkdir_p(File.dirname(credentials_path))
55
+
56
+ client_id = Google::Auth::ClientId.from_file(CLIENT_SECRETS_PATH)
57
+ token_store = Google::Auth::Stores::FileTokenStore.new(file: credentials_path)
58
+ authorizer = Google::Auth::UserAuthorizer.new( client_id, scope_url, token_store)
59
+ url = authorizer.get_authorization_url(base_url: OOB_URI)
60
+ puts "Visit #{url} to get the code"
61
+
62
+ code=gets(chomp: true)
63
+
64
+ authorizer.get_and_store_credentials_from_code(user_id: user_id, code: code, base_url: OOB_URI)
65
+ save_code code
66
+
39
67
  end
40
68
 
41
- def sample
42
- # Initialize the API
43
- service = Google::Apis::SheetsV4::SheetsService.new
44
- service.client_options.application_name = APPLICATION_NAME
45
- service.authorization = authorize
69
+ def scopes
70
+ {
71
+ 1 => {
72
+ name: 'AUTH_DRIVE',
73
+ desc: 'View and manage the files in your Google Drive',
74
+ url: 'https://www.googleapis.com/auth/drive'
75
+ },
76
+ 2 => {
77
+ name: 'AUTH_DRIVE_FILE',
78
+ desc: 'View and manage Google Drive files and folders that you have opened or created with this app',
79
+ url: 'https://www.googleapis.com/auth/drive.file'
80
+ },
81
+ 3 => {
82
+ name: 'AUTH_DRIVE_READONLY',
83
+ desc: 'View the files in your Google Drive',
84
+ url: 'https://www.googleapis.com/auth/drive.readonly'
85
+ },
86
+ 4 => {
87
+ name: 'AUTH_SPREADSHEETS',
88
+ desc: 'View and manage your spreadsheets in Google Drive',
89
+ url: 'https://www.googleapis.com/auth/spreadsheets'
90
+ },
91
+ 5 => {
92
+ name: 'AUTH_SPREADSHEETS_READONLY',
93
+ desc: 'View your Google Spreadsheets',
94
+ url: 'https://www.googleapis.com/auth/spreadsheets.readonly'
95
+ }
96
+ }
97
+ end
46
98
 
47
- # Prints the names and majors of students in a sample spreadsheet:
48
- # https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
49
- spreadsheet_id = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
50
- range = 'Class Data!A2:E'
51
- response = service.get_spreadsheet_values(spreadsheet_id, range)
52
- response.values
99
+ private
100
+
101
+ def credentials_path
102
+ name=scope_url.map { |a| a.split('/').last }.join('.and.')
103
+ File.join(Dir.home, '.credentials', "sheets.googleapis.#{name}.yaml")
104
+ end
105
+
106
+ def scope_url
107
+ if @scope.count<1
108
+ scopes[@scope.first.to_i][:url]
109
+ else
110
+ @scope.map { |option| scopes[option.to_i][:url] }
111
+ end
112
+ end
113
+
114
+ def save_code code
115
+ name=@scope.map { |a| scopes[a][:name] }.join('_AND_')
116
+ name="GOOGLE_#{name}"
117
+ File.open('.env','a') do |f|
118
+ f.write "#{name}=#{code}"
119
+ f.close
120
+ end
53
121
  end
54
122
  end
55
123
  end
@@ -0,0 +1,46 @@
1
+ require 'google/apis/drive_v3'
2
+ require 'uptime_reports_spreadsheet/auth'
3
+
4
+ module UptimeReportsSpreadsheet
5
+
6
+ class Spreadsheet
7
+
8
+ attr_accessor :service, :response, :spreadsheet, :auth
9
+
10
+ def initialize scopes=[1,4]
11
+ @auth=UptimeReportsSpreadsheet::Auth.new scopes
12
+ @service=auth.service
13
+
14
+ end
15
+
16
+ def sample
17
+ service.authorization = auth.authorize
18
+
19
+ spreadsheet_id = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
20
+ range = 'Class Data!A2:E'
21
+ response = service.get_spreadsheet_values(spreadsheet_id, range)
22
+ response.values
23
+ end
24
+
25
+ def create
26
+ service.authorization = auth.authorize
27
+ request_body = Google::Apis::SheetsV4::Spreadsheet.new
28
+ @spreadsheet = service.create_spreadsheet(request_body)
29
+ end
30
+
31
+ def set_title title
32
+ spreadsheet.properties.update!(title: title)
33
+ end
34
+
35
+ def title
36
+ spreadsheet.properties.title
37
+ end
38
+
39
+ def delete
40
+ service = Google::Apis::DriveV3::DriveService.new
41
+ service.authorization = auth.authorize
42
+ service.delete_file spreadsheet.spreadsheet_id
43
+ end
44
+
45
+ end
46
+ end
@@ -1,3 +1,3 @@
1
1
  module UptimeReportsSpreadsheet
2
- VERSION = "0.1.0-beta"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -34,6 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency "bundler", "~> 1.16.a"
35
35
  spec.add_development_dependency "rake", "~> 10.0"
36
36
  spec.add_development_dependency "rspec", "~> 3.0"
37
+ spec.add_development_dependency "guard-rspec", "~> 4.7"
37
38
  spec.add_dependency "google-api-client", "~> 0.16"
38
39
  spec.add_dependency "byebug", "~> 9.1"
39
40
  spec.add_dependency "dotenv", "~> 2.2"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uptime_reports_spreadsheet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.beta
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego H Piccinini Lagos
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-03 00:00:00.000000000 Z
11
+ date: 2017-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard-rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.7'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: google-api-client
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -97,22 +111,27 @@ dependencies:
97
111
  description: " Get a report and write it in a google sheet. "
98
112
  email:
99
113
  - dlagos@bookingbug.com
100
- executables: []
114
+ executables:
115
+ - uptime_reports_save_code
101
116
  extensions: []
102
117
  extra_rdoc_files: []
103
118
  files:
104
119
  - ".gitignore"
105
120
  - ".rspec"
121
+ - ".ruby-version"
106
122
  - ".travis.yml"
107
123
  - CODE_OF_CONDUCT.md
108
124
  - Gemfile
109
125
  - Gemfile.lock
126
+ - Guardfile
110
127
  - README.md
111
128
  - Rakefile
112
129
  - bin/console
113
130
  - bin/setup
131
+ - exe/uptime_reports_save_code
114
132
  - lib/uptime_reports_spreadsheet.rb
115
133
  - lib/uptime_reports_spreadsheet/auth.rb
134
+ - lib/uptime_reports_spreadsheet/spreadsheet.rb
116
135
  - lib/uptime_reports_spreadsheet/version.rb
117
136
  - uptime_reports_spreadsheet.gemspec
118
137
  homepage: https://rubygems.org/docs/bbeng/index.html
@@ -130,14 +149,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
149
  version: '0'
131
150
  required_rubygems_version: !ruby/object:Gem::Requirement
132
151
  requirements:
133
- - - ">"
152
+ - - ">="
134
153
  - !ruby/object:Gem::Version
135
- version: 1.3.1
154
+ version: '0'
136
155
  requirements: []
137
156
  rubyforge_project:
138
- rubygems_version: 2.4.6
157
+ rubygems_version: 2.6.11
139
158
  signing_key:
140
159
  specification_version: 4
141
160
  summary: Write spreadsheet in Google.
142
161
  test_files: []
143
- has_rdoc: