googlesheets 0.5.1 → 0.6.3
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/bin/shat +32 -0
- data/lib/googlesheets.rb +75 -72
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 337343bcb13d2a791f5aee8a239ce9f6fb176d9844da5d2d672efd98d21974d5
|
4
|
+
data.tar.gz: 68006ba26a382e5599a95822731e55261b7bb10b871c3536ecf4a2f0671d4755
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 250b28e880607001b70f71a1f417325cd73c301fe4cad19af54e390f17e08630dd9e7a44a2aaa537646d64c2bc8e0571aeadda02e3929561b88232f581700e04
|
7
|
+
data.tar.gz: 3e302a8611cd632225afac79f038ef000d3ea286e872de931640d43786b3de2acd7c325e9540a932be9b02dc6fc456f03b7dfb2e29092c0fa65703499990e9ff
|
data/bin/shat
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
version="0.0.1"
|
4
|
+
|
5
|
+
STDOUT.sync = true
|
6
|
+
|
7
|
+
begin
|
8
|
+
require "censive"
|
9
|
+
rescue LoadError
|
10
|
+
abort "#{File.basename($0)} needs another gem, run 'gem install censive'"
|
11
|
+
end
|
12
|
+
|
13
|
+
require "googlesheets"
|
14
|
+
require "optparse"
|
15
|
+
|
16
|
+
trap("INT" ) { abort "\n" }
|
17
|
+
|
18
|
+
OptionParser.new.instance_eval do
|
19
|
+
@banner = "usage: #{program_name} [options] <url>"
|
20
|
+
|
21
|
+
on "-h", "--help" , "Show help and command usage" do Kernel.abort to_s; end
|
22
|
+
on "-v", "--version" , "Show version number" do Kernel.abort "#{program_name} #{version}"; end
|
23
|
+
|
24
|
+
self
|
25
|
+
end.parse!(into: opts={}) rescue abort($!.message)
|
26
|
+
|
27
|
+
link = ARGV.shift or abort("no url provided")
|
28
|
+
|
29
|
+
goog = GoogleSheets.new(link)
|
30
|
+
rows = goog.sheet_read
|
31
|
+
|
32
|
+
Censive.writer {|csv| rows.each {|row| csv << row }}
|
data/lib/googlesheets.rb
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# ============================================================================
|
2
|
+
# googlesheets - Ruby gem for Google Sheets
|
3
|
+
#
|
4
|
+
# Author: Steve Shreeve (steve.shreeve@gmail.com)
|
5
|
+
# Date: March 16, 2023
|
6
|
+
# ============================================================================
|
7
|
+
|
8
|
+
# See https://googleapis.dev/ruby/google-api-client/latest/Google/Apis/SheetsV4/Request.html
|
9
|
+
|
1
10
|
require "google/apis/sheets_v4"
|
2
11
|
require "googleauth"
|
3
12
|
require "googleauth/stores/file_token_store"
|
@@ -6,19 +15,11 @@ class Object
|
|
6
15
|
def blank?
|
7
16
|
respond_to?(:empty?) or return !self
|
8
17
|
empty? or respond_to?(:strip) && strip.empty?
|
9
|
-
end
|
18
|
+
end unless defined? blank?
|
10
19
|
end
|
11
20
|
|
12
|
-
module Enumerable
|
13
|
-
def first_result
|
14
|
-
block_given? ? each {|item| result = (yield item) and return result} && nil : find {|item| item}
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
# https://googleapis.dev/ruby/google-api-client/latest/Google/Apis/SheetsV4/Request.html
|
19
|
-
|
20
21
|
class GoogleSheets
|
21
|
-
VERSION = "0.
|
22
|
+
VERSION = "0.6.3"
|
22
23
|
|
23
24
|
attr_accessor :api
|
24
25
|
|
@@ -55,12 +56,15 @@ class GoogleSheets
|
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
58
|
-
def
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
def biject(x) # a=1, z=26, aa=27, az=52, ba=53, aaa=703
|
60
|
+
case x
|
61
|
+
when String
|
62
|
+
x.each_char.inject(0) {|n,c| (n * 26) + (c.ord & 31) }
|
63
|
+
when Integer
|
64
|
+
s = []
|
65
|
+
s << (((x -= 1) % 26) + 65).chr && x /= 26 while x > 0
|
66
|
+
s.reverse.join
|
67
|
+
end
|
64
68
|
end
|
65
69
|
|
66
70
|
def hex2rgb(color=nil)
|
@@ -72,15 +76,12 @@ class GoogleSheets
|
|
72
76
|
{ red: r, green: g, blue: b }
|
73
77
|
end
|
74
78
|
|
75
|
-
def
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
s << (((x -= 1) % 26) + 65).chr && x /= 26 while x > 0
|
82
|
-
s.reverse.join
|
83
|
-
end
|
79
|
+
def rgb2hex(color=nil)
|
80
|
+
color or return
|
81
|
+
r = ((color.red || 0) * 255).to_i
|
82
|
+
g = ((color.green || 0) * 255).to_i
|
83
|
+
b = ((color.blue || 0) * 255).to_i
|
84
|
+
"#%02x%02x%02x" % [r, g, b]
|
84
85
|
end
|
85
86
|
|
86
87
|
def filter_criteria(hash)
|
@@ -110,6 +111,8 @@ class GoogleSheets
|
|
110
111
|
}.compact
|
111
112
|
end
|
112
113
|
|
114
|
+
# --------------------------------------------------------------------------
|
115
|
+
|
113
116
|
def sheets
|
114
117
|
@sheets ||= api.get_spreadsheet(@ssid).sheets.map {|item| item.properties }
|
115
118
|
end
|
@@ -119,33 +122,6 @@ class GoogleSheets
|
|
119
122
|
sheets
|
120
123
|
end
|
121
124
|
|
122
|
-
def sheet_list
|
123
|
-
sheets.map do |item|
|
124
|
-
{
|
125
|
-
id: item.sheet_id,
|
126
|
-
name: item.title,
|
127
|
-
color: rgb2hex(item.tab_color),
|
128
|
-
}.compact
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def sheet_id(obj)
|
133
|
-
case obj
|
134
|
-
when /^#(\d+)$/ then sheets[$1.to_i - 1].sheet_id
|
135
|
-
when Integer then obj
|
136
|
-
else sheets.first_result {|item| item.sheet_id if item.title == obj}
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def sheet_name(obj=nil)
|
141
|
-
case obj ||= @wsid
|
142
|
-
when /^#(\d+)$/ then sheets[$1.to_i - 1].title
|
143
|
-
when "", 0, nil then sheets.first.title
|
144
|
-
when Integer then sheets.first_result {|item| item.title if item.sheet_id == obj }
|
145
|
-
else obj
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
125
|
def resolve_area(area)
|
150
126
|
if area.blank?
|
151
127
|
wsid = sheet_name
|
@@ -162,27 +138,25 @@ class GoogleSheets
|
|
162
138
|
"#{wsid}!#{rect}"
|
163
139
|
end
|
164
140
|
|
165
|
-
def
|
166
|
-
|
167
|
-
|
141
|
+
def sheet_name(obj=nil)
|
142
|
+
case obj ||= @wsid
|
143
|
+
when /^#(\d+)(?:!?|$)/ then sheets[$1.to_i - 1].title
|
144
|
+
when "", 0, nil then sheets.first.title
|
145
|
+
when Integer then sheets.find {|item| item.sheet_id == obj}&.title
|
146
|
+
else obj
|
147
|
+
end
|
148
|
+
end
|
168
149
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
sheet_id: shid,
|
173
|
-
title: name,
|
174
|
-
},
|
175
|
-
fields: "title",
|
176
|
-
})
|
177
|
-
resp = api.batch_update_spreadsheet(@ssid, { requests: reqs }, {})
|
178
|
-
true
|
150
|
+
def sheet_clear(area)
|
151
|
+
area = resolve_area(area)
|
152
|
+
api.clear_values(@ssid, area)
|
179
153
|
end
|
180
154
|
|
181
|
-
def sheet_color(
|
155
|
+
def sheet_color(curr, color=nil) # NOTE: ignores alpha
|
182
156
|
reqs = []
|
183
157
|
reqs.push(update_sheet_properties: {
|
184
158
|
properties: {
|
185
|
-
sheet_id: sheet_id(
|
159
|
+
sheet_id: sheet_id(curr),
|
186
160
|
tab_color: hex2rgb(color),
|
187
161
|
},
|
188
162
|
fields: "tab_color",
|
@@ -191,10 +165,10 @@ class GoogleSheets
|
|
191
165
|
true
|
192
166
|
end
|
193
167
|
|
194
|
-
def sheet_filter(area,
|
168
|
+
def sheet_filter(area, filt=nil)
|
195
169
|
area = resolve_area(area)
|
196
170
|
range = range(area)
|
197
|
-
criteria = filter_criteria(
|
171
|
+
criteria = filter_criteria(filt) if filt
|
198
172
|
reqs = []
|
199
173
|
reqs.push(clear_basic_filter: { sheet_id: range[:sheet_id] })
|
200
174
|
reqs.push(set_basic_filter: { filter: { range: range, criteria: criteria}.compact })
|
@@ -221,9 +195,38 @@ class GoogleSheets
|
|
221
195
|
true
|
222
196
|
end
|
223
197
|
|
224
|
-
def
|
225
|
-
|
226
|
-
|
198
|
+
def sheet_id(obj)
|
199
|
+
case obj
|
200
|
+
when /^#(\d+)(?:!?|$)/ then sheets[$1.to_i - 1].sheet_id
|
201
|
+
when Integer then obj
|
202
|
+
else sheets.find {|item| item.title == obj}&.sheet_id
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def sheet_list
|
207
|
+
sheets.map do |item|
|
208
|
+
{
|
209
|
+
id: item.sheet_id,
|
210
|
+
name: item.title,
|
211
|
+
color: rgb2hex(item.tab_color),
|
212
|
+
}.compact
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
def sheet_rename(curr, name=nil)
|
217
|
+
shid = sheet_id(curr)
|
218
|
+
name ||= yield(sheet_name(shid)) if block_given?
|
219
|
+
|
220
|
+
reqs = []
|
221
|
+
reqs.push(update_sheet_properties: {
|
222
|
+
properties: {
|
223
|
+
sheet_id: shid,
|
224
|
+
title: name,
|
225
|
+
},
|
226
|
+
fields: "title",
|
227
|
+
})
|
228
|
+
resp = api.batch_update_spreadsheet(@ssid, { requests: reqs }, {})
|
229
|
+
true
|
227
230
|
end
|
228
231
|
|
229
232
|
def sheet_read(area=nil)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: googlesheets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Shreeve
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-api-client
|
@@ -26,13 +26,15 @@ dependencies:
|
|
26
26
|
version: 0.53.0
|
27
27
|
description: This gem allows easy access to Google Sheets API V4.
|
28
28
|
email: steve.shreeve@gmail.com
|
29
|
-
executables:
|
29
|
+
executables:
|
30
|
+
- shat
|
30
31
|
extensions: []
|
31
32
|
extra_rdoc_files: []
|
32
33
|
files:
|
33
34
|
- Gemfile
|
34
35
|
- LICENSE
|
35
36
|
- README.md
|
37
|
+
- bin/shat
|
36
38
|
- googlesheets.gemspec
|
37
39
|
- lib/googlesheets.rb
|
38
40
|
homepage: https://github.com/shreeve/googlesheets
|