gemsmith 5.3.0 → 5.4.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +68 -29
- data/lib/gemsmith/cli.rb +25 -11
- data/lib/gemsmith/cli_helpers.rb +3 -1
- data/lib/gemsmith/cli_options.rb +6 -4
- data/lib/gemsmith/identity.rb +2 -1
- data/lib/gemsmith/kit.rb +1 -1
- data/lib/gemsmith/rake/build.rb +38 -0
- data/lib/gemsmith/rake/release.rb +62 -0
- data/lib/gemsmith/rake/setup.rb +2 -0
- data/lib/gemsmith/rake/tasks.rb +43 -0
- data/lib/gemsmith/skeletons/base_skeleton.rb +9 -14
- data/lib/gemsmith/skeletons/bundler_skeleton.rb +4 -3
- data/lib/gemsmith/skeletons/cli_skeleton.rb +10 -3
- data/lib/gemsmith/skeletons/documentation_skeleton.rb +7 -6
- data/lib/gemsmith/skeletons/gem_skeleton.rb +13 -0
- data/lib/gemsmith/skeletons/git_skeleton.rb +9 -3
- data/lib/gemsmith/skeletons/guard_skeleton.rb +8 -2
- data/lib/gemsmith/skeletons/rails_skeleton.rb +30 -17
- data/lib/gemsmith/skeletons/rake_skeleton.rb +35 -0
- data/lib/gemsmith/skeletons/rspec_skeleton.rb +15 -7
- data/lib/gemsmith/skeletons/rubocop_skeleton.rb +17 -0
- data/lib/gemsmith/skeletons/ruby_skeleton.rb +10 -0
- data/lib/gemsmith/skeletons/travis_skeleton.rb +8 -2
- data/lib/gemsmith/tasks/rspec.rake +6 -0
- data/lib/gemsmith/tasks/rubocop.rake +6 -0
- data/lib/gemsmith/templates/%gem_name%/%gem_name%.gemspec.tt +4 -1
- data/lib/gemsmith/templates/%gem_name%/.rubocop.yml.tt +18 -0
- data/lib/gemsmith/templates/%gem_name%/.travis.yml.tt +1 -1
- data/lib/gemsmith/templates/%gem_name%/Guardfile.tt +12 -21
- data/lib/gemsmith/templates/%gem_name%/README.md.tt +5 -5
- data/lib/gemsmith/templates/%gem_name%/Rakefile.tt +2 -1
- data/lib/gemsmith/templates/%gem_name%/lib/%gem_name%/cli.rb.tt +2 -1
- data/lib/gemsmith/templates/%gem_name%/lib/%gem_name%/engine.rb.tt +6 -0
- data/lib/gemsmith/templates/%gem_name%/lib/%gem_name%/identity.rb.tt +1 -0
- data/lib/gemsmith/templates/%gem_name%/lib/%gem_name%/tasks/rspec.rake.tt +6 -0
- data/lib/gemsmith/templates/%gem_name%/lib/%gem_name%/tasks/rubocop.rake.tt +6 -0
- data/lib/gemsmith/templates/%gem_name%/lib/generators/%gem_name%/install/install_generator.rb.tt +3 -2
- data/lib/gemsmith/templates/%gem_name%/lib/generators/%gem_name%/upgrade/upgrade_generator.rb.tt +3 -2
- data/lib/gemsmith/templates/%gem_name%/spec/spec_helper.rb.tt +8 -0
- data/lib/gemsmith/templates/%gem_name%/spec/support/kit/stderr.rb.tt +1 -1
- data/lib/gemsmith/templates/%gem_name%/spec/support/kit/stdout.rb.tt +1 -1
- data/lib/gemsmith/templates/%gem_name%/spec/support/kit/temp_dir.rb.tt +1 -0
- metadata +31 -6
- metadata.gz.sig +0 -0
- data/lib/gemsmith/skeletons/default_skeleton.rb +0 -20
- data/lib/gemsmith/templates/%gem_name%/.coveralls.yml.tt +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1805ddbb3db7c0fefc5439520bc56b19d025d5fe
|
4
|
+
data.tar.gz: 0edc5d98121b4acc88d85dd1ae6c7d50dbb9be72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fdd84fddfda3796bd2864437f7178f37b2f735f07770b801933a654319a5ce39df457fd56e261c5b0b737b7512488920b1b3aa3879bf022060f9a43f32abd81
|
7
|
+
data.tar.gz: d039120a68cc02dc413ca0a66d57f30730e65c230876114791d7ddc77882cabe0483310172e382bd5862144856c4ef39d1d0e27653019bbaa2029b070b977835
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# Gemsmith
|
2
2
|
|
3
|
-
[](https://www.gittip.com/bkuhlmann)
|
3
|
+
[](http://badge.fury.io/rb/gemsmith)
|
4
|
+
[](https://codeclimate.com/github/bkuhlmann/gemsmith)
|
5
|
+
[](https://codeclimate.com/github/bkuhlmann/gemsmith)
|
6
|
+
[](https://gemnasium.com/bkuhlmann/gemsmith)
|
7
|
+
[](http://travis-ci.org/bkuhlmann/gemsmith)
|
9
8
|
|
10
9
|
Gemsmith allows you to easily craft new gems via the command line with custom settings (if desired).
|
11
10
|
|
@@ -17,10 +16,13 @@ Gemsmith allows you to easily craft new gems via the command line with custom se
|
|
17
16
|
- [Requirements](#requirements)
|
18
17
|
- [Setup](#setup)
|
19
18
|
- [Usage](#usage)
|
19
|
+
- [Command Line Interface (CLI)](#command-line-interface-cli)
|
20
|
+
- [Rake](#rake)
|
21
|
+
- [Upgrades](#upgrades)
|
20
22
|
- [Tests](#tests)
|
21
23
|
- [Security](#security)
|
22
|
-
- [
|
23
|
-
- [
|
24
|
+
- [Git Signing Key](#git-signing-key)
|
25
|
+
- [Gem Certificates](#gem-certificates)
|
24
26
|
- [Promotion](#promotion)
|
25
27
|
- [Versioning](#versioning)
|
26
28
|
- [Code of Conduct](#code-of-conduct)
|
@@ -38,6 +40,7 @@ Gemsmith allows you to easily craft new gems via the command line with custom se
|
|
38
40
|
- Supports [Thor](https://github.com/wycats/thor) command line functionality.
|
39
41
|
- Supports [Ruby on Rails](http://rubyonrails.org).
|
40
42
|
- Supports [RSpec](http://rspec.info).
|
43
|
+
- Supports [Rubocop](https://github.com/bbatsov/rubocop).
|
41
44
|
- Supports [Pry](http://pryrepl.org).
|
42
45
|
- Supports [Guard](https://github.com/guard/guard).
|
43
46
|
- Supports [Code Climate](https://codeclimate.com).
|
@@ -99,6 +102,8 @@ If no options are configured, then the defaults are as follows:
|
|
99
102
|
|
100
103
|
# Usage
|
101
104
|
|
105
|
+
## Command Line Interface (CLI)
|
106
|
+
|
102
107
|
From the command line, type: gemsmith help
|
103
108
|
|
104
109
|
gemsmith -c, [create=CREATE] # Create new gem.
|
@@ -120,6 +125,8 @@ For more gem creation options, type: gemsmith help create
|
|
120
125
|
# Default: true
|
121
126
|
-s, [--rspec], [--no-rspec] # Add RSpec support.
|
122
127
|
# Default: true
|
128
|
+
-R, [--rubocop], [--no-rubocop] # Add Rubocop support.
|
129
|
+
# Default: true
|
123
130
|
-c, [--code-climate], [--no-code-climate] # Add Code Climate support.
|
124
131
|
# Default: true
|
125
132
|
-G, [--gemnasium], [--no-gemnasium] # Add Gemnasium support.
|
@@ -127,20 +134,68 @@ For more gem creation options, type: gemsmith help create
|
|
127
134
|
-t, [--travis], [--no-travis] # Add Travis CI support.
|
128
135
|
# Default: true
|
129
136
|
|
137
|
+
## Rake
|
138
|
+
|
130
139
|
Once a gem skeleton has been created, the following tasks are available within the project via Bundler (i.e. rake -T):
|
131
140
|
|
132
|
-
rake build
|
133
|
-
rake
|
134
|
-
rake
|
141
|
+
rake build # Build gemsmith-5.4.0.gem into the pkg directory
|
142
|
+
rake clean # Clean gem artifacts
|
143
|
+
rake install # Build and install gemsmith-5.4.0.gem into system gems
|
144
|
+
rake install:local # Build and install gemsmith-5.4.0.gem into system gems without network access
|
145
|
+
rake publish # Build, tag v5.4.0 (signed), and push gemsmith-5.4.0.gem to RubyGems
|
146
|
+
rake readme:toc # Update README Table of Contents
|
147
|
+
rake release # Create tag v5.4.0 and build and push gemsmith-5.4.0.gem to Rubygems
|
148
|
+
rake rubocop # Run RuboCop
|
149
|
+
rake rubocop:auto_correct # Auto-correct RuboCop offenses
|
150
|
+
rake spec # Run RSpec code examples
|
151
|
+
|
152
|
+
## Upgrades
|
153
|
+
|
154
|
+
For those upgrading from Gemsmith 5.3.0 and wanting to use the new Rake tasks, do the following:
|
155
|
+
|
156
|
+
- Edit your `gemspec` and add the following dependency: `spec.add_development_dependency "gemsmith"`.
|
157
|
+
- Edit your `Rakefile` and remove the Bundler requirement `require "bundler/gem_tasks"` and replace it with
|
158
|
+
the Gemsmith tasks: `require "gemsmith/rake/setup"`. Don't worry, this includes the Bundler tasks too.
|
135
159
|
|
136
160
|
# Tests
|
137
161
|
|
138
162
|
To test, run:
|
139
163
|
|
140
|
-
bundle exec
|
164
|
+
bundle exec rake
|
141
165
|
|
142
166
|
# Security
|
143
167
|
|
168
|
+
## Git Signing Key
|
169
|
+
|
170
|
+
To sign your Git tags, start by installing and configuring [GPG](https://www.gnupg.org):
|
171
|
+
|
172
|
+
brew install gpg
|
173
|
+
gpg --gen-key
|
174
|
+
|
175
|
+
When setting up your GPG key, here is an example of safe defaults:
|
176
|
+
|
177
|
+
- Key kind: RSA and RSA (default)
|
178
|
+
- Key size: 4096
|
179
|
+
- Key validity: 0
|
180
|
+
- Real Name: `<your name>`
|
181
|
+
- Email: `<your email>`
|
182
|
+
- Passphrase: `<your passphrase>`
|
183
|
+
|
184
|
+
To obtain your key, run the following and take the part after the forward slash:
|
185
|
+
|
186
|
+
gpg --list-keys | grep pub
|
187
|
+
|
188
|
+
Add your key to your global Git configuration in the `[user]` section. Example:
|
189
|
+
|
190
|
+
[user]
|
191
|
+
signingkey = <your GPG key>
|
192
|
+
|
193
|
+
Now, when publishing your gems with Gemsmith (i.e. `bundle exec rake publish`), signing of your Git tag will happen
|
194
|
+
automatically. Should you not want to sign your tags, use `bundle exec rake release` which is the same as
|
195
|
+
`bundle exec rake publish` except the Git tag is not signed.
|
196
|
+
|
197
|
+
## Gem Certificates
|
198
|
+
|
144
199
|
To create a certificate for your gems, run the following:
|
145
200
|
|
146
201
|
cd ~/.ssh
|
@@ -156,22 +211,6 @@ To learn more about gem certificates, read the following:
|
|
156
211
|
- [A Practical Guide to Using Signed Ruby Gems - Part 1: Bundler](http://blog.meldium.com/home/2013/3/3/signed-rubygems-part)
|
157
212
|
- [A Practical Guide to Using Signed Ruby Gems - Part 2: Heroku](http://blog.meldium.com/home/2013/3/6/signed-gems-on-heroku)
|
158
213
|
|
159
|
-
# Best Practices
|
160
|
-
|
161
|
-
0. [Semantic Versioning](http://semver.org)
|
162
|
-
0. [Best Practices While Cutting Gems](http://rubysource.com/crafting-rubies-best-practices-while-cutting-gems).
|
163
|
-
0. [Ruby on Rails Gem Packaging](http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices).
|
164
|
-
0. [Gem Activation and You: Part I](http://erik.hollensbe.org/2013/05/11/gem-activation-and-you)
|
165
|
-
0. [Gem Activation and You: Part II](http://erik.hollensbe.org/2013/05/15/gem-activation-and-you-part-2-bundler-and-binstubs)
|
166
|
-
0. [Why You Should Use a BSD Style License](http://www.freebsd.org/doc/en/articles/bsdl-gpl/article.html).
|
167
|
-
0. Add -w to the RUBYOPT environment variable when testing. [Details](http://avdi.org/devblog/2011/06/23/how-ruby-helps-you-fix-your-broken-code).
|
168
|
-
|
169
|
-
# Documentation
|
170
|
-
|
171
|
-
In order to make your gem easier to use and adopt by others, good documentation is always a plus. Consider submitting
|
172
|
-
your gem to RubyDocs[http://rubydoc.info] once your gem is released and available for use. RubyDocs supports both
|
173
|
-
RDoc and YARD formats.
|
174
|
-
|
175
214
|
# Promotion
|
176
215
|
|
177
216
|
Once your gem is released, you might like to let the world know about the new awesomeness. Here are several resources:
|
@@ -180,7 +219,7 @@ Once your gem is released, you might like to let the world know about the new aw
|
|
180
219
|
- [Ruby Toolbox](https://www.ruby-toolbox.com)
|
181
220
|
- [RubyFlow](http://www.rubyflow.com)
|
182
221
|
- [The Ruby Show](http://rubyshow.com)
|
183
|
-
- [Ruby 5](
|
222
|
+
- [Ruby 5](https://ruby5.codeschool.com)
|
184
223
|
|
185
224
|
# Versioning
|
186
225
|
|
data/lib/gemsmith/cli.rb
CHANGED
@@ -7,15 +7,19 @@ require "gemsmith/cli_helpers"
|
|
7
7
|
require "gemsmith/skeletons/base_skeleton"
|
8
8
|
require "gemsmith/skeletons/bundler_skeleton"
|
9
9
|
require "gemsmith/skeletons/cli_skeleton"
|
10
|
-
require "gemsmith/skeletons/default_skeleton"
|
11
10
|
require "gemsmith/skeletons/documentation_skeleton"
|
11
|
+
require "gemsmith/skeletons/gem_skeleton"
|
12
12
|
require "gemsmith/skeletons/git_skeleton"
|
13
13
|
require "gemsmith/skeletons/guard_skeleton"
|
14
14
|
require "gemsmith/skeletons/rails_skeleton"
|
15
|
+
require "gemsmith/skeletons/rake_skeleton"
|
15
16
|
require "gemsmith/skeletons/rspec_skeleton"
|
17
|
+
require "gemsmith/skeletons/rubocop_skeleton"
|
18
|
+
require "gemsmith/skeletons/ruby_skeleton"
|
16
19
|
require "gemsmith/skeletons/travis_skeleton"
|
17
20
|
|
18
21
|
module Gemsmith
|
22
|
+
# The Command Line Interface (CLI) for the gem.
|
19
23
|
class CLI < Thor
|
20
24
|
include Thor::Actions
|
21
25
|
include ThorPlus::Actions
|
@@ -29,6 +33,23 @@ module Gemsmith
|
|
29
33
|
File.expand_path File.join(File.dirname(__FILE__), "templates")
|
30
34
|
end
|
31
35
|
|
36
|
+
def self.skeletons
|
37
|
+
[
|
38
|
+
Skeletons::GemSkeleton,
|
39
|
+
Skeletons::DocumentationSkeleton,
|
40
|
+
Skeletons::RakeSkeleton,
|
41
|
+
Skeletons::CLISkeleton,
|
42
|
+
Skeletons::RubySkeleton,
|
43
|
+
Skeletons::RailsSkeleton,
|
44
|
+
Skeletons::RspecSkeleton,
|
45
|
+
Skeletons::RubocopSkeleton,
|
46
|
+
Skeletons::GuardSkeleton,
|
47
|
+
Skeletons::TravisSkeleton,
|
48
|
+
Skeletons::BundlerSkeleton,
|
49
|
+
Skeletons::GitSkeleton
|
50
|
+
]
|
51
|
+
end
|
52
|
+
|
32
53
|
# Initialize.
|
33
54
|
def initialize args = [], options = {}, config = {}
|
34
55
|
super args, options, config
|
@@ -45,6 +66,7 @@ module Gemsmith
|
|
45
66
|
method_option :pry, aliases: "-p", desc: "Add Pry support.", type: :boolean, default: true
|
46
67
|
method_option :guard, aliases: "-g", desc: "Add Guard support.", type: :boolean, default: true
|
47
68
|
method_option :rspec, aliases: "-s", desc: "Add RSpec support.", type: :boolean, default: true
|
69
|
+
method_option :rubocop, aliases: "-R", desc: "Add Rubocop support.", type: :boolean, default: true
|
48
70
|
method_option :code_climate, aliases: "-c", desc: "Add Code Climate support.", type: :boolean, default: true
|
49
71
|
method_option :gemnasium, aliases: "-G", desc: "Add Gemnasium support.", type: :boolean, default: true
|
50
72
|
method_option :travis, aliases: "-t", desc: "Add Travis CI support.", type: :boolean, default: true
|
@@ -53,15 +75,7 @@ module Gemsmith
|
|
53
75
|
info "Creating gem..."
|
54
76
|
|
55
77
|
initialize_template_options name, options
|
56
|
-
|
57
|
-
Skeletons::DocumentationSkeleton.run self
|
58
|
-
Skeletons::CLISkeleton.run(self) if template_options[:bin]
|
59
|
-
Skeletons::RailsSkeleton.run(self) if template_options[:rails]
|
60
|
-
Skeletons::RspecSkeleton.run(self) if template_options[:rspec]
|
61
|
-
Skeletons::GuardSkeleton.run(self) if template_options[:guard]
|
62
|
-
Skeletons::TravisSkeleton.run(self) if template_options[:travis]
|
63
|
-
Skeletons::BundlerSkeleton.run self
|
64
|
-
Skeletons::GitSkeleton.run self
|
78
|
+
self.class.skeletons.each { |skeleton| skeleton.create self }
|
65
79
|
|
66
80
|
info "Gem created."
|
67
81
|
say
|
@@ -94,7 +108,7 @@ module Gemsmith
|
|
94
108
|
desc "-h, [--help=HELP]", "Show this message or get help for a command."
|
95
109
|
map %w(-h --help) => :help
|
96
110
|
def help task = nil
|
97
|
-
say
|
111
|
+
say && super
|
98
112
|
end
|
99
113
|
end
|
100
114
|
end
|
data/lib/gemsmith/cli_helpers.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
module Gemsmith
|
2
|
+
# Command Line Interface (CLI) helpers that aid the CLI class. These are extracted to a module
|
3
|
+
# in order to not clutter up the main CLI object.
|
2
4
|
module CLIHelpers
|
3
5
|
# Answers default editor.
|
4
6
|
# NOTE: This will be replaced by the Thor+ gem in the future.
|
@@ -51,7 +53,7 @@ module Gemsmith
|
|
51
53
|
def pick_gem gems, name
|
52
54
|
result = ask "Please pick one (or type 'q' to quit):"
|
53
55
|
|
54
|
-
return if result ==
|
56
|
+
return if result == "q" # Exit early.
|
55
57
|
|
56
58
|
if (1..gems.size).include?(result.to_i)
|
57
59
|
Gem::Specification.find_by_name name, gems[result.to_i - 1].version.version
|
data/lib/gemsmith/cli_options.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
module Gemsmith
|
2
|
+
# Provides Command Line Interface (CLI) settings initialization with safe defaults.
|
2
3
|
module CLIOptions
|
3
4
|
module_function
|
4
5
|
|
@@ -36,6 +37,7 @@ module Gemsmith
|
|
36
37
|
pry: default_boolean(:pry, true),
|
37
38
|
guard: default_boolean(:guard, true),
|
38
39
|
rspec: default_boolean(:rspec, true),
|
40
|
+
rubocop: default_boolean(:rubocop, true),
|
39
41
|
code_climate: default_boolean(:code_climate, true),
|
40
42
|
gemnasium: default_boolean(:gemnasium, true),
|
41
43
|
travis: default_boolean(:travis, true)
|
@@ -59,11 +61,11 @@ module Gemsmith
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def author_name
|
62
|
-
@settings[:author_name] || Gemsmith::Kit.git_config_value("user.name") || "TODO: Add full name
|
64
|
+
@settings[:author_name] || Gemsmith::Kit.git_config_value("user.name") || "TODO: Add full name."
|
63
65
|
end
|
64
66
|
|
65
67
|
def author_email
|
66
|
-
@settings[:author_email] || Gemsmith::Kit.git_config_value("user.email") || "TODO: Add email address
|
68
|
+
@settings[:author_email] || Gemsmith::Kit.git_config_value("user.email") || "TODO: Add email address."
|
67
69
|
end
|
68
70
|
|
69
71
|
def author_url
|
@@ -87,7 +89,7 @@ module Gemsmith
|
|
87
89
|
end
|
88
90
|
|
89
91
|
def ruby_version
|
90
|
-
@settings[:ruby_version] || "2.2.
|
92
|
+
@settings[:ruby_version] || "2.2.3"
|
91
93
|
end
|
92
94
|
|
93
95
|
def rails_version
|
@@ -95,7 +97,7 @@ module Gemsmith
|
|
95
97
|
end
|
96
98
|
|
97
99
|
def default_boolean key, value = false
|
98
|
-
@settings.
|
100
|
+
@settings.key?(key) ? @settings[key] : value
|
99
101
|
end
|
100
102
|
end
|
101
103
|
end
|
data/lib/gemsmith/identity.rb
CHANGED
data/lib/gemsmith/kit.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
require "bundler/ui/shell"
|
2
|
+
|
3
|
+
module Gemsmith
|
4
|
+
module Rake
|
5
|
+
# Enhances gem publishing with build functionality. Meant to be wrapped in Rake tasks.
|
6
|
+
class Build
|
7
|
+
def initialize shell: Bundler::UI::Shell.new, kernel: Kernel
|
8
|
+
@shell = shell
|
9
|
+
@kernel = kernel
|
10
|
+
end
|
11
|
+
|
12
|
+
def table_of_contents
|
13
|
+
if kernel.system("command -v doctoc > /dev/null")
|
14
|
+
kernel.system %(doctoc --title "# Table of Contents" README.md)
|
15
|
+
else
|
16
|
+
shell.error error_message
|
17
|
+
kernel.exit 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def clean!
|
22
|
+
FileUtils.rm_rf "pkg"
|
23
|
+
shell.info "Gem artifacts cleaned."
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :shell, :kernel
|
29
|
+
|
30
|
+
def error_message
|
31
|
+
url = "https://github.com/thlorenz/doctoc"
|
32
|
+
command = "npm install --global doctoc"
|
33
|
+
|
34
|
+
"Unable to update README Table of Contents, please install DocToc (#{url}): #{command}."
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "bundler/ui/shell"
|
2
|
+
|
3
|
+
module Gemsmith
|
4
|
+
module Rake
|
5
|
+
# Enhances gem publishing with release functionality. Meant to be wrapped in Rake tasks.
|
6
|
+
class Release
|
7
|
+
def initialize gem_spec_path = Dir.glob("#{Dir.pwd}/*.gemspec").first,
|
8
|
+
shell: Bundler::UI::Shell.new,
|
9
|
+
kernel: Kernel
|
10
|
+
|
11
|
+
@gem_spec_path = gem_spec_path
|
12
|
+
@shell = shell
|
13
|
+
@kernel = kernel
|
14
|
+
|
15
|
+
@gem_spec = load_gem_spec
|
16
|
+
end
|
17
|
+
|
18
|
+
def name
|
19
|
+
gem_spec.name
|
20
|
+
end
|
21
|
+
|
22
|
+
def version
|
23
|
+
gem_spec.version.version
|
24
|
+
end
|
25
|
+
|
26
|
+
def version_formatted
|
27
|
+
"v#{version}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def package_file_name
|
31
|
+
"#{name}-#{version}.gem"
|
32
|
+
end
|
33
|
+
|
34
|
+
def tag
|
35
|
+
shell.error(%(Tag #{version_formatted} exists!)) && return if tagged?
|
36
|
+
|
37
|
+
return if kernel.system %(git tag --sign --annotate "#{version_formatted}" --message "Version #{version}.")
|
38
|
+
|
39
|
+
kernel.system "git tag -d #{version_formatted}"
|
40
|
+
shell.error %(Removed "#{version_formatted}" due to errors.)
|
41
|
+
end
|
42
|
+
|
43
|
+
def push
|
44
|
+
kernel.system "git push --tags"
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
attr_reader :gem_spec_path, :gem_spec, :shell, :kernel
|
50
|
+
|
51
|
+
def load_gem_spec
|
52
|
+
Bundler.load_gemspec gem_spec_path.to_s
|
53
|
+
rescue Errno::ENOENT
|
54
|
+
shell.error "Invalid gemspec file path: #{gem_spec_path}."
|
55
|
+
end
|
56
|
+
|
57
|
+
def tagged?
|
58
|
+
kernel.system %(git show #{version_formatted})
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "gemsmith/rake/build"
|
3
|
+
require "gemsmith/rake/release"
|
4
|
+
|
5
|
+
module Gemsmith
|
6
|
+
module Rake
|
7
|
+
# Provides Rake tasks for use in all gems built by this gem.
|
8
|
+
class Tasks
|
9
|
+
include ::Rake::DSL
|
10
|
+
|
11
|
+
def self.setup
|
12
|
+
new.install
|
13
|
+
end
|
14
|
+
|
15
|
+
def install
|
16
|
+
build = Gemsmith::Rake::Build.new
|
17
|
+
release = Gemsmith::Rake::Release.new
|
18
|
+
|
19
|
+
::Rake::Task[:build].enhance [:clean, "readme:toc"]
|
20
|
+
::Rake::Task[:release].enhance { ::Rake::Task[:clean].invoke }
|
21
|
+
|
22
|
+
namespace :readme do
|
23
|
+
desc "Update README Table of Contents."
|
24
|
+
task :toc do
|
25
|
+
build.table_of_contents
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "Clean gem artifacts."
|
30
|
+
task :clean do
|
31
|
+
build.clean!
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "Build, tag #{release.version_formatted} (signed), and push #{release.package_file_name} to RubyGems"
|
35
|
+
task publish: [:clean, :build, "release:guard_clean"] do
|
36
|
+
release.tag
|
37
|
+
release.push
|
38
|
+
::Rake::Task["release:rubygem_push"].invoke
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,32 +1,27 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Abstract class from which all skeletons inherit from.
|
3
4
|
class BaseSkeleton
|
4
5
|
def initialize cli
|
5
6
|
@cli = cli
|
6
7
|
end
|
7
8
|
|
8
|
-
def self.
|
9
|
-
|
9
|
+
def self.create cli
|
10
|
+
new(cli).create
|
10
11
|
end
|
11
12
|
|
12
|
-
def
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
def respond_to? name, include_private = false
|
17
|
-
@cli.respond_to?(name, include_private) || super(name, include_private)
|
13
|
+
def enabled?
|
14
|
+
true
|
18
15
|
end
|
19
16
|
|
20
|
-
def
|
21
|
-
|
22
|
-
@cli.public_send name, *args, &block
|
23
|
-
else
|
24
|
-
super name, *args, &block
|
25
|
-
end
|
17
|
+
def create
|
18
|
+
fail NotImplementedError, "The method, #create, is not implemented yet."
|
26
19
|
end
|
27
20
|
|
28
21
|
private
|
29
22
|
|
23
|
+
attr_reader :cli
|
24
|
+
|
30
25
|
def lib_root
|
31
26
|
"%gem_name%/lib"
|
32
27
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Configures Bundler support.
|
3
4
|
class BundlerSkeleton < BaseSkeleton
|
4
|
-
def
|
5
|
-
Dir.chdir(File.join(destination_root, gem_name)) do
|
6
|
-
info "Installing gem dependencies..."
|
5
|
+
def create
|
6
|
+
Dir.chdir(File.join(cli.destination_root, cli.gem_name)) do
|
7
|
+
cli.info "Installing gem dependencies..."
|
7
8
|
`bundle install`
|
8
9
|
end
|
9
10
|
end
|
@@ -1,9 +1,16 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Configures Command Line Interface (CLI) support.
|
3
4
|
class CLISkeleton < BaseSkeleton
|
4
|
-
def
|
5
|
-
|
6
|
-
|
5
|
+
def enabled?
|
6
|
+
cli.template_options.key?(:bin) && cli.template_options[:bin]
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
return unless enabled?
|
11
|
+
|
12
|
+
cli.template "%gem_name%/bin/%gem_name%.tt", cli.template_options
|
13
|
+
cli.template "%gem_name%/lib/%gem_name%/cli.rb.tt", cli.template_options
|
7
14
|
end
|
8
15
|
end
|
9
16
|
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Configures documentation support.
|
3
4
|
class DocumentationSkeleton < BaseSkeleton
|
4
|
-
def
|
5
|
-
template "%gem_name%/README.md.tt", template_options
|
6
|
-
template "%gem_name%/CONTRIBUTING.md.tt", template_options
|
7
|
-
template "%gem_name%/CODE_OF_CONDUCT.md.tt", template_options
|
8
|
-
template "%gem_name%/LICENSE.md.tt", template_options
|
9
|
-
template "%gem_name%/CHANGELOG.md.tt", template_options
|
5
|
+
def create
|
6
|
+
cli.template "%gem_name%/README.md.tt", cli.template_options
|
7
|
+
cli.template "%gem_name%/CONTRIBUTING.md.tt", cli.template_options
|
8
|
+
cli.template "%gem_name%/CODE_OF_CONDUCT.md.tt", cli.template_options
|
9
|
+
cli.template "%gem_name%/LICENSE.md.tt", cli.template_options
|
10
|
+
cli.template "%gem_name%/CHANGELOG.md.tt", cli.template_options
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Gemsmith
|
2
|
+
module Skeletons
|
3
|
+
# Configures default gem support.
|
4
|
+
class GemSkeleton < BaseSkeleton
|
5
|
+
def create
|
6
|
+
cli.template "%gem_name%/Gemfile.tt", cli.template_options
|
7
|
+
cli.template "%gem_name%/%gem_name%.gemspec.tt", cli.template_options
|
8
|
+
cli.template "#{lib_root}/%gem_name%.rb.tt", cli.template_options
|
9
|
+
cli.template "#{lib_root}/%gem_name%/identity.rb.tt", cli.template_options
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,17 +1,23 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Configures Git support.
|
3
4
|
class GitSkeleton < BaseSkeleton
|
4
|
-
def
|
5
|
-
template "%gem_name
|
5
|
+
def create_ignore_file
|
6
|
+
cli.template "%gem_name%/.gitignore.tt", cli.template_options
|
6
7
|
end
|
7
8
|
|
8
9
|
def create_repository
|
9
|
-
Dir.chdir(File.join(destination_root, gem_name)) do
|
10
|
+
Dir.chdir(File.join(cli.destination_root, cli.gem_name)) do
|
10
11
|
`git init`
|
11
12
|
`git add .`
|
12
13
|
`git commit --all --no-verify --message "Added Gemsmith skeleton."`
|
13
14
|
end
|
14
15
|
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
create_ignore_file
|
19
|
+
create_repository
|
20
|
+
end
|
15
21
|
end
|
16
22
|
end
|
17
23
|
end
|
@@ -1,8 +1,14 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Configures Guard support.
|
3
4
|
class GuardSkeleton < BaseSkeleton
|
4
|
-
def
|
5
|
-
|
5
|
+
def enabled?
|
6
|
+
cli.template_options.key?(:guard) && cli.template_options[:guard]
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
return unless enabled?
|
11
|
+
cli.template "%gem_name%/Guardfile.tt", cli.template_options
|
6
12
|
end
|
7
13
|
end
|
8
14
|
end
|
@@ -1,35 +1,48 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Configures Ruby on Rails support.
|
3
4
|
class RailsSkeleton < BaseSkeleton
|
5
|
+
def enabled?
|
6
|
+
cli.template_options.key?(:rails) && cli.template_options[:rails]
|
7
|
+
end
|
8
|
+
|
4
9
|
def create_engine
|
5
|
-
gem_name
|
6
|
-
|
7
|
-
|
8
|
-
|
10
|
+
cli.template "#{lib_root}/%gem_name%/engine.rb.tt", cli.template_options
|
11
|
+
|
12
|
+
gem_name = cli.template_options.fetch :gem_name
|
13
|
+
system "rails plugin new --skip #{gem_name} #{engine_options}"
|
14
|
+
|
15
|
+
cli.remove_file "#{gem_name}/app/helpers/#{gem_name}/application_helper.rb", cli.template_options
|
16
|
+
cli.remove_file "#{gem_name}/lib/#{gem_name}/version.rb", cli.template_options
|
17
|
+
cli.remove_file "#{gem_name}/MIT-LICENSE", cli.template_options
|
18
|
+
cli.remove_file "#{gem_name}/README.rdoc", cli.template_options
|
9
19
|
end
|
10
20
|
|
11
21
|
def create_generator_files
|
12
|
-
empty_directory "#{generator_root}/templates"
|
13
|
-
template "#{generator_root}/install/install_generator.rb.tt", template_options
|
14
|
-
template "#{generator_root}/install/USAGE.tt", template_options
|
15
|
-
template "#{generator_root}/upgrade/upgrade_generator.rb.tt", template_options
|
16
|
-
template "#{generator_root}/upgrade/USAGE.tt", template_options
|
22
|
+
cli.empty_directory "#{generator_root}/templates"
|
23
|
+
cli.template "#{generator_root}/install/install_generator.rb.tt", cli.template_options
|
24
|
+
cli.template "#{generator_root}/install/USAGE.tt", cli.template_options
|
25
|
+
cli.template "#{generator_root}/upgrade/upgrade_generator.rb.tt", cli.template_options
|
26
|
+
cli.template "#{generator_root}/upgrade/USAGE.tt", cli.template_options
|
17
27
|
end
|
18
28
|
|
19
29
|
def create_travis_gemfiles
|
20
|
-
|
21
|
-
|
22
|
-
end
|
30
|
+
return unless cli.template_options[:travis]
|
31
|
+
cli.template "%gem_name%/gemfiles/rails-4.1.x.gemfile.tt", cli.template_options
|
23
32
|
end
|
24
33
|
|
25
|
-
|
34
|
+
def create
|
35
|
+
return unless enabled?
|
26
36
|
|
27
|
-
|
28
|
-
|
37
|
+
create_engine
|
38
|
+
create_generator_files
|
39
|
+
create_travis_gemfiles
|
29
40
|
end
|
30
41
|
|
31
|
-
|
32
|
-
|
42
|
+
private
|
43
|
+
|
44
|
+
def engine_options
|
45
|
+
"--skip-bundle --skip-test-unit --skip-keeps --skip-git --mountable --dummy-path=spec/dummy"
|
33
46
|
end
|
34
47
|
|
35
48
|
def generator_root
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Gemsmith
|
2
|
+
module Skeletons
|
3
|
+
# Configures Rake support.
|
4
|
+
class RakeSkeleton < BaseSkeleton
|
5
|
+
def self.allowed_options
|
6
|
+
{
|
7
|
+
rspec: "spec",
|
8
|
+
rubocop: "rubocop"
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
cli.template "%gem_name%/Rakefile.tt", cli.template_options
|
14
|
+
configure_rakefile
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def allowed_options?
|
20
|
+
cli.template_options.keys.any? { |key| self.class.allowed_options.keys.include? key }
|
21
|
+
end
|
22
|
+
|
23
|
+
def default_tasks
|
24
|
+
cli.template_options.each.with_object([]) do |(key, _), tasks|
|
25
|
+
tasks.push self.class.allowed_options[key]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def configure_rakefile
|
30
|
+
return unless allowed_options?
|
31
|
+
cli.append_to_file "%gem_name%/Rakefile", "\ntask default: %w(#{default_tasks.compact.join(' ')})\n"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,13 +1,21 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Configures RSpec support.
|
3
4
|
class RspecSkeleton < BaseSkeleton
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
def enabled?
|
6
|
+
cli.template_options.key?(:rspec) && cli.template_options[:rspec]
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
return unless enabled?
|
11
|
+
|
12
|
+
cli.template "%gem_name%/lib/%gem_name%/tasks/rspec.rake.tt", cli.template_options
|
13
|
+
cli.template "#{rspec_root}/spec_helper.rb.tt", cli.template_options
|
14
|
+
cli.template "#{rspec_root}/%gem_name%_spec.rb.tt", cli.template_options
|
15
|
+
cli.template "#{rspec_root}/support/kit/default_config.rb.tt", cli.template_options
|
16
|
+
cli.template "#{rspec_root}/support/kit/stderr.rb.tt", cli.template_options
|
17
|
+
cli.template "#{rspec_root}/support/kit/stdout.rb.tt", cli.template_options
|
18
|
+
cli.template "#{rspec_root}/support/kit/temp_dir.rb.tt", cli.template_options
|
11
19
|
end
|
12
20
|
|
13
21
|
private
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Gemsmith
|
2
|
+
module Skeletons
|
3
|
+
# Configures Rubocop support.
|
4
|
+
class RubocopSkeleton < BaseSkeleton
|
5
|
+
def enabled?
|
6
|
+
cli.template_options.key?(:rubocop) && cli.template_options[:rubocop]
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
return unless enabled?
|
11
|
+
|
12
|
+
cli.template "%gem_name%/.rubocop.yml.tt", cli.template_options
|
13
|
+
cli.template "%gem_name%/lib/%gem_name%/tasks/rubocop.rake.tt", cli.template_options
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,8 +1,14 @@
|
|
1
1
|
module Gemsmith
|
2
2
|
module Skeletons
|
3
|
+
# Configures Travis CI support.
|
3
4
|
class TravisSkeleton < BaseSkeleton
|
4
|
-
def
|
5
|
-
|
5
|
+
def enabled?
|
6
|
+
cli.template_options.key?(:travis) && cli.template_options[:travis]
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
return unless enabled?
|
11
|
+
cli.template "%gem_name%/.travis.yml.tt", cli.template_options
|
6
12
|
end
|
7
13
|
end
|
8
14
|
end
|
@@ -22,7 +22,6 @@ Gem::Specification.new do |spec|
|
|
22
22
|
end
|
23
23
|
<%- end -%>
|
24
24
|
|
25
|
-
spec.required_ruby_version = "~> <%= config[:ruby_version] %>"
|
26
25
|
<%- if config[:bin] -%>
|
27
26
|
spec.add_dependency "thor"
|
28
27
|
spec.add_dependency "thor_plus"
|
@@ -33,6 +32,7 @@ Gem::Specification.new do |spec|
|
|
33
32
|
<%- if config[:travis] -%>
|
34
33
|
spec.add_development_dependency "rake"
|
35
34
|
<%- end -%>
|
35
|
+
spec.add_development_dependency "gemsmith"
|
36
36
|
<%- if config[:pry] -%>
|
37
37
|
spec.add_development_dependency "pry"
|
38
38
|
spec.add_development_dependency "pry-byebug"
|
@@ -54,6 +54,9 @@ Gem::Specification.new do |spec|
|
|
54
54
|
spec.add_development_dependency "terminal-notifier"
|
55
55
|
spec.add_development_dependency "terminal-notifier-guard"
|
56
56
|
<%- end -%>
|
57
|
+
<%- if config[:rubocop] -%>
|
58
|
+
spec.add_development_dependency "rubocop"
|
59
|
+
<%- end -%>
|
57
60
|
<%- if config[:code_climate] -%>
|
58
61
|
spec.add_development_dependency "codeclimate-test-reporter"
|
59
62
|
<%- end -%>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%- if config[:rails] -%>
|
2
|
+
AllCops:
|
3
|
+
Exclude:
|
4
|
+
- "spec/dummy/**/*"
|
5
|
+
- "bin/rails"
|
6
|
+
<%- end -%>
|
7
|
+
Style/CaseIndentation:
|
8
|
+
IndentOneStep: true
|
9
|
+
Style/MethodDefParentheses:
|
10
|
+
EnforcedStyle: require_no_parentheses
|
11
|
+
Style/SingleLineBlockParams:
|
12
|
+
Enabled: false
|
13
|
+
Style/SpaceInsideHashLiteralBraces:
|
14
|
+
EnforcedStyle: no_space
|
15
|
+
Style/StringLiterals:
|
16
|
+
EnforcedStyle: double_quotes
|
17
|
+
Metrics/LineLength:
|
18
|
+
Max: 120
|
@@ -1,30 +1,21 @@
|
|
1
1
|
guard :rspec, cmd: "bundle exec rspec" do
|
2
2
|
watch(%r{^spec/.+_spec\.rb$})
|
3
|
-
watch(%r{^lib/(.+)\.rb$})
|
4
|
-
watch(
|
3
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
4
|
+
watch("spec/spec_helper.rb") { "spec" }
|
5
5
|
<%- if config[:rails] -%>
|
6
6
|
|
7
7
|
# Rails
|
8
|
-
watch(%r{^app/(.+)\.rb$})
|
9
|
-
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$})
|
10
|
-
watch(%r{^app/controllers/(.+)_(controller)\.rb$})
|
11
|
-
|
12
|
-
|
13
|
-
watch(
|
14
|
-
watch(
|
8
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
9
|
+
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
10
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) do |m|
|
11
|
+
["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb"]
|
12
|
+
end
|
13
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
14
|
+
watch("config/routes.rb") { "spec/routing" }
|
15
|
+
watch("app/controllers/application_controller.rb") { "spec/controllers" }
|
16
|
+
watch("spec/rails_helper.rb") { "spec" }
|
15
17
|
|
16
18
|
# Capybara
|
17
|
-
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$})
|
19
|
+
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
|
18
20
|
<%- end -%>
|
19
21
|
end
|
20
|
-
|
21
|
-
<%- if config[:rails] -%>
|
22
|
-
guard "livereload" do
|
23
|
-
watch(%r{app/views/.+\.(erb|haml|slim)$})
|
24
|
-
watch(%r{app/helpers/.+\.rb})
|
25
|
-
watch(%r{public/.+\.(css|js|html)})
|
26
|
-
watch(%r{config/locales/.+\.yml})
|
27
|
-
# Rails Assets Pipeline
|
28
|
-
watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|js|html|png|jpg))).*}) { |m| "/assets/#{m[3]}" }
|
29
|
-
end
|
30
|
-
<%- end -%>
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# <%= config[:gem_class] %>
|
2
2
|
|
3
|
-
[](http://badge.fury.io/rb/<%= config[:gem_name] %>)
|
4
4
|
<%- if config[:code_climate] -%>
|
5
|
-
[](https://codeclimate.com/github/<%= config[:github_user] %>/<%= config[:gem_name] %>)
|
6
|
+
[](https://codeclimate.com/github/<%= config[:github_user] %>/<%= config[:gem_name] %>)
|
7
7
|
<%- end -%>
|
8
8
|
<%- if config[:gemnasium] -%>
|
9
|
-
[](https://gemnasium.com/<%= config[:github_user] %>/<%= config[:gem_name] %>)
|
10
10
|
<%- end -%>
|
11
11
|
<%- if config[:travis] -%>
|
12
|
-
[](http://travis-ci.org/<%= config[:github_user] %>/<%= config[:gem_name] %>)
|
13
13
|
<%- end -%>
|
14
14
|
|
15
15
|
<!-- START doctoc - For use by DocToc (https://github.com/thlorenz/doctoc), autogenerates the table of contents -->
|
@@ -1 +1,2 @@
|
|
1
|
-
require "
|
1
|
+
require "gemsmith/rake/setup"
|
2
|
+
Dir.glob("lib/<%= config[:gem_name] %>/tasks/*.rake").each { |file| load file }
|
@@ -4,6 +4,7 @@ require "thor/actions"
|
|
4
4
|
require "thor_plus/actions"
|
5
5
|
|
6
6
|
module <%= config[:gem_class] %>
|
7
|
+
# The Command Line Interface (CLI) for the gem.
|
7
8
|
class CLI < Thor
|
8
9
|
include Thor::Actions
|
9
10
|
include ThorPlus::Actions
|
@@ -24,7 +25,7 @@ module <%= config[:gem_class] %>
|
|
24
25
|
desc "-h, [--help=HELP]", "Show this message or get help for a command."
|
25
26
|
map %w(-h --help) => :help
|
26
27
|
def help task = nil
|
27
|
-
say
|
28
|
+
say && super
|
28
29
|
end
|
29
30
|
end
|
30
31
|
end
|
data/lib/gemsmith/templates/%gem_name%/lib/generators/%gem_name%/install/install_generator.rb.tt
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module <%= config[:gem_class] %>
|
2
|
+
# Generator for installing new files.
|
2
3
|
class InstallGenerator < Rails::Generators::Base
|
3
|
-
|
4
|
+
source_root File.join(File.dirname(__FILE__), "..", "templates")
|
4
5
|
|
5
6
|
desc "Installs additional <%= config[:gem_class] %> resources."
|
6
7
|
def install
|
7
|
-
# TODO
|
8
|
+
# TODO: Add install code.
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
data/lib/gemsmith/templates/%gem_name%/lib/generators/%gem_name%/upgrade/upgrade_generator.rb.tt
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
module <%= config[:gem_class] %>
|
2
|
+
# Generator for updating existing files.
|
2
3
|
class UpgradeGenerator < Rails::Generators::Base
|
3
|
-
|
4
|
+
source_root File.join(File.dirname(__FILE__), "..", "templates")
|
4
5
|
|
5
6
|
desc "Upgrades previously installed <%= config[:gem_class] %> resources."
|
6
7
|
def upgrade
|
7
|
-
# TODO
|
8
|
+
# TODO: Add upgrade code.
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
@@ -1,9 +1,17 @@
|
|
1
1
|
require "bundler/setup"
|
2
|
+
|
2
3
|
<%- if config[:code_climate] -%>
|
3
4
|
if ENV["CODECLIMATE_REPO_TOKEN"]
|
4
5
|
require "codeclimate-test-reporter"
|
5
6
|
CodeClimate::TestReporter.start
|
6
7
|
end
|
8
|
+
|
9
|
+
<%- end -%>
|
10
|
+
<%- if config[:rails] -%>
|
11
|
+
ENV["RAILS_ENV"] ||= "test"
|
12
|
+
require File.expand_path "../dummy/config/environment", __FILE__
|
13
|
+
ENV["RAILS_ROOT"] ||= File.dirname(__FILE__) + "/dummy"
|
14
|
+
|
7
15
|
<%- end -%>
|
8
16
|
require "<%= config[:gem_name] %>"
|
9
17
|
<%- if config[:pry] -%>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
if ENV["SUPPRESS_STDERR"] == "enabled"
|
2
2
|
RSpec.configure do |config|
|
3
3
|
stderr_original = $stderr
|
4
|
-
config.before(:suite) { $stderr = File.new "/dev/null",
|
4
|
+
config.before(:suite) { $stderr = File.new "/dev/null", "w" }
|
5
5
|
config.after(:suite) { $stderr = stderr_original }
|
6
6
|
end
|
7
7
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
if ENV["SUPPRESS_STDOUT"] == "enabled"
|
2
2
|
RSpec.configure do |config|
|
3
3
|
stdout_original = $stdout
|
4
|
-
config.before(:suite) { $stdout = File.new "/dev/null",
|
4
|
+
config.before(:suite) { $stdout = File.new "/dev/null", "w" }
|
5
5
|
config.after(:suite) { $stdout = stdout_original }
|
6
6
|
end
|
7
7
|
end
|
@@ -2,6 +2,7 @@ require "rspec/core/shared_context"
|
|
2
2
|
|
3
3
|
module RSpec
|
4
4
|
module Kit
|
5
|
+
# Adds temp directory support to specs enabled with the :temp_dir metadata key.
|
5
6
|
module TempDirContext
|
6
7
|
extend RSpec::Core::SharedContext
|
7
8
|
let(:temp_dir) { File.expand_path "../../../../tmp/rspec", __FILE__ }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemsmith
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
aSif+qBc6oHD7EQWPF5cZkzkIURuwNwPBngZGxIKaMAgRhjGFXzUMAaq++r59cS9
|
31
31
|
xTfQ4k6fglKEgpnLAXiKdo2c8Ym+X4rIKFfedQ==
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2015-08-
|
33
|
+
date: 2015-08-31 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: thor
|
@@ -242,6 +242,20 @@ dependencies:
|
|
242
242
|
- - ">="
|
243
243
|
- !ruby/object:Gem::Version
|
244
244
|
version: '0'
|
245
|
+
- !ruby/object:Gem::Dependency
|
246
|
+
name: rubocop
|
247
|
+
requirement: !ruby/object:Gem::Requirement
|
248
|
+
requirements:
|
249
|
+
- - ">="
|
250
|
+
- !ruby/object:Gem::Version
|
251
|
+
version: '0'
|
252
|
+
type: :development
|
253
|
+
prerelease: false
|
254
|
+
version_requirements: !ruby/object:Gem::Requirement
|
255
|
+
requirements:
|
256
|
+
- - ">="
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
version: '0'
|
245
259
|
- !ruby/object:Gem::Dependency
|
246
260
|
name: codeclimate-test-reporter
|
247
261
|
requirement: !ruby/object:Gem::Requirement
|
@@ -256,8 +270,7 @@ dependencies:
|
|
256
270
|
- - ">="
|
257
271
|
- !ruby/object:Gem::Version
|
258
272
|
version: '0'
|
259
|
-
description:
|
260
|
-
custom settings, binary, Ruby on Rails, and RSpec support. '
|
273
|
+
description: Ruby gem skeleton generation for the professional gemsmith.
|
261
274
|
email:
|
262
275
|
- brooke@alchemists.io
|
263
276
|
executables:
|
@@ -276,19 +289,28 @@ files:
|
|
276
289
|
- lib/gemsmith/cli_options.rb
|
277
290
|
- lib/gemsmith/identity.rb
|
278
291
|
- lib/gemsmith/kit.rb
|
292
|
+
- lib/gemsmith/rake/build.rb
|
293
|
+
- lib/gemsmith/rake/release.rb
|
294
|
+
- lib/gemsmith/rake/setup.rb
|
295
|
+
- lib/gemsmith/rake/tasks.rb
|
279
296
|
- lib/gemsmith/skeletons/base_skeleton.rb
|
280
297
|
- lib/gemsmith/skeletons/bundler_skeleton.rb
|
281
298
|
- lib/gemsmith/skeletons/cli_skeleton.rb
|
282
|
-
- lib/gemsmith/skeletons/default_skeleton.rb
|
283
299
|
- lib/gemsmith/skeletons/documentation_skeleton.rb
|
300
|
+
- lib/gemsmith/skeletons/gem_skeleton.rb
|
284
301
|
- lib/gemsmith/skeletons/git_skeleton.rb
|
285
302
|
- lib/gemsmith/skeletons/guard_skeleton.rb
|
286
303
|
- lib/gemsmith/skeletons/rails_skeleton.rb
|
304
|
+
- lib/gemsmith/skeletons/rake_skeleton.rb
|
287
305
|
- lib/gemsmith/skeletons/rspec_skeleton.rb
|
306
|
+
- lib/gemsmith/skeletons/rubocop_skeleton.rb
|
307
|
+
- lib/gemsmith/skeletons/ruby_skeleton.rb
|
288
308
|
- lib/gemsmith/skeletons/travis_skeleton.rb
|
309
|
+
- lib/gemsmith/tasks/rspec.rake
|
310
|
+
- lib/gemsmith/tasks/rubocop.rake
|
289
311
|
- lib/gemsmith/templates/%gem_name%/%gem_name%.gemspec.tt
|
290
|
-
- lib/gemsmith/templates/%gem_name%/.coveralls.yml.tt
|
291
312
|
- lib/gemsmith/templates/%gem_name%/.gitignore.tt
|
313
|
+
- lib/gemsmith/templates/%gem_name%/.rubocop.yml.tt
|
292
314
|
- lib/gemsmith/templates/%gem_name%/.ruby-version.tt
|
293
315
|
- lib/gemsmith/templates/%gem_name%/.travis.yml.tt
|
294
316
|
- lib/gemsmith/templates/%gem_name%/CHANGELOG.md.tt
|
@@ -303,7 +325,10 @@ files:
|
|
303
325
|
- lib/gemsmith/templates/%gem_name%/gemfiles/rails-4.1.x.gemfile.tt
|
304
326
|
- lib/gemsmith/templates/%gem_name%/lib/%gem_name%.rb.tt
|
305
327
|
- lib/gemsmith/templates/%gem_name%/lib/%gem_name%/cli.rb.tt
|
328
|
+
- lib/gemsmith/templates/%gem_name%/lib/%gem_name%/engine.rb.tt
|
306
329
|
- lib/gemsmith/templates/%gem_name%/lib/%gem_name%/identity.rb.tt
|
330
|
+
- lib/gemsmith/templates/%gem_name%/lib/%gem_name%/tasks/rspec.rake.tt
|
331
|
+
- lib/gemsmith/templates/%gem_name%/lib/%gem_name%/tasks/rubocop.rake.tt
|
307
332
|
- lib/gemsmith/templates/%gem_name%/lib/generators/%gem_name%/install/USAGE.tt
|
308
333
|
- lib/gemsmith/templates/%gem_name%/lib/generators/%gem_name%/install/install_generator.rb.tt
|
309
334
|
- lib/gemsmith/templates/%gem_name%/lib/generators/%gem_name%/upgrade/USAGE.tt
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module Gemsmith
|
2
|
-
module Skeletons
|
3
|
-
class DefaultSkeleton < BaseSkeleton
|
4
|
-
def create_default_files
|
5
|
-
template "%gem_name%/Rakefile.tt", template_options
|
6
|
-
template "%gem_name%/%gem_name%.gemspec.tt", template_options
|
7
|
-
template "#{lib_root}/%gem_name%.rb.tt", template_options
|
8
|
-
template "#{lib_root}/%gem_name%/identity.rb.tt", template_options
|
9
|
-
end
|
10
|
-
|
11
|
-
def create_ruby_files
|
12
|
-
template "%gem_name%/.ruby-version.tt", template_options
|
13
|
-
end
|
14
|
-
|
15
|
-
def create_git_files
|
16
|
-
template "%gem_name%/.gitignore.tt", template_options
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|