sheets_v4 0.7.0 → 0.8.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: b3ed35f7562643f623e68d6ad41c497f1d92ea7b2d77f4b6f0d5e02586109897
4
- data.tar.gz: 6687dfc41d70870694a2085e749d803f7062de8d2486866e4e44ea54b1eec95f
3
+ metadata.gz: aaee6f486ac124cdefd974acfe3f18357ade8e9f90655a46e746ebfad53a391b
4
+ data.tar.gz: 0f3c1e513b45a841052be82817e5bcf157aba492282999f401bb069e048e2263
5
5
  SHA512:
6
- metadata.gz: 00334f58b9080916f1239671e106292742a00bbd931582577ae8a0664c25ea83f1ecaf5154996a0f28deffe9e8aaf58e4963dd94160095853d7d3454ef9e1b82
7
- data.tar.gz: a89714057c1aa145ce2b5eaa5a05776b8593c76d6e944b1b2b868b1ddd16a4247bf05ac13b218b74addb0204a3644cb6657e30e2331e725ca68467359cfd66a9
6
+ metadata.gz: c3762e42b88065e6bc76e5e749d629dc02073c2584053a9c979fd8b46196e70e155c2f06d87a768b511a93b30d38d09c5da6592ef875a9fb70cb7bd97b67ed7a
7
+ data.tar.gz: 64bed7345bcc3ee05d204b47770b297e8a53d05cc1deb6611bd114197cb46690df2683549e772b7b9453fbf158eba492efc05faf93e966047f57055e9d203d87
data/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@ Changes for each release are listed in this file.
4
4
 
