branch_base 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: eac2efb3208cef6e492fac8859c5bf235748568e3e3be1200e7cc617483468c6
4
+ data.tar.gz: 5fb3a70cab32f0985c776ed703b0b5c099f7ae79402a13359ad284d69362f11d
5
+ SHA512:
6
+ metadata.gz: 399d80d0011a219e2059df531219e99dfe0625f23db6b17f3a6c8b20e54c44ad6c1bd20cce3911a2113f175295dac46a20cdf0f1023f7197cf71c05237a7a3f2
7
+ data.tar.gz: 2e28d8259736b9c702c692318cd7b81b8eade7ef3cb800f8397524998d06bc096573efe66a9a9f95426a91f121d5c939cdcb6ca5a52000805b9e38d28e52d650
@@ -0,0 +1,11 @@
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" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "weekly"
@@ -0,0 +1,76 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ tags:
7
+ - "v**"
8
+
9
+ pull_request:
10
+
11
+ concurrency:
12
+ group: branch-ci-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ rspec:
17
+ runs-on: ubuntu-latest
18
+ timeout-minutes: 30
19
+ name: Ruby ${{ matrix.ruby }}
20
+ strategy:
21
+ matrix:
22
+ ruby: ["2.7.7", "3.0.5", "3.1.4", "3.2.1"]
23
+ steps:
24
+ - uses: actions/checkout@v1
25
+
26
+ - name: Set up Ruby
27
+ uses: ruby/setup-ruby@v1
28
+ with:
29
+ ruby-version: ${{ matrix.ruby }}
30
+ bundler-cache: true
31
+
32
+ - name: Configure Git
33
+ run: |
34
+ git config --global user.email "shayonj@gmail.com"
35
+ git config --global user.name "Shayon Mukherjee"
36
+ git config --global init.defaultBranch main
37
+
38
+ - name: Bundle install
39
+ env:
40
+ RAILS_ENV: test
41
+ run: |
42
+ gem install bundler
43
+ bundle install --jobs 4 --retry 3 --path vendor/bundle
44
+
45
+ - name: Run Lint
46
+ run: bundle exec rubocop
47
+
48
+ - name: Run RSpec
49
+ run: bundle exec rspec
50
+
51
+ build-push-image:
52
+ if: startsWith(github.ref, 'refs/tags/v')
53
+ runs-on: ubuntu-latest
54
+ timeout-minutes: 30
55
+ needs: [rspec]
56
+ steps:
57
+ - name: Set up QEMU
58
+ uses: docker/setup-qemu-action@v2
59
+ - name: Set up Docker Buildx
60
+ uses: docker/setup-buildx-action@v2
61
+ - name: Login to Docker Hub
62
+ uses: docker/login-action@v2
63
+ with:
64
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
65
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
66
+ - name: Branch name
67
+ id: version_name
68
+ run: |
69
+ echo ::set-output name=no_v_tag::${GITHUB_REF_NAME:1}
70
+ - name: Build and push
71
+ uses: docker/build-push-action@v4
72
+ with:
73
+ platforms: linux/amd64,linux/arm64
74
+ push: true
75
+ build-args: VERSION=${{ steps.version_name.outputs.no_v_tag }}
76
+ tags: shayonj/branch_base:latest, shayonj/branch_base:${{ steps.version_name.outputs.no_v_tag }}
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+
13
+ # .gem
14
+ .gem
15
+
16
+ node_modules
17
+
18
+ *.db
19
+ .DS_Store
data/.prettierignore ADDED
@@ -0,0 +1,4 @@
1
+ /spec/fixtures
2
+ /docs
3
+ /scripts
4
+ *.sql
data/.rspec ADDED
@@ -0,0 +1,5 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
4
+ --fail-fast
5
+ --exclude-pattern spec/smoke_spec.rb
data/.rubocop.yml ADDED
@@ -0,0 +1,259 @@
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-rake
4
+ - rubocop-performance
5
+
6
+ inherit_mode:
7
+ merge:
8
+ - Include
9
+ - Exclude
10
+ - AllowedMethods
11
+
12
+ AllCops:
13
+ NewCops: enable
14
+ Exclude:
15
+ - "**/.git/**/*"
16
+ - "**/node_modules/**/*"
17
+ - "**/Brewfile"
18
+ TargetRubyVersion: 2.7
19
+
20
+ Bundler/OrderedGems:
21
+ Include:
22
+ - "**/Gemfile"
23
+
24
+ Style/FrozenStringLiteralComment:
25
+ EnforcedStyle: always
26
+
27
+ Style/MutableConstant:
28
+ EnforcedStyle: literals
29
+
30
+ Style/MethodCallWithArgsParentheses:
31
+ Enabled: true
32
+ EnforcedStyle: require_parentheses
33
+ AllowedMethods:
34
+ - yield
35
+ - raise
36
+ - fail
37
+ - puts
38
+ - require
39
+ - require_relative
40
+ - render
41
+ - redirect_to
42
+ - head
43
+ - throw
44
+ # RSpec
45
+ - to
46
+ - not_to
47
+ - to_not
48
+ - and
49
+ - or
50
+ Exclude:
51
+ - "**/Gemfile"
52
+ - "**/db/migrate/*"
53
+ - "**/db/schema.rb"
54
+
55
+ Style/RedundantInitialize:
56
+ Enabled: false
57
+
58
+ Layout:
59
+ Enabled: false
60
+
61
+ Metrics:
62
+ Enabled: false
63
+
64
+ Naming/AccessorMethodName:
65
+ Enabled: false
66
+
67
+ Naming/MethodParameterName:
68
+ Enabled: false
69
+
70
+ Naming/PredicateName:
71
+ Enabled: false
72
+
73
+ Naming/VariableNumber:
74
+ Enabled: false
75
+
76
+ Style/AsciiComments:
77
+ Enabled: false
78
+
79
+ Style/BlockDelimiters:
80
+ Enabled: false
81
+
82
+ Style/CaseLikeIf:
83
+ Enabled: false
84
+
85
+ Style/ClassAndModuleChildren:
86
+ Enabled: false
87
+
88
+ Style/CommentAnnotation:
89
+ Enabled: false
90
+
91
+ Style/Documentation:
92
+ Enabled: false
93
+
94
+ Style/IfUnlessModifier:
95
+ Enabled: false
96
+
97
+ Style/Lambda:
98
+ Enabled: false
99
+
100
+ Style/ModuleFunction:
101
+ Enabled: false
102
+
103
+ Style/MultilineBlockChain:
104
+ Enabled: false
105
+
106
+ Style/NumericLiterals:
107
+ Enabled: false
108
+
109
+ Style/NumericPredicate:
110
+ Enabled: false
111
+
112
+ Style/ParallelAssignment:
113
+ Enabled: false
114
+
115
+ Style/PerlBackrefs:
116
+ Enabled: false
117
+
118
+ Style/QuotedSymbols:
119
+ EnforcedStyle: double_quotes
120
+ Enabled: false
121
+
122
+ Style/RaiseArgs:
123
+ Enabled: false
124
+
125
+ Style/RescueStandardError:
126
+ Enabled: false
127
+
128
+ Style/SingleArgumentDig:
129
+ Enabled: false
130
+
131
+ Style/StringLiterals:
132
+ EnforcedStyle: double_quotes
133
+ Enabled: false
134
+
135
+ Style/StringLiteralsInInterpolation:
136
+ Enabled: false
137
+
138
+ Style/SymbolArray:
139
+ Enabled: false
140
+
141
+ Style/TrailingCommaInArguments:
142
+ Enabled: false
143
+
144
+ Style/TrailingCommaInArrayLiteral:
145
+ Enabled: false
146
+ EnforcedStyleForMultiline: consistent_comma
147
+
148
+ Style/TrailingCommaInHashLiteral:
149
+ Enabled: false
150
+
151
+ Style/TrailingUnderscoreVariable:
152
+ Enabled: false
153
+
154
+ Style/ZeroLengthPredicate:
155
+ Enabled: false
156
+
157
+ Style/DateTime:
158
+ Enabled: true
159
+
160
+ RSpec/ExpectChange:
161
+ EnforcedStyle: block
162
+
163
+ Gemspec/RequireMFA:
164
+ Enabled: true
165
+
166
+ Gemspec/DevelopmentDependencies:
167
+ Enabled: false
168
+
169
+ # Temporary Rubocop exclusions
170
+ Style/OpenStructUse:
171
+ Enabled: false
172
+
173
+ # Ruby 3 migration exclusions
174
+ Style/HashSyntax:
175
+ Enabled: false
176
+
177
+ Naming/BlockForwarding:
178
+ Enabled: false
179
+
180
+ Lint/RedundantDirGlobSort:
181
+ Enabled: false
182
+
183
+ RSpec/ExampleLength:
184
+ Enabled: false
185
+
186
+ RSpec/MultipleExpectations:
187
+ Enabled: false
188
+
189
+ RSpec/VerifiedDoubles:
190
+ Enabled: false
191
+
192
+ RSpec/ContextWording:
193
+ Enabled: false
194
+
195
+ RSpec/AnyInstance:
196
+ Enabled: false
197
+
198
+ RSpec/MessageSpies:
199
+ Enabled: false
200
+
201
+ RSpec/RepeatedDescription:
202
+ Enabled: false
203
+
204
+ RSpec/RepeatedExample:
205
+ Enabled: false
206
+
207
+ RSpec/HookArgument:
208
+ Enabled: false
209
+
210
+ RSpec/DescribeClass:
211
+ Enabled: false
212
+
213
+ RSpec/DescribedClass:
214
+ Enabled: false
215
+
216
+ RSpec/FilePath:
217
+ Enabled: false
218
+
219
+ RSpec/IdenticalEqualityAssertion:
220
+ Enabled: false
221
+
222
+ RSpec/InstanceVariable:
223
+ Enabled: false
224
+
225
+ RSpec/MissingExampleGroupArgument:
226
+ Enabled: false
227
+
228
+ RSpec/MultipleDescribes:
229
+ Enabled: false
230
+
231
+ RSpec/NestedGroups:
232
+ Enabled: false
233
+
234
+ RSpec/PredicateMatcher:
235
+ Enabled: false
236
+
237
+ RSpec/Rails/HttpStatus:
238
+ Enabled: false
239
+
240
+ RSpec/RepeatedExampleGroupDescription:
241
+ Enabled: false
242
+
243
+ RSpec/StubbedMock:
244
+ Enabled: false
245
+
246
+ Lint/UnusedMethodArgument:
247
+ Enabled: false
248
+
249
+ Lint/MissingSuper:
250
+ Enabled: false
251
+
252
+ RSpec/NoExpectationExample:
253
+ Enabled: false
254
+
255
+ Style/AccessorGrouping:
256
+ Enabled: false
257
+
258
+ Style/FormatStringToken:
259
+ Enabled: false
data/Dockerfile ADDED
@@ -0,0 +1,5 @@
1
+ FROM ruby:3.1.4
2
+
3
+ ARG VERSION
4
+
5
+ RUN gem install branch_bash -v $VERSION
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in pg_easy_replicate.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,124 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ branch_base (0.1.0)
5
+ rugged
6
+ sqlite3
7
+ thor (~> 1.0)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ addressable (2.8.5)
13
+ public_suffix (>= 2.0.2, < 6.0)
14
+ ast (2.4.2)
15
+ coderay (1.1.3)
16
+ diff-lcs (1.5.0)
17
+ git (1.18.0)
18
+ addressable (~> 2.8)
19
+ rchardet (~> 1.8)
20
+ haml (6.0.7)
21
+ temple (>= 0.8.2)
22
+ thor
23
+ tilt
24
+ json (2.7.0)
25
+ language_server-protocol (3.17.0.3)
26
+ method_source (1.0.0)
27
+ parallel (1.23.0)
28
+ parser (3.2.2.4)
29
+ ast (~> 2.4.1)
30
+ racc
31
+ prettier_print (1.2.1)
32
+ pry (0.14.2)
33
+ coderay (~> 1.1)
34
+ method_source (~> 1.0)
35
+ public_suffix (5.0.4)
36
+ racc (1.7.3)
37
+ rainbow (3.1.1)
38
+ rake (13.1.0)
39
+ rbs (1.0.0)
40
+ rchardet (1.8.0)
41
+ regexp_parser (2.8.2)
42
+ rexml (3.2.6)
43
+ rspec (3.12.0)
44
+ rspec-core (~> 3.12.0)
45
+ rspec-expectations (~> 3.12.0)
46
+ rspec-mocks (~> 3.12.0)
47
+ rspec-core (3.12.1)
48
+ rspec-support (~> 3.12.0)
49
+ rspec-expectations (3.12.2)
50
+ diff-lcs (>= 1.2.0, < 2.0)
51
+ rspec-support (~> 3.12.0)
52
+ rspec-mocks (3.12.5)
53
+ diff-lcs (>= 1.2.0, < 2.0)
54
+ rspec-support (~> 3.12.0)
55
+ rspec-support (3.12.0)
56
+ rubocop (1.58.0)
57
+ json (~> 2.3)
58
+ language_server-protocol (>= 3.17.0)
59
+ parallel (~> 1.10)
60
+ parser (>= 3.2.2.4)
61
+ rainbow (>= 2.2.2, < 4.0)
62
+ regexp_parser (>= 1.8, < 3.0)
63
+ rexml (>= 3.2.5, < 4.0)
64
+ rubocop-ast (>= 1.30.0, < 2.0)
65
+ ruby-progressbar (~> 1.7)
66
+ unicode-display_width (>= 2.4.0, < 3.0)
67
+ rubocop-ast (1.30.0)
68
+ parser (>= 3.2.1.0)
69
+ rubocop-capybara (2.19.0)
70
+ rubocop (~> 1.41)
71
+ rubocop-factory_bot (2.24.0)
72
+ rubocop (~> 1.33)
73
+ rubocop-packaging (0.5.2)
74
+ rubocop (>= 1.33, < 2.0)
75
+ rubocop-performance (1.19.1)
76
+ rubocop (>= 1.7.0, < 2.0)
77
+ rubocop-ast (>= 0.4.0)
78
+ rubocop-rake (0.6.0)
79
+ rubocop (~> 1.0)
80
+ rubocop-rspec (2.25.0)
81
+ rubocop (~> 1.40)
82
+ rubocop-capybara (~> 2.17)
83
+ rubocop-factory_bot (~> 2.22)
84
+ ruby-progressbar (1.13.0)
85
+ rugged (1.7.1)
86
+ sqlite3 (1.6.9-arm64-darwin)
87
+ sqlite3 (1.6.9-x86_64-linux)
88
+ syntax_tree (6.2.0)
89
+ prettier_print (>= 1.2.0)
90
+ syntax_tree-haml (4.0.3)
91
+ haml (>= 5.2)
92
+ prettier_print (>= 1.2.1)
93
+ syntax_tree (>= 6.0.0)
94
+ syntax_tree-rbs (1.0.0)
95
+ prettier_print
96
+ rbs
97
+ syntax_tree (>= 2.0.1)
98
+ temple (0.8.2)
99
+ thor (1.3.0)
100
+ tilt (2.0.11)
101
+ unicode-display_width (2.5.0)
102
+
103
+ PLATFORMS
104
+ arm64-darwin-21
105
+ x86_64-linux
106
+
107
+ DEPENDENCIES
108
+ branch_base!
109
+ git
110
+ prettier_print
111
+ pry
112
+ rake
113
+ rspec
114
+ rubocop
115
+ rubocop-packaging
116
+ rubocop-performance
117
+ rubocop-rake
118
+ rubocop-rspec
119
+ syntax_tree
120
+ syntax_tree-haml
121
+ syntax_tree-rbs
122
+
123
+ BUNDLED WITH
124
+ 2.4.13
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2023 Shayon Mukherjee
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,152 @@
1
+ # BranchBase
2
+
3
+ `branch_base` is a Ruby gem to synchronize data from a Git repository into a SQLite database. It provides a CLI to easily build and store the data, including commits, branches, and file changes, into a SQLite database.
4
+
5
+ You can now easily run, any kind of analytics on your Git directory using the SQLite database.
6
+
7
+ ![](./internal/screenshot.png)
8
+
9
+ ## Features ✨
10
+
11
+ - Synchronize Git repository data into a SQLite database.
12
+ - Query commit history, branch details, and file changes using SQL.
13
+ - Easy-to-use CLI for quick setup and execution.
14
+ - πŸ“Έ Check out the example below on how you can use `branch_base` to create a Spotify themed Git Wrapped using SQL
15
+
16
+ ## Usage πŸ› οΈ
17
+
18
+ After installation, you can use `branch_base` to generate a SQLite Database of a Git repository:
19
+
20
+ ```bash
21
+ $ branch_base sync ~/src/rails
22
+ ```
23
+
24
+ ## Git wrapped πŸ“Έ
25
+
26
+ Easily generate a Git wrapped with some built-queries and style using `branch_base`
27
+
28
+ ```bash
29
+ $ branch_base git-wrapped ~/src/rails
30
+ 2023-12-03 11:40:50 -0500: INFO - BranchBase: Generating Git wrapped for /Users/shayon/src/rails...
31
+ 2023-12-03 11:40:53 -0500: INFO - BranchBase: Git wrapped JSON stored in /Users/shayon/src/rails/git-wrapped.json
32
+ 2023-12-03 11:40:53 -0500: INFO - BranchBase: Git wrapped HTML stored in /Users/shayon/src/rails/git-wrapped.html
33
+ ```
34
+
35
+ ![](./internal/git-wrapped.png)
36
+
37
+ ## Example SQL Queries πŸ“Š
38
+
39
+ Once your repository data is synchronized into a SQLite database, you can run various SQL queries to analyze the data. Here are some examples:
40
+
41
+ 1. **List all commits**:
42
+
43
+ ```sql
44
+ SELECT * FROM commits;
45
+ ```
46
+
47
+ 2. **Find commits by a specific author**:
48
+
49
+ ```sql
50
+ SELECT * FROM commits WHERE author = 'John Doe';
51
+ ```
52
+
53
+ 3. **Get the number of commits in each branch**:
54
+
55
+ ```sql
56
+ SELECT branches.name, COUNT(commits.commit_hash) as commit_count
57
+ FROM branches
58
+ JOIN commits ON branches.head_commit = commits.commit_hash
59
+ GROUP BY branches.name;
60
+ ```
61
+
62
+ 4. **List files changed in a specific commit**:
63
+
64
+ ```sql
65
+ SELECT files.file_path
66
+ FROM commit_files
67
+ JOIN files ON commit_files.file_id = files.file_id
68
+ WHERE commit_files.commit_hash = 'ABC123';
69
+ ```
70
+
71
+ 5. **Count of Commits per Author**
72
+
73
+ ```sql
74
+ SELECT author, COUNT(*) as commit_count
75
+ FROM commits
76
+ GROUP BY author
77
+ ORDER BY commit_count DESC;
78
+ ```
79
+
80
+ 6. **Authors Who Have Worked on a Specific File**
81
+
82
+ ```sql
83
+ SELECT files.file_path, commits.author, COUNT(*) as times_contributed
84
+ FROM commits
85
+ JOIN commit_files ON commits.commit_hash = commit_files.commit_hash
86
+ JOIN files ON commit_files.file_id = files.file_id
87
+ WHERE files.file_path LIKE '%connection_adapters/sqlite%'
88
+ GROUP BY files.file_path, commits.author
89
+ ORDER BY times_contributed DESC;
90
+ ```
91
+
92
+ ## Installation πŸ“₯
93
+
94
+ ### Via RubyGems πŸ’Ž
95
+
96
+ You can install `branch_base` directly using RubyGems:
97
+
98
+ ```bash
99
+ $ gem install branch_base
100
+ ```
101
+
102
+ ### Via Docker 🐳
103
+
104
+ `branch_base` is also available as a Docker image, which can be used to run the tool without setting up a Ruby environment:
105
+
106
+ ```bash
107
+ $ docker pull shayonj/branch_base:latest
108
+ ```
109
+
110
+ To use `branch_base` with Docker, you can mount your Git repository as a volume:
111
+
112
+ ```bash
113
+ $ docker run -v /repo/path:/repo shayonj/branch_base sync /repo
114
+ ```
115
+
116
+ This command will create a SQLite database with the repository's data in the path where the command is called from
117
+
118
+ ## Database Schema πŸ—ΊοΈ
119
+
120
+ The SQLite database of the follow tables:
121
+
122
+ ```
123
+ repositories
124
+ β”‚
125
+ └─ commits ───── commit_files ── files
126
+ β”‚ β”‚ β”‚
127
+ β”œβ”€ branches β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
128
+ β”‚ β”‚
129
+ └─ commit_parents β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
130
+ ```
131
+
132
+ **Table Descriptions**:
133
+
134
+ - `repositories`: Contains details about the repositories.
135
+ - `commits`: Stores individual commits. Each commit is linked to a repository.
136
+ - `branches`: Branch information linked to their latest commits.
137
+ - `files`: Information about files changed in commits. We don't store file contents.
138
+ - `commit_files`: Associates commits with files, including changes.
139
+ - `commit_parents`: Tracks parent-child relationships between commits.
140
+
141
+ ## Contributing 🀝
142
+
143
+ Contributions to `branch_base` are welcome!
144
+
145
+ ## License πŸ“œ
146
+
147
+ Distributed under the MIT License. See `LICENSE` for more information.
148
+
149
+ ## Development πŸ’»
150
+
151
+ - Install ruby `3.1.4` using RVM ([instruction](https://rvm.io/rvm/install#any-other-system))
152
+ - `bundle exec rspec` for specs
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+ require "standalone_migrations"
6
+
7
+ RSpec::Core::RakeTask.new(:spec)
8
+
9
+ require "rubocop/rake_task"
10
+
11
+ RuboCop::RakeTask.new
12
+
13
+ task default: %i[spec rubocop]