git-style-binaries 0.1.11 → 0.2.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.
- data/README.markdown +1 -1
- data/Rakefile +1 -1
- data/VERSION.yml +1 -1
- data/lib/ext/core.rb +5 -4
- data/lib/git-style-binary.rb +4 -17
- data/lib/git-style-binary/command.rb +32 -22
- data/test/fixtures/wordpress-post +7 -4
- data/test/running_binaries_test.rb +11 -11
- metadata +53 -47
data/README.markdown
CHANGED
@@ -13,7 +13,7 @@ This gem uses [`trollop`](http://trollop.rubyforge.org/) for option parsing
|
|
13
13
|
|
14
14
|
Checkout <a href="http://www.xcombinator.com/movies/git-style-binaries.mov">the new screencast!</a>
|
15
15
|
|
16
|
-
<a href="http://www.xcombinator.com/movies/git-style-binaries.mov"><img src="
|
16
|
+
<a href="http://www.xcombinator.com/movies/git-style-binaries.mov"><img src="https://raw.github.com/jashmenn/git-style-binaries/master/doc/gsb-screencast.png" width='880' height='784' border=0></a>
|
17
17
|
|
18
18
|
## Try it out
|
19
19
|
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ begin
|
|
13
13
|
gem.homepage = "http://github.com/jashmenn/git-style-binaries"
|
14
14
|
gem.authors = ["Nate Murray"]
|
15
15
|
gem.add_dependency 'trollop'
|
16
|
-
gem.
|
16
|
+
gem.add_development_dependency 'shoulda' # for running the tests
|
17
17
|
|
18
18
|
excludes = /(README\.html)/
|
19
19
|
gem.files = (FileList["[A-Z]*.*", "{bin,examples,generators,lib,rails,spec,test,vendor}/**/*", 'Rakefile', 'LICENSE*']).delete_if{|f| f =~ excludes}
|
data/VERSION.yml
CHANGED
data/lib/ext/core.rb
CHANGED
data/lib/git-style-binary.rb
CHANGED
@@ -1,19 +1,6 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__))
|
2
2
|
require 'rubygems'
|
3
|
-
|
4
|
-
# Load the vendor gems
|
5
|
-
$:.unshift(File.dirname(__FILE__) + "/../vendor/gems")
|
6
|
-
%w(trollop).each do |library|
|
7
|
-
begin
|
8
|
-
require "#{library}/lib/#{library}"
|
9
|
-
rescue LoadError
|
10
|
-
begin
|
11
|
-
require 'trollop'
|
12
|
-
rescue LoadError
|
13
|
-
puts "There was an error loading #{library}. Try running 'gem install #{library}' to correct the problem"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
3
|
+
require 'trollop'
|
17
4
|
|
18
5
|
require 'ext/core'
|
19
6
|
require 'ext/colorize'
|
@@ -21,7 +8,7 @@ require 'git-style-binary/autorunner'
|
|
21
8
|
Dir[File.dirname(__FILE__) + "/git-style-binary/helpers/*.rb"].each {|f| require f}
|
22
9
|
|
23
10
|
module GitStyleBinary
|
24
|
-
|
11
|
+
|
25
12
|
class << self
|
26
13
|
include Helpers::NameResolver
|
27
14
|
attr_accessor :current_command
|
@@ -47,7 +34,7 @@ module GitStyleBinary
|
|
47
34
|
def load_primary
|
48
35
|
unless @loaded_primary
|
49
36
|
@loaded_primary = true
|
50
|
-
primary_file = File.join(binary_directory, basename)
|
37
|
+
primary_file = File.join(binary_directory, basename)
|
51
38
|
load primary_file
|
52
39
|
|
53
40
|
if !GitStyleBinary.primary_command # you still dont have a primary load a default
|
@@ -76,7 +63,7 @@ module GitStyleBinary
|
|
76
63
|
|
77
64
|
# UGLY eek
|
78
65
|
attr_accessor :name_of_command_being_loaded
|
79
|
-
|
66
|
+
|
80
67
|
end
|
81
68
|
end
|
82
69
|
|
@@ -2,19 +2,22 @@ require 'git-style-binary'
|
|
2
2
|
|
3
3
|
module GitStyleBinary
|
4
4
|
def self.command(&block)
|
5
|
-
|
6
|
-
c.name ||= (GitStyleBinary.name_of_command_being_loaded ||
|
5
|
+
Command.new(:constraints => [block]).tap do |c|
|
6
|
+
c.name ||= (GitStyleBinary.name_of_command_being_loaded ||
|
7
|
+
GitStyleBinary.current_command_name)
|
7
8
|
GitStyleBinary.known_commands[c.name] = c
|
8
9
|
|
9
|
-
if !GitStyleBinary.current_command ||
|
10
|
+
if !GitStyleBinary.current_command ||
|
11
|
+
GitStyleBinary.current_command.is_primary?
|
10
12
|
GitStyleBinary.current_command = c
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
17
|
def self.primary(&block)
|
16
|
-
|
17
|
-
c.name ||= (GitStyleBinary.name_of_command_being_loaded ||
|
18
|
+
Primary.new(:constraints => [block]).tap do |c|
|
19
|
+
c.name ||= (GitStyleBinary.name_of_command_being_loaded ||
|
20
|
+
GitStyleBinary.current_command_name)
|
18
21
|
GitStyleBinary.known_commands[c.name] = c
|
19
22
|
|
20
23
|
GitStyleBinary.primary_command = c unless GitStyleBinary.primary_command
|
@@ -55,7 +58,7 @@ module GitStyleBinary
|
|
55
58
|
end
|
56
59
|
|
57
60
|
def parser
|
58
|
-
@parser ||= begin
|
61
|
+
@parser ||= begin
|
59
62
|
p = Parser.new
|
60
63
|
p.command = self
|
61
64
|
p
|
@@ -67,11 +70,11 @@ module GitStyleBinary
|
|
67
70
|
end
|
68
71
|
|
69
72
|
def run
|
70
|
-
GitStyleBinary.load_primary unless is_primary?
|
73
|
+
GitStyleBinary.load_primary unless is_primary?
|
71
74
|
GitStyleBinary.load_subcommand if is_primary? && running_subcommand?
|
72
75
|
load_all_parser_constraints
|
73
76
|
@opts = process_args_with_subcmd
|
74
|
-
call_parser_run_block
|
77
|
+
call_parser_run_block
|
75
78
|
self
|
76
79
|
end
|
77
80
|
|
@@ -96,23 +99,24 @@ module GitStyleBinary
|
|
96
99
|
parser.consume_all(GitStyleBinary.primary_command.constraints)
|
97
100
|
end
|
98
101
|
|
99
|
-
def load_parser_local_constraints
|
102
|
+
def load_parser_local_constraints
|
100
103
|
cur = GitStyleBinary.current_command # see, why isn't 'this' current_command?
|
101
104
|
|
102
105
|
unless self.is_primary? && cur == self
|
103
|
-
# TODO
|
104
|
-
# soo UGLY. see #process_parser! unify with
|
105
|
-
# parser.consume_all(constraints) rescue
|
106
|
+
# TODO - the key lies in this function. figure out when you
|
107
|
+
# have more energy soo UGLY. see #process_parser! unify with
|
108
|
+
# that method parser.consume_all(constraints) rescue
|
109
|
+
# ArgumentError
|
106
110
|
parser.consume_all(cur.constraints)
|
107
111
|
end
|
108
112
|
end
|
109
113
|
|
110
114
|
def call_parser_run_block
|
111
115
|
runs = GitStyleBinary.current_command.parser.runs
|
112
|
-
|
116
|
+
|
113
117
|
parser.run_callbacks(:before_run, self)
|
114
118
|
parser.runs.last.call(self) # ... not too happy with this
|
115
|
-
parser.run_callbacks(:after_run, self)
|
119
|
+
parser.run_callbacks(:after_run, self)
|
116
120
|
end
|
117
121
|
|
118
122
|
def process_args_with_subcmd(args = ARGV, *a, &b)
|
@@ -124,7 +128,7 @@ module GitStyleBinary
|
|
124
128
|
|
125
129
|
# TOOooootally ugly! why? bc load_parser_local_constraints doesn't work
|
126
130
|
# when loading the indivdual commands because it depends on
|
127
|
-
# #current_command. This really sucks and is UGLY.
|
131
|
+
# #current_command. This really sucks and is UGLY.
|
128
132
|
# the todo is to put in 'load_all_parser_constraints' and this works
|
129
133
|
def process_parser!
|
130
134
|
# load_all_parser_constraints
|
@@ -135,10 +139,10 @@ module GitStyleBinary
|
|
135
139
|
parser.consume_all(constraints)
|
136
140
|
|
137
141
|
# hack
|
138
|
-
parser.consume {
|
142
|
+
parser.consume {
|
139
143
|
opt :version, "Print version and exit" if @version unless @specs[:version] || @long["version"]
|
140
144
|
opt :help, "Show this message" unless @specs[:help] || @long["help"]
|
141
|
-
resolve_default_short_options
|
145
|
+
resolve_default_short_options!
|
142
146
|
} # hack
|
143
147
|
end
|
144
148
|
|
@@ -170,7 +174,7 @@ module GitStyleBinary
|
|
170
174
|
parser.leftovers
|
171
175
|
end
|
172
176
|
|
173
|
-
def short_desc
|
177
|
+
def short_desc
|
174
178
|
parser.short_desc
|
175
179
|
end
|
176
180
|
|
@@ -179,12 +183,18 @@ module GitStyleBinary
|
|
179
183
|
GitStyleBinary.primary_name == name ? GitStyleBinary.primary_name : GitStyleBinary.primary_name + "-" + name
|
180
184
|
end
|
181
185
|
|
186
|
+
# die basically ripped out of trollop, because it can't be called
|
187
|
+
# without first calling 'Trollop.options'
|
182
188
|
def die arg, msg=nil
|
183
|
-
|
184
|
-
|
185
|
-
|
189
|
+
if msg
|
190
|
+
$stderr.puts "Error: #{arg} - #{msg}."
|
191
|
+
else
|
192
|
+
$stderr.puts "Error: #{arg}."
|
193
|
+
end
|
194
|
+
$stderr.puts "Try --help for help."
|
195
|
+
exit(-1)
|
186
196
|
end
|
187
|
-
|
197
|
+
|
188
198
|
# Helper to return the option
|
189
199
|
def [](k)
|
190
200
|
opts[k]
|
@@ -6,16 +6,19 @@ GitStyleBinary.command do
|
|
6
6
|
short_desc "create a blog post"
|
7
7
|
banner <<-EOS
|
8
8
|
SYNOPSIS
|
9
|
-
#{command.full_name} #{all_options_string} {content|STDIN}
|
9
|
+
#{command.full_name} #{all_options_string} {content|STDIN}
|
10
10
|
|
11
11
|
EOS
|
12
12
|
opt :blog, "short name of the blog to use", :default => 'default'
|
13
|
-
opt :category, "tag/category. specify multiple times for multiple categories",
|
13
|
+
opt :category, "tag/category. specify multiple times for multiple categories",
|
14
|
+
:type => String, :multi => true
|
14
15
|
opt :title, "title for the post", :required => true, :type => String
|
15
|
-
opt :type, "type of the content [html|xhtml|text]",
|
16
|
+
opt :type, "type of the content [html|xhtml|text]",
|
17
|
+
:default => 'html', :type => String
|
16
18
|
|
17
19
|
run do |command|
|
18
|
-
command.die :type, "type must be one of [html|xhtml|text]" unless
|
20
|
+
command.die :type, "type must be one of [html|xhtml|text]" unless
|
21
|
+
command.opts[:type] =~ /^(x?html|text)$/i
|
19
22
|
|
20
23
|
puts "Subcommand name: #{command.name.inspect}"
|
21
24
|
puts "Options: #{command.opts.inspect}"
|
@@ -62,7 +62,7 @@ class RunningBinariesTest < Test::Unit::TestCase
|
|
62
62
|
end
|
63
63
|
should "be able to require 'primary' and run just fine"
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
context "when running with an action" do
|
67
67
|
# should be the same for both formats
|
68
68
|
["wordpress-categories", "wordpress categories"].each do |bin_format|
|
@@ -77,7 +77,7 @@ class RunningBinariesTest < Test::Unit::TestCase
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
context "callbacks" do
|
82
82
|
context "on a binary" do
|
83
83
|
setup { @stdout, @stderr = bin("wordpress") }
|
@@ -86,9 +86,9 @@ class RunningBinariesTest < Test::Unit::TestCase
|
|
86
86
|
should "run the callback #{time}_run}" do
|
87
87
|
assert @stdout.match(/#{time}_run command/)
|
88
88
|
end
|
89
|
-
end
|
89
|
+
end
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
context "on help" do
|
93
93
|
setup { @stdout, @stderr = bin("wordpress -h") }
|
94
94
|
|
@@ -96,11 +96,11 @@ class RunningBinariesTest < Test::Unit::TestCase
|
|
96
96
|
should "not run the callback #{time}_run" do
|
97
97
|
assert_nil @stdout.match(/#{time}_run command/)
|
98
98
|
end
|
99
|
-
end
|
99
|
+
end
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
end
|
103
|
-
|
103
|
+
|
104
104
|
|
105
105
|
context "when running the subcommand" do
|
106
106
|
# should be the same for both formats
|
@@ -110,7 +110,7 @@ class RunningBinariesTest < Test::Unit::TestCase
|
|
110
110
|
context "with no options" do
|
111
111
|
setup { @stdout, @stderr = bin("#{bin_format}") }
|
112
112
|
should "fail because title is required" do
|
113
|
-
output_matches /Error: option
|
113
|
+
output_matches /Error: option --title must be specified.\s*Try --help for help/m
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -136,7 +136,7 @@ class RunningBinariesTest < Test::Unit::TestCase
|
|
136
136
|
setup { @stdout, @stderr = bin("#{bin_format} --title='glendale' --type=yaml") }
|
137
137
|
|
138
138
|
should "die on invalid options" do
|
139
|
-
output_matches /
|
139
|
+
output_matches /type must be one of \[html\|xhtml\|text\]/
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
@@ -144,9 +144,9 @@ class RunningBinariesTest < Test::Unit::TestCase
|
|
144
144
|
end # end #each
|
145
145
|
end
|
146
146
|
|
147
|
-
["wordpress help post", "wordpress post -h"].each do |format|
|
147
|
+
["wordpress help post", "wordpress post -h"].each do |format|
|
148
148
|
context "when calling '#{format}'" do
|
149
|
-
|
149
|
+
|
150
150
|
setup { @stdout, @stderr = bin(format) }
|
151
151
|
should "have a description" do
|
152
152
|
output_matches /create a blog post/
|
metadata
CHANGED
@@ -1,46 +1,55 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-style-binaries
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Nate Murray
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2010-02-04 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: trollop
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
17
22
|
type: :runtime
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
26
31
|
name: shoulda
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
27
38
|
type: :runtime
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
35
46
|
description: Ridiculously easy git-style binaries
|
36
47
|
email: nate@natemurray.com
|
37
48
|
executables: []
|
38
|
-
|
39
49
|
extensions: []
|
40
|
-
|
41
|
-
extra_rdoc_files:
|
50
|
+
extra_rdoc_files:
|
42
51
|
- README.markdown
|
43
|
-
files:
|
52
|
+
files:
|
44
53
|
- README.markdown
|
45
54
|
- Rakefile
|
46
55
|
- VERSION.yml
|
@@ -64,35 +73,32 @@ files:
|
|
64
73
|
- test/running_binaries_test.rb
|
65
74
|
- test/shoulda_macros/matching_stdio.rb
|
66
75
|
- test/test_helper.rb
|
67
|
-
has_rdoc: true
|
68
76
|
homepage: http://github.com/jashmenn/git-style-binaries
|
69
77
|
licenses: []
|
70
|
-
|
71
78
|
post_install_message:
|
72
|
-
rdoc_options:
|
79
|
+
rdoc_options:
|
73
80
|
- --charset=UTF-8
|
74
|
-
require_paths:
|
81
|
+
require_paths:
|
75
82
|
- lib
|
76
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
88
95
|
requirements: []
|
89
|
-
|
90
96
|
rubyforge_project:
|
91
|
-
rubygems_version: 1.
|
97
|
+
rubygems_version: 1.8.24
|
92
98
|
signing_key:
|
93
99
|
specification_version: 3
|
94
100
|
summary: Add git-style binaries to your project easily.
|
95
|
-
test_files:
|
101
|
+
test_files:
|
96
102
|
- test/git-style-binary/command_test.rb
|
97
103
|
- test/git_style_binary_test.rb
|
98
104
|
- test/running_binaries_test.rb
|