undrive_google 1.1.1 → 1.1.2

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.
data/README.md CHANGED
@@ -1,4 +1,52 @@
1
- # UndriveGoogle
1
+ | 📍 NOTE |
2
+ |-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
3
+ | RubyGems (the [GitHub org][rubygems-org], not the website) [suffered][draper-security] a [hostile takeover][ellen-takeover] in September 2025. |
4
+ | Ultimately [4 maintainers][simi-removed] were [hard removed][martin-removed] and a reason has been given for only 1 of those, while 2 others resigned in protest. |
5
+ | It is a [complicated story][draper-takeover] which is difficult to [parse quickly][draper-lies]. |
6
+ | I'm adding notes like this to gems because I [don't condone theft][draper-theft] of repositories or gems from their rightful owners. |
7
+ | If a similar theft happened with my repos/gems, I'd hope some would stand up for me. |
8
+ | Disenfranchised former-maintainers have started [gem.coop][gem-coop]. |
9
+ | Once available I will publish there exclusively; unless RubyCentral makes amends with the community. |
10
+ | The ["Technology for Humans: Joel Draper"][reinteractive-podcast] podcast episode by [reinteractive][reinteractive] is the most cogent summary I'm aware of. |
11
+ | See [here][gem-naming], [here][gem-coop] and [here][martin-ann] for more info on what comes next. |
12
+ | What I'm doing: A (WIP) proposal for [bundler/gem scopes][gem-scopes], and a (WIP) proposal for a federated [gem server][gem-server]. |
13
+
14
+ [rubygems-org]: https://github.com/rubygems/
15
+ [draper-security]: https://joel.drapper.me/p/ruby-central-security-measures/
16
+ [draper-takeover]: https://joel.drapper.me/p/ruby-central-takeover/
17
+ [ellen-takeover]: https://pup-e.com/blog/goodbye-rubygems/
18
+ [simi-removed]: https://www.reddit.com/r/ruby/s/gOk42POCaV
19
+ [martin-removed]: https://bsky.app/profile/martinemde.com/post/3m3occezxxs2q
20
+ [draper-lies]: https://joel.drapper.me/p/ruby-central-fact-check/
21
+ [draper-theft]: https://joel.drapper.me/p/ruby-central/
22
+ [reinteractive]: https://reinteractive.com/ruby-on-rails
23
+ [gem-coop]: https://gem.coop
24
+ [gem-naming]: https://github.com/gem-coop/gem.coop/issues/12
25
+ [martin-ann]: https://martinemde.com/2025/10/05/announcing-gem-coop.html
26
+ [gem-scopes]: https://github.com/galtzo-floss/bundle-namespace
27
+ [gem-server]: https://github.com/galtzo-floss/gem-server
28
+ [reinteractive-podcast]: https://youtu.be/_H4qbtC5qzU?si=BvuBU90R2wAqD2E6
29
+
30
+ [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-i]][🖼️galtzo-discord] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang]
31
+
32
+ [🖼️galtzo-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
33
+ [🖼️galtzo-discord]: https://discord.gg/3qme4XHNKN
34
+ [🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg
35
+ [🖼️ruby-lang]: https://www.ruby-lang.org/
36
+
37
+ # 🏴‍☠️ UndriveGoogle
38
+
39
+ [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Supported][🚎6-s-wfi]][🚎6-s-wf] [![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
40
+
41
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord].
42
+
43
+ ---
44
+
45
+ `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
46
+
47
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
48
+
49
+ ## 🌻 Synopsis
2
50
 
3
51
  Toolkit for:
4
52
  1. Liberating variously formatted files from your Google Drive
@@ -14,72 +62,7 @@ If yes, DO NOT use this gem. Instead follow [these instructions](https://support
14
62
  OTOH, if you want to "own", host, track, etc your 'own' files
15
63
  (e.g. your resume), DO use this gem.
16
64
 
17
- ## NOTE: Export epub & Unzip html
18
-
19
- There is a bug (missing feature) in `google_drive` gem preventing export of epub. You can use this patched branch:
20
-
21
- Create a Gemfile:
22
- ```ruby
23
- source "https://rubygems.org"
24
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
25
- gem "google_drive", github: "pboling/google-drive-ruby", branch: "pboling-epub-mimetype"
26
- ```
27
-
28
- Please upvote this PR [#427](https://github.com/gimite/google-drive-ruby/pull/427)!
29
-
30
- Separately, the `rubyzip` maintainers are now working on v3, and this gem utilizes that syntax. But it hasn't been released yet.
31
- Therefore, if you need to unzip to HTML add another line to the `Gemfile` from above:
32
- ```ruby
33
- gem "rubyzip", github: "rubyzip/rubyzip", branch: "master"
34
- ```
35
-
36
- When liberating your files, ensure the script will use the Gemfile if it isn't in the same directory where you are running the `undrive_google` command:
37
- ```shell
38
- BUNDLE_GEMFILE=path/to/Gemfile bundle update
39
- BUNDLE_GEMFILE=path/to/Gemfile bundle exec undrive_google -c path/to/config
40
- ```
41
- NOTE: If the Gemfile and the config are in the same, current, directory, you can simply run:
42
- ```shell
43
- bundle exec undrive_google
44
- ```
45
-
46
- My complete `Gemfile` looks like this:
47
- ```ruby
48
- # frozen_string_literal: true
49
-
50
- source "https://rubygems.org"
51
-
52
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
53
- git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" }
54
-
55
- gem "undrive_google", "~> 1.1"
56
-
57
- # See: https://github.com/gimite/google-drive-ruby/pull/427
58
- gem "google_drive", github: "pboling/google-drive-ruby", branch: "pboling-epub-mimetype"
59
-
60
- # See: https://github.com/rubyzip/rubyzip#updating-to-version-30
61
- gem "rubyzip", github: "rubyzip/rubyzip", branch: "master"
62
- ```
63
-
64
- My `undrive_google.yml` config file looks like this (sanitized a bit):
65
- ```yaml
66
- file_id: "the-key-to-my-google-drive-file(find-in-the-url)"
67
- key_file: serviceid-1234567890.json
68
- dir: /my/path/to/my/cv
69
- rename_html: resume.html
70
- rename_pattern:
71
- - " "
72
- - "_"
73
- extensions: zip
74
- keep_zip: true
75
- unzip: true
76
- verbose: true
77
- sweep: true
78
- ```
79
-
80
- The liberated files get published at [https://railsbling.com/cv](https://railsbling.com/cv).
81
-
82
- ## Story Time
65
+ ### Story Time
83
66
 
84
67
  Imagine Google Drive is a 🐭
85
68
  Imagine your file (e.g. resume) is a 🍪
@@ -108,36 +91,118 @@ Will save at least 15 minutes each loop.
108
91
  Note that it doesn't have to be a resume.
109
92
  There are likely other use cases that apply.
110
93
 
111
- ## Installation
94
+ ## 💡 Info you can shake a stick at
95
+
96
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
97
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
98
+ | Works with JRuby | ![JRuby 9.1 Compat][💎jruby-9.1i] ![JRuby 9.2 Compat][💎jruby-9.2i] ![JRuby 9.3 Compat][💎jruby-9.3i] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
99
+ | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][💎truby-22.3i] ![Truffle Ruby 23.0 Compat][💎truby-23.0i] <br/> [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] |
100
+ | Works with MRI Ruby 3 | [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
101
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
102
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
103
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
104
+ | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![Compatible with Apache Software Projects: Verified by SkyWalking Eyes][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
105
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
106
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
107
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
108
+
109
+ ### Compatibility
110
+
111
+ Compatible with MRI Ruby 3.1+, and concordant releases of JRuby, and TruffleRuby.
112
+
113
+ | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
114
+ |------------------------------------------------|--------------------------------------------------------|
115
+ | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
116
+
117
+ ### Federated DVCS
118
+
119
+ <details>
120
+ <summary>Find this repo on federated forges (Coming soon!)</summary>
121
+
122
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
123
+ |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
124
+ | 🧪 [galtzo-floss/undrive_google on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
125
+ | 🧊 [galtzo-floss/undrive_google on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
126
+ | 🐙 [galtzo-floss/undrive_google on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
127
+ | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
128
+
129
+ </details>
130
+
131
+ [gh-discussions]: https://github.com/galtzo-floss/undrive_google/discussions
132
+
133
+ ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/undrive_google)](https://tidelift.com/subscription/pkg/rubygems-undrive_google?utm_source=rubygems-undrive_google&utm_medium=referral&utm_campaign=readme)
134
+
135
+ Available as part of the Tidelift Subscription.
136
+
137
+ <details>
138
+ <summary>Need enterprise-level guarantees?</summary>
139
+
140
+ The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
141
+
142
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
143
+
144
+ - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
145
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
146
+ - 💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
147
+
148
+ Alternatively:
149
+
150
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
151
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
152
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
153
+
154
+ </details>
155
+
156
+ ## ✨ Installation
112
157
 
113
158
  Install the gem and add to the application's Gemfile by executing:
114
159
 
115
- $ bundle add undrive_google
160
+ ```console
161
+ bundle add undrive_google
162
+ ```
116
163
 
117
164
  If bundler is not being used to manage dependencies, install the gem by executing:
118
165
 
119
- $ gem install undrive_google
166
+ ```console
167
+ gem install undrive_google
168
+ ```
120
169
 
121
- ## Usage
170
+ ### 🔒 Secure Installation
122
171
 
123
- Revisiting the original story...
172
+ <details>
173
+ <summary>For Medium or High Security Installations</summary>
124
174
 
125
- 1. Give 🐭 your 🍪 for "safe-keeping"
126
- 2. Recognizing this SPoF, you ask 🐭 to give back a 🍪 copy
127
- 3. Run:
128
- ```shell
129
- undrive_google
130
- ```
131
- 4. Upload 🍪 to your website (you're on your own for this part)
132
- 5. Finally Finished!
133
- 6. Find mistakes 😭
134
- 7. Bake a new 🍪
135
- 8. GOTO 1
175
+ This gem is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
176
+ [stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
177
+ by following the instructions below.
178
+
179
+ Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
180
+
181
+ ```console
182
+ gem cert --add <(curl -Ls https://raw.github.com/galtzo-floss/certs/main/pboling.pem)
183
+ ```
184
+
185
+ You only need to do that once. Then proceed to install with:
136
186
 
137
- In order for the fantasy above to be realized,
138
- you must to a bit of initial configuration, but you already knew that.
187
+ ```console
188
+ gem install undrive_google -P HighSecurity
189
+ ```
190
+
191
+ The `HighSecurity` trust profile will verify signed gems, and not allow the installation of unsigned dependencies.
192
+
193
+ If you want to up your security game full-time:
194
+
195
+ ```console
196
+ bundle config set --global trust-policy MediumSecurity
197
+ ```
198
+
199
+ `MediumSecurity` instead of `HighSecurity` is necessary if not all the gems you use are signed.
139
200
 
140
- ## Configuration
201
+ NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
202
+
203
+ </details>
204
+
205
+ ## ⚙️ Configuration
141
206
 
142
207
  You'll probably want to follow [these (outdated) steps](https://github.com/gimite/google-drive-ruby/blob/master/doc/authorization.md#on-behalf-of-no-existing-users-service-account)
143
208
  to create a service account.
@@ -218,23 +283,441 @@ extensions:
218
283
  title: 'My Cool HTML'
219
284
  ```
220
285
 
221
- ## Development
286
+ ## 🔧 Basic Usage
222
287
 
223
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
288
+ ### Example: Export epub & Unzip html
224
289
 
225
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
290
+ NOTE: There is a bug (missing feature) in `google_drive` gem preventing export of `epub` format. You can use my patched branch if you need `epub`:
226
291
 
227
- ## Contributing
292
+ Create a Gemfile:
293
+ ```ruby
294
+ source "https://gem.coop"
228
295
 
229
- Bug reports are welcome on Source Hut at [https://todo.sr.ht/~galtzo/undrive_google](https://todo.sr.ht/~galtzo/undrive_google).
230
- Patches are welcome on Source Hut at [https://lists.sr.ht/~galtzo/undrive_google-devel](https://lists.sr.ht/~galtzo/undrive_google-devel)
231
- This project is intended to be a safe, welcoming space for collaboration,
232
- and contributors are expected to adhere to the [code of conduct](https://git.sr.ht/~galtzo/undrive_google/tree/main/item/CODE_OF_CONDUCT.md).
296
+ gem "google_drive", github: "pboling/google-drive-ruby", branch: "pboling-epub-mimetype"
297
+ ```
298
+
299
+ Please upvote this PR [#427](https://github.com/gimite/google-drive-ruby/pull/427)!
300
+
301
+ When liberating your files, ensure the script will use the Gemfile if it isn't in the same directory where you are running the `undrive_google` command:
302
+ ```shell
303
+ BUNDLE_GEMFILE=path/to/Gemfile bundle update
304
+ BUNDLE_GEMFILE=path/to/Gemfile bundle exec undrive_google -c path/to/config
305
+ ```
306
+ NOTE: If the Gemfile and the config are in the same, current, directory, you can simply run:
307
+ ```shell
308
+ bundle exec undrive_google
309
+ ```
310
+
311
+ My complete `Gemfile` looks like this:
312
+ ```ruby
313
+ # frozen_string_literal: true
314
+
315
+ source "https://gem.coop"
316
+
317
+ gem "undrive_google", "~> 1.1"
318
+
319
+ # See: https://github.com/gimite/google-drive-ruby/pull/427
320
+ gem "google_drive", github: "pboling/google-drive-ruby", branch: "pboling-epub-mimetype"
321
+ ```
322
+
323
+ My `undrive_google.yml` config file looks like this (sanitized a bit):
324
+ ```yaml
325
+ file_id: "the-key-to-my-google-drive-file(find-in-the-url)"
326
+ key_file: serviceid-1234567890.json
327
+ dir: /my/path/to/my/cv
328
+ rename_html: resume.html
329
+ rename_pattern:
330
+ - " "
331
+ - "_"
332
+ extensions: zip
333
+ keep_zip: true
334
+ unzip: true
335
+ verbose: true
336
+ sweep: true
337
+ ```
338
+
339
+ The liberated files get published at [https://railsbling.com/cv](https://railsbling.com/cv).
340
+
341
+ ## 🦷 FLOSS Funding
342
+
343
+ While galtzo-floss tools are free software and will always be, the project would benefit immensely from some funding.
344
+ Raising a monthly budget of... "dollars" would make the project more sustainable.
345
+
346
+ We welcome both individual and corporate sponsors! We also offer a
347
+ wide array of funding channels to account for your preferences
348
+ (although currently [Open Collective][🖇osc] is our preferred funding platform).
349
+
350
+ **If you're working in a company that's making significant use of galtzo-floss tools we'd
351
+ appreciate it if you suggest to your company to become a galtzo-floss sponsor.**
233
352
 
234
- ## License
353
+ You can support the development of galtzo-floss tools via
354
+ [GitHub Sponsors][🖇sponsor],
355
+ [Liberapay][⛳liberapay],
356
+ [PayPal][🖇paypal],
357
+ [Open Collective][🖇osc]
358
+ and [Tidelift][🏙️entsup-tidelift].
235
359
 
236
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
360
+ | 📍 NOTE |
361
+ |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
362
+ | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
237
363
 
238
- ## Code of Conduct
364
+ ### Open Collective for Individuals
365
+
366
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/galtzo-floss#backer)]
367
+
368
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
369
+
370
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
371
+ No backers yet. Be the first!
372
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
373
+
374
+ ### Open Collective for Organizations
375
+
376
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/galtzo-floss#sponsor)]
377
+
378
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
379
+
380
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
381
+ No sponsors yet. Be the first!
382
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
383
+
384
+ [kettle-readme-backers]: https://github.com/galtzo-floss/undrive_google/blob/main/exe/kettle-readme-backers
385
+
386
+ ### Another way to support open-source
387
+
388
+ > How wonderful it is that nobody need wait a single moment before starting to improve the world.<br/>
389
+ >—Anne Frank
390
+
391
+ I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions — totaling 79 hours of FLOSS coding over just the past seven days, a pretty regular week for me. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
392
+
393
+ If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
394
+
395
+ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
396
+
397
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
398
+
399
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
400
+
401
+ ## 🔐 Security
402
+
403
+ See [SECURITY.md][🔐security].
404
+
405
+ ## 🤝 Contributing
406
+
407
+ If you need some ideas of where to help, you could work on adding more code coverage,
408
+ or if it is already 💯 (see [below](#code-coverage)) check [reek](REEK), [issues][🤝gh-issues], or [PRs][🤝gh-pulls],
409
+ or use the gem and think about how it could be better.
410
+
411
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
412
+
413
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
414
+
415
+ ### 🚀 Release Instructions
416
+
417
+ See [CONTRIBUTING.md][🤝contributing].
418
+
419
+ ### Code Coverage
420
+
421
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
422
+
423
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
424
+
425
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
426
+
427
+ ### 🪇 Code of Conduct
428
+
429
+ Everyone interacting with this project's codebases, issue trackers,
430
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
431
+
432
+ ## 🌈 Contributors
433
+
434
+ [![Contributors][🖐contributors-img]][🖐contributors]
435
+
436
+ Made with [contributors-img][🖐contrib-rocks].
437
+
438
+ Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/undrive_google/-/graphs/main][🚎contributors-gl]
439
+
440
+ <details>
441
+ <summary>⭐️ Star History</summary>
442
+
443
+ <a href="https://star-history.com/#galtzo-floss/undrive_google&Date">
444
+ <picture>
445
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/undrive_google&type=Date&theme=dark" />
446
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/undrive_google&type=Date" />
447
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=galtzo-floss/undrive_google&type=Date" />
448
+ </picture>
449
+ </a>
450
+
451
+ </details>
452
+
453
+ ## 📌 Versioning
454
+
455
+ This Library adheres to [![Semantic Versioning 2.0.0][📌semver-img]][📌semver].
456
+ Violations of this scheme should be reported as bugs.
457
+ Specifically, if a minor or patch version is released that breaks backward compatibility,
458
+ a new version should be immediately released that restores compatibility.
459
+ Breaking changes to the public API will only be introduced with new major versions.
460
+
461
+ > dropping support for a platform is both obviously and objectively a breaking change <br/>
462
+ >—Jordan Harband ([@ljharb](https://github.com/ljharb), maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
463
+
464
+ I understand that policy doesn't work universally ("exceptions to every rule!"),
465
+ but it is the policy here.
466
+ As such, in many cases it is good to specify a dependency on this library using
467
+ the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
468
+
469
+ For example:
470
+
471
+ ```ruby
472
+ spec.add_dependency("undrive_google", "~> 1.0")
473
+ ```
239
474
 
240
- Everyone interacting in the UndriveGoogle project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://git.sr.ht/~galtzo/undrive_google/tree/main/item/CODE_OF_CONDUCT.md).
475
+ <details>
476
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
477
+
478
+ SemVer should, IMO, but doesn't explicitly, say that dropping support for specific Platforms
479
+ is a *breaking change* to an API.
480
+ It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
481
+
482
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
483
+ read this article from the creator of SemVer:
484
+
485
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
486
+
487
+ </details>
488
+
489
+ See [CHANGELOG.md][📌changelog] for a list of releases.
490
+
491
+ ## 📄 License
492
+
493
+ The gem is available as open source under the terms of
494
+ the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
495
+ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
496
+
497
+ ### © Copyright
498
+
499
+ <ul>
500
+ <li>
501
+ Copyright (c) 2022, 2025 Peter H. Boling, of
502
+ <a href="https://discord.gg/3qme4XHNKN">
503
+ Galtzo.com
504
+ <picture>
505
+ <img src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px-blank.svg" alt="Galtzo.com Logo (Wordless) by Aboling0, CC BY-SA 4.0" width="24">
506
+ </picture>
507
+ </a>, and undrive_google contributors.
508
+ </li>
509
+ </ul>
510
+
511
+ ## 🤑 A request for help
512
+
513
+ Maintainers have teeth and need to pay their dentists.
514
+ After getting laid off in an RIF in March and filled with many dozens of rejections,
515
+ I'm now spending ~60+ hours a week building open source tools.
516
+ I'm hoping to be able to pay for my kids' health insurance this month,
517
+ so if you value the work I am doing, I need your support.
518
+ Please consider sponsoring me or the project.
519
+
520
+ To join the community or get help 👇️ Join the Discord.
521
+
522
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
523
+
524
+ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
525
+
526
+ [![Sponsor galtzo-floss/undrive_google on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
527
+
528
+ ### Please give the project a star ⭐ ♥.
529
+
530
+ Thanks for RTFM. ☺️
531
+
532
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
533
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
534
+ [⛳liberapay]: https://liberapay.com/pboling/donate
535
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/galtzo-floss
536
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss
537
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/galtzo-floss
538
+ [🖇osc-backers]: https://opencollective.com/galtzo-floss#backer
539
+ [🖇osc-backers-i]: https://opencollective.com/galtzo-floss/backers/badge.svg?style=flat
540
+ [🖇osc-sponsors]: https://opencollective.com/galtzo-floss#sponsor
541
+ [🖇osc-sponsors-i]: https://opencollective.com/galtzo-floss/sponsors/badge.svg?style=flat
542
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/galtzo-floss?style=for-the-badge
543
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss?style=for-the-badge
544
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/galtzo-floss?style=for-the-badge
545
+ [🖇osc]: https://opencollective.com/galtzo-floss
546
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
547
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
548
+ [🖇sponsor]: https://github.com/sponsors/pboling
549
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
550
+ [🖇polar]: https://polar.sh/pboling
551
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
552
+ [🖇kofi]: https://ko-fi.com/O5O86SNP4
553
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
554
+ [🖇patreon]: https://patreon.com/galtzo
555
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
556
+ [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
557
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
558
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
559
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
560
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
561
+ [🖇floss-funding.dev]: https://floss-funding.dev
562
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
563
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
564
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
565
+ [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
566
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
567
+
568
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
569
+ [⛳️gem-namespace]: https://github.com/galtzo-floss/undrive_google
570
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-UndriveGoogle-3C2D2D.svg?style=square&logo=ruby&logoColor=white
571
+ [⛳️gem-name]: https://bestgems.org/gems/undrive_google
572
+ [⛳️name-img]: https://img.shields.io/badge/name-undrive__google-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
573
+ [⛳️tag-img]: https://img.shields.io/github/tag/galtzo-floss/undrive_google.svg
574
+ [⛳️tag]: http://github.com/galtzo-floss/undrive_google/releases
575
+ [🚂maint-blog]: http://www.railsbling.com/tags/undrive_google
576
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
577
+ [🚂maint-contact]: http://www.railsbling.com/contact
578
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
579
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
580
+ [💖🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-LinkedIn-0B66C2?style=flat&logo=newjapanprowrestling
581
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
582
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
583
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
584
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
585
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
586
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
587
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
588
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
589
+ [💖🌳linktree]: https://linktr.ee/galtzo
590
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
591
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
592
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
593
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
594
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
595
+ [💖🧊berg]: https://codeberg.org/pboling
596
+ [💖🐙hub]: https://github.org/pboling
597
+ [💖🛖hut]: https://sr.ht/~galtzo/
598
+ [💖🧪lab]: https://gitlab.com/pboling
599
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
600
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
601
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
602
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
603
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-undrive_google?utm_source=rubygems-undrive_google&utm_medium=referral&utm_campaign=readme
604
+ [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
605
+ [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
606
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
607
+ [🚂railsbling]: http://www.railsbling.com
608
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
609
+ [📜src-gl]: https://gitlab.com/galtzo-floss/undrive_google/
610
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
611
+ [📜src-cb]: https://codeberg.org/galtzo-floss/undrive_google
612
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
613
+ [📜src-gh]: https://github.com/galtzo-floss/undrive_google
614
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
615
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
616
+ [📜gl-wiki]: https://gitlab.com/galtzo-floss/undrive_google/-/wikis/home
617
+ [📜gh-wiki]: https://github.com/galtzo-floss/undrive_google/wiki
618
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
619
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
620
+ [👽dl-rank]: https://bestgems.org/gems/undrive_google
621
+ [👽dl-ranki]: https://img.shields.io/gem/rd/undrive_google.svg
622
+ [👽oss-help]: https://www.codetriage.com/galtzo-floss/undrive_google
623
+ [👽oss-helpi]: https://www.codetriage.com/galtzo-floss/undrive_google/badges/users.svg
624
+ [👽version]: https://bestgems.org/gems/undrive_google
625
+ [👽versioni]: https://img.shields.io/gem/v/undrive_google.svg
626
+ [🏀qlty-mnt]: https://qlty.sh/gh/galtzo-floss/projects/undrive_google
627
+ [🏀qlty-mnti]: https://qlty.sh/gh/galtzo-floss/projects/undrive_google/maintainability.svg
628
+ [🏀qlty-cov]: https://qlty.sh/gh/galtzo-floss/projects/undrive_google/metrics/code?sort=coverageRating
629
+ [🏀qlty-covi]: https://qlty.sh/gh/galtzo-floss/projects/undrive_google/coverage.svg
630
+ [🏀codecov]: https://codecov.io/gh/galtzo-floss/undrive_google
631
+ [🏀codecovi]: https://codecov.io/gh/galtzo-floss/undrive_google/graph/badge.svg
632
+ [🏀coveralls]: https://coveralls.io/github/galtzo-floss/undrive_google?branch=main
633
+ [🏀coveralls-img]: https://coveralls.io/repos/github/galtzo-floss/undrive_google/badge.svg?branch=main
634
+ [🖐codeQL]: https://github.com/galtzo-floss/undrive_google/security/code-scanning
635
+ [🖐codeQL-img]: https://github.com/galtzo-floss/undrive_google/actions/workflows/codeql-analysis.yml/badge.svg
636
+ [🚎2-cov-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/coverage.yml
637
+ [🚎2-cov-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/coverage.yml/badge.svg
638
+ [🚎3-hd-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/heads.yml
639
+ [🚎3-hd-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/heads.yml/badge.svg
640
+ [🚎4-lg-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/legacy.yml
641
+ [🚎4-lg-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/legacy.yml/badge.svg
642
+ [🚎5-st-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/style.yml
643
+ [🚎5-st-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/style.yml/badge.svg
644
+ [🚎6-s-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/supported.yml
645
+ [🚎6-s-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/supported.yml/badge.svg
646
+ [🚎8-ho-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/hoary.yml
647
+ [🚎8-ho-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/hoary.yml/badge.svg
648
+ [🚎9-t-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/truffle.yml
649
+ [🚎9-t-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/truffle.yml/badge.svg
650
+ [🚎10-j-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/jruby.yml
651
+ [🚎10-j-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/jruby.yml/badge.svg
652
+ [🚎11-c-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/current.yml
653
+ [🚎11-c-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/current.yml/badge.svg
654
+ [🚎12-crh-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/dep-heads.yml
655
+ [🚎12-crh-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/dep-heads.yml/badge.svg
656
+ [🚎13-🔒️-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/locked_deps.yml
657
+ [🚎13-🔒️-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/locked_deps.yml/badge.svg
658
+ [🚎14-🔓️-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/unlocked_deps.yml
659
+ [🚎14-🔓️-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/unlocked_deps.yml/badge.svg
660
+ [🚎15-🪪-wf]: https://github.com/galtzo-floss/undrive_google/actions/workflows/license-eye.yml
661
+ [🚎15-🪪-wfi]: https://github.com/galtzo-floss/undrive_google/actions/workflows/license-eye.yml/badge.svg
662
+ [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
663
+ [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
664
+ [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
665
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
666
+ [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
667
+ [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=pink
668
+ [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=pink
669
+ [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
670
+ [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
671
+ [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
672
+ [💎jruby-9.1i]: https://img.shields.io/badge/JRuby-9.1_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=red
673
+ [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=red
674
+ [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=red
675
+ [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
676
+ [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
677
+ [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
678
+ [🤝gh-issues]: https://github.com/galtzo-floss/undrive_google/issues
679
+ [🤝gh-pulls]: https://github.com/galtzo-floss/undrive_google/pulls
680
+ [🤝gl-issues]: https://gitlab.com/galtzo-floss/undrive_google/-/issues
681
+ [🤝gl-pulls]: https://gitlab.com/galtzo-floss/undrive_google/-/merge_requests
682
+ [🤝cb-issues]: https://codeberg.org/galtzo-floss/undrive_google/issues
683
+ [🤝cb-pulls]: https://codeberg.org/galtzo-floss/undrive_google/pulls
684
+ [🤝cb-donate]: https://donate.codeberg.org/
685
+ [🤝contributing]: CONTRIBUTING.md
686
+ [🏀codecov-g]: https://codecov.io/gh/galtzo-floss/undrive_google/graphs/tree.svg
687
+ [🖐contrib-rocks]: https://contrib.rocks
688
+ [🖐contributors]: https://github.com/galtzo-floss/undrive_google/graphs/contributors
689
+ [🖐contributors-img]: https://contrib.rocks/image?repo=galtzo-floss/undrive_google
690
+ [🚎contributors-gl]: https://gitlab.com/galtzo-floss/undrive_google/-/graphs/main
691
+ [🪇conduct]: CODE_OF_CONDUCT.md
692
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
693
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
694
+ [📌semver]: https://semver.org/spec/v2.0.0.html
695
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
696
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
697
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
698
+ [📌changelog]: CHANGELOG.md
699
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
700
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
701
+ [📌gitmoji]:https://gitmoji.dev
702
+ [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
703
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
704
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.112-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
705
+ [🔐security]: SECURITY.md
706
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
707
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
708
+ [📄license]: LICENSE.txt
709
+ [📄license-ref]: https://opensource.org/licenses/MIT
710
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
711
+ [📄license-compat]: https://dev.to/galtzo/how-to-check-license-compatibility-41h0
712
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
713
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
714
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
715
+ [🚎yard-current]: http://rubydoc.info/gems/undrive_google
716
+ [🚎yard-head]: https://undrive-google.galtzo.com
717
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
718
+ [💎SHA_checksums]: https://gitlab.com/galtzo-floss/undrive_google/-/tree/main/checksums
719
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
720
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
721
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
722
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
723
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/