foobara-empty-ruby-project-generator 0.0.1
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 +7 -0
- data/CHANGELOG.md +7 -0
- data/LICENSE-APACHE.txt +202 -0
- data/LICENSE-MIT.txt +21 -0
- data/LICENSE.txt +8 -0
- data/README.md +49 -0
- data/lib/foobara/empty_ruby_project_generator.rb +4 -0
- data/src/generate_empty_ruby_project.rb +43 -0
- data/src/generators/bin_console_generator.rb +15 -0
- data/src/generators/boot_finish_generator.rb +15 -0
- data/src/generators/changelog_generator.rb +15 -0
- data/src/generators/ci_yaml_generator.rb +13 -0
- data/src/generators/gemspec_generator.rb +19 -0
- data/src/generators/gitignore_generator.rb +15 -0
- data/src/generators/initial_spec_generator.rb +23 -0
- data/src/generators/lib_generator.rb +27 -0
- data/src/generators/license_generator.rb +15 -0
- data/src/generators/project_generator.rb +39 -0
- data/src/generators/version_generator.rb +15 -0
- data/src/manifests/project_config.rb +138 -0
- data/src/write_empty_ruby_project_to_disk.rb +192 -0
- data/templates/.bundle/config +2 -0
- data/templates/.github/workflows/ci.yml.erb +87 -0
- data/templates/.gitignore.erb +15 -0
- data/templates/.rspec +4 -0
- data/templates/.rubocop.yml +12 -0
- data/templates/.ruby-version +1 -0
- data/templates/CHANGELOG.md.erb +5 -0
- data/templates/Gemfile +38 -0
- data/templates/Guardfile +6 -0
- data/templates/LICENSE.txt.erb +21 -0
- data/templates/README.md +49 -0
- data/templates/Rakefile +14 -0
- data/templates/bin/console.erb +17 -0
- data/templates/bin/setup +8 -0
- data/templates/boot/config.rb +9 -0
- data/templates/boot/finish.rb.erb +24 -0
- data/templates/boot/start.rb +10 -0
- data/templates/boot.rb +2 -0
- data/templates/gemspec.gemspec.erb +30 -0
- data/templates/lib/project_require_file.rb.erb +3 -0
- data/templates/spec/initial_spec.rb.erb +5 -0
- data/templates/spec/spec_helper.rb +24 -0
- data/templates/spec/support/rubyprof.rb +14 -0
- data/templates/spec/support/simplecov.rb +9 -0
- data/templates/spec/support/term_trap.rb +6 -0
- data/templates/spec/support/vcr.rb +8 -0
- data/templates/src/version.rb.erb +7 -0
- metadata +123 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
require "English"
|
2
|
+
|
3
|
+
module Foobara
|
4
|
+
module Generators
|
5
|
+
module EmptyRubyProjectGenerator
|
6
|
+
class ProjectConfig < Foobara::Model
|
7
|
+
attributes do
|
8
|
+
name :string, "Name can be the directory to create or optionally org/directory. " \
|
9
|
+
"The org will be used as the github org and " \
|
10
|
+
"the directory will be used as the github repository." \
|
11
|
+
"For example, `some-org-on-github/some-repository-name` would create " \
|
12
|
+
"a project modules of `SomeOrgOnGithub::SomeRepositoryName` " \
|
13
|
+
"(unless you override the module name.)"
|
14
|
+
# This specifies the module nesting for generated files for this project. It might have prefixes left out of
|
15
|
+
# the project_name. It will default to Org::Project
|
16
|
+
full_module_name :string, "If you want a different module name than the one inferred from the name input " \
|
17
|
+
"then specify it with this option."
|
18
|
+
description :string, default: "No description. Add one."
|
19
|
+
author_names [:string]
|
20
|
+
author_emails [:string]
|
21
|
+
homepage_url :string
|
22
|
+
# Probably need a better default such as not licensed.
|
23
|
+
license :string, default: "None specified yet"
|
24
|
+
end
|
25
|
+
|
26
|
+
def kebab_case_project_name
|
27
|
+
Util.kebab_case(project_module_path.join)
|
28
|
+
end
|
29
|
+
|
30
|
+
def kebab_case_full_project_name
|
31
|
+
Util.kebab_case(full_project_path.join)
|
32
|
+
end
|
33
|
+
|
34
|
+
def org_slash_project_kebab(organization_name = self.organization_name, project_name = self.project_name)
|
35
|
+
org_part = Util.kebab_case(organization_name)&.gsub("::", "-")
|
36
|
+
project_part = Util.kebab_case(project_name).gsub("::", "-")
|
37
|
+
|
38
|
+
if org_part.nil? || org_part.empty?
|
39
|
+
project_part
|
40
|
+
else
|
41
|
+
"#{org_part}/#{project_part}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def org_slash_project_underscore
|
46
|
+
org_slash_project_kebab.gsub("-", "_")
|
47
|
+
end
|
48
|
+
|
49
|
+
def project_lib_file_path
|
50
|
+
full_project_path.map { |part| Util.underscore(part) }.join("/")
|
51
|
+
end
|
52
|
+
|
53
|
+
def organization_name
|
54
|
+
@organization_name ||= begin
|
55
|
+
org_and_project = name.split("/")
|
56
|
+
|
57
|
+
if org_and_project.size == 2
|
58
|
+
org_and_project.first
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def project_name
|
64
|
+
@project_name ||= name.split("/").last
|
65
|
+
end
|
66
|
+
|
67
|
+
def project_module_path
|
68
|
+
@project_module_path ||= kebab_to_module_path(project_name)
|
69
|
+
end
|
70
|
+
|
71
|
+
def project_module_name
|
72
|
+
@project_module_name ||= project_module_path.join("::")
|
73
|
+
end
|
74
|
+
|
75
|
+
def organization_module_path
|
76
|
+
@organization_module_path ||= kebab_to_module_path(organization_name)
|
77
|
+
end
|
78
|
+
|
79
|
+
def organization_module_name
|
80
|
+
@organization_module_name ||= organization_module_path.join("::")
|
81
|
+
end
|
82
|
+
|
83
|
+
# TODO: These two are not great names. Should have the word "module" in them.
|
84
|
+
def full_project_path
|
85
|
+
@full_project_path ||= full_module_name&.split("::") || [*organization_module_path, *project_module_path]
|
86
|
+
end
|
87
|
+
|
88
|
+
def full_project_name
|
89
|
+
@full_project_name ||= [organization_module_name, project_module_name].compact.join("::")
|
90
|
+
end
|
91
|
+
|
92
|
+
def author_names
|
93
|
+
# TODO: implement #[] or move it up to Model from Entity if it exists there.
|
94
|
+
@author_names ||= read_attribute(:author_names) || begin
|
95
|
+
# TODO: dump a git config file in CI so we don't have to skip this
|
96
|
+
# :nocov:
|
97
|
+
name = `git config --get user.name`
|
98
|
+
|
99
|
+
if $CHILD_STATUS.exitstatus == 0
|
100
|
+
[name.strip]
|
101
|
+
else
|
102
|
+
raise "Must set author_names because we can't get it from git for some reason"
|
103
|
+
end
|
104
|
+
# :nocov:
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def author_emails
|
109
|
+
@author_emails ||= read_attribute(:author_emails) || begin
|
110
|
+
# :nocov:
|
111
|
+
email = `git config --get user.email`
|
112
|
+
|
113
|
+
if $CHILD_STATUS.exitstatus == 0
|
114
|
+
[email.strip]
|
115
|
+
else
|
116
|
+
raise "Must set author_emails because we can't get it from git for some reason"
|
117
|
+
end
|
118
|
+
# :nocov:
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def homepage_url
|
123
|
+
@homepage_url ||= "https://github.com/#{org_slash_project_kebab(organization_name, project_module_name)}"
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
def kebab_to_module_path(kebab)
|
129
|
+
if kebab
|
130
|
+
kebab.split("_").map { |part| Util.classify(part.gsub("-", "_")) }
|
131
|
+
else
|
132
|
+
[]
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
require_relative "generate_empty_ruby_project"
|
2
|
+
|
3
|
+
module Foobara
|
4
|
+
module Generators
|
5
|
+
module EmptyRubyProjectGenerator
|
6
|
+
class WriteEmptyRubyProjectToDisk < Foobara::Generators::WriteGeneratedFilesToDisk
|
7
|
+
class << self
|
8
|
+
def generator_key
|
9
|
+
"ruby-project"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
depends_on GenerateEmptyRubyProject
|
14
|
+
|
15
|
+
inputs do
|
16
|
+
project_config ProjectConfig, :required
|
17
|
+
# TODO: should be able to delete this and inherit it
|
18
|
+
output_directory :string
|
19
|
+
end
|
20
|
+
|
21
|
+
def execute
|
22
|
+
generate_file_contents
|
23
|
+
write_all_files_to_disk
|
24
|
+
run_post_generation_tasks
|
25
|
+
|
26
|
+
output
|
27
|
+
end
|
28
|
+
|
29
|
+
def output_directory
|
30
|
+
inputs[:output_directory] || default_output_directory
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_output_directory
|
34
|
+
project_config.org_slash_project_kebab
|
35
|
+
end
|
36
|
+
|
37
|
+
def generate_file_contents
|
38
|
+
puts "generating..."
|
39
|
+
# TODO: just pass this in as the inputs instead of the command??
|
40
|
+
self.paths_to_source_code = run_subcommand!(GenerateEmptyRubyProject, project_config.attributes)
|
41
|
+
end
|
42
|
+
|
43
|
+
def run_post_generation_tasks
|
44
|
+
Dir.chdir output_directory do
|
45
|
+
bundle_install
|
46
|
+
make_bin_files_executable
|
47
|
+
rubocop_autocorrect
|
48
|
+
git_init
|
49
|
+
git_add_all
|
50
|
+
git_commit
|
51
|
+
github_create_repo
|
52
|
+
git_add_remote_origin
|
53
|
+
git_branch_main
|
54
|
+
push_to_github
|
55
|
+
rbenv_bundler_on
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def bundle_install
|
60
|
+
puts "bundling..."
|
61
|
+
Bundler.with_unbundled_env do
|
62
|
+
Open3.popen3("bundle install") do |_stdin, _stdout, stderr, wait_thr|
|
63
|
+
exit_status = wait_thr.value
|
64
|
+
unless exit_status.success?
|
65
|
+
# :nocov:
|
66
|
+
raise "could not bundle install. #{stderr.read}"
|
67
|
+
# :nocov:
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def rubocop_autocorrect
|
74
|
+
puts "linting..."
|
75
|
+
Open3.popen3("bundle exec rubocop --no-server -A") do |_stdin, _stdout, stderr, wait_thr|
|
76
|
+
exit_status = wait_thr.value
|
77
|
+
unless exit_status.success?
|
78
|
+
# :nocov:
|
79
|
+
raise "could not bundle exec rubocop -A. #{stderr.read}"
|
80
|
+
# :nocov:
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def make_bin_files_executable
|
86
|
+
Dir["bin/*"].each do |file|
|
87
|
+
if File.file?(file)
|
88
|
+
system("chmod u+x #{file}")
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def git_init
|
94
|
+
cmd = "git init"
|
95
|
+
|
96
|
+
Open3.popen3(cmd) do |_stdin, _stdout, stderr, wait_thr|
|
97
|
+
exit_status = wait_thr.value
|
98
|
+
unless exit_status.success?
|
99
|
+
# :nocov:
|
100
|
+
raise "could not #{cmd}\n#{stderr.read}"
|
101
|
+
# :nocov:
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def git_add_all
|
107
|
+
unless system("git add .")
|
108
|
+
# :nocov:
|
109
|
+
raise "could not git add ."
|
110
|
+
# :nocov:
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def git_commit
|
115
|
+
# TODO: set author/name with git config in CI so we don't have to skip this
|
116
|
+
# :nocov:
|
117
|
+
Open3.popen3("git commit -m 'Initial commit'") do |_stdin, _stdout, stderr, wait_thr|
|
118
|
+
exit_status = wait_thr.value
|
119
|
+
unless exit_status.success?
|
120
|
+
raise "could not git commit -m 'Initial commit'. #{stderr.read}"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
# :nocov:
|
124
|
+
end
|
125
|
+
|
126
|
+
attr_accessor :origin_set, :pushed
|
127
|
+
|
128
|
+
def github_create_repo
|
129
|
+
puts "pushing to github..."
|
130
|
+
|
131
|
+
cmd = "gh repo create --public --push --source=. #{project_config.org_slash_project_kebab}"
|
132
|
+
|
133
|
+
Open3.popen3(cmd) do |_stdin, _stdout, _stderr, wait_thr|
|
134
|
+
exit_status = wait_thr.value
|
135
|
+
if exit_status.success?
|
136
|
+
# :nocov:
|
137
|
+
self.origin_set = true
|
138
|
+
self.pushed = true
|
139
|
+
# :nocov:
|
140
|
+
else
|
141
|
+
warn "WARNING: could not #{cmd}"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def git_add_remote_origin
|
147
|
+
return if origin_set
|
148
|
+
|
149
|
+
unless system("git remote add origin git@github.com:#{project_config.org_slash_project_kebab}.git")
|
150
|
+
# :nocov:
|
151
|
+
raise "could not git remote add origin git@github.com:#{project_config.org_slash_project_kebab}.git"
|
152
|
+
# :nocov:
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def git_branch_main
|
157
|
+
unless system("git branch -M main")
|
158
|
+
# :nocov:
|
159
|
+
raise "could not git branch -M main"
|
160
|
+
# :nocov:
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def push_to_github
|
165
|
+
return if pushed
|
166
|
+
|
167
|
+
Open3.popen3("git push -u origin main") do |_stdin, _stdout, stderr, wait_thr|
|
168
|
+
exit_status = wait_thr.value
|
169
|
+
unless exit_status.success?
|
170
|
+
warn "WARNING: could not git push -u origin main \n #{stderr.read}"
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def rbenv_bundler_on
|
176
|
+
# :nocov:
|
177
|
+
Open3.popen3("rbenv bundler on") do |_stdin, _stdout, stderr, wait_thr|
|
178
|
+
exit_status = wait_thr.value
|
179
|
+
unless exit_status.success?
|
180
|
+
warn "WARNING: could not rbenv bundler on \n #{stderr.read}"
|
181
|
+
end
|
182
|
+
end
|
183
|
+
# :nocov:
|
184
|
+
end
|
185
|
+
|
186
|
+
def output
|
187
|
+
"\nDone. #{stats}"
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
name: RSpec and Rubocop
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
|
8
|
+
pull_request:
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
ci:
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
name: RSpec and Rubocop
|
14
|
+
timeout-minutes: 3
|
15
|
+
steps:
|
16
|
+
- uses: actions/checkout@v3
|
17
|
+
- name: setup ruby version and foobara branch and sha1
|
18
|
+
run: |
|
19
|
+
foobara_entry=`grep -A2 -m 1 ' remote: foobara$' Gemfile.lock`
|
20
|
+
regex="revision: ([0-9a-f]+)\s+branch: ([-_[:alnum:]]+)$"
|
21
|
+
|
22
|
+
if [[ $foobara_entry =~ $regex ]]; then
|
23
|
+
foobara_sha1="${BASH_REMATCH[1]}"
|
24
|
+
foobara_branch="${BASH_REMATCH[2]}"
|
25
|
+
|
26
|
+
echo foobara_sha1=$foobara_sha1 >> "$GITHUB_ENV"
|
27
|
+
echo foobara_branch=$foobara_branch >> "$GITHUB_ENV"
|
28
|
+
else
|
29
|
+
echo "$foobara_entry doesn't match $regex" >&2
|
30
|
+
fi
|
31
|
+
|
32
|
+
echo ruby_version=`cat .ruby-version` >> "$GITHUB_ENV"
|
33
|
+
- name: cache foobara
|
34
|
+
id: cache-foobara
|
35
|
+
uses: actions/cache@v3
|
36
|
+
env:
|
37
|
+
cache-name: cache-foobara
|
38
|
+
with:
|
39
|
+
path: ~/work/<%= kebab_case_project_name %>/foobara
|
40
|
+
key: ${{ env.cache-name }}-${{ env.foobara_branch }}-${{ env.foobara_sha1 }}
|
41
|
+
restore-keys: |
|
42
|
+
${{ env.cache-name }}-${{ env.foobara_branch }}-
|
43
|
+
${{ env.cache-name }}-
|
44
|
+
- if: ${{ steps.cache-foobara.outputs.cache-hit != 'true' }}
|
45
|
+
name: clone or pull foobara
|
46
|
+
run: |
|
47
|
+
set -e
|
48
|
+
cd ..
|
49
|
+
if [ -d foobara ]; then
|
50
|
+
echo pulling
|
51
|
+
cd foobara
|
52
|
+
ssh-agent sh -c 'echo "${{ secrets.FOOBARA_KEY }}" | ssh-add - &&
|
53
|
+
git fetch --depth=1 origin $foobara_sha1 &&
|
54
|
+
if git rev-parse --verify -q $foobara_branch; then
|
55
|
+
git checkout -q $foobara_branch
|
56
|
+
git reset --hard $foobara_sha1
|
57
|
+
else
|
58
|
+
git branch $foobara_branch $foobara_sha1
|
59
|
+
git checkout -q $foobara_branch
|
60
|
+
fi'
|
61
|
+
else
|
62
|
+
echo cloning
|
63
|
+
ssh-agent sh -c 'echo "${{ secrets.FOOBARA_KEY }}" | ssh-add - &&
|
64
|
+
git clone -b $foobara_branch --depth=1 git@github.com:foobara/foobara.git'
|
65
|
+
fi
|
66
|
+
- name: symlink foobara and point bundler at it
|
67
|
+
run: |
|
68
|
+
set -e
|
69
|
+
mkdir -p .bundle
|
70
|
+
echo -e "---\nBUNDLE_LOCAL__FOOBARA: '/home/runner/work/<%= kebab_case_project_name %>/foobara'" > .bundle/config
|
71
|
+
mkdir ../../foobara
|
72
|
+
ln -s ../../<%= kebab_case_project_name %>/foobara ../../foobara/foobara
|
73
|
+
- name: Set up Ruby
|
74
|
+
uses: ruby/setup-ruby@v1
|
75
|
+
with:
|
76
|
+
ruby-version: ${{ env.ruby_version }}
|
77
|
+
bundler-cache: true
|
78
|
+
- name: Run rspec
|
79
|
+
run: bundle exec rspec
|
80
|
+
- name: Run rubocop
|
81
|
+
run: bundle exec rubocop
|
82
|
+
# - name: Upload coverage directory
|
83
|
+
# if: always()
|
84
|
+
# uses: actions/upload-artifact@v2
|
85
|
+
# with:
|
86
|
+
# name: coverage-report
|
87
|
+
# path: coverage/
|
data/templates/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.2.2
|
data/templates/Gemfile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
ruby File.read("#{__dir__}/.ruby-version")
|
3
|
+
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
gem "foobara-dotenv-loader", github: "foobara/dotenv-loader"
|
7
|
+
|
8
|
+
gem "rake"
|
9
|
+
|
10
|
+
group :development do
|
11
|
+
gem "foobara-command-generator", github: "foobara/command-generator"
|
12
|
+
gem "foobara-domain-generator", github: "foobara/domain-generator"
|
13
|
+
gem "foobara-empty-ruby-project-generator", github: "foobara/empty-ruby-project-generator"
|
14
|
+
gem "foobara-files-generator", github: "foobara/files-generator"
|
15
|
+
# TODO: only need this one once everything is published gems and we can use .gemspec for this
|
16
|
+
gem "foob"
|
17
|
+
gem "foobara-organization-generator", github: "foobara/organization-generator"
|
18
|
+
gem "foobara-rubocop-rules"
|
19
|
+
gem "foobara-sh-cli-connector", github: "foobara/sh-cli-connector"
|
20
|
+
gem "guard-rspec"
|
21
|
+
gem "rubocop-rake"
|
22
|
+
gem "rubocop-rspec"
|
23
|
+
end
|
24
|
+
|
25
|
+
group :development, :test do
|
26
|
+
gem "pry"
|
27
|
+
gem "pry-byebug"
|
28
|
+
end
|
29
|
+
|
30
|
+
group :test do
|
31
|
+
gem "foobara-spec-helpers"
|
32
|
+
gem "rspec"
|
33
|
+
gem "rspec-its"
|
34
|
+
gem "ruby-prof"
|
35
|
+
gem "simplecov"
|
36
|
+
gem "vcr"
|
37
|
+
gem "webmock"
|
38
|
+
end
|
data/templates/Guardfile
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
guard :rspec, all_after_pass: true, all_on_start: true, cmd: "bundle exec rspec", failed_mode: :focus do
|
2
|
+
watch(%r{^spec/(.+)_spec\.rb$})
|
3
|
+
watch(%r{^lib/(.+)\.rb$}) { "spec/" }
|
4
|
+
watch(%r{^src/(.+)\.rb$}) { "spec/" }
|
5
|
+
watch(%r{^spec/spec_helper.rb$}) { "spec/" }
|
6
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) <%= Time.now.strftime("%Y") %> <%= author_names.join(", ") %>
|
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/templates/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Foobara::EmptyRubyProjectGenerator
|
2
|
+
|
3
|
+
TODO: Delete this and the text below, and describe your gem
|
4
|
+
|
5
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library
|
6
|
+
into a gem. Put your Ruby code in the file `lib/foobara/empty_ruby_project_generator`. To experiment with that code,
|
7
|
+
run `bin/console` for an interactive prompt.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it
|
12
|
+
to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with
|
13
|
+
instructions to install your gem from git if you don't plan to release to RubyGems.org.
|
14
|
+
|
15
|
+
Install the gem and add to the application's Gemfile by executing:
|
16
|
+
|
17
|
+
$ bundle add UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG
|
18
|
+
|
19
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
20
|
+
|
21
|
+
$ gem install UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
If using Foobara locally, then run the following (TODO: make this no-longer necessary.)
|
30
|
+
|
31
|
+
```bash
|
32
|
+
bundle config set disable_local_branch_check true
|
33
|
+
```
|
34
|
+
|
35
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can
|
36
|
+
also run `bin/console` for an interactive prompt that will allow you to experiment.
|
37
|
+
|
38
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the
|
39
|
+
version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version,
|
40
|
+
push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
41
|
+
|
42
|
+
## Contributing
|
43
|
+
|
44
|
+
Bug reports and pull requests are welcome on GitHub
|
45
|
+
at https://github.com/[USERNAME]/foobara-empty_ruby_project_generator.
|
46
|
+
|
47
|
+
## License
|
48
|
+
|
49
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/templates/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "irb"
|
5
|
+
require_relative "../boot"
|
6
|
+
|
7
|
+
IRB.setup(nil)
|
8
|
+
|
9
|
+
if ENV.key?("IRB_PROMPT_PREFIX")
|
10
|
+
prefix = ENV["IRB_PROMPT_PREFIX"]
|
11
|
+
IRB.conf[:PROMPT][:DEFAULT].merge! PROMPT_I: "#{prefix}> ",
|
12
|
+
PROMPT_N: "#{prefix}> ",
|
13
|
+
PROMPT_S: "#{prefix}%l ",
|
14
|
+
PROMPT_C: "#{prefix}* "
|
15
|
+
end
|
16
|
+
|
17
|
+
IRB::Irb.new.run
|
data/templates/bin/setup
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
first = [
|
2
|
+
"remote.rb"
|
3
|
+
]
|
4
|
+
|
5
|
+
last = %w[
|
6
|
+
async.rb
|
7
|
+
cron.rb
|
8
|
+
]
|
9
|
+
|
10
|
+
skip = ["start.rb", "finish.rb", *first, *last]
|
11
|
+
|
12
|
+
first.each { |f| require_relative f if File.exist?("#{__dir__}/#{f}") }
|
13
|
+
|
14
|
+
require "<%= project_lib_file_path %>"
|
15
|
+
|
16
|
+
Dir.entries(__dir__).each do |boot_file|
|
17
|
+
next unless boot_file.end_with?(".rb")
|
18
|
+
next if skip.include?(boot_file)
|
19
|
+
next unless File.exist?("#{__dir__}/#{boot_file}")
|
20
|
+
|
21
|
+
require_relative boot_file
|
22
|
+
end
|
23
|
+
|
24
|
+
last.each { |f| require_relative f if File.exist?("#{__dir__}/#{f}") }
|
data/templates/boot.rb
ADDED