methadone-rehab 1.9.2

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.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +11 -0
  6. data/CHANGES.md +66 -0
  7. data/Gemfile +6 -0
  8. data/LICENSE.txt +201 -0
  9. data/README.rdoc +179 -0
  10. data/Rakefile +98 -0
  11. data/TODO.md +3 -0
  12. data/bin/methadone +157 -0
  13. data/features/bootstrap.feature +169 -0
  14. data/features/license.feature +43 -0
  15. data/features/multilevel_commands.feature +125 -0
  16. data/features/readme.feature +26 -0
  17. data/features/rspec_support.feature +27 -0
  18. data/features/step_definitions/bootstrap_steps.rb +47 -0
  19. data/features/step_definitions/license_steps.rb +30 -0
  20. data/features/step_definitions/readme_steps.rb +26 -0
  21. data/features/step_definitions/version_steps.rb +4 -0
  22. data/features/support/env.rb +26 -0
  23. data/features/version.feature +17 -0
  24. data/lib/methadone.rb +15 -0
  25. data/lib/methadone/argv_parser.rb +50 -0
  26. data/lib/methadone/cli.rb +124 -0
  27. data/lib/methadone/cli_logger.rb +133 -0
  28. data/lib/methadone/cli_logging.rb +138 -0
  29. data/lib/methadone/cucumber.rb +174 -0
  30. data/lib/methadone/error.rb +32 -0
  31. data/lib/methadone/execution_strategy/base.rb +34 -0
  32. data/lib/methadone/execution_strategy/jvm.rb +37 -0
  33. data/lib/methadone/execution_strategy/mri.rb +16 -0
  34. data/lib/methadone/execution_strategy/open_3.rb +16 -0
  35. data/lib/methadone/execution_strategy/open_4.rb +22 -0
  36. data/lib/methadone/execution_strategy/rbx_open_4.rb +12 -0
  37. data/lib/methadone/exit_now.rb +40 -0
  38. data/lib/methadone/main.rb +1039 -0
  39. data/lib/methadone/process_status.rb +45 -0
  40. data/lib/methadone/sh.rb +223 -0
  41. data/lib/methadone/version.rb +3 -0
  42. data/methadone-rehab.gemspec +32 -0
  43. data/templates/full/.gitignore.erb +4 -0
  44. data/templates/full/README.rdoc.erb +25 -0
  45. data/templates/full/Rakefile.erb +74 -0
  46. data/templates/full/_license_head.txt.erb +2 -0
  47. data/templates/full/apache_LICENSE.txt.erb +203 -0
  48. data/templates/full/bin/executable.erb +47 -0
  49. data/templates/full/custom_LICENSE.txt.erb +0 -0
  50. data/templates/full/features/executable.feature.erb +13 -0
  51. data/templates/full/features/step_definitions/executable_steps.rb.erb +1 -0
  52. data/templates/full/features/support/env.rb.erb +16 -0
  53. data/templates/full/gplv2_LICENSE.txt.erb +14 -0
  54. data/templates/full/gplv3_LICENSE.txt.erb +15 -0
  55. data/templates/full/mit_LICENSE.txt.erb +7 -0
  56. data/templates/multicommand/bin/executable.erb +52 -0
  57. data/templates/multicommand/lib/command.rb.erb +40 -0
  58. data/templates/multicommand/lib/commands.rb.erb +7 -0
  59. data/templates/rspec/spec/something_spec.rb.erb +5 -0
  60. data/templates/test_unit/test/tc_something.rb.erb +7 -0
  61. data/test/base_test.rb +20 -0
  62. data/test/command_for_tests.sh +7 -0
  63. data/test/execution_strategy/test_base.rb +24 -0
  64. data/test/execution_strategy/test_jvm.rb +77 -0
  65. data/test/execution_strategy/test_mri.rb +32 -0
  66. data/test/execution_strategy/test_open_3.rb +70 -0
  67. data/test/execution_strategy/test_open_4.rb +86 -0
  68. data/test/execution_strategy/test_rbx_open_4.rb +25 -0
  69. data/test/test_cli_logger.rb +219 -0
  70. data/test/test_cli_logging.rb +243 -0
  71. data/test/test_exit_now.rb +37 -0
  72. data/test/test_main.rb +1213 -0
  73. data/test/test_multi.rb +405 -0
  74. data/test/test_sh.rb +404 -0
  75. metadata +321 -0
