shoe 0.6.2 → 0.7.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.
Files changed (70) hide show
  1. data/{data/shoe/templates/gitignore.erb → .gitignore} +1 -1
  2. data/.rvmrc +1 -0
  3. data/CHANGELOG.rdoc +9 -1
  4. data/Gemfile +2 -0
  5. data/Gemfile.lock +39 -0
  6. data/README.rdoc +20 -72
  7. data/Rakefile +6 -0
  8. data/TODO.rdoc +10 -5
  9. data/lib/shoe.rb +29 -13
  10. data/lib/shoe/extensions.rb +0 -4
  11. data/lib/shoe/extensions/specification.rb +0 -4
  12. data/lib/shoe/extensions/validator.rb +40 -11
  13. data/lib/shoe/tasks.rb +13 -22
  14. data/lib/shoe/tasks/clean.rb +4 -4
  15. data/lib/shoe/tasks/compile.rb +2 -4
  16. data/lib/shoe/tasks/cucumber.rb +5 -9
  17. data/lib/shoe/tasks/rdoc.rb +2 -3
  18. data/lib/shoe/tasks/ronn.rb +5 -5
  19. data/lib/shoe/tasks/{abstract.rb → task.rb} +1 -1
  20. data/lib/shoe/tasks/test.rb +17 -57
  21. data/lib/shoe/util/minitest_colors.rb +60 -0
  22. data/lib/shoe/version.rb +3 -0
  23. data/man/shoe.3 +5 -11
  24. data/man/shoe.3.ronn +4 -13
  25. data/shoe.gemspec +35 -0
  26. data/test/helper.rb +6 -12
  27. data/test/support/assertions.rb +45 -0
  28. data/test/support/command_runner.rb +11 -0
  29. data/test/support/declarative_tests.rb +24 -0
  30. data/test/support/example_project.rb +37 -0
  31. data/test/support/file_manipulation.rb +43 -0
  32. data/test/support/gemspec_manipulation.rb +24 -0
  33. data/test/support/project_files.rb +60 -0
  34. data/test/support/redgreen.rb +6 -0
  35. data/test/system/rake_test.rb +124 -0
  36. metadata +75 -96
  37. data/bin/shoe +0 -18
  38. data/data/shoe/templates/application.erb +0 -23
  39. data/data/shoe/templates/executable.erb +0 -18
  40. data/data/shoe/templates/extconf.erb +0 -2
  41. data/data/shoe/templates/extension.erb +0 -25
  42. data/data/shoe/templates/gemspec.erb +0 -44
  43. data/data/shoe/templates/gitkeep.erb +0 -0
  44. data/data/shoe/templates/manpage_1.erb +0 -29
  45. data/data/shoe/templates/manpage_3.erb +0 -19
  46. data/data/shoe/templates/module.erb +0 -31
  47. data/data/shoe/templates/module_test.rb +0 -7
  48. data/data/shoe/templates/rakefile.erb +0 -3
  49. data/data/shoe/templates/readme.erb +0 -3
  50. data/data/shoe/templates/test_helper.erb +0 -9
  51. data/lib/shoe/extensions/option_parser.rb +0 -52
  52. data/lib/shoe/extensions/pathname.rb +0 -16
  53. data/lib/shoe/extensions/source_index.rb +0 -17
  54. data/lib/shoe/extensions/test_runner.rb +0 -28
  55. data/lib/shoe/generator.rb +0 -147
  56. data/lib/shoe/tasks/release.rb +0 -81
  57. data/man/shoe.1 +0 -63
  58. data/man/shoe.1.ronn +0 -60
  59. data/test/extensions/fake_rubygems_server.rb +0 -62
  60. data/test/extensions/helper_methods.rb +0 -73
  61. data/test/extensions/isolated_environment.rb +0 -50
  62. data/test/extensions/test_case.rb +0 -40
  63. data/test/system/rake_clean_test.rb +0 -36
  64. data/test/system/rake_compile_test.rb +0 -25
  65. data/test/system/rake_cucumber_test.rb +0 -51
  66. data/test/system/rake_rdoc_test.rb +0 -26
  67. data/test/system/rake_release_test.rb +0 -94
  68. data/test/system/rake_ronn_test.rb +0 -25
  69. data/test/system/rake_test_test.rb +0 -45
  70. data/test/system/shoe_test.rb +0 -79
