googlesheets 0.2.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d0fb6e33bdfbb0e0e82efa3be32d26166be4bf4199d894e0dd555b0c568a4f5
4
- data.tar.gz: fb113fecb311579662e9b2aa0d5cea4443c20218b0cb129741a757de242d1241
3
+ metadata.gz: 484ead7c7ddf83bd062e24d8edb28fb0da072cbbe348f598974c7dcc6fc81687
4
+ data.tar.gz: 224d0e6b86d115a4b9aff60faba79a174686f65f551dff9322bb8ff22d0445ce
5
5
  SHA512:
6
- metadata.gz: d30a91e91a3eaa552c0a84eb5f77e885d1da7fcdf6ee750f030e1b3b494a8f43a01cbc1838b8f9c4154558375b57ae985f531b37bfd4c0c1744598d7b3362c28
7
- data.tar.gz: c7143744964858819f57fc6105fb0dccd9b680b3f1c485264c3162931fd8a4455b5a0e3fc098eaa036a9ff5aff690bc3df023c40c8503cdb3d1300054046aab6
6
+ metadata.gz: 38d00ab0cd8ac505238f604542e0f56f814d397cdf8d606c0a64cba8bf022afcd58173cf5af5e23cbf38590b18c49bc849001c231c23b509aee8b384a62b4580
7
+ data.tar.gz: a34dc14942dd9433331221804a95f940104a58b08c2830e1a6866c046db9b35c9ec220c91fd9c26aedc8b98b54a96274d007f045f0434c3db10fcf804543f670
data/googlesheets.gemspec CHANGED
@@ -2,12 +2,14 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "googlesheets"
5
- s.version = "0.2.2"
5
+ s.version = `grep -m 1 '^\s*VERSION' lib/googlesheets.rb | head -1 | cut -f 2 -d '"'`
6
6
  s.author = "Steve Shreeve"
7
7
  s.email = "steve.shreeve@gmail.com"
8
- s.summary = "Ruby gem for Google Sheets"
8
+ s.summary = "Ruby library for Google Sheets"
9
9
  s.description = "This gem allows easy access to Google Sheets API V4."
10
10
  s.homepage = "https://github.com/shreeve/googlesheets"
11
11
  s.license = "MIT"
12
12
  s.files = `git ls-files`.split("\n") - %w[.gitignore]
13
+ s.executables = `cd bin && git ls-files .`.split("\n")
14
+ s.add_runtime_dependency "google-api-client", "~> 0.53.0"
13
15
  end
data/lib/googlesheets.rb CHANGED
@@ -2,6 +2,13 @@ require "google/apis/sheets_v4"
2
2
  require "googleauth"
3
3
  require "googleauth/stores/file_token_store"
4
4
 
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
+
5
12
  module Enumerable
6
13
  def first_result
7
14
  block_given? ? each {|item| result = (yield item) and return result} && nil : find {|item| item}
@@ -11,13 +18,16 @@ end
11
18
  # https://googleapis.dev/ruby/google-api-client/latest/Google/Apis/SheetsV4/Request.html
12
19
 
13
20
  class GoogleSheets
21
+ VERSION = "0.5.0"
22
+
14
23
  attr_accessor :api
15
24
 
16
25
  def initialize(ssid, **opts)
