lunchmoney 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.github/dependabot.yml +18 -0
- data/.github/workflows/build_and_publish_yard_docs.yml +47 -0
- data/.github/workflows/ci.yml +58 -0
- data/.github/workflows/dependabot-rbi-updater.yml +43 -0
- data/.github/workflows/publish_gem.yml +31 -0
- data/.gitignore +62 -0
- data/.rubocop.yml +45 -0
- data/.ruby-version +1 -0
- data/.toys/.toys.rb +10 -0
- data/.toys/ci.rb +22 -0
- data/.toys/rbi.rb +60 -0
- data/.toys/rubocop.rb +10 -0
- data/.toys/spoom.rb +15 -0
- data/.toys/typecheck.rb +5 -0
- data/.yardopts +2 -0
- data/Appraisals +22 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +174 -0
- data/LICENSE +21 -0
- data/README.md +57 -0
- data/bin/console +16 -0
- data/bin/rubocop +27 -0
- data/bin/setup +8 -0
- data/bin/spoom +27 -0
- data/bin/srb +27 -0
- data/bin/tapioca +27 -0
- data/bin/toys +27 -0
- data/bin/yard +27 -0
- data/lib/lunchmoney/api.rb +147 -0
- data/lib/lunchmoney/api_call.rb +109 -0
- data/lib/lunchmoney/assets/asset.rb +89 -0
- data/lib/lunchmoney/assets/asset_calls.rb +96 -0
- data/lib/lunchmoney/budget/budget.rb +74 -0
- data/lib/lunchmoney/budget/budget_calls.rb +82 -0
- data/lib/lunchmoney/budget/config.rb +38 -0
- data/lib/lunchmoney/budget/data.rb +42 -0
- data/lib/lunchmoney/categories/category/category.rb +52 -0
- data/lib/lunchmoney/categories/category/child_category.rb +42 -0
- data/lib/lunchmoney/categories/category_calls.rb +195 -0
- data/lib/lunchmoney/configuration.rb +26 -0
- data/lib/lunchmoney/crypto/crypto/crypto.rb +43 -0
- data/lib/lunchmoney/crypto/crypto/crypto_base.rb +65 -0
- data/lib/lunchmoney/crypto/crypto_calls.rb +49 -0
- data/lib/lunchmoney/data_object.rb +25 -0
- data/lib/lunchmoney/errors.rb +19 -0
- data/lib/lunchmoney/exceptions.rb +19 -0
- data/lib/lunchmoney/plaid_accounts/plaid_account.rb +73 -0
- data/lib/lunchmoney/plaid_accounts/plaid_account_calls.rb +38 -0
- data/lib/lunchmoney/recurring_expenses/recurring_expense/recurring_expense.rb +65 -0
- data/lib/lunchmoney/recurring_expenses/recurring_expense/recurring_expense_base.rb +29 -0
- data/lib/lunchmoney/recurring_expenses/recurring_expense_calls.rb +28 -0
- data/lib/lunchmoney/tags/tag/tag.rb +20 -0
- data/lib/lunchmoney/tags/tag/tag_base.rb +21 -0
- data/lib/lunchmoney/tags/tag_calls.rb +20 -0
- data/lib/lunchmoney/transactions/transaction/child_transaction.rb +31 -0
- data/lib/lunchmoney/transactions/transaction/split.rb +24 -0
- data/lib/lunchmoney/transactions/transaction/transaction.rb +156 -0
- data/lib/lunchmoney/transactions/transaction/transaction_base.rb +52 -0
- data/lib/lunchmoney/transactions/transaction/transaction_modification_base.rb +30 -0
- data/lib/lunchmoney/transactions/transaction/update_transaction.rb +43 -0
- data/lib/lunchmoney/transactions/transaction_calls.rb +218 -0
- data/lib/lunchmoney/user/user.rb +36 -0
- data/lib/lunchmoney/user/user_calls.rb +19 -0
- data/lib/lunchmoney/validators.rb +43 -0
- data/lib/lunchmoney/version.rb +7 -0
- data/lib/lunchmoney.rb +54 -0
- data/lunchmoney.gemspec +34 -0
- data/sorbet/config +5 -0
- data/sorbet/rbi/annotations/.gitattributes +1 -0
- data/sorbet/rbi/annotations/activesupport.rbi +410 -0
- data/sorbet/rbi/annotations/faraday.rbi +17 -0
- data/sorbet/rbi/annotations/mocha.rbi +34 -0
- data/sorbet/rbi/annotations/rainbow.rbi +269 -0
- data/sorbet/rbi/annotations/webmock.rbi +9 -0
- data/sorbet/rbi/dsl/.gitattributes +1 -0
- data/sorbet/rbi/dsl/active_support/callbacks.rbi +22 -0
- data/sorbet/rbi/gems/.gitattributes +1 -0
- data/sorbet/rbi/gems/activesupport@7.1.3.rbi +18004 -0
- data/sorbet/rbi/gems/addressable@2.8.6.rbi +1993 -0
- data/sorbet/rbi/gems/appraisal@2.5.0.rbi +621 -0
- data/sorbet/rbi/gems/ast@2.4.2.rbi +584 -0
- data/sorbet/rbi/gems/base64@0.2.0.rbi +508 -0
- data/sorbet/rbi/gems/bigdecimal@3.1.6.rbi +77 -0
- data/sorbet/rbi/gems/coderay@1.1.3.rbi +3426 -0
- data/sorbet/rbi/gems/concurrent-ruby@1.2.3.rbi +11590 -0
- data/sorbet/rbi/gems/connection_pool@2.4.1.rbi +8 -0
- data/sorbet/rbi/gems/crack@0.4.5.rbi +144 -0
- data/sorbet/rbi/gems/dotenv@2.8.1.rbi +234 -0
- data/sorbet/rbi/gems/drb@2.2.0.rbi +1346 -0
- data/sorbet/rbi/gems/erubi@1.12.0.rbi +145 -0
- data/sorbet/rbi/gems/faraday-net_http@3.1.0.rbi +146 -0
- data/sorbet/rbi/gems/faraday@2.9.0.rbi +2911 -0
- data/sorbet/rbi/gems/hashdiff@1.1.0.rbi +352 -0
- data/sorbet/rbi/gems/i18n@1.14.1.rbi +2325 -0
- data/sorbet/rbi/gems/json@2.7.1.rbi +1561 -0
- data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14237 -0
- data/sorbet/rbi/gems/method_source@1.0.0.rbi +272 -0
- data/sorbet/rbi/gems/minitest@5.21.2.rbi +2197 -0
- data/sorbet/rbi/gems/mocha@2.1.0.rbi +3934 -0
- data/sorbet/rbi/gems/mutex_m@0.2.0.rbi +93 -0
- data/sorbet/rbi/gems/net-http@0.4.1.rbi +4068 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +158 -0
- data/sorbet/rbi/gems/parallel@1.24.0.rbi +280 -0
- data/sorbet/rbi/gems/parser@3.3.0.5.rbi +5472 -0
- data/sorbet/rbi/gems/prettier_print@1.2.1.rbi +951 -0
- data/sorbet/rbi/gems/prism@0.19.0.rbi +29883 -0
- data/sorbet/rbi/gems/pry-sorbet@0.2.1.rbi +966 -0
- data/sorbet/rbi/gems/pry@0.14.2.rbi +10077 -0
- data/sorbet/rbi/gems/public_suffix@5.0.4.rbi +935 -0
- data/sorbet/rbi/gems/racc@1.7.3.rbi +161 -0
- data/sorbet/rbi/gems/rack@3.0.8.rbi +5183 -0
- data/sorbet/rbi/gems/rainbow@3.1.1.rbi +402 -0
- data/sorbet/rbi/gems/rake@13.1.0.rbi +3027 -0
- data/sorbet/rbi/gems/rbi@0.1.6.rbi +2922 -0
- data/sorbet/rbi/gems/regexp_parser@2.9.0.rbi +3771 -0
- data/sorbet/rbi/gems/rexml@3.2.6.rbi +4781 -0
- data/sorbet/rbi/gems/rubocop-ast@1.30.0.rbi +7117 -0
- data/sorbet/rbi/gems/rubocop-minitest@0.34.5.rbi +2576 -0
- data/sorbet/rbi/gems/rubocop-rails@2.23.1.rbi +9175 -0
- data/sorbet/rbi/gems/rubocop-shopify@2.14.0.rbi +8 -0
- data/sorbet/rbi/gems/rubocop-sorbet@0.7.6.rbi +1510 -0
- data/sorbet/rbi/gems/rubocop@1.60.1.rbi +57356 -0
- data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1317 -0
- data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +8 -0
- data/sorbet/rbi/gems/spoom@1.2.4.rbi +3777 -0
- data/sorbet/rbi/gems/syntax_tree@6.2.0.rbi +23136 -0
- data/sorbet/rbi/gems/tapioca@0.12.0.rbi +3506 -0
- data/sorbet/rbi/gems/thor@1.3.0.rbi +4312 -0
- data/sorbet/rbi/gems/toys-core@0.15.4.rbi +9462 -0
- data/sorbet/rbi/gems/toys@0.15.4.rbi +243 -0
- data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +5917 -0
- data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +65 -0
- data/sorbet/rbi/gems/uri@0.13.0.rbi +2327 -0
- data/sorbet/rbi/gems/vcr@6.2.0.rbi +3036 -0
- data/sorbet/rbi/gems/webmock@3.19.1.rbi +1768 -0
- data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +428 -0
- data/sorbet/rbi/gems/yard@0.9.34.rbi +18084 -0
- data/sorbet/shims/module.rbi +6 -0
- data/sorbet/tapioca/require.rb +10 -0
- metadata +228 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c0eee6d8599ca3bcc3937bff5208db6a4502029ed711940ffbe90e807c4b0bd1
|
4
|
+
data.tar.gz: e8f7d58fbf604cf59c60111963c063273f04b7bab3e7d3ddf1e0684213cab1d2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a6a0af1c49bac3eccbaaa802dc7c4d9c59122083e69ae19efdeda3bf322e3f5c290b1f207d4805cc4b9fcff62ae317fb2249cd2340ce3186fef0b930b9132a20
|
7
|
+
data.tar.gz: 971503cc33d3bec22fc0e643141d85d49ba5a5295fc85f2f7e3d37f40216c57368f05e394293a86184f6052696c9aed1efc58104b177c5614194b8b3a970dcd5
|
data/.DS_Store
ADDED
Binary file
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
3
|
+
# Please see the documentation for all configuration options:
|
4
|
+
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
5
|
+
|
6
|
+
version: 2
|
7
|
+
updates:
|
8
|
+
- package-ecosystem: bundler
|
9
|
+
directory: "/"
|
10
|
+
insecure-external-code-execution: allow
|
11
|
+
open-pull-requests-limit: 100
|
12
|
+
schedule:
|
13
|
+
interval: weekly
|
14
|
+
- package-ecosystem: github-actions
|
15
|
+
directory: "/"
|
16
|
+
open-pull-requests-limit: 100
|
17
|
+
schedule:
|
18
|
+
interval: weekly
|
@@ -0,0 +1,47 @@
|
|
1
|
+
name: Build and Publish Yard Docs
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
workflow_dispatch:
|
7
|
+
|
8
|
+
permissions:
|
9
|
+
contents: read
|
10
|
+
pages: write
|
11
|
+
id-token: write
|
12
|
+
|
13
|
+
concurrency:
|
14
|
+
group: "pages"
|
15
|
+
cancel-in-progress: true
|
16
|
+
|
17
|
+
jobs:
|
18
|
+
build:
|
19
|
+
name: Build and Publish Yard Docs
|
20
|
+
runs-on: ubuntu-latest
|
21
|
+
|
22
|
+
steps:
|
23
|
+
- uses: actions/checkout@v4
|
24
|
+
|
25
|
+
- name: Set up Ruby
|
26
|
+
uses: ruby/setup-ruby@v1.165.1
|
27
|
+
with:
|
28
|
+
ruby-version: 3.3.0
|
29
|
+
bundler-cache: true
|
30
|
+
|
31
|
+
- name: Install YARD
|
32
|
+
run: gem install yard yard-sorbet
|
33
|
+
|
34
|
+
- name: Generate docs
|
35
|
+
run: yard doc -o doc
|
36
|
+
|
37
|
+
- name: Setup Github Pages
|
38
|
+
uses: actions/configure-pages@v4
|
39
|
+
|
40
|
+
- name: Upload Artifact
|
41
|
+
uses: actions/upload-pages-artifact@v3
|
42
|
+
with:
|
43
|
+
path: "doc"
|
44
|
+
|
45
|
+
- name: Publish to Github Pages
|
46
|
+
id: deployment
|
47
|
+
uses: actions/deploy-pages@v4
|
@@ -0,0 +1,58 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
paths-ignore:
|
6
|
+
- ".gitignore"
|
7
|
+
- "README.md"
|
8
|
+
workflow_dispatch:
|
9
|
+
schedule:
|
10
|
+
# Every day at 9pm
|
11
|
+
- cron: '0 21 * * *'
|
12
|
+
|
13
|
+
jobs:
|
14
|
+
validate:
|
15
|
+
name: Validate code
|
16
|
+
runs-on: ubuntu-latest
|
17
|
+
|
18
|
+
strategy:
|
19
|
+
matrix:
|
20
|
+
ruby-version: [3.1, 3.2, 3.3, head]
|
21
|
+
continue-on-error: ${{ endsWith(matrix.ruby-version, 'head') }}
|
22
|
+
|
23
|
+
steps:
|
24
|
+
-
|
25
|
+
name: Checkout
|
26
|
+
uses: actions/checkout@v4
|
27
|
+
-
|
28
|
+
name: Setup Ruby
|
29
|
+
uses: ruby/setup-ruby@v1
|
30
|
+
with:
|
31
|
+
bundler-cache: true
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
33
|
+
-
|
34
|
+
name: RuboCop
|
35
|
+
run: bin/rubocop
|
36
|
+
-
|
37
|
+
name: Typecheck
|
38
|
+
run: bin/srb tc
|
39
|
+
-
|
40
|
+
name: Check for Updatable Sigils
|
41
|
+
run: |
|
42
|
+
bin/spoom bump --from false --to true --dry
|
43
|
+
bin/spoom bump --from true --to strict --dry
|
44
|
+
-
|
45
|
+
name: Check for DSL rbi updates
|
46
|
+
run: bin/tapioca dsl --verify
|
47
|
+
-
|
48
|
+
name: Run Tests (Using Cassettes)
|
49
|
+
if: ${{ ! endsWith(matrix.ruby-version, '3.3') }}
|
50
|
+
run: bin/toys test
|
51
|
+
-
|
52
|
+
name: Run Tests (With Remote Calls)
|
53
|
+
if: ${{ endsWith(matrix.ruby-version, '3.3') }}
|
54
|
+
run: bin/toys test
|
55
|
+
env:
|
56
|
+
REMOTE_TESTS_ENABLED: ${{ vars.REMOTE_TESTS_ENABLED }}
|
57
|
+
LUNCHMONEY_TOKEN: ${{ secrets.LUNCHMONEY_TOKEN }}
|
58
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
name: Dependabot RBI Updater
|
2
|
+
on:
|
3
|
+
pull_request:
|
4
|
+
paths:
|
5
|
+
- 'Gemfile.lock'
|
6
|
+
- 'Gemfile'
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
update-rbis:
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
if: ${{ github.triggering_actor == 'dependabot[bot]' }}
|
12
|
+
|
13
|
+
steps:
|
14
|
+
-
|
15
|
+
name: Checkout
|
16
|
+
uses: actions/checkout@v4
|
17
|
+
with:
|
18
|
+
ref: ${{ github.event.pull_request.head.sha }}
|
19
|
+
token: ${{ secrets.LUNCHMONEY_PAT_TOKEN }}
|
20
|
+
fetch-depth: 0
|
21
|
+
-
|
22
|
+
name: Setup Ruby
|
23
|
+
uses: ruby/setup-ruby@v1
|
24
|
+
with:
|
25
|
+
bundler-cache: true
|
26
|
+
-
|
27
|
+
name: Update RBIs
|
28
|
+
run: bin/toys rbi all_types
|
29
|
+
-
|
30
|
+
name: Commit RBIs
|
31
|
+
run: |
|
32
|
+
git config --local user.name "Dependabot RBI Updater"
|
33
|
+
git config --local user.email action@github.com
|
34
|
+
git add sorbet/*
|
35
|
+
git commit -m "[dependabot skip] Update RBIs"
|
36
|
+
-
|
37
|
+
name: Push changes
|
38
|
+
uses: ad-m/github-push-action@v0.8.0
|
39
|
+
with:
|
40
|
+
github_token: ${{ secrets.LUNCHMONEY_PAT_TOKEN }}
|
41
|
+
branch: ${{ github.head_ref }}
|
42
|
+
|
43
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
name: Publish Gem
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
tags:
|
6
|
+
- v*
|
7
|
+
jobs:
|
8
|
+
build:
|
9
|
+
name: Build & Release Gem
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v4
|
14
|
+
|
15
|
+
- name: Set up Ruby
|
16
|
+
uses: ruby/setup-ruby@v1
|
17
|
+
with:
|
18
|
+
ruby-version: 3.3.0
|
19
|
+
bundler-cache: true
|
20
|
+
- name: Release Gem
|
21
|
+
if: contains(github.ref, 'refs/tags/v')
|
22
|
+
run: |
|
23
|
+
mkdir -p $HOME/.gem
|
24
|
+
touch $HOME/.gem/credentials
|
25
|
+
chmod 0600 $HOME/.gem/credentials
|
26
|
+
printf -- "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}\n" > $HOME/.gem/credentials
|
27
|
+
gem build *.gemspec
|
28
|
+
gem push *.gem
|
29
|
+
env:
|
30
|
+
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
31
|
+
|
data/.gitignore
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
# Used by dotenv library to load environment variables.
|
14
|
+
# .env
|
15
|
+
|
16
|
+
# Ignore Byebug command history file.
|
17
|
+
.byebug_history
|
18
|
+
|
19
|
+
## Specific to RubyMotion:
|
20
|
+
.dat*
|
21
|
+
.repl_history
|
22
|
+
build/
|
23
|
+
*.bridgesupport
|
24
|
+
build-iPhoneOS/
|
25
|
+
build-iPhoneSimulator/
|
26
|
+
|
27
|
+
## Specific to RubyMotion (use of CocoaPods):
|
28
|
+
#
|
29
|
+
# We recommend against adding the Pods directory to your .gitignore. However
|
30
|
+
# you should judge for yourself, the pros and cons are mentioned at:
|
31
|
+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
32
|
+
#
|
33
|
+
# vendor/Pods/
|
34
|
+
|
35
|
+
## Documentation cache and generated files:
|
36
|
+
/.yardoc/
|
37
|
+
/_yardoc/
|
38
|
+
/doc/
|
39
|
+
/rdoc/
|
40
|
+
|
41
|
+
## Environment normalization:
|
42
|
+
/.bundle/
|
43
|
+
/vendor/bundle
|
44
|
+
/lib/bundler/man/
|
45
|
+
|
46
|
+
# for a library or gem, you might want to ignore these files since the code is
|
47
|
+
# intended to run in multiple environments; otherwise, check them in:
|
48
|
+
# Gemfile.lock
|
49
|
+
# .ruby-version
|
50
|
+
# .ruby-gemset
|
51
|
+
|
52
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
53
|
+
.rvmrc
|
54
|
+
|
55
|
+
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
56
|
+
# .rubocop-https?--*
|
57
|
+
|
58
|
+
# Ignore dotenv file
|
59
|
+
.env
|
60
|
+
|
61
|
+
# macOS Files
|
62
|
+
.DS_Store
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
inherit_gem:
|
2
|
+
rubocop-shopify: rubocop.yml
|
3
|
+
|
4
|
+
require:
|
5
|
+
- rubocop-sorbet
|
6
|
+
- rubocop-minitest
|
7
|
+
- rubocop-rails
|
8
|
+
|
9
|
+
AllCops:
|
10
|
+
TargetRubyVersion: 3.1
|
11
|
+
NewCops: enable
|
12
|
+
Exclude:
|
13
|
+
- "sorbet/**/*"
|
14
|
+
|
15
|
+
Sorbet:
|
16
|
+
Enabled: true
|
17
|
+
|
18
|
+
Sorbet/FalseSigil:
|
19
|
+
Exclude:
|
20
|
+
- ".toys/**/*"
|
21
|
+
|
22
|
+
Sorbet/StrictSigil:
|
23
|
+
Enabled: true
|
24
|
+
Exclude:
|
25
|
+
- "test/*"
|
26
|
+
- ".toys/**/*"
|
27
|
+
|
28
|
+
Sorbet/ForbidTStruct:
|
29
|
+
Enabled: true
|
30
|
+
# Context for why this is preferable https://github.com/Shopify/rubocop-sorbet/pull/178#issuecomment-1739924189
|
31
|
+
|
32
|
+
Sorbet/RedundantExtendTSig:
|
33
|
+
Enabled: true
|
34
|
+
|
35
|
+
Minitest:
|
36
|
+
Enabled: true
|
37
|
+
|
38
|
+
Minitest/MultipleAssertions:
|
39
|
+
Max: 6
|
40
|
+
|
41
|
+
Rails:
|
42
|
+
Enabled: true
|
43
|
+
|
44
|
+
Rails/RefuteMethods:
|
45
|
+
EnforcedStyle: refute
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.3.0
|
data/.toys/.toys.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
expand :minitest, files: ["test/**/*_test.rb"], libs: ["test", "lib"]
|
4
|
+
expand :gem_build
|
5
|
+
expand :gem_build, name: "install", install_gem: true
|
6
|
+
expand :gem_build, name: "release", push_gem: true
|
7
|
+
|
8
|
+
alias_tool :style, :rubocop
|
9
|
+
alias_tool :tapioca, :rbi
|
10
|
+
alias_tool :tc, :typecheck
|
data/.toys/ci.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
include :exec
|
4
|
+
include :terminal
|
5
|
+
|
6
|
+
def run_stage(name, tool)
|
7
|
+
if exec_tool(tool).success?
|
8
|
+
puts("** #{name} passed **", :green, :bold)
|
9
|
+
puts
|
10
|
+
else
|
11
|
+
puts("** CI terminated: #{name} failed!", :red, :bold)
|
12
|
+
exit(1)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def run
|
17
|
+
run_stage("Style Checker", ["rubocop"])
|
18
|
+
run_stage("Typecheck", ["tc"])
|
19
|
+
run_stage("Verify Sigils", ["spoom", "verify"])
|
20
|
+
run_stage("Verify Sorbet DSL RBIs", ["rbi", "dsl", "--verify"])
|
21
|
+
run_stage("Tests", ["test"])
|
22
|
+
end
|
data/.toys/rbi.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
tool :gem do
|
4
|
+
optional_arg :gem_name
|
5
|
+
|
6
|
+
def run
|
7
|
+
exec("bin/tapioca gem #{gem_name}")
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
tool :gems do
|
12
|
+
flag :all, "--all"
|
13
|
+
def run
|
14
|
+
if all
|
15
|
+
exec("bin/tapioca gems --all")
|
16
|
+
else
|
17
|
+
exec("bin/tapioca gems")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
tool :dsl do
|
23
|
+
flag :verify, "--verify"
|
24
|
+
def run
|
25
|
+
if verify
|
26
|
+
exec("bin/tapioca dsl --verify")
|
27
|
+
else
|
28
|
+
exec("bin/tapioca dsl")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
tool :all_types do
|
34
|
+
include :exec
|
35
|
+
include :terminal
|
36
|
+
|
37
|
+
def run_stage(name, tool)
|
38
|
+
puts("** #{name} started **", :blue, :bold)
|
39
|
+
|
40
|
+
if exec_tool(tool).success?
|
41
|
+
puts("** #{name} succeeded **", :green, :bold)
|
42
|
+
puts
|
43
|
+
else
|
44
|
+
puts("** CI terminated: #{name} failed!", :red, :bold)
|
45
|
+
exit(1)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def run
|
50
|
+
run_stage("Update Gem RBIs", ["rbi", "gems"])
|
51
|
+
run_stage("Update DSL RBIs", ["rbi", "dsl"])
|
52
|
+
run_stage("Update Annotations RBIs", ["rbi", "annotations"])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
remaining_args :commands
|
57
|
+
|
58
|
+
def run
|
59
|
+
exec("bin/tapioca #{commands.join("")}")
|
60
|
+
end
|
data/.toys/rubocop.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
desc "Run the rubocop linter and perform safe autocorrections, use -A to auto correct all"
|
4
|
+
flag :autocorrect_all, "-A", "--autocorrect-all", "--all"
|
5
|
+
|
6
|
+
include :exec, exit_on_nonzero_status: true
|
7
|
+
|
8
|
+
def run
|
9
|
+
autocorrect_all ? exec("bin/rubocop -A") : exec("bin/rubocop -a")
|
10
|
+
end
|
data/.toys/spoom.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
tool :bump do
|
4
|
+
def run
|
5
|
+
exec("bin/spoom bump --from false --to true ;" \
|
6
|
+
"bin/spoom bump --from true --to strict")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
tool :verify do
|
11
|
+
def run
|
12
|
+
exec("bin/spoom bump --from false --to true --dry ;" \
|
13
|
+
"bin/spoom bump --from true --to strict --dry")
|
14
|
+
end
|
15
|
+
end
|
data/.toys/typecheck.rb
ADDED
data/.yardopts
ADDED
data/Appraisals
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
appraise "activesupport-6-1" do
|
5
|
+
gem "activesupport", "~> 6.1"
|
6
|
+
end
|
7
|
+
|
8
|
+
appraise "activesupport-7-0" do
|
9
|
+
gem "activesupport", "~> 7.0"
|
10
|
+
end
|
11
|
+
|
12
|
+
appraise "faraday-1-0" do
|
13
|
+
gem "faraday", "~> 1.0"
|
14
|
+
end
|
15
|
+
|
16
|
+
appraise "faraday-2-0" do
|
17
|
+
gem "faraday", "~> 2.0"
|
18
|
+
end
|
19
|
+
|
20
|
+
appraise "faraday-2-9" do
|
21
|
+
gem "faraday", "~> 2.9"
|
22
|
+
end
|
data/Gemfile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
# Specify runtime dependencies in the gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
# Specify development dependencies here
|
9
|
+
gem "toys"
|
10
|
+
gem "minitest", "~> 5.21", require: false
|
11
|
+
gem "mocha", "~> 2.1.0", require: false
|
12
|
+
gem "webmock", require: false
|
13
|
+
gem "vcr", require: false
|
14
|
+
gem "pry-sorbet", "~> 0.2", require: false
|
15
|
+
gem "rubocop-shopify", require: false
|
16
|
+
gem "rubocop-sorbet", require: false
|
17
|
+
gem "rubocop-minitest", require: false
|
18
|
+
gem "rubocop-rails", require: false
|
19
|
+
gem "sorbet-static-and-runtime", require: false
|
20
|
+
gem "spoom", require: false
|
21
|
+
gem "tapioca", require: false
|
22
|
+
gem "dotenv"
|
23
|
+
gem "yard", require: false
|
24
|
+
gem "yard-sorbet", require: false
|
25
|
+
gem "appraisal", require: false
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
lunchmoney (0.10.0)
|
5
|
+
activesupport (>= 6.1)
|
6
|
+
faraday (>= 1.0.0)
|
7
|
+
sorbet-runtime (>= 0.5)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
activesupport (7.1.3)
|
13
|
+
base64
|
14
|
+
bigdecimal
|
15
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
|
+
connection_pool (>= 2.2.5)
|
17
|
+
drb
|
18
|
+
i18n (>= 1.6, < 2)
|
19
|
+
minitest (>= 5.1)
|
20
|
+
mutex_m
|
21
|
+
tzinfo (~> 2.0)
|
22
|
+
addressable (2.8.6)
|
23
|
+
public_suffix (>= 2.0.2, < 6.0)
|
24
|
+
appraisal (2.5.0)
|
25
|
+
bundler
|
26
|
+
rake
|
27
|
+
thor (>= 0.14.0)
|
28
|
+
ast (2.4.2)
|
29
|
+
base64 (0.2.0)
|
30
|
+
bigdecimal (3.1.6)
|
31
|
+
coderay (1.1.3)
|
32
|
+
concurrent-ruby (1.2.3)
|
33
|
+
connection_pool (2.4.1)
|
34
|
+
crack (0.4.5)
|
35
|
+
rexml
|
36
|
+
dotenv (2.8.1)
|
37
|
+
drb (2.2.0)
|
38
|
+
ruby2_keywords
|
39
|
+
erubi (1.12.0)
|
40
|
+
faraday (2.9.0)
|
41
|
+
faraday-net_http (>= 2.0, < 3.2)
|
42
|
+
faraday-net_http (3.1.0)
|
43
|
+
net-http
|
44
|
+
hashdiff (1.1.0)
|
45
|
+
i18n (1.14.1)
|
46
|
+
concurrent-ruby (~> 1.0)
|
47
|
+
json (2.7.1)
|
48
|
+
language_server-protocol (3.17.0.3)
|
49
|
+
method_source (1.0.0)
|
50
|
+
minitest (5.21.2)
|
51
|
+
mocha (2.1.0)
|
52
|
+
ruby2_keywords (>= 0.0.5)
|
53
|
+
mutex_m (0.2.0)
|
54
|
+
net-http (0.4.1)
|
55
|
+
uri
|
56
|
+
netrc (0.11.0)
|
57
|
+
parallel (1.24.0)
|
58
|
+
parser (3.3.0.5)
|
59
|
+
ast (~> 2.4.1)
|
60
|
+
racc
|
61
|
+
prettier_print (1.2.1)
|
62
|
+
prism (0.19.0)
|
63
|
+
pry (0.14.2)
|
64
|
+
coderay (~> 1.1)
|
65
|
+
method_source (~> 1.0)
|
66
|
+
pry-sorbet (0.2.1)
|
67
|
+
pry
|
68
|
+
public_suffix (5.0.4)
|
69
|
+
racc (1.7.3)
|
70
|
+
rack (3.0.8)
|
71
|
+
rainbow (3.1.1)
|
72
|
+
rake (13.1.0)
|
73
|
+
rbi (0.1.6)
|
74
|
+
prism (>= 0.18.0, < 0.20)
|
75
|
+
sorbet-runtime (>= 0.5.9204)
|
76
|
+
regexp_parser (2.9.0)
|
77
|
+
rexml (3.2.6)
|
78
|
+
rubocop (1.60.1)
|
79
|
+
json (~> 2.3)
|
80
|
+
language_server-protocol (>= 3.17.0)
|
81
|
+
parallel (~> 1.10)
|
82
|
+
parser (>= 3.3.0.2)
|
83
|
+
rainbow (>= 2.2.2, < 4.0)
|
84
|
+
regexp_parser (>= 1.8, < 3.0)
|
85
|
+
rexml (>= 3.2.5, < 4.0)
|
86
|
+
rubocop-ast (>= 1.30.0, < 2.0)
|
87
|
+
ruby-progressbar (~> 1.7)
|
88
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
89
|
+
rubocop-ast (1.30.0)
|
90
|
+
parser (>= 3.2.1.0)
|
91
|
+
rubocop-minitest (0.34.5)
|
92
|
+
rubocop (>= 1.39, < 2.0)
|
93
|
+
rubocop-ast (>= 1.30.0, < 2.0)
|
94
|
+
rubocop-rails (2.23.1)
|
95
|
+
activesupport (>= 4.2.0)
|
96
|
+
rack (>= 1.1)
|
97
|
+
rubocop (>= 1.33.0, < 2.0)
|
98
|
+
rubocop-ast (>= 1.30.0, < 2.0)
|
99
|
+
rubocop-shopify (2.14.0)
|
100
|
+
rubocop (~> 1.51)
|
101
|
+
rubocop-sorbet (0.7.6)
|
102
|
+
rubocop (>= 0.90.0)
|
103
|
+
ruby-progressbar (1.13.0)
|
104
|
+
ruby2_keywords (0.0.5)
|
105
|
+
sorbet (0.5.11219)
|
106
|
+
sorbet-static (= 0.5.11219)
|
107
|
+
sorbet-runtime (0.5.11219)
|
108
|
+
sorbet-static (0.5.11219-universal-darwin)
|
109
|
+
sorbet-static (0.5.11219-x86_64-linux)
|
110
|
+
sorbet-static-and-runtime (0.5.11219)
|
111
|
+
sorbet (= 0.5.11219)
|
112
|
+
sorbet-runtime (= 0.5.11219)
|
113
|
+
spoom (1.2.4)
|
114
|
+
erubi (>= 1.10.0)
|
115
|
+
sorbet-static-and-runtime (>= 0.5.10187)
|
116
|
+
syntax_tree (>= 6.1.1)
|
117
|
+
thor (>= 0.19.2)
|
118
|
+
syntax_tree (6.2.0)
|
119
|
+
prettier_print (>= 1.2.0)
|
120
|
+
tapioca (0.12.0)
|
121
|
+
bundler (>= 2.2.25)
|
122
|
+
netrc (>= 0.11.0)
|
123
|
+
parallel (>= 1.21.0)
|
124
|
+
rbi (>= 0.1.4, < 0.2)
|
125
|
+
sorbet-static-and-runtime (>= 0.5.10820)
|
126
|
+
spoom (~> 1.2.0, >= 1.2.0)
|
127
|
+
thor (>= 1.2.0)
|
128
|
+
yard-sorbet
|
129
|
+
thor (1.3.0)
|
130
|
+
toys (0.15.4)
|
131
|
+
toys-core (= 0.15.4)
|
132
|
+
toys-core (0.15.4)
|
133
|
+
tzinfo (2.0.6)
|
134
|
+
concurrent-ruby (~> 1.0)
|
135
|
+
unicode-display_width (2.5.0)
|
136
|
+
uri (0.13.0)
|
137
|
+
vcr (6.2.0)
|
138
|
+
webmock (3.19.1)
|
139
|
+
addressable (>= 2.8.0)
|
140
|
+
crack (>= 0.3.2)
|
141
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
142
|
+
yard (0.9.34)
|
143
|
+
yard-sorbet (0.8.1)
|
144
|
+
sorbet-runtime (>= 0.5)
|
145
|
+
yard (>= 0.9)
|
146
|
+
|
147
|
+
PLATFORMS
|
148
|
+
arm64-darwin-22
|
149
|
+
arm64-darwin-23
|
150
|
+
x86_64-darwin-20
|
151
|
+
x86_64-linux
|
152
|
+
|
153
|
+
DEPENDENCIES
|
154
|
+
appraisal
|
155
|
+
dotenv
|
156
|
+
lunchmoney!
|
157
|
+
minitest (~> 5.21)
|
158
|
+
mocha (~> 2.1.0)
|
159
|
+
pry-sorbet (~> 0.2)
|
160
|
+
rubocop-minitest
|
161
|
+
rubocop-rails
|
162
|
+
rubocop-shopify
|
163
|
+
rubocop-sorbet
|
164
|
+
sorbet-static-and-runtime
|
165
|
+
spoom
|
166
|
+
tapioca
|
167
|
+
toys
|
168
|
+
vcr
|
169
|
+
webmock
|
170
|
+
yard
|
171
|
+
yard-sorbet
|
172
|
+
|
173
|
+
BUNDLED WITH
|
174
|
+
2.5.3
|