5
5
  This project adheres to [Semantic Versioning](https://semver.org/) for its releases.
6
6
 
7
+ ## v0.8.0 (2023-10-15)
8
+
9
+ [Full Changelog](https://github.com/main-branch/sheets_v4/compare/v0.7.0..v0.8.0)
10
+
11
+ Changes since v0.7.0:
12
+
13
+ * d8f695c Add extensions to Google::Apis::SheetsV4 classes (#26)
14
+ * ed2dc0e Show the cop names on Rubocop offenses when Rubocop is run from Rake (#25)
15
+ * c5bfcc1 Group the SheetsV4 methods in the Yard Docs to make them easier to find (#24)
16
+
7
17
  ## v0.7.0 (2023-10-08)
8
18
 
9
19
  [Full Changelog](https://github.com/main-branch/sheets_v4/compare/v0.6.0..v0.7.0)
data/README.md CHANGED
@@ -25,6 +25,10 @@ Unofficial helpers for the Google Sheets V4 API
25
25
  * [Method 2: constructing requests using hashes](#method-2-constructing-requests-using-hashes)
26
26
  * [Which method should be used?](#which-method-should-be-used)
27
27
  * [Validating requests](#validating-requests)
28
+ * [Google Extensions](#google-extensions)
29
+ * [SheetsService Extensions](#sheetsservice-extensions)
30
+ * [Spreadsheet Extensions](#spreadsheet-extensions)
31
+ * [Sheet Extensions](#sheet-extensions)
28
32
  * [Working with dates and times](#working-with-dates-and-times)
29
33
  * [Colors](#colors)
30
34
  * [Development](#development)
@@ -274,6 +278,36 @@ request:
274
278
  SheetsV4.validate_api_object(schema: 'batch_update_spreadsheet_request', object: requests)
275
279
  ```
276
280
 
281
+ ### Google Extensions
282
+
283
+ The `SheetsV4::GoogleExtensions` module provides extensions to the `Google::Apis::SheetsV4`
284
+ classes to simplify use of the SheetsV4 API.
285
+
286
+ These extensions are not loaded by default and are not required to use other parts
287
+ of this Gem. To enable these extension, you must:
288
+
289
+ ```Ruby
290
+ require 'sheets_v4/google_extensions'
291
+ ```
292
+
293
+ #### SheetsService Extensions
294
+
295
+ Functionality is added to `get_spreadsheet` to set the `sheets_service` attribute on
296
+ the returned spreadsheet and set the `sheets_service` and `spreadsheet` attributes
297
+ on the sheets contained in the spreadsheet.
298
+
299
+ This can simplify complex spreadsheet updates because you won't have to pass a
300
+ sheets_service, spreadsheet, and sheet objects separately.
301
+
302
+ #### Spreadsheet Extensions
303
+
304
+ The `sheets_service` attribute is added and is set by `SheetsService#get_spreadsheet`.
305
+
306
+ #### Sheet Extensions
307
+
308
+ The `sheets_service` and `spreadsheet` attributes are added. Both are set when the
309
+ sheet's spreadsheet is loaded by `SheetsService#get_spreadsheet`.
310
+
277
311
  ### Working with dates and times
278
312
 
279
313
  Google Sheets, similar to other spreadsheet programs, stores dates and date-time
data/Rakefile CHANGED
@@ -50,6 +50,9 @@ require 'rubocop/rake_task'
50
50
 
51
51
  RuboCop::RakeTask.new do |t|
52
52
  t.options = %w[
53
+ --display-cop-names
54
+ --display-style-guide
55
+ --extra-details
53
56
  --format progress
54
57
  --format json --out rubocop-report.json
55
58
  ]
@@ -0,0 +1,32 @@
1
+ # Copyright (c) 2022 Yahoo
2
+ # frozen_string_literal: true
3
+
4
+ require 'google/apis/sheets_v4'
5
+ require 'googleauth'
6
+
7
+ module SheetsV4
8
+ module GoogleExtensions
9
+ # The SheetsService class implements handling credentials on top of the
10
+ # Google::Apis::SheetsV4::SheetsService class.
11
+ #
12
+ # @api public
13
+ #
14
+ module Sheet
15
+ # The sheets_service object used to create this sheet
16
+ #
17
+ # @example
18
+ # sheets_service = sheet.sheets_service
19
+ #
20
+ # @return [Google::Apis::SheetsV4::SheetsService]
21
+ attr_reader :sheets_service
22
+
23
+ # The spreadsheet object that contains this sheet
24
+ #
25
+ # @example
26
+ # spreadsheet = sheet.spreadsheet
27
+ #
28
+ # @return [Google::Apis::SheetsV4::Spreadsheet]
29
+ attr_reader :spreadsheet
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,99 @@
1
+ # Copyright (c) 2022 Yahoo
2
+ # frozen_string_literal: true
3
+
4
+ module SheetsV4
5
+ module GoogleExtensions
6
+ # This module extends the `Google::Apis::SheetsV4::SheetsService` class to add
7
+ # attributes to the `Google::Apis::SheetsV4::Spreadsheet` and `Google::Apis::SheetsV4::Sheet`
8
+ # classes that reference the `SheetsService` instance used to retrieve them.
9
+ #
10
+ # Similarly, an attribute is added to the `Google::Apis::SheetsV4::Sheet` class
11
+ # that references the `Google::Apis::SheetsV4::Spreadsheet` instance that contains it.
12
+ #
13
+ # This allows getting the `SheetsService` object from a spreadsheet or sheet object,
14
+ # making it unnecessary to pass the `SheetsService` object around with the spreadsheet
15
+ # and its sheets.
16
+ #
17
+ # @example
18
+ # require 'sheets_v4/google_extensions'
19
+ # sheets_service = SheetsV4::SheetsService.new
20
+ # spreadsheet = sheets_service.get_spreadsheet('1nT_q0TrQzC3dLZXuI3K9V5P3mArBVZpVd_vRsOpvcyk')
21
+ #
22
+ # spreadsheet.sheets_service == sheets_service # => true
23
+ # spreadsheet.sheets.each do |sheet|
24
+ # sheet.sheets_service == sheets_service # => true
25
+ # sheet.spreadsheet == spreadsheet # => true
26
+ # end
27
+ #
28
+ # @api public
29
+ #
30
+ module SheetsService
31
+ # Replace the prepending class's `get_spreadsheet` implementation
32
+ #
33
+ # When this module is prepended to a class, class's `get_spreadsheet` method
34
+ # is replaced wity `new_get_spreadsheet` method from this module. The class's
35
+ # original `get_spreadsheet` method is renamed to `original_get_spreadsheet`.
36
+ #
37
+ # @example
38
+ # Google::Apis::SheetsV4::SheetsService.prepend(
39
+ # SheetsV4::GoogleExtensions::SheetsService
40
+ # )
41
+ #
42
+ # @return [void]
43
+ #
44
+ # @private
45
+ #
46
+ def self.prepended(prepended_to_class)
47
+ prepended_to_class.send(:alias_method, :original_get_spreadsheet, :get_spreadsheet)
48
+ prepended_to_class.send(:remove_method, :get_spreadsheet)
49
+ prepended_to_class.send(:alias_method, :get_spreadsheet, :new_get_spreadsheet)
50
+ end
51
+
52
+ # @!method get_spreadsheet(spreadsheet_id, include_grid_data, ranges, fields, quota_user, options, &block)
53
+ #
54
+ # @api public
55
+ #
56
+ # Gets an existing spreadsheet
57
+ #
58
+ # Creates a spreadsheet object by calling the original
59
+ # Google::Apis::SheetsV4::SheetsService#get_spreadsheet method and then does
60
+ # the following:
61
+ #
62
+ # * Sets the `sheets_service` attribute for the returned spreadsheet.
63
+ # * Sets the `sheets_service` and `spreadsheet` attributes all the sheets contained in the spreadsheet.
64
+ #
65
+ # See the documentation for Google::Apis::SheetsV4::SheetsService#get_spreadsheet for
66
+ # details on the parameters and return value.
67
+ #
68
+ # @example Get a spreadsheet object and output new attributes:
69
+ # require 'sheets_v4'
70
+ # require 'sheets_v4/google_extensions'
71
+ #
72
+ # sheets_service = SheetsV4::SheetsService.new
73
+ # spreadsheet_id = '1nT_q0TrQzC3dLZXuI3K9V5P3mArBVZpVd_vRsOpvcyk'
74
+ #
75
+ # spreadsheet = sheets_service.get_spreadsheet(spreadsheet_id)
76
+ #
77
+ # @return [Google::Apis::SheetsV4::Spreadsheet] the spreadsheet whose ID is `spreadsheet_id`
78
+
79
+ # Replaces the `get_spreadsheet` method implementation in the prepended class
80
+ #
81
+ # @example
82
+ # spreadsheet = sheets_service.new_get_spreadsheet(spreadsheet_id)
83
+ #
84
+ # @private
85
+ #
86
+ # @return [Google::Apis::SheetsV4::Spreadsheet]
87
+ #
88
+ def new_get_spreadsheet(...)
89
+ original_get_spreadsheet(...)&.tap do |spreadsheet|
90
+ spreadsheet.instance_variable_set(:@sheets_service, self)
91
+ spreadsheet.sheets.each do |sheet|
92
+ sheet.instance_variable_set(:@sheets_service, self)
93
+ sheet.instance_variable_set(:@spreadsheet, spreadsheet)
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,24 @@
1
+ # Copyright (c) 2022 Yahoo
2
+ # frozen_string_literal: true
3
+
4
+ require 'google/apis/sheets_v4'
5
+ require 'googleauth'
6
+
7
+ module SheetsV4
8
+ module GoogleExtensions
9
+ # The SheetsService class implements handling credentials on top of the
10
+ # Google::Apis::SheetsV4::SheetsService class.
11
+ #
12
+ # @api public
13
+ #
14
+ module Spreadsheet
15
+ # The sheets_service object used to create this spreadsheet
16
+ #
17
+ # @example
18
+ # sheets_service = spreadsheet.sheets_service
19
+ #
20
+ # @return [Google::Apis::SheetsV4::SheetsService]
21
+ attr_reader :sheets_service
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SheetsV4
4
+ # The Google extensions are additions directly to Google::Apis::SheetsV4 classes
5
+ #
6
+ # These additions are optional and provide convenience methods and attributes
7
+ # that simplify use of the Google Sheets API.
8
+ #
9
+ # To use these extensions, require the `sheets_v4/google_extensions` file.
10
+ #
11
+ # @example
12
+ # require 'sheets_v4/google_extensions'
13
+ #
14
+ module GoogleExtensions; end
15
+ end
16
+
17
+ require_relative 'google_extensions/sheets_service'
18
+ require_relative 'google_extensions/spreadsheet'
19
+ require_relative 'google_extensions/sheet'
20
+
21
+ # @private
22
+ module Google
23
+ module Apis
24
+ # Add SheetsV4 extensions to Google::Apis::SheetsV4 classes
25
+ module SheetsV4
26
+ # Add SheetsV4 extensions to Google::Apis::SheetsV4::SheetsService
27
+ class SheetsService
28
+ prepend ::SheetsV4::GoogleExtensions::SheetsService
29
+ end
30
+
31
+ # Add SheetsV4 extensions to Google::Apis::SheetsV4::Spreadsheet
32
+ class Spreadsheet
33
+ prepend ::SheetsV4::GoogleExtensions::Spreadsheet
34
+ end
35
+
36
+ # Add SheetsV4 extensions to Google::Apis::SheetsV4::Sheet
37
+ class Sheet
38
+ prepend ::SheetsV4::GoogleExtensions::Sheet
39
+ end
40
+ end
41
+ end
42
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module SheetsV4
4
4
  # The version of this gem
5
- VERSION = '0.7.0'
5
+ VERSION = '0.8.0'
6
6
  end
data/lib/sheets_v4.rb CHANGED
@@ -57,6 +57,8 @@ module SheetsV4
57
57
  end
58
58
  end
59
59
 
60
+ # @!group Validation
61
+
60
62
  # Validate the object using the named JSON schema
61
63
  #
62
64
  # The JSON schemas are loaded from the Google Disocvery API. The schemas names are
@@ -90,6 +92,8 @@ module SheetsV4
90
92
  SheetsV4::ApiObjectValidation::LoadSchemas.new(logger:).call.keys.sort
91
93
  end
92
94
 
95
+ # @!group Colors
96
+
93
97
  # Given the name of the color, return a Google Sheets API color object
94
98
  #
95
99
  # Available color names are listed using `SheetsV4.color_names`.
@@ -117,6 +121,8 @@ module SheetsV4
117
121
  #
118
122
  def color_names = SheetsV4::Color::COLORS.keys
119
123
 
124
+ # @!group Date and DateTime Conversions
125
+
120
126
  # @!attribute [rw] default_spreadsheet_tz
121
127
  #
122
128
  # Set the default time zone for date and time conversions
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sheets_v4
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Couball
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-09 00:00:00.000000000 Z
11
+ date: 2023-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler-audit
@@ -268,6 +268,10 @@ files:
268
268
  - lib/sheets_v4/color.rb
269
269
  - lib/sheets_v4/convert_dates_and_times.rb
270
270
  - lib/sheets_v4/create_credential.rb
271
+ - lib/sheets_v4/google_extensions.rb
272
+ - lib/sheets_v4/google_extensions/sheet.rb
273
+ - lib/sheets_v4/google_extensions/sheets_service.rb
274
+ - lib/sheets_v4/google_extensions/spreadsheet.rb
271
275
  - lib/sheets_v4/validate_api_objects.rb
272
276
  - lib/sheets_v4/validate_api_objects/validate_api_object.rb
273
277
  - lib/sheets_v4/version.rb