17
- @ssid = ssid =~ /^https?:/ ? ssid.split('/')[5] : ssid
26
+ @ssid = ssid =~ /^https?:/ ? ssid.split("/")[5] : ssid # spreadsheet id
27
+ @wsid = ssid[/(?<=#gid=)(\d+)$/] && $1.to_i # default worksheet id
18
28
 
19
- @json = opts[:credentials] || 'credentials.json'
20
- @yaml = opts[:token ] || 'token.yaml'
29
+ @json = opts[:credentials] || "credentials.json"
30
+ @yaml = opts[:token ] || "token.yaml"
21
31
 
22
32
  if opts[:debug] == true
23
33
  $stdout.sync = true
@@ -35,8 +45,8 @@ class GoogleSheets
35
45
  idno = Google::Auth::ClientId.from_file(@json)
36
46
  repo = Google::Auth::Stores::FileTokenStore.new(file: @yaml)
37
47
  auth = Google::Auth::UserAuthorizer.new(idno, Google::Apis::SheetsV4::AUTH_SPREADSHEETS, repo)
38
- oobs = 'urn:ietf:wg:oauth:2.0:oob'
39
- user = 'default'
48
+ oobs = "urn:ietf:wg:oauth:2.0:oob"
49
+ user = "default"
40
50
  info = auth.get_credentials(user) || begin
41
51
  href = auth.get_authorization_url(base_url: oobs)
42
52
  puts "Open the following URL and paste the code here:\n" + href
@@ -86,8 +96,8 @@ class GoogleSheets
86
96
  end
87
97
 
88
98
  def range(area)
89
- sh, rc = area.split('!', 2); rc, sh = sh, nil if sh.nil?
90
- as, ae = rc.split(':', 2); ae ||= as
99
+ sh, rc = area.split("!", 2); rc, sh = sh, nil if sh.nil?
100
+ as, ae = rc.split(":", 2); ae ||= as
91
101
  cs, rs = as.split(/(?=\d)/, 2); cs = biject(cs) - 1; rs = rs.to_i - 1
92
102
  ce, re = ae.split(/(?=\d)/, 2); ce = biject(ce) - 1; re = re.to_i - 1
93
103
  {
@@ -126,14 +136,30 @@ class GoogleSheets
126
136
  end
127
137
  end
128
138
 
129
- def sheet_name(obj)
130
- case obj
139
+ def sheet_name(obj=nil)
140
+ case obj ||= @wsid || "#1"
131
141
  when /^#(\d+)$/ then sheets[$1.to_i - 1].title
132
- when Integer then sheets.first_result {|item| item.title if item.sheet_id == obj}
142
+ when Integer then sheets.first_result {|item| item.title if item.sheet_id == obj }
143
+ when "", nil then sheets.first.title
133
144
  else obj
134
145
  end
135
146
  end
136
147
 
148
+ def resolve_area(area)
149
+ if area.blank?
150
+ wsid = sheet_name
151
+ elsif area =~ /!/
152
+ wsid = sheet_name($`)
153
+ rect = $'
154
+ elsif area =~ /:/ or area =~ /^[a-z]{1,3}\d+$/i
155
+ wsid = sheet_name
156
+ rect = area
157
+ else
158
+ wsid = sheet_name(area)
159
+ end
160
+ "#{wsid}!#{rect || 'A:ZZ'}"
161
+ end
162
+
137
163
  def sheet_rename(pick, name=nil)
138
164
  shid = sheet_id(pick)
139
165
  name ||= yield(sheet_name(shid)) if block_given?
@@ -144,7 +170,7 @@ class GoogleSheets
144
170
  sheet_id: shid,
145
171
  title: name,
146
172
  },
147
- fields: 'title',
173
+ fields: "title",
148
174
  })
149
175
  resp = api.batch_update_spreadsheet(@ssid, { requests: reqs }, {})
150
176
  true
@@ -157,13 +183,14 @@ class GoogleSheets
157
183
  sheet_id: sheet_id(pick),
158
184
  tab_color: hex2rgb(color),
159
185
  },
160
- fields: 'tab_color',
186
+ fields: "tab_color",
161
187
  })
162
188
  resp = api.batch_update_spreadsheet(@ssid, { requests: reqs }, {})
163
189
  true
164
190
  end
165
191
 
166
192
  def sheet_filter(area, want=nil)
193
+ area = resolve_area(area)
167
194
  range = range(area)
168
195
  criteria = filter_criteria(want) if want
169
196
  reqs = []
@@ -174,6 +201,7 @@ class GoogleSheets
174
201
  end
175
202
 
176
203
  def sheet_format(area, pattern)
204
+ area = resolve_area(area)
177
205
  reqs = []
178
206
  reqs.push(repeat_cell: {
179
207
  range: range(area),
@@ -185,22 +213,24 @@ class GoogleSheets
185
213
  },
186
214
  },
187
215
  },
188
- fields: 'user_entered_format.number_format',
216
+ fields: "user_entered_format.number_format",
189
217
  })
190
218
  resp = api.batch_update_spreadsheet(@ssid, { requests: reqs }, {})
191
219
  true
192
220
  end
193
221
 
194
222
  def sheet_clear(area)
223
+ area = resolve_area(area)
195
224
  api.clear_values(@ssid, area)
196
225
  end
197
226
 
198
- def sheet_read(area)
227
+ def sheet_read(area=nil)
228
+ area = resolve_area(area)
199
229
  api.get_spreadsheet_values(@ssid, area).values
200
230
  end
201
231
 
202
232
  def sheet_save(area, rows, log=false)
203
- area.sub!(/^(#\d+)(?=!)/) {|num| sheet_name(num)}
233
+ area = resolve_area(area)
204
234
  gasv = Google::Apis::SheetsV4::ValueRange.new(range: area, values: rows)
205
235
  done = api.update_spreadsheet_value(@ssid, area, gasv, value_input_option: "USER_ENTERED")
206
236
  puts "#{done.updated_cells} cells updated." if log
metadata CHANGED
@@ -1,22 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: googlesheets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Shreeve
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-16 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2023-03-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: google-api-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.53.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.53.0
13
27
  description: This gem allows easy access to Google Sheets API V4.
14
28
  email: steve.shreeve@gmail.com
15
29
  executables: []
16
30
  extensions: []
17
31
  extra_rdoc_files: []
18
32
  files:
19
- - ".ruby-version"
20
33
  - Gemfile
21
34
  - LICENSE
22
35
  - README.md
@@ -41,8 +54,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
54
  - !ruby/object:Gem::Version
42
55
  version: '0'
43
56
  requirements: []
44
- rubygems_version: 3.2.16
57
+ rubygems_version: 3.4.8
45
58
  signing_key:
46
59
  specification_version: 4
47
- summary: Ruby gem for Google Sheets
60
+ summary: Ruby library for Google Sheets
48
61
  test_files: []
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.6.5