dopstick 0.0.3 → 0.0.7
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 +4 -4
- data/.github/CODEOWNERS +4 -0
- data/.github/FUNDING.yml +1 -1
- data/.github/dependabot.yml +15 -0
- data/.github/workflows/tests.yml +10 -12
- data/.rubocop.yml +12 -7
- data/CHANGELOG.md +26 -0
- data/CONTRIBUTING.md +1 -1
- data/README.md +6 -3
- data/dopstick.gemspec +4 -2
- data/lib/dopstick/cli.rb +41 -12
- data/lib/dopstick/{templates → generator/base/templates}/bug_report.erb +1 -1
- data/lib/dopstick/{templates/CHANGELOG.md → generator/base/templates/changelog.erb} +0 -0
- data/lib/dopstick/{templates → generator/base/templates}/coc.erb +1 -1
- data/lib/dopstick/generator/base/templates/codeowners.erb +4 -0
- data/lib/dopstick/{templates → generator/base/templates}/contributing.erb +5 -5
- data/lib/dopstick/generator/base/templates/dependabot.erb +15 -0
- data/lib/dopstick/{templates → generator/base/templates}/feature_request.erb +0 -0
- data/lib/dopstick/generator/base/templates/funding.erb +4 -0
- data/lib/dopstick/{templates → generator/base/templates}/gitignore.erb +0 -0
- data/lib/dopstick/{templates → generator/base/templates}/issue.erb +0 -0
- data/lib/dopstick/{templates → generator/base/templates}/license.erb +1 -1
- data/lib/dopstick/{templates → generator/base/templates}/pull_request.erb +0 -0
- data/lib/dopstick/{templates → generator/base/templates}/setup.erb +0 -0
- data/lib/dopstick/generator/gem/generator.rb +173 -0
- data/lib/dopstick/generator/gem/options.rb +34 -0
- data/lib/dopstick/{templates → generator/gem/templates}/active_record.erb +25 -0
- data/lib/dopstick/generator/gem/templates/bin.erb +5 -0
- data/lib/dopstick/{templates → generator/gem/templates}/cli.erb +0 -0
- data/lib/dopstick/{templates → generator/gem/templates}/cli_class.erb +0 -0
- data/lib/dopstick/{templates → generator/gem/templates}/console.erb +1 -1
- data/lib/dopstick/generator/gem/templates/entry_file.erb +3 -0
- data/lib/dopstick/generator/gem/templates/gem_entry_file.erb +3 -0
- data/lib/dopstick/{templates → generator/gem/templates}/gemfile.erb +0 -0
- data/lib/dopstick/{templates → generator/gem/templates}/gemspec.erb +14 -13
- data/lib/dopstick/{templates → generator/gem/templates}/generator.erb +0 -0
- data/lib/dopstick/{templates → generator/gem/templates}/generator_class.erb +0 -0
- data/lib/dopstick/{templates → generator/gem/templates}/rakefile.erb +0 -0
- data/lib/dopstick/generator/gem/templates/readme.erb +50 -0
- data/lib/dopstick/generator/gem/templates/rubocop.erb +12 -0
- data/lib/dopstick/{templates → generator/gem/templates}/test_file.erb +1 -1
- data/lib/dopstick/{templates → generator/gem/templates}/test_helper.erb +1 -1
- data/lib/dopstick/{templates → generator/gem/templates}/tests_workflow.erb +9 -12
- data/lib/dopstick/{templates → generator/gem/templates}/version.erb +0 -0
- data/lib/dopstick/generator/npm/generator.rb +106 -0
- data/lib/dopstick/generator/npm/options.rb +26 -0
- data/lib/dopstick/generator/npm/templates/babel.erb +15 -0
- data/lib/dopstick/generator/npm/templates/eslint.erb +4 -0
- data/lib/dopstick/generator/npm/templates/index.erb +12 -0
- data/lib/dopstick/generator/npm/templates/index_test.erb +7 -0
- data/lib/dopstick/generator/npm/templates/jest.erb +12 -0
- data/lib/dopstick/generator/npm/templates/package.erb +42 -0
- data/lib/dopstick/generator/npm/templates/prettier.erb +1 -0
- data/lib/dopstick/generator/npm/templates/readme.erb +52 -0
- data/lib/dopstick/generator/npm/templates/tests_workflow.erb +49 -0
- data/lib/dopstick/generator/npm/templates/tsconfig.erb +14 -0
- data/lib/dopstick/generator/npm/templates/webpack.erb +33 -0
- data/lib/dopstick/generator/options.rb +65 -0
- data/lib/dopstick/generator.rb +3 -208
- data/lib/dopstick/version.rb +1 -1
- data/lib/dopstick.rb +7 -1
- metadata +60 -39
- data/lib/dopstick/templates/bin.erb +0 -5
- data/lib/dopstick/templates/entry_file.erb +0 -3
- data/lib/dopstick/templates/funding.erb +0 -4
- data/lib/dopstick/templates/gem_entry_file.erb +0 -3
- data/lib/dopstick/templates/readme.erb +0 -50
- data/lib/dopstick/templates/rubocop.erb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32408bef26c9cac4f69fd929fa86a84c0ad7eab9528573f649c720d57c1b7e7d
|
4
|
+
data.tar.gz: e412045ce7e9ea82ecd9bdbd74fa7863be86a62aac87ebdf397104e34c85a0b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90f33a149c994f693d5fce46ee19de6f7656d28378bd1147fc572010f630ec8b9ca06c2f4bdc8c34163525a5ad58760de72e00c06b9337f56d646ae7139b9b76
|
7
|
+
data.tar.gz: aeca3ecf5d6324b50139f1461b760769ae11015430078d8c72ff25e8f3a3436ea7ffdb3fe952b7d29ef097b6b6788c5ce7f093978cea3be0fcb4f875fe28b50d
|
data/.github/CODEOWNERS
ADDED
data/.github/FUNDING.yml
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
# Documentation:
|
3
|
+
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
4
|
+
|
5
|
+
version: 2
|
6
|
+
updates:
|
7
|
+
- package-ecosystem: "github-actions"
|
8
|
+
directory: "/"
|
9
|
+
schedule:
|
10
|
+
interval: "daily"
|
11
|
+
|
12
|
+
- package-ecosystem: bundler
|
13
|
+
directory: "/"
|
14
|
+
schedule:
|
15
|
+
interval: "daily"
|
data/.github/workflows/tests.yml
CHANGED
@@ -1,15 +1,11 @@
|
|
1
|
+
---
|
1
2
|
name: Tests
|
2
3
|
|
3
4
|
on:
|
4
5
|
pull_request:
|
5
|
-
branches:
|
6
|
-
- main
|
7
6
|
push:
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
schedule:
|
12
|
-
- cron: "0 10 * * *"
|
7
|
+
workflow_dispatch:
|
8
|
+
inputs: {}
|
13
9
|
|
14
10
|
jobs:
|
15
11
|
build:
|
@@ -18,23 +14,25 @@ jobs:
|
|
18
14
|
strategy:
|
19
15
|
fail-fast: false
|
20
16
|
matrix:
|
21
|
-
ruby: [2.
|
17
|
+
ruby: ["2.7", "3.0"]
|
22
18
|
gemfile:
|
23
19
|
- Gemfile
|
24
20
|
|
25
21
|
steps:
|
26
|
-
- uses: actions/checkout@
|
22
|
+
- uses: actions/checkout@v2.4.0
|
27
23
|
|
28
24
|
- uses: actions/cache@v2
|
29
25
|
with:
|
30
26
|
path: vendor/bundle
|
31
27
|
key: >
|
32
|
-
${{ runner.os }}-${{ matrix.ruby }}-gems-${{
|
28
|
+
${{ runner.os }}-${{ matrix.ruby }}-gems-${{
|
29
|
+
hashFiles(matrix.gemfile) }}
|
33
30
|
restore-keys: >
|
34
|
-
${{ runner.os }}-${{ matrix.ruby }}-gems-${{
|
31
|
+
${{ runner.os }}-${{ matrix.ruby }}-gems-${{
|
32
|
+
hashFiles(matrix.gemfile) }}
|
35
33
|
|
36
34
|
- name: Set up Ruby
|
37
|
-
uses:
|
35
|
+
uses: ruby/setup-ruby@v1
|
38
36
|
with:
|
39
37
|
ruby-version: ${{ matrix.ruby }}
|
40
38
|
|
data/.rubocop.yml
CHANGED
@@ -3,7 +3,7 @@ inherit_gem:
|
|
3
3
|
rubocop-fnando: .rubocop.yml
|
4
4
|
|
5
5
|
AllCops:
|
6
|
-
TargetRubyVersion: 2.
|
6
|
+
TargetRubyVersion: 2.7
|
7
7
|
NewCops: enable
|
8
8
|
Exclude:
|
9
9
|
- tmp/**/*
|
@@ -11,11 +11,16 @@ AllCops:
|
|
11
11
|
- vendor/**/*
|
12
12
|
|
13
13
|
Metrics/BlockLength:
|
14
|
-
|
15
|
-
- test/**/*
|
16
|
-
- "**/*.gemspec"
|
14
|
+
Enabled: false
|
17
15
|
|
18
16
|
Metrics/ClassLength:
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Metrics/MethodLength:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
Metrics/AbcSize:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
Style/OptionalBooleanParameter:
|
26
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -11,6 +11,32 @@ Prefix your message with one of the following:
|
|
11
11
|
- [Security] in case of vulnerabilities.
|
12
12
|
-->
|
13
13
|
|
14
|
+
## v0.0.7 - 2021-12-04
|
15
|
+
|
16
|
+
- [Fixed] Set proper package ecosystem on dependabot's config file.
|
17
|
+
- [Changed] Update ruby default versions to 2.7 and 3.0.
|
18
|
+
- [Changed] Update node default versions to 16 and 17.
|
19
|
+
|
20
|
+
## v0.0.6 - 2020-12-09
|
21
|
+
|
22
|
+
- [Fixed] Babel loader's order is backwards, so TypeScript first, then
|
23
|
+
JavaScript.
|
24
|
+
|
25
|
+
## v0.0.5 - 2020-11-14
|
26
|
+
|
27
|
+
- [Fixed] Jest configuration wasn't considering the full import path.
|
28
|
+
|
29
|
+
## v0.0.4 - 2020-11-14
|
30
|
+
|
31
|
+
- [Added] Generate
|
32
|
+
[dependabot](https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates)
|
33
|
+
configuration.
|
34
|
+
- [Changed] Add Postgres env vars so tests can run smoothly.
|
35
|
+
- [Added] Add helper method to create migration classes with `--active-record`.
|
36
|
+
- [Added] Generate `.github/CODEOWNERS` template.
|
37
|
+
- [Changed] Generate Ruby packages with `--type gem`
|
38
|
+
- [Added] Generate NPM packages with `--type npm`.
|
39
|
+
|
14
40
|
## v0.0.3 - 2020-11-03
|
15
41
|
|
16
42
|
- [Changed] Remove unused `--repository` switch.
|
data/CONTRIBUTING.md
CHANGED
@@ -38,7 +38,7 @@ your contribution is according to how this project works.
|
|
38
38
|
"Unreleased" section. If this section is not available, create one right
|
39
39
|
before the last version.
|
40
40
|
5. Push to your branch - `git push origin my_branch`
|
41
|
-
6. [Create a pull request](https://
|
41
|
+
6. [Create a pull request](https://help.github.com/articles/creating-a-pull-request)
|
42
42
|
7. That's it!
|
43
43
|
|
44
44
|
## Styleguides
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
</p>
|
6
6
|
|
7
7
|
<p align="center">
|
8
|
-
Generate a project skeleton for creating a
|
8
|
+
Generate a project skeleton for creating a Ruby/Node package.
|
9
9
|
</p>
|
10
10
|
|
11
11
|
<p align="center">
|
@@ -21,8 +21,11 @@ Features:
|
|
21
21
|
|
22
22
|
- Github templates
|
23
23
|
- Changelog
|
24
|
-
-
|
25
|
-
|
24
|
+
- Generate Ruby packages
|
25
|
+
+ ActiveRecord setup (via `--active-record`)
|
26
|
+
+ CLI setup (via `--bin NAME`)
|
27
|
+
- Generate NPM packages
|
28
|
+
+ Setup TypeScript, Jest, and more!
|
26
29
|
|
27
30
|
## Installation
|
28
31
|
|
data/dopstick.gemspec
CHANGED
@@ -7,11 +7,13 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.version = Dopstick::VERSION
|
8
8
|
spec.authors = ["Nando Vieira"]
|
9
9
|
spec.email = ["me@fnando.com"]
|
10
|
+
spec.metadata = {"rubygems_mfa_required" => "true"}
|
10
11
|
|
11
|
-
spec.summary = "Generate a project skeleton for creating a
|
12
|
+
spec.summary = "Generate a project skeleton for creating a Ruby/NPM " \
|
13
|
+
"package."
|
12
14
|
spec.description = spec.summary
|
13
15
|
spec.license = "MIT"
|
14
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
16
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
15
17
|
|
16
18
|
github_url = "https://github.com/fnando/dopstick"
|
17
19
|
github_tree_url = "#{github_url}/tree/v#{spec.version}"
|
data/lib/dopstick/cli.rb
CHANGED
@@ -9,10 +9,14 @@ module Dopstick
|
|
9
9
|
true
|
10
10
|
end
|
11
11
|
|
12
|
-
desc "new PATH", "Create a new
|
12
|
+
desc "new PATH", "Create a new package"
|
13
|
+
option :type,
|
14
|
+
default: "",
|
15
|
+
desc: "Set the package type you want to create. Must be one of " \
|
16
|
+
"#{Generator.registered.keys.inspect}."
|
13
17
|
option :name,
|
14
18
|
default: "",
|
15
|
-
desc: "Set the
|
19
|
+
desc: "Set the package name. Defaults to path's basename."
|
16
20
|
option :active_record,
|
17
21
|
default: false,
|
18
22
|
type: :boolean,
|
@@ -31,8 +35,8 @@ module Dopstick
|
|
31
35
|
desc: "Set Paypal account for donations. Defaults to " \
|
32
36
|
"`git config user.paypal`."
|
33
37
|
option :description,
|
34
|
-
default: "",
|
35
|
-
desc: "Set
|
38
|
+
default: "TODO: add a description",
|
39
|
+
desc: "Set package description."
|
36
40
|
option :version,
|
37
41
|
default: "0.0.0",
|
38
42
|
desc: "Set package initial version."
|
@@ -44,10 +48,19 @@ module Dopstick
|
|
44
48
|
desc: "Set the codebase namespace. By default, it's inferred from " \
|
45
49
|
"the gem name."
|
46
50
|
option :ruby_versions,
|
47
|
-
default: %w[2.
|
51
|
+
default: %w[2.7 3.0],
|
48
52
|
type: :array,
|
49
53
|
desc: "Set Ruby versions that are officially supported. Multiple " \
|
50
54
|
"versions must separated by space."
|
55
|
+
option :node_versions,
|
56
|
+
default: %w[16.x 17.x],
|
57
|
+
type: :array,
|
58
|
+
desc: "Set Node versions that are officially supported. Multiple " \
|
59
|
+
"versions must separated by space."
|
60
|
+
option :skip_install,
|
61
|
+
default: false,
|
62
|
+
type: :boolean,
|
63
|
+
desc: "Skip `bundle install` (gem) and `yarn install` (npm)"
|
51
64
|
option :help,
|
52
65
|
aliases: "-h",
|
53
66
|
type: :boolean,
|
@@ -55,14 +68,25 @@ module Dopstick
|
|
55
68
|
def new(path = nil)
|
56
69
|
interrupt_with_help(:new) if options[:help] || path.to_s.strip.empty?
|
57
70
|
|
58
|
-
|
71
|
+
unless Generator.registered.include?(options[:type])
|
72
|
+
interrupt_with_error(
|
73
|
+
"--type must be one of #{Generator.registered.keys.inspect}"
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
package_name, namespace = expand_gem_name_and_namespace(path)
|
59
78
|
|
60
|
-
|
79
|
+
generator_module = Generator.registered[options[:type]]
|
80
|
+
generator_class = generator_module.const_get(:Generator)
|
81
|
+
options_class = generator_module.const_get(:Options)
|
82
|
+
generator = generator_class.new
|
61
83
|
generator.destination_root = File.expand_path(path)
|
62
|
-
generator.options =
|
63
|
-
|
64
|
-
|
65
|
-
|
84
|
+
generator.options = options_class.new(
|
85
|
+
dup_options.merge(
|
86
|
+
package_name: package_name,
|
87
|
+
namespace: namespace,
|
88
|
+
entry_path: namespace.underscore("/")
|
89
|
+
)
|
66
90
|
)
|
67
91
|
|
68
92
|
generator.invoke_all
|
@@ -74,13 +98,18 @@ module Dopstick
|
|
74
98
|
exit
|
75
99
|
end
|
76
100
|
|
101
|
+
private def interrupt_with_error(message)
|
102
|
+
shell.say "ERROR: #{message}", :red
|
103
|
+
exit 1
|
104
|
+
end
|
105
|
+
|
77
106
|
private def dup_options
|
78
107
|
options.each_with_object({}) do |(key, value), buffer|
|
79
108
|
buffer[key.to_sym] = value
|
80
109
|
end
|
81
110
|
end
|
82
111
|
|
83
|
-
private def expand_gem_name_and_namespace(path)
|
112
|
+
private def expand_gem_name_and_namespace(path)
|
84
113
|
if options[:name].presence && options[:namespace].presence
|
85
114
|
[options[:name], options[:namespace]]
|
86
115
|
elsif options[:name].presence
|
@@ -9,7 +9,7 @@ labels: 'Status: Unconfirmed'
|
|
9
9
|
<!--
|
10
10
|
- Please provide a clear and concise description of what the bug is.
|
11
11
|
- If possible, add an example reproducing your issue.
|
12
|
-
- Please test using the latest version of <%=
|
12
|
+
- Please test using the latest version of <%= options.package_name %>
|
13
13
|
to make sure your issue has not already been fixed.
|
14
14
|
-->
|
15
15
|
|
File without changes
|
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
|
|
55
55
|
## Enforcement
|
56
56
|
|
57
57
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
58
|
-
reported by contacting the project team at <%= user_email %>. All
|
58
|
+
reported by contacting the project team at <%= options.user_email %>. All
|
59
59
|
complaints will be reviewed and investigated and will result in a response that
|
60
60
|
is deemed necessary and appropriate to the circumstances. The project team is
|
61
61
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Contributing to <%=
|
1
|
+
# Contributing to <%= options.package_name %>
|
2
2
|
|
3
3
|
👍🎉 First off, thanks for taking the time to contribute! 🎉👍
|
4
4
|
|
@@ -9,7 +9,7 @@ changes to this document in a pull request.
|
|
9
9
|
## Code of Conduct
|
10
10
|
|
11
11
|
Everyone interacting in this project's codebases, issue trackers, chat rooms and
|
12
|
-
mailing lists is expected to follow the [code of conduct](<%= github_url
|
12
|
+
mailing lists is expected to follow the [code of conduct](<%= options.github_url
|
13
13
|
%>/blob/main/CODE_OF_CONDUCT.md).
|
14
14
|
|
15
15
|
## Reporting bugs
|
@@ -27,19 +27,19 @@ the behavior, and find related reports.
|
|
27
27
|
## Contributing with code
|
28
28
|
|
29
29
|
Before making any radicals changes, please make sure you discuss your intention
|
30
|
-
by [opening an issue on Github](<%= github_url %>/issues).
|
30
|
+
by [opening an issue on Github](<%= options.github_url %>/issues).
|
31
31
|
|
32
32
|
When you're ready to make your pull request, follow checklist below to make sure
|
33
33
|
your contribution is according to how this project works.
|
34
34
|
|
35
|
-
1. [Fork](https://help.github.com/forking/) <%=
|
35
|
+
1. [Fork](https://help.github.com/forking/) <%= options.package_name %>
|
36
36
|
2. Create a topic branch - `git checkout -b my_branch`
|
37
37
|
3. Make your changes using [descriptive commit messages](#commit-messages)
|
38
38
|
4. Update CHANGELOG.md describing your changes by adding an entry to the
|
39
39
|
"Unreleased" section. If this section is not available, create one right
|
40
40
|
before the last version.
|
41
41
|
5. Push to your branch - `git push origin my_branch`
|
42
|
-
6. [Create a pull request](https://
|
42
|
+
6. [Create a pull request](https://help.github.com/articles/creating-a-pull-request)
|
43
43
|
7. That's it!
|
44
44
|
|
45
45
|
## Styleguides
|
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
# Documentation:
|
3
|
+
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
4
|
+
|
5
|
+
version: 2
|
6
|
+
updates:
|
7
|
+
- package-ecosystem: "github-actions"
|
8
|
+
directory: "/"
|
9
|
+
schedule:
|
10
|
+
interval: "daily"
|
11
|
+
|
12
|
+
- package-ecosystem: <%= dependabot_package_ecosystem %>
|
13
|
+
directory: "/"
|
14
|
+
schedule:
|
15
|
+
interval: "daily"
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) <%= Date.today.year %> <%= user_name %>
|
3
|
+
Copyright (c) <%= Date.today.year %> <%= options.user_name %>
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
6
|
this software and associated documentation files (the "Software"), to deal in
|
File without changes
|
File without changes
|
@@ -0,0 +1,173 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dopstick
|
4
|
+
module Generator
|
5
|
+
module Gem
|
6
|
+
Generator.registered["gem"] = self
|
7
|
+
|
8
|
+
class Generator < Thor::Group
|
9
|
+
using Dopstick::Refinements
|
10
|
+
include Thor::Actions
|
11
|
+
|
12
|
+
attr_accessor :options
|
13
|
+
|
14
|
+
desc "Generate a new gem folder structure"
|
15
|
+
|
16
|
+
def self.exit_on_failure?
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.source_paths
|
21
|
+
[
|
22
|
+
source_root,
|
23
|
+
File.join(__dir__, "../base/templates")
|
24
|
+
]
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.source_root
|
28
|
+
File.join(__dir__, "templates")
|
29
|
+
end
|
30
|
+
|
31
|
+
def copy_ruby_templates
|
32
|
+
template "gemspec.erb", "#{options.package_name}.gemspec"
|
33
|
+
template "rakefile.erb", "Rakefile"
|
34
|
+
template "rubocop.erb", ".rubocop.yml"
|
35
|
+
template "gemfile.erb", "Gemfile"
|
36
|
+
template "tests_workflow.erb", ".github/workflows/ruby-tests.yml"
|
37
|
+
end
|
38
|
+
|
39
|
+
def copy_generic_templates
|
40
|
+
template "license.erb", "LICENSE.md"
|
41
|
+
template "coc.erb", "CODE_OF_CONDUCT.md"
|
42
|
+
template "readme.erb", "README.md"
|
43
|
+
template "changelog.erb", "CHANGELOG.md"
|
44
|
+
template "contributing.erb", "CONTRIBUTING.md"
|
45
|
+
template "gitignore.erb", ".gitignore"
|
46
|
+
end
|
47
|
+
|
48
|
+
def copy_github_templates
|
49
|
+
template "funding.erb", ".github/FUNDING.yml"
|
50
|
+
template "bug_report.erb", ".github/ISSUE_TEMPLATE/bug_report.md"
|
51
|
+
template "feature_request.erb",
|
52
|
+
".github/ISSUE_TEMPLATE/feature_request.md"
|
53
|
+
template "pull_request.erb", ".github/PULL_REQUEST_TEMPLATE.md"
|
54
|
+
template "dependabot.erb", ".github/dependabot.yml"
|
55
|
+
template "codeowners.erb", ".github/CODEOWNERS"
|
56
|
+
end
|
57
|
+
|
58
|
+
def copy_bins
|
59
|
+
template "console.erb", "bin/console"
|
60
|
+
template "setup.erb", "bin/setup"
|
61
|
+
in_root { run "chmod +x bin/*" }
|
62
|
+
end
|
63
|
+
|
64
|
+
def create_entry_file
|
65
|
+
if options.entry_path.include?("/")
|
66
|
+
template "gem_entry_file.erb", "lib/#{options.package_name}.rb"
|
67
|
+
end
|
68
|
+
|
69
|
+
template "entry_file.erb", "lib/#{options.entry_path}.rb"
|
70
|
+
end
|
71
|
+
|
72
|
+
def create_version_file
|
73
|
+
template "version.erb", "lib/#{options.entry_path}/version.rb"
|
74
|
+
end
|
75
|
+
|
76
|
+
def copy_test_files
|
77
|
+
template "test_helper.erb", "test/test_helper.rb"
|
78
|
+
template "test_file.erb", "test/#{options.entry_path}_test.rb"
|
79
|
+
end
|
80
|
+
|
81
|
+
def copy_binary_files
|
82
|
+
return unless options.bin?
|
83
|
+
|
84
|
+
template "cli.erb", "lib/#{options.entry_path}/cli.rb"
|
85
|
+
template "generator.erb", "lib/#{options.entry_path}/generator.rb"
|
86
|
+
template "bin.erb", "exe/#{options.bin}"
|
87
|
+
create_file "lib/#{options.entry_path}/templates/.keep"
|
88
|
+
in_root { run "chmod +x exe/*" }
|
89
|
+
end
|
90
|
+
|
91
|
+
def copy_active_record_files
|
92
|
+
return unless options[:active_record]
|
93
|
+
|
94
|
+
template "active_record.erb", "test/support/active_record.rb"
|
95
|
+
end
|
96
|
+
|
97
|
+
def bundle_install
|
98
|
+
return if options.skip_install?
|
99
|
+
|
100
|
+
in_root do
|
101
|
+
run "bundle install"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def initialize_repo
|
106
|
+
in_root do
|
107
|
+
run "git init --initial-branch=main", capture: true
|
108
|
+
run "git add bin --force", capture: true
|
109
|
+
run "git add .", capture: true
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
no_commands do
|
114
|
+
def render_tree(skip_content_spaces = false)
|
115
|
+
content = []
|
116
|
+
|
117
|
+
options.namespace_names.each_with_index do |name, count|
|
118
|
+
content << ((" " * count) + "module #{name}")
|
119
|
+
end
|
120
|
+
|
121
|
+
spacer = skip_content_spaces ? "" : " "
|
122
|
+
|
123
|
+
content << ((spacer * options.namespace_size) + yield)
|
124
|
+
|
125
|
+
(options.namespace_size - 1).downto(0) do |count|
|
126
|
+
content << "#{' ' * count}end"
|
127
|
+
end
|
128
|
+
|
129
|
+
content.join("\n")
|
130
|
+
end
|
131
|
+
|
132
|
+
def render_cli
|
133
|
+
cli_class = erb("cli_class.erb")
|
134
|
+
.chomp
|
135
|
+
.gsub(/^(.)/m, "#{' ' * options.namespace_size}\\1")
|
136
|
+
|
137
|
+
render_tree(true) { cli_class }
|
138
|
+
end
|
139
|
+
|
140
|
+
def render_generator
|
141
|
+
generator_class = erb("generator_class.erb")
|
142
|
+
.chomp
|
143
|
+
.gsub(
|
144
|
+
/^(.)/m,
|
145
|
+
"#{' ' * options.namespace_size}\\1"
|
146
|
+
)
|
147
|
+
|
148
|
+
render_tree(true) { generator_class }
|
149
|
+
end
|
150
|
+
|
151
|
+
def erb(file)
|
152
|
+
ERB.new(
|
153
|
+
File.read("#{self.class.source_root}/#{file}")
|
154
|
+
).result(binding)
|
155
|
+
end
|
156
|
+
|
157
|
+
def dependabot_package_ecosystem
|
158
|
+
"bundler"
|
159
|
+
end
|
160
|
+
|
161
|
+
def ruby_versions_for_workflow
|
162
|
+
options.ruby_versions.map do |v|
|
163
|
+
canonical_segments = ::Gem::Version.new(v).canonical_segments
|
164
|
+
canonical_segments << 0 if canonical_segments.size < 2
|
165
|
+
|
166
|
+
canonical_segments.join(".").inspect
|
167
|
+
end.join(", ")
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dopstick
|
4
|
+
module Generator
|
5
|
+
module Gem
|
6
|
+
class Options < Generator::Options
|
7
|
+
def bin?
|
8
|
+
!@options[:bin].empty?
|
9
|
+
end
|
10
|
+
|
11
|
+
def active_record?
|
12
|
+
@options[:active_record]
|
13
|
+
end
|
14
|
+
|
15
|
+
def namespace_names
|
16
|
+
@namespace_names ||= @options[:namespace].split("::")
|
17
|
+
end
|
18
|
+
|
19
|
+
def namespace_size
|
20
|
+
@namespace_size ||= namespace_names.size
|
21
|
+
end
|
22
|
+
|
23
|
+
def oldest_ruby_version
|
24
|
+
version = ruby_versions
|
25
|
+
.map {|v| ::Gem::Version.new(v) }
|
26
|
+
.min
|
27
|
+
.canonical_segments
|
28
|
+
|
29
|
+
[*version, 0].take(3).join(".")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -21,3 +21,28 @@ ActiveRecord::Base.logger = nil
|
|
21
21
|
def schema(&block)
|
22
22
|
ActiveRecord::Schema.define(version: 0, &block)
|
23
23
|
end
|
24
|
+
|
25
|
+
# Create a new migration, which can be executed up and down.
|
26
|
+
#
|
27
|
+
# test "do something" do
|
28
|
+
# migration = with_migration do
|
29
|
+
# def up
|
30
|
+
# # do something
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# def down
|
34
|
+
# # undo something
|
35
|
+
# end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# migration.up
|
39
|
+
# migration.down
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
def with_migration(&block)
|
43
|
+
migration_class = ActiveRecord::Migration[
|
44
|
+
ActiveRecord::Migration.current_version
|
45
|
+
]
|
46
|
+
|
47
|
+
Class.new(migration_class, &block).new
|
48
|
+
end
|
File without changes
|
File without changes
|