jashmenn-git-style-binaries 0.1.3
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.
- data/README.markdown +259 -0
- data/Rakefile +64 -0
- data/VERSION.yml +4 -0
- data/lib/ext/colorize.rb +199 -0
- data/lib/ext/core.rb +16 -0
- data/lib/git-style-binary/autorunner.rb +21 -0
- data/lib/git-style-binary/command.rb +196 -0
- data/lib/git-style-binary/commands/help.rb +32 -0
- data/lib/git-style-binary/helpers/name_resolver.rb +78 -0
- data/lib/git-style-binary/helpers/pager.rb +37 -0
- data/lib/git-style-binary/parser.rb +204 -0
- data/lib/git-style-binary.rb +74 -0
- data/test/fixtures/flickr +4 -0
- data/test/fixtures/flickr-download +17 -0
- data/test/fixtures/wordpress +30 -0
- data/test/fixtures/wordpress-categories +17 -0
- data/test/fixtures/wordpress-list +18 -0
- data/test/fixtures/wordpress-post +26 -0
- data/test/git-style-binary/command_test.rb +16 -0
- data/test/git_style_binary_test.rb +21 -0
- data/test/running_binaries_test.rb +185 -0
- data/test/shoulda_macros/matching_stdio.rb +13 -0
- data/test/test_helper.rb +28 -0
- metadata +98 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.dirname(__FILE__) + "/../../lib")
|
3
|
+
require 'git-style-binary/command'
|
4
|
+
|
5
|
+
GitStyleBinary.command do
|
6
|
+
short_desc "list blog postings"
|
7
|
+
banner <<-EOS
|
8
|
+
SYNOPSIS
|
9
|
+
#{command.full_name} #{all_options_string}
|
10
|
+
|
11
|
+
Lists the posts on the blog
|
12
|
+
|
13
|
+
EOS
|
14
|
+
run do |command|
|
15
|
+
puts "listing blog posts"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.dirname(__FILE__) + "/../../lib")
|
3
|
+
require 'git-style-binary/command'
|
4
|
+
|
5
|
+
GitStyleBinary.command do
|
6
|
+
short_desc "create a blog post"
|
7
|
+
banner <<-EOS
|
8
|
+
SYNOPSIS
|
9
|
+
#{command.full_name} #{all_options_string} {content|STDIN}
|
10
|
+
|
11
|
+
EOS
|
12
|
+
opt :blog, "short name of the blog to use", :default => 'default'
|
13
|
+
opt :category, "tag/category. specify multiple times for multiple categories", :type => String, :multi => true
|
14
|
+
opt :title, "title for the post", :required => true, :type => String
|
15
|
+
opt :type, "type of the content [html|xhtml|text]", :default => 'html', :type => String
|
16
|
+
|
17
|
+
run do |command|
|
18
|
+
command.die :type, "type must be one of [html|xhtml|text]" unless command.opts[:type] =~ /^(x?html|text)$/i
|
19
|
+
|
20
|
+
puts "Subcommand name: #{command.name.inspect}"
|
21
|
+
puts "Options: #{command.opts.inspect}"
|
22
|
+
puts "Remaining arguments: #{command.argv.inspect}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper.rb"
|
2
|
+
require 'git-style-binary/command'
|
3
|
+
|
4
|
+
class CommandTest < Test::Unit::TestCase
|
5
|
+
context "cmd" do
|
6
|
+
setup do
|
7
|
+
@c = GitStyleBinary::Command.new
|
8
|
+
end
|
9
|
+
|
10
|
+
should "be able to easily work with constraints" do
|
11
|
+
assert_equal @c.constraints, []
|
12
|
+
@c.constraints << "foo"
|
13
|
+
assert_equal @c.constraints, ["foo"]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/test_helper.rb"
|
2
|
+
|
3
|
+
class GitStyleBinariesTest < Test::Unit::TestCase
|
4
|
+
context "parsing basenames" do
|
5
|
+
should "accurately parse basenames" do
|
6
|
+
assert_equal "wordpress", GitStyleBinary.basename("bin/wordpress")
|
7
|
+
assert_equal "wordpress", GitStyleBinary.basename("bin/wordpress-post")
|
8
|
+
assert_equal "wordpress", GitStyleBinary.basename("wordpress-post")
|
9
|
+
end
|
10
|
+
|
11
|
+
should "get the current command name" do
|
12
|
+
# doesn't really apply any more b/c it calls 'current' which is never the
|
13
|
+
# current when your running rake_test_loader.rb
|
14
|
+
#
|
15
|
+
# assert_equal "wordpress", GitStyleBinary.current_command_name("bin/wordpress", ["--help"])
|
16
|
+
# assert_equal "post", GitStyleBinary.current_command_name("bin/wordpress-post", ["--help"])
|
17
|
+
# assert_equal "post", GitStyleBinary.current_command_name("bin/wordpress post", ["--help"])
|
18
|
+
#assert_equal "post", GitStyleBinary.current_command_name("bin/wordpress post", [])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/test_helper.rb"
|
2
|
+
|
3
|
+
THIS_YEAR=Time.now.year # todo
|
4
|
+
|
5
|
+
class RunningBinariesTest < Test::Unit::TestCase
|
6
|
+
include RunsBinaryFixtures
|
7
|
+
|
8
|
+
context "when running primary" do
|
9
|
+
["wordpress -h", "wordpress help"].each do |format|
|
10
|
+
context "and getting help as a '#{format}'" do
|
11
|
+
setup { @stdout, @stderr = bin(format) }
|
12
|
+
|
13
|
+
should "have the command name and short description" do
|
14
|
+
unless format == "wordpress -h" # doesn't apply to wordpress -h
|
15
|
+
output_matches /NAME\n\s*wordpress\-help \- get help for a specific command/m
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
should "have a local (not default) version string" do
|
20
|
+
output_matches /0\.0\.1 \(c\) 2009 Nate Murray - local/
|
21
|
+
end
|
22
|
+
|
23
|
+
should "get a list of subcommands" do
|
24
|
+
output_matches /subcommands/mi
|
25
|
+
end
|
26
|
+
|
27
|
+
should "have subcommand short descriptions" do
|
28
|
+
output_matches /post\s*create a blog post/
|
29
|
+
output_matches /categories\s*do something with categories/
|
30
|
+
output_matches /help\s*get help for a specific command/
|
31
|
+
output_matches /list\s*list blog postings/
|
32
|
+
end
|
33
|
+
|
34
|
+
should "have a usage" do
|
35
|
+
output_matches /SYNOPSIS/i
|
36
|
+
output_matches /wordpress(\-help)? \[/
|
37
|
+
end
|
38
|
+
|
39
|
+
should "be able to ask for help about help"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "and getting help as subcommand" do
|
44
|
+
# ["wordpress -h", "wordpress help"].each do |format|
|
45
|
+
["wordpress help"].each do |format|
|
46
|
+
context "'#{format}'" do
|
47
|
+
should "get help on subcommand post"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with no options" do
|
53
|
+
setup { @stdout, @stderr = bin("wordpress") }
|
54
|
+
|
55
|
+
should "output the options" do
|
56
|
+
output_matches /Primary Options:/
|
57
|
+
end
|
58
|
+
|
59
|
+
should "have the test_primary option" do
|
60
|
+
output_matches /test_primary=>nil/
|
61
|
+
end
|
62
|
+
end
|
63
|
+
should "be able to require 'primary' and run just fine"
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when running the subcommand" do
|
67
|
+
# should be the same for both formats
|
68
|
+
["wordpress-post", "wordpress post"].each do |bin_format|
|
69
|
+
context "#{bin_format}" do
|
70
|
+
|
71
|
+
context "with no options" do
|
72
|
+
setup { @stdout, @stderr = bin("#{bin_format}") }
|
73
|
+
should "fail because title is required" do
|
74
|
+
output_matches /Error: option 'title' must be specified.\s*Try --help for help/m
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "with options" do
|
79
|
+
setup { @stdout, @stderr = bin("#{bin_format} --title='glendale'") }
|
80
|
+
should "be running the subcommand's run block" do
|
81
|
+
output_matches /Subcommand name/
|
82
|
+
end
|
83
|
+
should "have some default options" do
|
84
|
+
output_matches /version=>false/
|
85
|
+
output_matches /help=>false/
|
86
|
+
end
|
87
|
+
should "have some primary options" do
|
88
|
+
output_matches /test_primary=>nil/
|
89
|
+
end
|
90
|
+
should "have some local options" do
|
91
|
+
output_matches /title=>"glendale"/
|
92
|
+
output_matches /type=>"html"/
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "testing die statements" do
|
97
|
+
setup { @stdout, @stderr = bin("#{bin_format} --title='glendale' --type=yaml") }
|
98
|
+
|
99
|
+
should "die on invalid options" do
|
100
|
+
output_matches /argument \-\-type type must be one of \[html\|xhtml\|text\]/
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
end # end bin_format
|
105
|
+
end # end #each
|
106
|
+
end
|
107
|
+
|
108
|
+
["wordpress help post", "wordpress post -h"].each do |format|
|
109
|
+
context "when calling '#{format}'" do
|
110
|
+
|
111
|
+
setup { @stdout, @stderr = bin(format) }
|
112
|
+
should "have a description" do
|
113
|
+
output_matches /create a blog post/
|
114
|
+
end
|
115
|
+
|
116
|
+
should "have the proper usage line" do
|
117
|
+
output_matches /SYNOPSIS\n\s*wordpress\-post/m
|
118
|
+
output_matches /\[--title\]/
|
119
|
+
end
|
120
|
+
|
121
|
+
should "have option flags" do
|
122
|
+
output_matches /\-\-title(.*)<s>/
|
123
|
+
end
|
124
|
+
|
125
|
+
should "have primary option flags" do
|
126
|
+
output_matches /\-\-test-primary(.*)<s>/
|
127
|
+
end
|
128
|
+
|
129
|
+
should "have default option flags" do
|
130
|
+
output_matches /\-\-verbose/
|
131
|
+
end
|
132
|
+
|
133
|
+
should "have trollop default option flags" do
|
134
|
+
output_matches /\-e, \-\-version/
|
135
|
+
end
|
136
|
+
|
137
|
+
should "have the correct binary name and short description" do
|
138
|
+
output_matches /NAME\n\s*wordpress\-post \- create a blog post/m
|
139
|
+
end
|
140
|
+
|
141
|
+
should "have a the primaries version string" do
|
142
|
+
output_matches /0\.0\.1 \(c\) 2009 Nate Murray - local/
|
143
|
+
end
|
144
|
+
|
145
|
+
should "have options" do
|
146
|
+
output_matches /Options/i
|
147
|
+
|
148
|
+
output_matches /\-b, \-\-blog=<s>/
|
149
|
+
output_matches /short name of the blog to use/
|
150
|
+
|
151
|
+
output_matches /-i, \-\-title=<s>/
|
152
|
+
output_matches /title for the post/
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context "when running a bare primary" do
|
159
|
+
["flickr -h", "flickr help"].each do |format|
|
160
|
+
context format do
|
161
|
+
setup { @stdout, @stderr = bin(format) }
|
162
|
+
|
163
|
+
should "have the name and short description" do
|
164
|
+
unless format == "flickr -h" # hmm
|
165
|
+
output_matches /NAME\n\s*flickr\-help \- get help for a specific command/m
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
should "have a local (not default) version string" do
|
170
|
+
output_matches /0\.0\.2 \(c\) 2009/
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
["flickr-download -h", "flickr download -h"].each do |format|
|
175
|
+
context format do
|
176
|
+
setup { @stdout, @stderr = bin(format) }
|
177
|
+
|
178
|
+
should "match on usage" do
|
179
|
+
output_matches /SYNOPSIS\n\s*flickr\-download/m
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Test::Unit::TestCase
|
2
|
+
def output_should_match(regexp)
|
3
|
+
assert_match regexp, @stdout + @stderr
|
4
|
+
end
|
5
|
+
alias_method :output_matches, :output_should_match
|
6
|
+
|
7
|
+
def stdout_should_match(regexp)
|
8
|
+
assert_match regexp, @stdout
|
9
|
+
end
|
10
|
+
def stderr_should_match(regexp)
|
11
|
+
assert_match regexp, @stderr
|
12
|
+
end
|
13
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
begin require 'redgreen'; rescue LoadError; end
|
5
|
+
require 'open3'
|
6
|
+
|
7
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
9
|
+
Dir[File.join(File.dirname(__FILE__), "shoulda_macros", "*.rb")].each {|f| require f}
|
10
|
+
ENV['NO_COLOR'] = "true"
|
11
|
+
|
12
|
+
require 'git-style-binary'
|
13
|
+
GitStyleBinary.run = true
|
14
|
+
|
15
|
+
class Test::Unit::TestCase
|
16
|
+
def fixtures_dir
|
17
|
+
File.join(File.dirname(__FILE__), "fixtures")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module RunsBinaryFixtures
|
22
|
+
# run the specified cmd returning the string values of [stdout,stderr]
|
23
|
+
def bin(cmd)
|
24
|
+
stdin, stdout, stderr = Open3.popen3("#{fixtures_dir}/#{cmd}")
|
25
|
+
[stdout.read, stderr.read]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jashmenn-git-style-binaries
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nate Murray
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-05-08 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: trollop
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: thoughtbot-shoulda
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: Ridiculously easy git-style binaries
|
36
|
+
email: nate@natemurray.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- README.markdown
|
43
|
+
files:
|
44
|
+
- README.markdown
|
45
|
+
- Rakefile
|
46
|
+
- VERSION.yml
|
47
|
+
- lib/ext/colorize.rb
|
48
|
+
- lib/ext/core.rb
|
49
|
+
- lib/git-style-binary.rb
|
50
|
+
- lib/git-style-binary/autorunner.rb
|
51
|
+
- lib/git-style-binary/command.rb
|
52
|
+
- lib/git-style-binary/commands/help.rb
|
53
|
+
- lib/git-style-binary/helpers/name_resolver.rb
|
54
|
+
- lib/git-style-binary/helpers/pager.rb
|
55
|
+
- lib/git-style-binary/parser.rb
|
56
|
+
- test/fixtures/flickr
|
57
|
+
- test/fixtures/flickr-download
|
58
|
+
- test/fixtures/wordpress
|
59
|
+
- test/fixtures/wordpress-categories
|
60
|
+
- test/fixtures/wordpress-list
|
61
|
+
- test/fixtures/wordpress-post
|
62
|
+
- test/git-style-binary/command_test.rb
|
63
|
+
- test/git_style_binary_test.rb
|
64
|
+
- test/running_binaries_test.rb
|
65
|
+
- test/shoulda_macros/matching_stdio.rb
|
66
|
+
- test/test_helper.rb
|
67
|
+
has_rdoc: true
|
68
|
+
homepage: http://github.com/jashmenn/git-style-binaries
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options:
|
71
|
+
- --charset=UTF-8
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
79
|
+
version:
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: "0"
|
85
|
+
version:
|
86
|
+
requirements: []
|
87
|
+
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 1.2.0
|
90
|
+
signing_key:
|
91
|
+
specification_version: 3
|
92
|
+
summary: Add git-style binaries to your project easily.
|
93
|
+
test_files:
|
94
|
+
- test/git-style-binary/command_test.rb
|
95
|
+
- test/git_style_binary_test.rb
|
96
|
+
- test/running_binaries_test.rb
|
97
|
+
- test/shoulda_macros/matching_stdio.rb
|
98
|
+
- test/test_helper.rb
|