gemma 4.1.0 → 5.0.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 +5 -13
- data/README.rdoc +14 -13
- data/bin/gemma +24 -19
- data/lib/gemma.rb +13 -12
- data/lib/gemma/conventions.rb +5 -5
- data/lib/gemma/gem_from_template.rb +23 -22
- data/lib/gemma/options.rb +25 -22
- data/lib/gemma/rake_tasks.rb +20 -11
- data/lib/gemma/rake_tasks/gem_tasks.rb +4 -4
- data/lib/gemma/rake_tasks/minitest_tasks.rb +15 -15
- data/lib/gemma/rake_tasks/plugin.rb +3 -2
- data/lib/gemma/rake_tasks/rdoc_tasks.rb +21 -20
- data/lib/gemma/rake_tasks/yard_tasks.rb +22 -21
- data/lib/gemma/utility.rb +13 -7
- data/lib/gemma/version.rb +3 -2
- data/template/base/.rubocop.yml.erb +6 -0
- data/template/base/Gemfile +3 -2
- data/template/base/{README.rdoc.erb → README.md.erb} +13 -10
- data/template/base/{Rakefile.rb.erb → Rakefile.erb} +3 -1
- data/template/base/gem_name.gemspec.erb +19 -21
- data/template/base/lib/gem_name.rb.erb +7 -2
- data/template/base/lib/gem_name/version.rb.erb +2 -0
- data/template/executable/bin/gem_name.erb +2 -2
- data/template/minitest/test/gem_name/gem_name_test.rb.erb +3 -2
- data/test/gemma/gem_from_template_test.rb +20 -18
- data/test/gemma/gemma_new_test.rb +30 -28
- data/test/gemma/gemma_test.rb +41 -30
- data/test/gemma/options_test.rb +47 -24
- metadata +39 -30
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Gemma
|
2
3
|
class RakeTasks
|
3
4
|
#
|
@@ -13,7 +14,7 @@ module Gemma
|
|
13
14
|
# @param [Gem::Specification] gemspec
|
14
15
|
# @param [String, nil] gemspec_file_name
|
15
16
|
#
|
16
|
-
def initialize
|
17
|
+
def initialize(gemspec, gemspec_file_name)
|
17
18
|
super(gemspec)
|
18
19
|
@gemspec_file_name = gemspec_file_name
|
19
20
|
end
|
@@ -28,11 +29,10 @@ module Gemma
|
|
28
29
|
def create_rake_tasks
|
29
30
|
require 'bundler/gem_helper'
|
30
31
|
dir = File.dirname(@gemspec_file_name) if @gemspec_file_name
|
31
|
-
Bundler::GemHelper.install_tasks(:
|
32
|
-
:
|
32
|
+
Bundler::GemHelper.install_tasks(dir: dir,
|
33
|
+
name: gemspec.name)
|
33
34
|
nil
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
38
|
-
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Gemma
|
2
3
|
class RakeTasks
|
3
4
|
#
|
@@ -5,18 +6,18 @@ module Gemma
|
|
5
6
|
# the gemspec and the gem's +test+ directory are placed on the load path,
|
6
7
|
# and the +test_files+ given in the gemspec are executed as tests.
|
7
8
|
#
|
8
|
-
# Minitest works on both 1.8 and 1.9, and it's mostly compatible with
|
9
|
+
# Minitest works on both 1.8 and 1.9, and it's mostly compatible with
|
9
10
|
# <tt>Test::Unit</tt> tests.
|
10
11
|
#
|
11
12
|
# This plugin is based on the `Rake::TestTask` that comes bundled with rake.
|
12
13
|
# If you need an option that isn't exposed by the plugin, you can modify the
|
13
|
-
# `TestTask` object directly in a block passed to {#with_test_task}.
|
14
|
+
# `TestTask` object directly in a block passed to {#with_test_task}.
|
14
15
|
#
|
15
16
|
class MinitestTasks < Plugin
|
16
17
|
#
|
17
18
|
# @param [Gem::Specification] gemspec
|
18
19
|
#
|
19
|
-
def initialize
|
20
|
+
def initialize(gemspec)
|
20
21
|
super(gemspec)
|
21
22
|
|
22
23
|
# Defaults.
|
@@ -28,15 +29,15 @@ module Gemma
|
|
28
29
|
#
|
29
30
|
# Name of rake task used to run the test; defaults to test.
|
30
31
|
#
|
31
|
-
# @return [Symbol]
|
32
|
-
#
|
32
|
+
# @return [Symbol]
|
33
|
+
#
|
33
34
|
attr_accessor :task_name
|
34
35
|
|
35
36
|
#
|
36
37
|
# The files to test; defaults to the +test_files+ from the gemspec.
|
37
38
|
#
|
38
|
-
# @return [Array<String>]
|
39
|
-
#
|
39
|
+
# @return [Array<String>]
|
40
|
+
#
|
40
41
|
attr_accessor :files
|
41
42
|
|
42
43
|
#
|
@@ -49,7 +50,7 @@ module Gemma
|
|
49
50
|
#
|
50
51
|
# @return [nil]
|
51
52
|
#
|
52
|
-
def with_test_task
|
53
|
+
def with_test_task(&block)
|
53
54
|
@with_test_task = block
|
54
55
|
nil
|
55
56
|
end
|
@@ -62,13 +63,13 @@ module Gemma
|
|
62
63
|
# @private
|
63
64
|
#
|
64
65
|
def create_rake_tasks
|
65
|
-
unless
|
66
|
+
unless files.empty?
|
66
67
|
require 'rake/testtask'
|
67
|
-
Rake::TestTask.new(
|
68
|
-
tt.libs
|
69
|
-
tt.libs
|
70
|
-
tt.test_files
|
71
|
-
tt.ruby_opts
|
68
|
+
Rake::TestTask.new(task_name) do |tt|
|
69
|
+
tt.libs = gemspec.require_paths.dup
|
70
|
+
tt.libs << 'test'
|
71
|
+
tt.test_files = files
|
72
|
+
tt.ruby_opts << '-rubygems' << '-rbundler/setup'
|
72
73
|
@with_test_task.call(tt) if @with_test_task
|
73
74
|
end
|
74
75
|
end
|
@@ -77,4 +78,3 @@ module Gemma
|
|
77
78
|
end
|
78
79
|
end
|
79
80
|
end
|
80
|
-
|
@@ -1,6 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Gemma
|
2
3
|
class RakeTasks
|
3
|
-
#
|
4
|
+
#
|
4
5
|
# Plugins generate rake tasks based on the content of the gemspec.
|
5
6
|
#
|
6
7
|
# The intention is that the plugin processes the gemspec and sets
|
@@ -13,7 +14,7 @@ module Gemma
|
|
13
14
|
class Plugin
|
14
15
|
include Rake::DSL
|
15
16
|
|
16
|
-
def initialize
|
17
|
+
def initialize(gemspec)
|
17
18
|
@gemspec = gemspec
|
18
19
|
end
|
19
20
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'rdoc/task'
|
2
3
|
|
3
4
|
module Gemma
|
@@ -7,18 +8,18 @@ module Gemma
|
|
7
8
|
# the gemspec.
|
8
9
|
#
|
9
10
|
# The default settings are based on the +require_paths+, +rdoc_options+ and
|
10
|
-
# +extra_rdoc_files+ data in the gemspec.
|
11
|
+
# +extra_rdoc_files+ data in the gemspec.
|
11
12
|
#
|
12
13
|
# This plugin is based on the <tt>Rake::RDocTask</tt> that comes bundled
|
13
14
|
# with rdoc. If you need an option that isn't exposed by the plugin, you
|
14
15
|
# can modify the +RDocTask+ object directly in a block passed to
|
15
|
-
# {#with_rdoc_task}.
|
16
|
+
# {#with_rdoc_task}.
|
16
17
|
#
|
17
18
|
class RDocTasks < Plugin
|
18
19
|
#
|
19
20
|
# @param [Gem::Specification] gemspec
|
20
21
|
#
|
21
|
-
def initialize
|
22
|
+
def initialize(gemspec)
|
22
23
|
super(gemspec)
|
23
24
|
|
24
25
|
# Defaults.
|
@@ -42,15 +43,15 @@ module Gemma
|
|
42
43
|
#
|
43
44
|
# Name of rake task used to generate these docs; defaults to rdoc.
|
44
45
|
#
|
45
|
-
# @return [Symbol]
|
46
|
-
#
|
46
|
+
# @return [Symbol]
|
47
|
+
#
|
47
48
|
attr_accessor :task_name
|
48
49
|
|
49
50
|
#
|
50
51
|
# Name of output directory (the rdoc option --output); extracted from
|
51
52
|
# gemspec; defaults to rdoc.
|
52
53
|
#
|
53
|
-
# @return [String]
|
54
|
+
# @return [String]
|
54
55
|
#
|
55
56
|
attr_accessor :output
|
56
57
|
|
@@ -58,7 +59,7 @@ module Gemma
|
|
58
59
|
# Name of file to display in index.html (the rdoc option --main);
|
59
60
|
# extracted from gemspec; defaults to nil (none).
|
60
61
|
#
|
61
|
-
# @return [String, nil]
|
62
|
+
# @return [String, nil]
|
62
63
|
#
|
63
64
|
attr_accessor :main
|
64
65
|
|
@@ -66,7 +67,7 @@ module Gemma
|
|
66
67
|
# Title for HTML output (the rdoc option --title); extracted from gemspec;
|
67
68
|
# defaults to nil (unspecified).
|
68
69
|
#
|
69
|
-
# @return [String, nil]
|
70
|
+
# @return [String, nil]
|
70
71
|
#
|
71
72
|
attr_accessor :title
|
72
73
|
|
@@ -74,7 +75,7 @@ module Gemma
|
|
74
75
|
# Name of template used to generate html output (the rdoc option
|
75
76
|
# --template); extracted from gemspec; defaults to nil (unspecified).
|
76
77
|
#
|
77
|
-
# @return [String, nil]
|
78
|
+
# @return [String, nil]
|
78
79
|
#
|
79
80
|
attr_accessor :template
|
80
81
|
|
@@ -82,7 +83,7 @@ module Gemma
|
|
82
83
|
# Files and directories to be processed by rdoc; extracted from gemspec;
|
83
84
|
# by default, these are the gem's +require_paths+ and +extra_rdoc_files+.
|
84
85
|
#
|
85
|
-
# @return [Array<String>]
|
86
|
+
# @return [Array<String>]
|
86
87
|
#
|
87
88
|
attr_accessor :files
|
88
89
|
|
@@ -91,7 +92,7 @@ module Gemma
|
|
91
92
|
# the {#output}, {#main}, {#title} and {#template} options and the
|
92
93
|
# {#files} list are handled separately.
|
93
94
|
#
|
94
|
-
# @return [Array<String>]
|
95
|
+
# @return [Array<String>]
|
95
96
|
#
|
96
97
|
attr_accessor :options
|
97
98
|
|
@@ -105,7 +106,7 @@ module Gemma
|
|
105
106
|
#
|
106
107
|
# @return [nil]
|
107
108
|
#
|
108
|
-
def with_rdoc_task
|
109
|
+
def with_rdoc_task(&block)
|
109
110
|
@with_rdoc_task = block
|
110
111
|
nil
|
111
112
|
end
|
@@ -118,16 +119,16 @@ module Gemma
|
|
118
119
|
# @private
|
119
120
|
#
|
120
121
|
def create_rake_tasks
|
121
|
-
Rake::RDocTask.new(
|
122
|
-
rd.rdoc_dir =
|
123
|
-
rd.rdoc_files =
|
124
|
-
rd.title =
|
125
|
-
rd.main =
|
126
|
-
rd.template =
|
127
|
-
rd.options =
|
122
|
+
Rake::RDocTask.new(task_name) do |rd|
|
123
|
+
rd.rdoc_dir = output
|
124
|
+
rd.rdoc_files = files
|
125
|
+
rd.title = title
|
126
|
+
rd.main = main
|
127
|
+
rd.template = template
|
128
|
+
rd.options = options
|
128
129
|
@with_rdoc_task.call(rd) if @with_rdoc_task
|
129
130
|
end
|
130
|
-
CLOBBER.include(
|
131
|
+
CLOBBER.include(output)
|
131
132
|
|
132
133
|
nil
|
133
134
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'yard'
|
2
3
|
|
3
4
|
module Gemma
|
@@ -24,13 +25,13 @@ module Gemma
|
|
24
25
|
# This plugin is based on the <tt>YARD::Rake::YardocTask</tt> that comes
|
25
26
|
# bundled with yard. If you need an option that isn't exposed by the
|
26
27
|
# plugin, you can modify the +YardocTask+ object directly in a block passed
|
27
|
-
# to {#with_yardoc_task}.
|
28
|
+
# to {#with_yardoc_task}.
|
28
29
|
#
|
29
30
|
class YardTasks < Plugin
|
30
31
|
#
|
31
32
|
# @param [Gem::Specification] gemspec
|
32
33
|
#
|
33
|
-
def initialize
|
34
|
+
def initialize(gemspec)
|
34
35
|
super(gemspec)
|
35
36
|
|
36
37
|
# Defaults.
|
@@ -55,14 +56,14 @@ module Gemma
|
|
55
56
|
#
|
56
57
|
# Name of rake task used to generate these docs; defaults to yard.
|
57
58
|
#
|
58
|
-
# @return [Symbol]
|
59
|
+
# @return [Symbol]
|
59
60
|
#
|
60
61
|
attr_accessor :task_name
|
61
62
|
|
62
63
|
#
|
63
64
|
# Name of output directory (the yard option --output); defaults to yard.
|
64
65
|
#
|
65
|
-
# @return [String]
|
66
|
+
# @return [String]
|
66
67
|
#
|
67
68
|
attr_accessor :output
|
68
69
|
|
@@ -70,7 +71,7 @@ module Gemma
|
|
70
71
|
# Name of file to display in index.html (the yard option --main);
|
71
72
|
# extracted from gemspec; defaults to nil (none).
|
72
73
|
#
|
73
|
-
# @return [String, nil]
|
74
|
+
# @return [String, nil]
|
74
75
|
#
|
75
76
|
attr_accessor :main
|
76
77
|
|
@@ -78,7 +79,7 @@ module Gemma
|
|
78
79
|
# Title for HTML output (the yard option --title); extracted from gemspec;
|
79
80
|
# defaults to nil (unspecified).
|
80
81
|
#
|
81
|
-
# @return [String, nil]
|
82
|
+
# @return [String, nil]
|
82
83
|
#
|
83
84
|
attr_accessor :title
|
84
85
|
|
@@ -86,7 +87,7 @@ module Gemma
|
|
86
87
|
# Ruby files to be processed by yard; these are extracted from the
|
87
88
|
# gemspec; by default these are the +require_paths+.
|
88
89
|
#
|
89
|
-
# @return [Array<String>]
|
90
|
+
# @return [Array<String>]
|
90
91
|
#
|
91
92
|
attr_accessor :files
|
92
93
|
|
@@ -94,7 +95,7 @@ module Gemma
|
|
94
95
|
# Extra files (e.g. FAQ, LICENSE) to be processed by yard; these are
|
95
96
|
# extracted from the gemspec.
|
96
97
|
#
|
97
|
-
# @return [Array<String>]
|
98
|
+
# @return [Array<String>]
|
98
99
|
#
|
99
100
|
attr_accessor :extra_files
|
100
101
|
|
@@ -117,7 +118,7 @@ module Gemma
|
|
117
118
|
#
|
118
119
|
# @return [nil]
|
119
120
|
#
|
120
|
-
def with_yardoc_task
|
121
|
+
def with_yardoc_task(&block)
|
121
122
|
@with_yardoc_task = block
|
122
123
|
nil
|
123
124
|
end
|
@@ -131,32 +132,32 @@ module Gemma
|
|
131
132
|
#
|
132
133
|
def create_rake_tasks
|
133
134
|
YARD::Rake::YardocTask.new do |yd|
|
134
|
-
yd.name =
|
135
|
+
yd.name = task_name
|
135
136
|
yd.options = complete_options
|
136
|
-
yd.files =
|
137
|
-
yd.files.push('-', *
|
137
|
+
yd.files = files
|
138
|
+
yd.files.push('-', *extra_files) unless extra_files.empty?
|
138
139
|
@with_yardoc_task.call(yd) if @with_yardoc_task
|
139
140
|
end
|
140
|
-
CLOBBER.include(
|
141
|
+
CLOBBER.include(output)
|
141
142
|
CLOBBER.include('.yardoc')
|
142
143
|
nil
|
143
144
|
rescue LoadError
|
144
|
-
# Assume yard is not installed.
|
145
|
+
nil # Assume yard is not installed.
|
145
146
|
end
|
146
147
|
|
147
|
-
private
|
148
|
+
private
|
148
149
|
|
149
|
-
#
|
150
|
+
#
|
150
151
|
# Options to be passed to yardoc; this includes {#options} and the
|
151
152
|
# {#main}, {#title} and {#output} options.
|
152
153
|
#
|
153
154
|
# @return [Array<String>]
|
154
|
-
#
|
155
|
+
#
|
155
156
|
def complete_options
|
156
|
-
opts =
|
157
|
-
opts.push('--main',
|
158
|
-
opts.push('--title',
|
159
|
-
opts.push('--output',
|
157
|
+
opts = options.dup
|
158
|
+
opts.push('--main', main) if main
|
159
|
+
opts.push('--title', title) if title
|
160
|
+
opts.push('--output', output)
|
160
161
|
opts
|
161
162
|
end
|
162
163
|
end
|
data/lib/gemma/utility.rb
CHANGED
@@ -1,17 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Gemma
|
3
|
+
#
|
4
|
+
# Utility functions.
|
5
|
+
#
|
2
6
|
module Utility
|
3
|
-
#
|
7
|
+
#
|
4
8
|
# If the usage information for a script is documented in a comment block at
|
5
9
|
# the top of the file, this method prints it out. If there is a shebang
|
6
10
|
# (#!) on the first line, it is not printed.
|
7
11
|
#
|
8
|
-
def self.print_usage_from_file_comment
|
12
|
+
def self.print_usage_from_file_comment(
|
13
|
+
file, comment_char = '#', io = $stdout
|
14
|
+
)
|
9
15
|
lines = File.readlines(file)
|
10
16
|
lines.shift if lines.first =~ /^#!/ # ignore shebang
|
11
|
-
|
17
|
+
lines.each do |line|
|
12
18
|
line.strip!
|
13
19
|
break unless line =~ /^#{comment_char}(.*)/
|
14
|
-
io.puts
|
20
|
+
io.puts Regexp.last_match(1)
|
15
21
|
end
|
16
22
|
end
|
17
23
|
|
@@ -26,9 +32,10 @@ module Gemma
|
|
26
32
|
#
|
27
33
|
# @return [nil]
|
28
34
|
#
|
29
|
-
def self.rgrep
|
35
|
+
def self.rgrep(tag, path, io = $stdout)
|
30
36
|
Dir.chdir path do
|
31
|
-
|
37
|
+
globs = Dir['**/*'] + Dir['**/.*']
|
38
|
+
globs.select { |f| File.file?(f) }.sort.each do |f|
|
32
39
|
File.readlines(f).each_with_index do |line, i|
|
33
40
|
io.puts "#{f}:#{i}: #{line}" if line =~ tag
|
34
41
|
end
|
@@ -38,4 +45,3 @@ module Gemma
|
|
38
45
|
end
|
39
46
|
end
|
40
47
|
end
|
41
|
-
|
data/lib/gemma/version.rb
CHANGED
data/template/base/Gemfile
CHANGED
@@ -1,28 +1,32 @@
|
|
1
|
-
|
1
|
+
# <%= gem_name %>
|
2
2
|
|
3
3
|
* TODO url
|
4
4
|
|
5
|
-
|
5
|
+
## Synopsis
|
6
6
|
|
7
7
|
TODO description
|
8
8
|
|
9
|
-
|
9
|
+
### Usage
|
10
10
|
|
11
|
-
|
11
|
+
```ruby
|
12
|
+
TODO (code sample of usage)
|
13
|
+
```
|
12
14
|
|
13
|
-
|
15
|
+
## Requirements
|
14
16
|
|
15
17
|
* TODO (list of requirements)
|
16
18
|
|
17
|
-
|
19
|
+
## Installation
|
18
20
|
|
19
|
-
|
21
|
+
```
|
22
|
+
gem install <%= gem_name %>
|
23
|
+
```
|
20
24
|
|
21
|
-
|
25
|
+
## Development
|
22
26
|
|
23
27
|
TODO developer advice
|
24
28
|
|
25
|
-
|
29
|
+
## License
|
26
30
|
|
27
31
|
(The MIT License)
|
28
32
|
|
@@ -46,4 +50,3 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
46
50
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
47
51
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
48
52
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
49
|
-
|