@@ -0,0 +1,98 @@
1
+ require 'sdoc'
2
+ require 'bundler'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'cucumber'
6
+ require 'cucumber/rake/task'
7
+
8
+ include Rake::DSL
9
+
10
+ Bundler::GemHelper.install_tasks
11
+
12
+ desc 'run tests'
13
+ Rake::TestTask.new do |t|
14
+ t.libs << "lib"
15
+ t.libs << "test"
16
+ t.ruby_opts << "-rrubygems"
17
+ t.test_files = FileList['test/test_*.rb'] + FileList['test/execution_strategy/test_*.rb']
18
+ end
19
+
20
+ desc 'build rdoc'
21
+ task :rdoc => [:build_rdoc, :hack_css]
22
+ RDoc::Task.new(:build_rdoc) do |rd|
23
+ rd.main = "README.rdoc"
24
+ rd.options << '-f' << 'sdoc'
25
+ rd.template = 'direct'
26
+ rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
27
+ rd.title = 'Methadone - Power Up your Command Line Apps'
28
+ end
29
+ CLOBBER << 'html'
30
+
31
+ FONT_FIX = {
32
+ "0.82em" => "16px",
33
+ "0.833em" => "16px",
34
+ "0.85em" => "16px",
35
+ "1.15em" => "20px",
36
+ "1.1em" => "20px",
37
+ "1.2em" => "20px",
38
+ "1.4em" => "24px",
39
+ "1.5em" => "24px",
40
+ "1.6em" => "32px",
41
+ "1em" => "16px",
42
+ "2.1em" => "38px",
43
+ }
44
+
45
+
46
+ task :hack_css do
47
+ maincss = File.open('html/css/main.css').readlines
48
+ File.open('html/css/main.css','w') do |file|
49
+ file.puts '@import url(https://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700);'
50
+ maincss.each do |line|
51
+ if line.strip == 'font-family: "Helvetica Neue", Arial, sans-serif;'
52
+ file.puts 'font-family: Lato, "Helvetica Neue", Arial, sans-serif;'
53
+ elsif line.strip == 'font-family: monospace;'
54
+ file.puts 'font-family: Monaco, monospace;'
55
+ elsif line =~ /^pre\s*$/
56
+ file.puts "pre {
57
+ font-family: Monaco, monospace;
58
+ margin-bottom: 1em;
59
+ }
60
+ pre.original"
61
+ elsif line =~ /^\s*font-size:\s*(.*)\s*;/
62
+ if FONT_FIX[$1]
63
+ file.puts "font-size: #{FONT_FIX[$1]};"
64
+ else
65
+ file.puts line.chomp
66
+ end
67
+ else
68
+ file.puts line.chomp
69
+ end
70
+ end
71
+ end
72
+ end
73
+ if RUBY_PLATFORM == 'java'
74
+ task :features do
75
+ puts "Aruba doesn't work on JRuby; cannot run features"
76
+ end
77
+ task 'features:wip' => :features
78
+ else
79
+ CUKE_RESULTS = 'results.html'
80
+ CLEAN << CUKE_RESULTS
81
+ Cucumber::Rake::Task.new(:features) do |t|
82
+ tag_opts = ' --tags ~@pending'
83
+ tag_opts = " --tags #{ENV['TAGS']}" if ENV['TAGS']
84
+ t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
85
+ t.fork = false
86
+ end
87
+
88
+ Cucumber::Rake::Task.new('features:wip') do |t|
89
+ tag_opts = ' --tags ~@pending'
90
+ tag_opts = ' --tags @wip'
91
+ t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
92
+ t.fork = false
93
+ end
94
+ end
95
+
96
+ CLEAN << "coverage"
97
+ CLOBBER << FileList['**/*.rbc']
98
+ task :default => [:test, :features]
data/TODO.md ADDED
@@ -0,0 +1,3 @@
1
+ TODO:
2
+
3
+ Optional: non-public methods are prefixed with __methadone_ to prevent namespace contamination
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require 'optparse'
5
+ require 'methadone'
6
+ require 'methadone/cli'
7
+
8
+ include FileUtils
9
+ include Methadone::Main
10
+ include Methadone::CLILogging
11
+ include Methadone::CLI
12
+ include Methadone::SH
13
+
14
+ main do |app_name|
15
+ check_and_prepare_basedir!(app_name,options[:force])
16
+ using_readme = options[:readme]
17
+
18
+ gemname = File.basename(app_name)
19
+ module_name = gemname.split(/-/).map(&:capitalize).collect{ |segment| segment.split(/_/).map(&:capitalize).join('') }.join('::')
20
+
21
+ debug "Creating project for gem #{gemname}"
22
+
23
+ chdir File.dirname(app_name)
24
+
25
+ # Create the basic files for a gem via bundler:
26
+ # Gemfile
27
+ # Rakefile
28
+ # LICENSE.txt
29
+ # README.md
30
+ # .gitignore
31
+ # <gemname>.gemspec
32
+ # lib/<gemname>.rb
33
+ # lib/<gemname>/version.rb
34
+ require_file = nil
35
+ sh! "bundle gem #{gemname} --no-color" do |stdout|
36
+ require_file = stdout.split(/\n/).select { |file|
37
+ file =~ /\.rb$/ && file !~ /version.rb$/
38
+ }.first
39
+ end
40
+ require_file = gemname if require_file.nil?
41
+ require_file.gsub!(/^.*lib\//,'')
42
+
43
+ add_library_to_load_path = options[:add_lib] || false
44
+
45
+ chdir gemname
46
+
47
+ template_dirs_in(:full).each { |dir| mkdir_p dir }
48
+
49
+ commands = options[:commands]
50
+ multi = !commands.nil?
51
+ if multi
52
+ mkdir_p "lib/#{gemname}/commands"
53
+ copy_file 'lib/commands.rb', :as => "#{gemname}/commands.rb", :from => :multicommand, :binding => binding
54
+ commands.each do |cmd|
55
+ copy_file 'lib/command.rb', :as => "#{gemname}/commands/#{normalize_command(cmd)}.rb", :from => :multicommand, :binding => binding
56
+ end
57
+ end
58
+
59
+ rspec = options[:rspec]
60
+
61
+ ["Rakefile", ".gitignore", "features/support/env.rb"].each do |file|
62
+ copy_file file, :binding => binding
63
+ end
64
+
65
+ if rspec
66
+ template_dirs_in(:rspec).each { |dir| mkdir_p dir }
67
+ copy_file "spec/something_spec.rb", :from => :rspec, :binding => binding
68
+ else
69
+ template_dirs_in(:test_unit).each { |dir| mkdir_p dir }
70
+ copy_file "test/tc_something.rb", :from => :test_unit, :binding => binding
71
+ end
72
+
73
+ gemspec = "#{gemname}.gemspec"
74
+ gem_variable = File.open(gemspec) { |x| x.read }.match(/(\w+)\.executables/)[1]
75
+
76
+ license = options[:license]
77
+ warn "warning: your app has no license" unless license
78
+ license = nil if license == 'NONE'
79
+ if license
80
+ copy_file "#{options[:license]}_LICENSE.txt", :as => "LICENSE.txt"
81
+ else
82
+ #Remove the MIT license generated by `bundle gem`
83
+ debug "Making sure no LICENSE.txt file exists at the root of the repo"
84
+ FileUtils.rm_f "LICENSE.txt"
85
+ end
86
+
87
+ #Ensure the gemspec file mentions the correct license
88
+ gemspec_content = File.read(gemspec)
89
+ if gemspec_content =~ /(^\s*#{gem_variable}\.license\s*=\s*).*/
90
+ gemspec_content.gsub!(/(^\s*#{gem_variable}\.license\s*=\s*).*/,"\\1#{license.to_s.inspect}")
91
+ else
92
+ gemspec_content.gsub!(/(^\s*#{gem_variable}\.name\s*=\s*.*)/,"\\1\n #{gem_variable}.license=#{license.to_s.inspect}")
93
+ end
94
+ File.open(gemspec,'w') {|f| f.write gemspec_content }
95
+
96
+
97
+ # TODO: bundle gem creates README.md regardless of using_readme setting.
98
+ copy_file "README.rdoc", :binding => binding if using_readme
99
+
100
+ copy_file "features/executable.feature", :as => "#{gemname}.feature", :binding => binding
101
+ copy_file "features/step_definitions/executable_steps.rb", :as => "#{gemname}_steps.rb"
102
+ copy_file "bin/executable", :as => gemname, :executable => true, :binding => binding, :from => (multi ? :multicommand : :full)
103
+
104
+ add_to_file gemspec, [
105
+ " #{gem_variable}.add_development_dependency('rdoc')",
106
+ " #{gem_variable}.add_development_dependency('aruba')",
107
+ " #{gem_variable}.add_development_dependency('rake')",
108
+ " #{gem_variable}.add_dependency('methadone-rehab', '~> #{Methadone::VERSION}')",
109
+ ], :before => /^end\s*$/
110
+ ruby_major,ruby_minor,ruby_patch = RUBY_VERSION.split(/\./).map(&:to_i)
111
+
112
+ if ruby_major >= 2 && ruby_minor >= 2
113
+ add_to_file gemspec, [
114
+ " #{gem_variable}.add_development_dependency('test-unit')",
115
+ ], :before => /^end\s*$/
116
+ end
117
+
118
+ if rspec
119
+ add_to_file gemspec, [
120
+ " #{gem_variable}.add_development_dependency('rspec', '~> 3')",
121
+ ], :before => /^end\s*$/
122
+ end
123
+
124
+ sh! %q(git add --all .)
125
+ end
126
+
127
+ options[:readme] = true
128
+
129
+ description "Kick the bash habit by bootstrapping your Ruby command-line apps"
130
+
131
+ on("--force","Overwrite files if they exist")
132
+ on("--[no-]readme","[Do not ]produce a README file")
133
+ on("--rspec", "Generate RSpec unit tests instead of Test::Unit")
134
+ on("--add-lib", "Add lib to the load path") do
135
+ options[:add_lib] = true
136
+ end
137
+ on "-c cmd1,cmd2,cmdN", "--commands", Array, "Generate framework for a cli app that provides the following commands" do |commands|
138
+ options[:commands] = commands
139
+ unless options[:commands].grep(/^-/).empty?
140
+ puts "Cannot have commands that begin with a '-'"
141
+ exit 65 # Data format error
142
+ end
143
+ end
144
+
145
+ licenses = %w(mit apache gplv2 gplv3 custom NONE)
146
+ on("-l LICENSE","--license",licenses,"Specify the license for your project",'(' + licenses.join('|') + ')')
147
+
148
+ use_log_level_option
149
+
150
+ leak_exceptions true
151
+
152
+ arg :app_name, :required, "Name of your app, which is used for the gem name and executable name"
153
+
154
+ version Methadone::VERSION, :compact => true
155
+
156
+ go!
157
+
@@ -0,0 +1,169 @@
1
+ Feature: Bootstrap a new command-line app
2
+ As an awesome developer who wants to make a command-line app
3
+ I should be able to use methadone to bootstrap it
4
+ And get all kinds of cool things
5
+
6
+ Background:
7
+ Given the directory "tmp/newgem" does not exist
8
+ And the directory "tmp/new-gem" does not exist
9
+
10
+ Scenario: Bootstrap a new app from scratch
11
+ When I successfully run `methadone tmp/newgem`
12
+ Then the following directories should exist:
13
+ |tmp/newgem |
14
+ |tmp/newgem/bin |
15
+ |tmp/newgem/lib |
16
+ |tmp/newgem/lib/newgem |
17
+ |tmp/newgem/test |
18
+ |tmp/newgem/features |
19
+ |tmp/newgem/features/support |
20
+ |tmp/newgem/features/step_definitions |
21
+ Then the following directories should not exist:
22
+ |tmp/newgem/spec |
23
+ And the following files should exist:
24
+ |tmp/newgem/newgem.gemspec |
25
+ |tmp/newgem/Rakefile |
26
+ |tmp/newgem/.gitignore |
27
+ |tmp/newgem/Gemfile |
28
+ |tmp/newgem/bin/newgem |
29
+ |tmp/newgem/features/newgem.feature |
30
+ |tmp/newgem/features/support/env.rb |
31
+ |tmp/newgem/features/step_definitions/newgem_steps.rb |
32
+ |tmp/newgem/test/tc_something.rb |
33
+ And the file "tmp/newgem/.gitignore" should match /results.html/
34
+ And the file "tmp/newgem/.gitignore" should match /html/
35
+ And the file "tmp/newgem/.gitignore" should match /pkg/
36
+ And the file "tmp/newgem/.gitignore" should match /.DS_Store/
37
+ And the file "tmp/newgem/newgem.gemspec" should match /add_development_dependency\('aruba'/
38
+ And the file "tmp/newgem/newgem.gemspec" should match /add_development_dependency\('rdoc'/
39
+ And the file "tmp/newgem/newgem.gemspec" should match /add_development_dependency\('rake'/
40
+ And the file "tmp/newgem/newgem.gemspec" should match /add_dependency\('methadone-rehab'/
41
+ And the file "tmp/newgem/newgem.gemspec" should include "test-unit" if needed
42
+ And the file "tmp/newgem/newgem.gemspec" should use the same block variable throughout
43
+ Given I cd to "tmp/newgem"
44
+ And my app's name is "newgem"
45
+ When I successfully run `bin/newgem --help` with "lib" in the library path
46
+ Then the banner should be present
47
+ And the banner should document that this app takes options
48
+ And the following options should be documented:
49
+ |--version|
50
+ |--help|
51
+ |--log-level|
52
+ And the banner should document that this app takes no arguments
53
+ When I successfully run `rake -T -I../../lib`
54
+ Then the output should match /rake clean/
55
+ And the output should match /rake clobber/
56
+ And the output should match /rake clobber_rdoc/
57
+ And the output should match /rake features/
58
+ And the output should match /rake rdoc/
59
+ And the output should match /rake release/
60
+ And the output should match /rake rerdoc/
61
+ And the output should match /rake test/
62
+ And the output should match /rake install/
63
+ And the output should match /rake build/
64
+ When I run `rake -I../../../../lib`
65
+ Then the exit status should be 0
66
+ And the output should match /1 tests, 1 assertions, 0 failures, 0 errors/
67
+ And the output should contain:
68
+ """
69
+ 1 scenario (1 passed)
70
+ 6 steps (6 passed)
71
+ """
72
+
73
+ Scenario Outline: Bootstrap a new app with a dash is OK
74
+ Given I successfully run `methadone tmp/new-gem`
75
+ And I cd to "tmp/new-gem"
76
+ And my app's name is "new-gem"
77
+ When I successfully run `bin/new-gem <help>` with "lib" in the library path
78
+ Then the banner should be present
79
+ And the banner should document that this app takes options
80
+ And the following options should be documented:
81
+ |--version|
82
+ |--log-level|
83
+ And the banner should document that this app takes no arguments
84
+ When I run `rake -I../../../../lib`
85
+ Then the exit status should be 0
86
+ And the output should match /1 tests, 1 assertions, 0 failures, 0 errors/
87
+ And the output should contain:
88
+ """
89
+ 1 scenario (1 passed)
90
+ 6 steps (6 passed)
91
+ """
92
+ Examples:
93
+ | help |
94
+ | -h |
95
+ | --help |
96
+ | --version |
97
+
98
+ Scenario: Version flag can be used to only show the app version
99
+ Given I successfully run `methadone tmp/new-gem`
100
+ And "bin/new-gem" has configured version to show only the version and not help
101
+ And I cd to "tmp/new-gem"
102
+ And my app's name is "new-gem"
103
+ When I successfully run `bin/new-gem --version` with "lib" in the library path
104
+ Then the output should match /new-gem version 0/
105
+
106
+ Scenario: Version flag can be used to only show the app version with a custom format
107
+ Given I successfully run `methadone tmp/new-gem`
108
+ And "bin/new-gem" has configured version to show only the version with a custom format and not help
109
+ And I cd to "tmp/new-gem"
110
+ And my app's name is "new-gem"
111
+ When I successfully run `bin/new-gem --version` with "lib" in the library path
112
+ Then the output should match /new-gem V0/
113
+
114
+ Scenario: Won't squash an existing dir
115
+ When I successfully run `methadone tmp/newgem`
116
+ And I run `methadone tmp/newgem`
117
+ Then the exit status should not be 0
118
+ And the stderr should contain:
119
+ """
120
+ error: tmp/newgem exists, use --force to override
121
+ """
122
+
123
+ Scenario: WILL squash an existing dir if we use --force
124
+ When I successfully run `methadone tmp/newgem`
125
+ And I run `methadone --force tmp/newgem`
126
+ Then the exit status should be 0
127
+
128
+ Scenario: We must supply a dirname
129
+ When I run `methadone`
130
+ Then the exit status should not be 0
131
+ And the stderr should match /'app_name' is required/
132
+
133
+ Scenario: We can add the lib directory to the load path
134
+ Given the directory "tmp/newgem2" does not exist
135
+ When I run `methadone --add-lib tmp/newgem2`
136
+ Then the exit status should be 0
137
+ And the file "tmp/newgem2/bin/newgem2" should match /\$LOAD_PATH\.unshift File\.expand_path\(File\.join\(File\.dirname\(__FILE__\), '\.\..lib'\)\)/
138
+
139
+ Given I cd to "tmp/newgem2"
140
+ And my app's name is "newgem2"
141
+ When I successfully run `bin/newgem2 --help`
142
+ Then the banner should be present
143
+ And the banner should document that this app takes options
144
+ And the following options should be documented:
145
+ |--version|
146
+ |--help|
147
+ |--log-level|
148
+ And the banner should document that this app takes no arguments
149
+
150
+ Scenario: Help is properly documented
151
+ When I get help for "methadone"
152
+ Then the exit status should be 0
153
+ And the following options should be documented:
154
+ | --force | |
155
+ | --readme | which is negatable |
156
+ | -l, --license | which is not negatable |
157
+ | --log-level | |
158
+ And the banner should be present
159
+ And the banner should document that this app takes options
160
+ And the banner should document that this app's arguments are:
161
+ |app_name|which is required|
162
+ And there should be a one line summary of what the app does
163
+
164
+ Scenario: The whole initial state of the app has been staged with git
165
+ Given I successfully run `methadone -l custom tmp/newgem`
166
+ And I cd to "tmp/newgem"
167
+ When I successfully run `git ls-files --others --deleted `
168
+ Then the output should match /\A\Z/
169
+
@@ -0,0 +1,43 @@
1
+ Feature: Users should get the license included
2
+ As a user
3
+ I'd like to be able to include a license
4
+ So that I don't have to hunt it down for every new project
5
+
6
+ Background:
7
+ Given the directory "tmp/newgem" does not exist
8
+
9
+ Scenario: Use a non-stock license
10
+ When I successfully run `methadone -l custom tmp/newgem`
11
+ Then newgem's license should be an empty file
12
+ And the README should reference the need for a license
13
+
14
+ Scenario: We only support a few licenses
15
+ When I run `methadone -l foobar tmp/newgem`
16
+ Then the exit status should not be 0
17
+ And the stderr should match /invalid argument: -l foobar/
18
+
19
+ Scenario: No license specified
20
+ When I successfully run `methadone tmp/newgem`
21
+ Then the stderr should contain "warning: your app has no license"
22
+ And the README should not reference a license
23
+ And the file "tmp/newgem/LICENSE.txt" should not exist
24
+
25
+ Scenario: No license specified explicitly
26
+ When I successfully run `methadone -l NONE tmp/newgem`
27
+ Then the stderr should not contain "warning: your app has no license"
28
+ And the README should not reference a license
29
+ And the file "tmp/newgem/LICENSE.txt" should not exist
30
+
31
+ Scenario Outline: Include one of a few stock licenses
32
+ When I successfully run `methadone -l <license> tmp/newgem`
33
+ Then newgem's license should be the <license> license
34
+ And the README should reference this license
35
+ And LICENSE.txt should contain user information and program name
36
+
37
+ Examples:
38
+ |license|
39
+ |apache|
40
+ |mit|
41
+ |gplv2|
42
+ |gplv3|
43
+