stub_gem 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/.rubocop.yml +2 -0
- data/Gemfile +9 -0
- data/Guardfile +13 -0
- data/README.md +5 -0
- data/Rakefile +15 -0
- data/exe/stub_gem +21 -0
- data/lib/stub_gem/version.rb +5 -0
- data/lib/stub_gem.rb +135 -0
- data/templates/.gitignore +3 -0
- data/templates/.rubocop.yml +5 -0
- data/templates/Gemfile +9 -0
- data/templates/Guardfile +13 -0
- data/templates/LICENSE +21 -0
- data/templates/README.md +15 -0
- data/templates/Rakefile +15 -0
- data/templates/TODO.md +6 -0
- data/templates/base_lib.rb.erb +7 -0
- data/templates/bundle_config +2 -0
- data/templates/gemspec +23 -0
- data/templates/ruby_gh_workflow.yml +30 -0
- data/templates/version.rb.erb +5 -0
- metadata +65 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f72e4d67faf167af670866c1a64bf5a238057d3702c618da37affd337dbcdeef
|
4
|
+
data.tar.gz: 2536a6a972a2b25727a51b2c8f7bc02bb2ed161cb55464e33a5e76c25c3cf5bb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c97ffbced2b9dbdd9a56a092d4d00e49a0d822e089dda34c407bb16de4642c4ad5ed04ef6fd4379b72b48fa26f168527bfa18fe094634bc578c3bd89a75e56c3
|
7
|
+
data.tar.gz: 1940fbbc63f7d7ddab1964d1d284211f6c80283b84b076b08938a395d302ee269d449309da1dc6089457628d69ae4fa221163c8c3fded8456be5d61a239c6017
|
data/.rubocop.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
directories(%w[. lib test].select { |d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist") })
|
4
|
+
|
5
|
+
guard :rake, task: "default" do
|
6
|
+
watch("Gemfile")
|
7
|
+
watch("Rakefile")
|
8
|
+
watch("Guardfile")
|
9
|
+
watch(%r{^test/helper\.rb$})
|
10
|
+
watch(%r{^test/test_(.*)\.rb$})
|
11
|
+
watch(%r{^lib/<%= @project_name %>/(.*)\.rb$})
|
12
|
+
watch(%r{^lib/(.*)\.rb$})
|
13
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
I wanted a program to template out a basic Ruby project, so that all the
|
2
|
+
project setup is "just there" and I don't have to think about what parts I'm
|
3
|
+
missing - everything is already "at hand," it's just a matter of me drumming
|
4
|
+
something up. Project templates are nothing new, but this is my little
|
5
|
+
contribution to the field.
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rake/testtask"
|
5
|
+
require "rubocop/rake_task"
|
6
|
+
|
7
|
+
Rake::TestTask.new(:test) do |t|
|
8
|
+
t.libs << "test"
|
9
|
+
t.libs << "lib"
|
10
|
+
t.test_files = FileList["test/test_*.rb"]
|
11
|
+
end
|
12
|
+
|
13
|
+
RuboCop::RakeTask.new
|
14
|
+
|
15
|
+
task default: %i[test rubocop]
|
data/exe/stub_gem
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "stub_gem"
|
5
|
+
|
6
|
+
def fail_usage(msg)
|
7
|
+
errormsg = <<~MSG
|
8
|
+
ERROR #{msg}
|
9
|
+
stub_gem
|
10
|
+
Usage:
|
11
|
+
stub_gem $PROJECT_NAME
|
12
|
+
MSG
|
13
|
+
abort errormsg
|
14
|
+
end
|
15
|
+
|
16
|
+
# TODO: use OptionParser or something nice like that
|
17
|
+
proj_name = ARGV[0]
|
18
|
+
fail_usage "Need a project name before proceeding" unless proj_name
|
19
|
+
puts "* Project name: #{proj_name}"
|
20
|
+
|
21
|
+
StubGem::RubyProject.new proj_name, "#{Dir.home}/src/#{proj_name}"
|
data/lib/stub_gem.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "pathname"
|
5
|
+
require "fileutils"
|
6
|
+
require "date"
|
7
|
+
require "erb"
|
8
|
+
|
9
|
+
module StubGem
|
10
|
+
class RubyProject
|
11
|
+
def initialize(project_name, base_path)
|
12
|
+
@year = Date.today.year
|
13
|
+
@author = "David Crosby"
|
14
|
+
@project_name = project_name
|
15
|
+
@project_class = @project_name.capitalize
|
16
|
+
|
17
|
+
puts "* Using #{base_path}"
|
18
|
+
@template_dir = "#{File.dirname(Pathname.new(__FILE__).realpath)}/../templates/"
|
19
|
+
puts "* Template dir of #{@template_dir}"
|
20
|
+
fail_usage "project folder location exists at #{base_path}" if Dir.exist? base_path
|
21
|
+
@base_path_str = base_path
|
22
|
+
stub_project
|
23
|
+
end
|
24
|
+
|
25
|
+
def project_class
|
26
|
+
@project_class ||= @project_name.capitalize
|
27
|
+
end
|
28
|
+
|
29
|
+
def stub_project
|
30
|
+
Dir.mkdir @base_path_str
|
31
|
+
dir = Dir.new @base_path_str
|
32
|
+
@base_path = "#{dir.path}/"
|
33
|
+
puts "* Base path of: #{@base_path}"
|
34
|
+
|
35
|
+
stub_directory_structure
|
36
|
+
stub_project_docs
|
37
|
+
stub_library_mgmt
|
38
|
+
stub_testing
|
39
|
+
stub_build_infra
|
40
|
+
stub_linters
|
41
|
+
stub_code_boilerplate
|
42
|
+
stub_version_control
|
43
|
+
end
|
44
|
+
|
45
|
+
def stub_directory_structure
|
46
|
+
[
|
47
|
+
"lib/#{@project_name}",
|
48
|
+
".github/workflows",
|
49
|
+
".bundle",
|
50
|
+
"bin",
|
51
|
+
"test"
|
52
|
+
].each do |dir|
|
53
|
+
FileUtils.mkdir_p("#{@base_path}/#{dir}")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def stub_project_docs
|
58
|
+
# TODO: stub_contributors
|
59
|
+
%w[
|
60
|
+
README.md
|
61
|
+
TODO.md
|
62
|
+
LICENSE
|
63
|
+
].each do |f|
|
64
|
+
stub_single_file(f)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def stub_testing
|
69
|
+
# TODO: stub_minitest
|
70
|
+
end
|
71
|
+
|
72
|
+
def stub_library_mgmt
|
73
|
+
%w[
|
74
|
+
Gemfile
|
75
|
+
].each do |f|
|
76
|
+
stub_single_file(f)
|
77
|
+
end
|
78
|
+
[
|
79
|
+
["Gemfile"],
|
80
|
+
["gemspec", nil, "#{@project_name}.gemspec"]
|
81
|
+
].each do |name, dir, desired_name|
|
82
|
+
stub_single_file name, dir, desired_name
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def stub_build_infra
|
87
|
+
[
|
88
|
+
["Rakefile"],
|
89
|
+
["Guardfile"],
|
90
|
+
["bundle_config", ".bundle", "config"]
|
91
|
+
].each do |name, dir, desired_name|
|
92
|
+
stub_single_file name, dir, desired_name
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def stub_linters
|
97
|
+
%w[
|
98
|
+
.rubocop.yml
|
99
|
+
].each do |f|
|
100
|
+
stub_single_file(f)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def stub_code_boilerplate
|
105
|
+
[
|
106
|
+
["base_lib.rb.erb", "lib", "#{@project_name}.rb"],
|
107
|
+
["version.rb.erb", "lib/#{@project_name}", "version.rb"]
|
108
|
+
].each do |name, dir, desired_name|
|
109
|
+
stub_single_file name, dir, desired_name
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def stub_version_control
|
114
|
+
[
|
115
|
+
[".gitignore"],
|
116
|
+
["ruby_gh_workflow.yml", ".github/workflows", "main.yml"]
|
117
|
+
].each do |name, dir, desired_name|
|
118
|
+
stub_single_file name, dir, desired_name
|
119
|
+
end
|
120
|
+
# TODO: stub_gitcommit
|
121
|
+
# TODO stub_github_project_templates
|
122
|
+
end
|
123
|
+
|
124
|
+
def stub_single_file(name, dir=nil, desired_name=nil)
|
125
|
+
template = ERB.new(File.read(File.join(@template_dir, name)))
|
126
|
+
desired_name ||= name
|
127
|
+
filepath = "#{@base_path}/"
|
128
|
+
filepath << "#{dir}/" if dir
|
129
|
+
filepath << desired_name
|
130
|
+
f = File.new(filepath, "w")
|
131
|
+
f.write(template.result(binding))
|
132
|
+
f.close
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
data/templates/Gemfile
ADDED
data/templates/Guardfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
directories(%w[. lib test].select { |d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist") })
|
4
|
+
|
5
|
+
guard :rake, task: "default" do
|
6
|
+
watch("Gemfile")
|
7
|
+
watch("Rakefile")
|
8
|
+
watch("Guardfile")
|
9
|
+
watch(%r{^test/helper\.rb$})
|
10
|
+
watch(%r{^test/test_(.*)\.rb$})
|
11
|
+
watch(%r{^lib/<%= @project_name %>/(.*)\.rb$})
|
12
|
+
watch(%r{^lib/(.*)\.rb$})
|
13
|
+
end
|
data/templates/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) <%= @year %> <%= @author %>
|
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 all
|
13
|
+
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 THE
|
21
|
+
SOFTWARE.
|
data/templates/README.md
ADDED
data/templates/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rake/testtask"
|
5
|
+
require "rubocop/rake_task"
|
6
|
+
|
7
|
+
Rake::TestTask.new(:test) do |t|
|
8
|
+
t.libs << "test"
|
9
|
+
t.libs << "lib"
|
10
|
+
t.test_files = FileList["test/test_*.rb"]
|
11
|
+
end
|
12
|
+
|
13
|
+
RuboCop::RakeTask.new
|
14
|
+
|
15
|
+
task default: %i[test rubocop]
|
data/templates/TODO.md
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
- [ ] Upload `<%= @project_name %>` to RubyGems (TODO command?)
|
2
|
+
- [ ] Scrub git repo (TODO put command to merge commits into "initial commit")
|
3
|
+
- [ ] Upload git repo to Github (TODO link to "create new repo")
|
4
|
+
- [ ] Write a quick blog post
|
5
|
+
- [ ] Post link to HN (TODO link to thing)
|
6
|
+
- [ ] Post link to lobste.rs
|
data/templates/gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/<%= @project_name %>/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "<%= @project_name %>"
|
7
|
+
spec.required_ruby_version = ">= 2.5.0"
|
8
|
+
spec.version = <%= @project_class %>::VERSION
|
9
|
+
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.authors = ["David Crosby"]
|
11
|
+
spec.homepage = "https://daveops.net"
|
12
|
+
spec.summary = "A fancy new gem"
|
13
|
+
spec.description = "A fancy new gem generated by stub_gem"
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
16
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
17
|
+
|
18
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
19
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
20
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test)/|\.(?:git))})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
|
8
|
+
pull_request:
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
build:
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
name: Ruby ${{ matrix.ruby }}
|
14
|
+
env:
|
15
|
+
BUNDLE_WITH: development
|
16
|
+
strategy:
|
17
|
+
matrix:
|
18
|
+
ruby:
|
19
|
+
- '2.6'
|
20
|
+
- '3.0'
|
21
|
+
|
22
|
+
steps:
|
23
|
+
- uses: actions/checkout@v2
|
24
|
+
- name: Set up Ruby
|
25
|
+
uses: ruby/setup-ruby@v1
|
26
|
+
with:
|
27
|
+
ruby-version: ${{ matrix.ruby }}
|
28
|
+
bundler-cache: true
|
29
|
+
- name: Run the default task
|
30
|
+
run: bundle exec rake
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stub_gem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David Crosby
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-07-26 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Simple program to stub out a Ruby project how I like it
|
14
|
+
email:
|
15
|
+
executables:
|
16
|
+
- stub_gem
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".rubocop.yml"
|
21
|
+
- Gemfile
|
22
|
+
- Guardfile
|
23
|
+
- README.md
|
24
|
+
- Rakefile
|
25
|
+
- exe/stub_gem
|
26
|
+
- lib/stub_gem.rb
|
27
|
+
- lib/stub_gem/version.rb
|
28
|
+
- templates/.gitignore
|
29
|
+
- templates/.rubocop.yml
|
30
|
+
- templates/Gemfile
|
31
|
+
- templates/Guardfile
|
32
|
+
- templates/LICENSE
|
33
|
+
- templates/README.md
|
34
|
+
- templates/Rakefile
|
35
|
+
- templates/TODO.md
|
36
|
+
- templates/base_lib.rb.erb
|
37
|
+
- templates/bundle_config
|
38
|
+
- templates/gemspec
|
39
|
+
- templates/ruby_gh_workflow.yml
|
40
|
+
- templates/version.rb.erb
|
41
|
+
homepage: https://daveops.net
|
42
|
+
licenses:
|
43
|
+
- MIT
|
44
|
+
metadata:
|
45
|
+
rubygems_mfa_required: 'true'
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.6.0
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubygems_version: 3.3.7
|
62
|
+
signing_key:
|
63
|
+
specification_version: 4
|
64
|
+
summary: Simple program to stub out a Ruby project how I like it
|
65
|
+
test_files: []
|