googlesheets 0.5.0 → 0.6.1
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/lib/googlesheets.rb +78 -80
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6a26194973635e4ea51c7926c8cd03f900855b5c1776f517b0bbec78ac2b375
|
4
|
+
data.tar.gz: 801e67399e5c075742fe11913e6c9d996eb32f6fca24d7617fd4dfc17c2984e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd5432ce50b9d6528b444db90beda6d4b561b3b430fc8cac3a07dd3b4b3d8417f1fbdd84ff58ec18b19d8b3c520644febace35b3610b32e6c9a661abe615ec53
|
7
|
+
data.tar.gz: c2019272c6b2a079a33d1d6a831f2692ae6da0a195a46728a04524df742053e2691b3587ce01f3c01ef334fb44fe4314814950525c3f2bcdd3697f4b1dade097
|
data/lib/googlesheets.rb
CHANGED
@@ -1,30 +1,25 @@
|
|
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"
|
4
13
|
|
5
|
-
class Object
|
6
|
-
def blank?
|
7
|
-
respond_to?(:empty?) or return !self
|
8
|
-
empty? or respond_to?(:strip) && strip.empty?
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
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
14
|
class GoogleSheets
|
21
|
-
VERSION = "0.
|
15
|
+
VERSION = "0.6.1"
|
22
16
|
|
23
17
|
attr_accessor :api
|
24
18
|
|
25
19
|
def initialize(ssid, **opts)
|
26
20
|
@ssid = ssid =~ /^https?:/ ? ssid.split("/")[5] : ssid # spreadsheet id
|
27
|
-
@wsid = ssid
|
21
|
+
@wsid = ssid =~ /(?<=#gid=)(\d+)(?:!([a-z\d:]+))?$/i ? $1.to_i : "#1" # worksheet id
|
22
|
+
@rect = $2 ? $2.sub(/(?<=\D):/, "1:") : "A:ZZ"
|
28
23
|
|
29
24
|
@json = opts[:credentials] || "credentials.json"
|
30
25
|
@yaml = opts[:token ] || "token.yaml"
|
@@ -54,12 +49,15 @@ class GoogleSheets
|
|
54
49
|
end
|
55
50
|
end
|
56
51
|
|
57
|
-
def
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
52
|
+
def biject(x) # a=1, z=26, aa=27, az=52, ba=53, aaa=703
|
53
|
+
case x
|
54
|
+
when String
|
55
|
+
x.each_char.inject(0) {|n,c| (n * 26) + (c.ord & 31) }
|
56
|
+
when Integer
|
57
|
+
s = []
|
58
|
+
s << (((x -= 1) % 26) + 65).chr && x /= 26 while x > 0
|
59
|
+
s.reverse.join
|
60
|
+
end
|
63
61
|
end
|
64
62
|
|
65
63
|
def hex2rgb(color=nil)
|
@@ -71,15 +69,12 @@ class GoogleSheets
|
|
71
69
|
{ red: r, green: g, blue: b }
|
72
70
|
end
|
73
71
|
|
74
|
-
def
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
s << (((x -= 1) % 26) + 65).chr && x /= 26 while x > 0
|
81
|
-
s.reverse.join
|
82
|
-
end
|
72
|
+
def rgb2hex(color=nil)
|
73
|
+
color or return
|
74
|
+
r = ((color.red || 0) * 255).to_i
|
75
|
+
g = ((color.green || 0) * 255).to_i
|
76
|
+
b = ((color.blue || 0) * 255).to_i
|
77
|
+
"#%02x%02x%02x" % [r, g, b]
|
83
78
|
end
|
84
79
|
|
85
80
|
def filter_criteria(hash)
|
@@ -109,6 +104,8 @@ class GoogleSheets
|
|
109
104
|
}.compact
|
110
105
|
end
|
111
106
|
|
107
|
+
# --------------------------------------------------------------------------
|
108
|
+
|
112
109
|
def sheets
|
113
110
|
@sheets ||= api.get_spreadsheet(@ssid).sheets.map {|item| item.properties }
|
114
111
|
end
|
@@ -118,33 +115,6 @@ class GoogleSheets
|
|
118
115
|
sheets
|
119
116
|
end
|
120
117
|
|
121
|
-
def sheet_list
|
122
|
-
sheets.map do |item|
|
123
|
-
{
|
124
|
-
id: item.sheet_id,
|
125
|
-
name: item.title,
|
126
|
-
color: rgb2hex(item.tab_color),
|
127
|
-
}.compact
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def sheet_id(obj)
|
132
|
-
case obj
|
133
|
-
when /^#(\d+)$/ then sheets[$1.to_i - 1].sheet_id
|
134
|
-
when Integer then obj
|
135
|
-
else sheets.first_result {|item| item.sheet_id if item.title == obj}
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def sheet_name(obj=nil)
|
140
|
-
case obj ||= @wsid || "#1"
|
141
|
-
when /^#(\d+)$/ then sheets[$1.to_i - 1].title
|
142
|
-
when Integer then sheets.first_result {|item| item.title if item.sheet_id == obj }
|
143
|
-
when "", nil then sheets.first.title
|
144
|
-
else obj
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
118
|
def resolve_area(area)
|
149
119
|
if area.blank?
|
150
120
|
wsid = sheet_name
|
@@ -157,30 +127,29 @@ class GoogleSheets
|
|
157
127
|
else
|
158
128
|
wsid = sheet_name(area)
|
159
129
|
end
|
160
|
-
|
130
|
+
rect = rect ? rect.sub(/(?<=\D):/, "1:") : @rect
|
131
|
+
"#{wsid}!#{rect}"
|
161
132
|
end
|
162
133
|
|
163
|
-
def
|
164
|
-
|
165
|
-
|
134
|
+
def sheet_name(obj=nil)
|
135
|
+
case obj ||= @wsid
|
136
|
+
when /^#(\d+)(?:!?|$)/ then sheets[$1.to_i - 1].title
|
137
|
+
when "", 0, nil then sheets.first.title
|
138
|
+
when Integer then sheets.find {|item| item.sheet_id == obj}&.title
|
139
|
+
else obj
|
140
|
+
end
|
141
|
+
end
|
166
142
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
sheet_id: shid,
|
171
|
-
title: name,
|
172
|
-
},
|
173
|
-
fields: "title",
|
174
|
-
})
|
175
|
-
resp = api.batch_update_spreadsheet(@ssid, { requests: reqs }, {})
|
176
|
-
true
|
143
|
+
def sheet_clear(area)
|
144
|
+
area = resolve_area(area)
|
145
|
+
api.clear_values(@ssid, area)
|
177
146
|
end
|
178
147
|
|
179
|
-
def sheet_color(
|
148
|
+
def sheet_color(curr, color=nil) # NOTE: ignores alpha
|
180
149
|
reqs = []
|
181
150
|
reqs.push(update_sheet_properties: {
|
182
151
|
properties: {
|
183
|
-
sheet_id: sheet_id(
|
152
|
+
sheet_id: sheet_id(curr),
|
184
153
|
tab_color: hex2rgb(color),
|
185
154
|
},
|
186
155
|
fields: "tab_color",
|
@@ -189,10 +158,10 @@ class GoogleSheets
|
|
189
158
|
true
|
190
159
|
end
|
191
160
|
|
192
|
-
def sheet_filter(area,
|
161
|
+
def sheet_filter(area, filt=nil)
|
193
162
|
area = resolve_area(area)
|
194
163
|
range = range(area)
|
195
|
-
criteria = filter_criteria(
|
164
|
+
criteria = filter_criteria(filt) if filt
|
196
165
|
reqs = []
|
197
166
|
reqs.push(clear_basic_filter: { sheet_id: range[:sheet_id] })
|
198
167
|
reqs.push(set_basic_filter: { filter: { range: range, criteria: criteria}.compact })
|
@@ -219,9 +188,38 @@ class GoogleSheets
|
|
219
188
|
true
|
220
189
|
end
|
221
190
|
|
222
|
-
def
|
223
|
-
|
224
|
-
|
191
|
+
def sheet_id(obj)
|
192
|
+
case obj
|
193
|
+
when /^#(\d+)(?:!?|$)/ then sheets[$1.to_i - 1].sheet_id
|
194
|
+
when Integer then obj
|
195
|
+
else sheets.find {|item| item.title == obj}&.sheet_id
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
def sheet_list
|
200
|
+
sheets.map do |item|
|
201
|
+
{
|
202
|
+
id: item.sheet_id,
|
203
|
+
name: item.title,
|
204
|
+
color: rgb2hex(item.tab_color),
|
205
|
+
}.compact
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def sheet_rename(curr, name=nil)
|
210
|
+
shid = sheet_id(curr)
|
211
|
+
name ||= yield(sheet_name(shid)) if block_given?
|
212
|
+
|
213
|
+
reqs = []
|
214
|
+
reqs.push(update_sheet_properties: {
|
215
|
+
properties: {
|
216
|
+
sheet_id: shid,
|
217
|
+
title: name,
|
218
|
+
},
|
219
|
+
fields: "title",
|
220
|
+
})
|
221
|
+
resp = api.batch_update_spreadsheet(@ssid, { requests: reqs }, {})
|
222
|
+
true
|
225
223
|
end
|
226
224
|
|
227
225
|
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.1
|
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
|