data/bin/shoe DELETED
@@ -1,18 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- begin
4
- require 'shoe'
5
- rescue LoadError
6
- raise unless $!.message =~ /\bshoe$/
7
-
8
- lib = File.expand_path('../../lib', __FILE__)
9
- if !$:.include?(lib)
10
- warn "WARN: #{$!}.\n Trying again with #{lib} on the $LOAD_PATH..."
11
- $:.unshift(lib)
12
- retry
13
- end
14
-
15
- raise
16
- end
17
-
18
- Shoe::Generator.new.run(ARGV)
@@ -1,23 +0,0 @@
1
- require 'optparse'
2
-
3
- module <%= module_name %>
4
- class Application
5
- def initialize
6
- @options = OptionParser.new do |opts|
7
- # -h, --help, -v, --version are built into OptionParser
8
- # Try `<%= name %> --version=all` as you require more libraries!
9
- opts.version = <%= module_name %>::VERSION
10
- end
11
- end
12
-
13
- def run(argv)
14
- begin
15
- @options.parse(argv)
16
- rescue OptionParser::ParseError
17
- @options.abort($!)
18
- end
19
-
20
- # Have at it!
21
- end
22
- end
23
- end
@@ -1,18 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- begin
4
- require '<%= name %>'
5
- rescue LoadError
6
- raise unless $!.message =~ /\b<%= name %>$/
7
-
8
- lib = File.expand_path('../../lib', __FILE__)
9
- if !$:.include?(lib)
10
- warn "#{$!}. Trying again with #{lib} on the $LOAD_PATH."
11
- $:.unshift(lib)
12
- retry
13
- end
14
-
15
- raise
16
- end
17
-
18
- <%= module_name %>::Application.new.run(ARGV)
@@ -1,2 +0,0 @@
1
- require 'mkmf'
2
- create_makefile '<%= name %>/<%= extension_name %>'
@@ -1,25 +0,0 @@
1
- #include "ruby.h"
2
-
3
- static VALUE m<%= module_name %>;
4
- static VALUE m<%= extension_module_name %>;
5
-
6
- /*
7
- * Document-class: <%= extension_module_name %>
8
- * Document-method: run
9
- *
10
- * call-seq:
11
- * run -> nil
12
- *
13
- */
14
- static VALUE run(VALUE self) {
15
- return Qnil;
16
- }
17
-
18
- /*
19
- * Documentation for <%= extension_module_name %>.
20
- */
21
- void Init_extension() {
22
- m<%= module_name %> = rb_define_module("<%= module_name %>");
23
- m<%= extension_module_name %> = rb_define_module_under(m<%= module_name %>, "<%= extension_module_name %>");
24
- rb_define_method(m<%= extension_module_name %>, "run", run, 0);
25
- }
@@ -1,44 +0,0 @@
1
- $:.unshift File.expand_path('../lib', __FILE__)
2
- require '<%= name %>'
3
-
4
- # Feel free to change whatever you like! This file is yours now.
5
- Gem::Specification.new do |spec|
6
- spec.name = '<%= name %>'
7
- spec.version = <%= module_name %>::VERSION
8
-
9
- spec.summary = '<%= module_name %> is one of my favorite things!'
10
- spec.description = <<-END.gsub(/^ */, '')
11
- #{spec.summary}
12
-
13
- Further description here.
14
- END
15
-
16
- spec.author = '<%= `git config --get user.name`.chomp %>'
17
- spec.email = '<%= `git config --get user.email`.chomp %>'
18
- spec.homepage = 'http://github.com/<%= `git config --get github.user`.chomp %>/<%= name %>'
19
-
20
- # You may find these helpful:
21
- # spec.requirements = ['git'] # If your library shells out to git
22
- # spec.required_rubygems_version = ">= 1.3.6" # If you depend on prerelease gems
23
- # spec.add_runtime_dependency 'nokogiri' # Or what have you
24
- # spec.add_development_dependency 'cucumber'
25
- # spec.add_development_dependency 'redgreen'
26
- # spec.add_development_dependency 'ronn'
27
- spec.add_development_dependency 'shoe'
28
-
29
- # The kooky &File.method(:basename) trick keeps us from accidentally
30
- # shadowing a variable named "file" in the context that evaluates this
31
- # gemspec. I actually ran into this problem with Bundler!
32
- spec.files = Dir['**/*.rdoc', 'bin/*', 'data/**/*', 'ext/**/*.{rb,c}', 'lib/**/*.rb', 'man/**/*', 'test/**/*.rb']
33
- spec.executables = Dir['bin/*'].map &File.method(:basename)
34
- spec.extensions = Dir['ext/**/extconf.rb']
35
- spec.extra_rdoc_files = Dir['**/*.rdoc', 'ext/**/*.c']
36
- spec.test_files = Dir['test/**/*_test.rb']
37
-
38
- spec.rdoc_options = %W(
39
- --main README.rdoc
40
- --title #{spec.full_name}
41
- --inline-source
42
- --webcvs http://github.com/<%= `git config --get github.user`.chomp %>/<%= name %>/blob/v#{spec.version}/
43
- )
44
- end
File without changes
@@ -1,29 +0,0 @@
1
- <%= name %>(1) --
2
- =================
3
-
4
- ## SYNOPSIS
5
-
6
- `<%= name %>` [_options_]
7
-
8
- ## DESCRIPTION
9
-
10
- Write your description here.
11
-
12
- ## OPTIONS
13
-
14
- `<%= name %>` also responds to the following standard options:
15
-
16
- * `-h`, `--help`:
17
- Print a help message and exit.
18
-
19
- * `-v`, `--version`[=all]:
20
- Print `<%= name %>`'s version number and exit. If `=all` is given, also print
21
- version numbers of `<%= name %>`'s dependencies.
22
-
23
- ## AUTHOR
24
-
25
- <%= `git config --get user.name`.chomp %>, [<%= `git config --get github.user`.chomp %>](http://github.com/<%= `git config --get github.user`.chomp %>) on GitHub.
26
-
27
- ## SEE ALSO
28
-
29
- <%= name %>(3)
@@ -1,19 +0,0 @@
1
- <%= name %>(3) --
2
- =================
3
-
4
- ## SYNOPSIS
5
-
6
- `require '<%= name %>'`
7
- <%= module_name %>.somthing(_parameter_)
8
-
9
- ## DESCRIPTION
10
-
11
- Write your description here.
12
-
13
- ## AUTHOR
14
-
15
- <%= `git config --get user.name`.chomp %>, [<%= `git config --get github.user`.chomp %>](http://github.com/<%= `git config --get github.user`.chomp %>) on GitHub.
16
-
17
- ## SEE ALSO
18
-
19
- ruby(1)
@@ -1,31 +0,0 @@
1
- <% if data? %>
2
- require 'pathname'
3
- require 'rbconfig'
4
- require 'rbconfig/datadir'
5
-
6
- <% end %>
7
- module <%= module_name %>
8
- VERSION = '<%= version %>'
9
- <% if application? || extension? %>
10
-
11
- <% end %>
12
- <% if application? %>
13
- autoload :Application, '<%= name %>/application'
14
- <% end %>
15
- <% if extension? %>
16
- autoload :<%= extension_module_name %>, '<%= name %>/<%= extension_name %>'
17
- <% end %>
18
- <% if data? %>
19
-
20
- def self.datadir
21
- @@datadir ||= begin
22
- datadir = RbConfig.datadir('<%= name %>')
23
- if !File.exist?(datadir)
24
- warn "#{datadir} does not exist. Trying again with data directory relative to __FILE__."
25
- datadir = File.expand_path('../../data/<%= name %>', __FILE__)
26
- end
27
- Pathname.new(datadir)
28
- end
29
- end
30
- <% end %>
31
- end
@@ -1,7 +0,0 @@
1
- require 'test/helper'
2
-
3
- class <%= module_name %>Test < Test::Unit::TestCase
4
- def test_dummy
5
- assert_equal '<%= version %>', <%= module_name %>::VERSION
6
- end
7
- end
@@ -1,3 +0,0 @@
1
- require 'shoe'
2
-
3
- Shoe::Tasks.define('<%= name %>.gemspec')
@@ -1,3 +0,0 @@
1
- = <%= module_name %>
2
-
3
- <%= module_name %> is one of my favorite things! Let me tell you about it:
@@ -1,9 +0,0 @@
1
- require 'test/unit'
2
- require '<%= name %>'
3
-
4
- begin
5
- require 'redgreen' if $stdout.tty?
6
- rescue LoadError
7
- # It's nice not to have hard dependencies on any gems for testing, so that
8
- # it's super-easy for your users to run `gem check --test <%= name %>.`
9
- end
@@ -1,52 +0,0 @@
1
- module Shoe
2
- module Extensions
3
-
4
- # This extension allows for default options in OptionParser, processing
5
- # them before any given options and appending them nicely to the help
6
- # message. (It also does the conventional thing and errors with usage when
7
- # there's trouble parsing options.)
8
- #
9
- # Note that it's important to use #order rather than #permute, to ensure
10
- # that the given options have a chance to override the defaults. (These are
11
- # <tt>POSIX</tt>-ly correct semantics.)
12
- #
13
- # To use:
14
- # parser = OptionsParser.new do |opts|
15
- # opts.extend(Shoe::Extensions::OptionParser)
16
- # opts.defaults = %w(--foo --no-bar --baz=42)
17
- # # ... and so on ...
18
- # end
19
- #
20
- # parser.order(ARGV)
21
- module OptionParser
22
- attr_reader :defaults
23
-
24
- def defaults=(defaults)
25
- @defaults = defaults.extend(Defaults)
26
- end
27
-
28
- def order(*args, &block)
29
- super(*defaults.followed_by(*args), &block)
30
- rescue ::OptionParser::ParseError
31
- abort($!)
32
- end
33
-
34
- def help
35
- defaults.help(super, summary_indent)
36
- end
37
-
38
- private
39
-
40
- module Defaults #:nodoc:
41
- def followed_by(*args)
42
- dup.concat(args.flatten)
43
- end
44
-
45
- def help(before, indent)
46
- "#{before}\nDefaults:\n#{indent}#{join ' '}"
47
- end
48
- end
49
- end
50
-
51
- end
52
- end
@@ -1,16 +0,0 @@
1
- module Shoe
2
- module Extensions
3
-
4
- module Pathname
5
- def install(contents, mode)
6
- if exist?
7
- warn "WARN: not clobbering existing #{to_s}"
8
- else
9
- open('w') { |file| file.write(contents) }
10
- chmod(mode)
11
- end
12
- end
13
- end
14
-
15
- end
16
- end
@@ -1,17 +0,0 @@
1
- module Shoe
2
- module Extensions
3
-
4
- module SourceIndex
5
- attr_accessor :local_gemspec
6
-
7
- def find_name(*args)
8
- if args.first == local_gemspec.name
9
- [local_gemspec]
10
- else
11
- super
12
- end
13
- end
14
- end
15
-
16
- end
17
- end
@@ -1,28 +0,0 @@
1
- module Shoe
2
- module Extensions
3
-
4
- module TestRunner
5
- # Conforms the normal TestRunner interface to the slightly different form
6
- # called by Gem::Validator.
7
- #
8
- # Note that we use Test::Unit::AutoRunner (rather than going directly for
9
- # Test::Unit::UI::Console::TestRunner) in order to give redgreen a chance
10
- # to register itself, should it have been required in one of the
11
- # test_files.
12
- def self.run(suite, ui)
13
- runner = Test::Unit::AutoRunner.new(false)
14
- runner.collector = lambda { suite }
15
- runner.run.extend(BooleanPassed)
16
- end
17
-
18
- private
19
-
20
- module BooleanPassed #:nodoc:
21
- def passed?
22
- self
23
- end
24
- end
25
- end
26
-
27
- end
28
- end
@@ -1,147 +0,0 @@
1
- require 'erb'
2
- require 'optparse'
3
- require 'pathname'
4
-
5
- module Shoe
6
- class Generator
7
- def initialize
8
- @options = {}
9
- @parser = OptionParser.new do |opts|
10
- opts.extend(Extensions::OptionParser)
11
-
12
- opts.banner = "Usage: #{File.basename($0)} [-adehtv] [path]"
13
- opts.defaults = %w(--no-application --no-data --no-extension --test-unit .)
14
- opts.version = Shoe::VERSION
15
-
16
- opts.on('-a', '--[no-]application', 'Generate a command-line application.') do |application|
17
- @options[:application] = application
18
- end
19
-
20
- opts.on('-d', '--[no-]data', 'Generate a data directory.') do |data|
21
- @options[:data] = data
22
- end
23
-
24
- opts.on('-e', '--[no-]extension', 'Generate a C extension.') do |extension|
25
- @options[:extension] = extension
26
- end
27
-
28
- opts.on('-t', '--[no-]test-unit', 'Generate Test::Unit tests.') do |test_unit|
29
- @options[:test_unit] = test_unit
30
- end
31
- end
32
- end
33
-
34
- def run(arguments)
35
- @parser.order(arguments) { |path| @project = Project.new(path, @options) }
36
-
37
- @project.generate
38
- end
39
-
40
- private
41
-
42
-
43
- class Project
44
- def initialize(path, options)
45
- @path = Pathname.new(path)
46
- @options = options
47
- end
48
-
49
- def generate
50
- install('gitignore.erb', '.gitignore')
51
- install('readme.erb', 'README.rdoc')
52
- install('rakefile.erb', 'Rakefile')
53
- install('gemspec.erb', "#{name}.gemspec")
54
- install('module.erb', "lib/#{name}.rb")
55
- install('manpage_3.erb', "man/#{name}.3.ronn")
56
-
57
- if application?
58
- install('executable.erb', "bin/#{name}", 0755)
59
- install('application.erb', "lib/#{name}/application.rb")
60
- install('manpage_1.erb', "man/#{name}.1.ronn")
61
- end
62
-
63
- if data?
64
- install('gitkeep.erb', "data/#{name}/.gitkeep")
65
- end
66
-
67
- if extension?
68
- install('extconf.erb', "ext/#{name}/extconf.rb")
69
- install('extension.erb', "ext/#{name}/#{extension_name}.c")
70
- end
71
-
72
- if test_unit?
73
- install('test_helper.erb', "test/helper.rb")
74
- install('module_test.rb', "test/#{name}_test.rb")
75
- end
76
- end
77
-
78
- private
79
-
80
- def install(template, path, mode=0644)
81
- installable_path(path).install(contents(template), mode)
82
- end
83
-
84
- def application?
85
- @options[:application]
86
- end
87
-
88
- def data?
89
- @options[:data]
90
- end
91
-
92
- def extension?
93
- @options[:extension]
94
- end
95
-
96
- def test_unit?
97
- @options[:test_unit]
98
- end
99
-
100
- def name
101
- @path.expand_path.basename.to_s
102
- end
103
-
104
- def module_name
105
- name.capitalize.gsub(/_(\w)/) { $1.upcase }
106
- end
107
-
108
- def version
109
- '0.0.0'
110
- end
111
-
112
- def extension_name
113
- 'extension'
114
- end
115
-
116
- def extension_module_name
117
- extension_name.capitalize.gsub(/_(\w)/) { $1.upcase }
118
- end
119
-
120
- def installable_path(name)
121
- path = @path.join(name)
122
- path.dirname.mkpath
123
- path.extend(Extensions::Pathname)
124
- end
125
-
126
- def contents(template)
127
- Template.new(template).evaluate(binding)
128
- end
129
- end
130
-
131
- class Template
132
- def initialize(name)
133
- @name = name
134
- end
135
-
136
- def evaluate(binding)
137
- ERB.new(contents, nil, '<>').result(binding)
138
- end
139
-
140
- private
141
-
142
- def contents
143
- Shoe.datadir.join('templates', @name).read
144
- end
145
- end
146
- end
147
- end