github 0.4.5 → 0.5.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/.gitignore +5 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +39 -0
- data/History.txt +9 -0
- data/Rakefile +15 -39
- data/github.gemspec +23 -33
- data/lib/commands/commands.rb +8 -8
- data/lib/commands/helpers.rb +7 -7
- data/lib/github.rb +4 -2
- data/lib/github/command.rb +14 -4
- data/lib/github/extensions.rb +0 -1
- data/lib/github/version.rb +3 -0
- data/spec/command_spec.rb +14 -0
- data/spec/commands/command_admin_spec.rb +20 -0
- data/spec/commands/command_clone_spec.rb +2 -2
- data/spec/commands/command_fork_spec.rb +7 -7
- data/spec/commands/command_help_spec.rb +11 -0
- data/spec/commands/command_helper.rb +1 -3
- data/spec/commands/command_issues_spec.rb +1 -1
- data/spec/commands/command_search_spec.rb +3 -3
- data/spec/resources/help_output.txt +72 -0
- data/spec/spec_helper.rb +2 -2
- metadata +117 -47
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
github (0.5.0)
|
|
5
|
+
highline (~> 1.5.1)
|
|
6
|
+
json (~> 1.4.6)
|
|
7
|
+
launchy (~> 0.3.7)
|
|
8
|
+
text-format (= 1.0.0)
|
|
9
|
+
|
|
10
|
+
GEM
|
|
11
|
+
remote: http://rubygems.org/
|
|
12
|
+
specs:
|
|
13
|
+
activerecord (2.3.10)
|
|
14
|
+
activesupport (= 2.3.10)
|
|
15
|
+
activesupport (2.3.10)
|
|
16
|
+
configuration (1.1.0)
|
|
17
|
+
highline (1.5.2)
|
|
18
|
+
json (1.4.6)
|
|
19
|
+
launchy (0.3.7)
|
|
20
|
+
configuration (>= 0.0.5)
|
|
21
|
+
rake (>= 0.8.1)
|
|
22
|
+
rake (0.8.7)
|
|
23
|
+
rspec (1.3.1)
|
|
24
|
+
text-format (1.0.0)
|
|
25
|
+
text-hyphen (~> 1.0.0)
|
|
26
|
+
text-hyphen (1.0.0)
|
|
27
|
+
|
|
28
|
+
PLATFORMS
|
|
29
|
+
ruby
|
|
30
|
+
|
|
31
|
+
DEPENDENCIES
|
|
32
|
+
activerecord (~> 2.3.10)
|
|
33
|
+
github!
|
|
34
|
+
highline (~> 1.5.1)
|
|
35
|
+
json (~> 1.4.6)
|
|
36
|
+
launchy (~> 0.3.7)
|
|
37
|
+
rake
|
|
38
|
+
rspec (~> 1.3.1)
|
|
39
|
+
text-format (= 1.0.0)
|
data/History.txt
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
== 0.5.0 2011-1-17
|
|
2
|
+
|
|
3
|
+
* Support for ruby 1.9.2 [keithpitty]
|
|
4
|
+
* Clean fail if haven't setup github config yet [keithpitty]
|
|
5
|
+
|
|
6
|
+
== 0.4.6 2010-11-04
|
|
7
|
+
|
|
8
|
+
* Fix recent https migration of github.com [fishman]
|
|
9
|
+
|
|
1
10
|
== 0.4.5 2010-10-25
|
|
2
11
|
|
|
3
12
|
* Added "gh admin" - to open the Admin page for this project
|
data/Rakefile
CHANGED
|
@@ -1,45 +1,21 @@
|
|
|
1
|
-
require
|
|
2
|
-
|
|
1
|
+
require "bundler/setup"
|
|
2
|
+
Bundler::GemHelper.install_tasks
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
require 'echoe'
|
|
4
|
+
require 'spec/rake/spectask'
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
p.description = "The official `github` command line helper for simplifying your GitHub experience."
|
|
11
|
-
p.url = "http://github.com/"
|
|
12
|
-
p.author = ['Chris Wanstrath', 'Kevin Ballard', 'Scott Chacon', 'Dr Nic Williams']
|
|
13
|
-
p.email = "drnicwilliams@gmail.com"
|
|
14
|
-
p.dependencies = [
|
|
15
|
-
"text-format >=1.0.0",
|
|
16
|
-
"highline ~>1.5.1",
|
|
17
|
-
"json >=1.2.0"
|
|
18
|
-
]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
rescue LoadError => boom
|
|
22
|
-
puts "You are missing a dependency required for meta-operations on this gem."
|
|
23
|
-
puts "#{boom.to_s.capitalize}."
|
|
6
|
+
Spec::Rake::SpecTask.new("spec") do |t|
|
|
7
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
|
8
|
+
t.spec_opts = ['--color']
|
|
24
9
|
end
|
|
25
10
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
t.spec_opts = ['--color']
|
|
33
|
-
end
|
|
11
|
+
Spec::Rake::SpecTask.new("rcov_spec") do |t|
|
|
12
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
|
13
|
+
t.spec_opts = ['--color']
|
|
14
|
+
t.rcov = true
|
|
15
|
+
t.rcov_opts = ['--exclude', '^spec,/gems/']
|
|
16
|
+
end
|
|
34
17
|
|
|
35
|
-
|
|
36
|
-
Rake::Task['spec'].invoke
|
|
37
|
-
end
|
|
18
|
+
task :test => :spec
|
|
38
19
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
t.spec_opts = ['--color']
|
|
42
|
-
t.rcov = true
|
|
43
|
-
t.rcov_opts = ['--exclude', '^spec,/gems/']
|
|
44
|
-
end
|
|
45
|
-
end
|
|
20
|
+
desc "Run specs as default activity"
|
|
21
|
+
task :default => :spec
|
data/github.gemspec
CHANGED
|
@@ -1,40 +1,30 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "github/version"
|
|
2
4
|
|
|
3
5
|
Gem::Specification.new do |s|
|
|
4
|
-
s.name
|
|
5
|
-
s.version
|
|
6
|
+
s.name = "github"
|
|
7
|
+
s.version = GitHub::VERSION
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.authors = ['Chris Wanstrath', 'Kevin Ballard', 'Scott Chacon', 'Dr Nic Williams']
|
|
10
|
+
s.email = ["drnicwilliams@gmail.com"]
|
|
11
|
+
s.homepage = "https://github.com/defunkt/github-gem"
|
|
12
|
+
s.summary = "The official `github` command line helper for simplifying your GitHub experience."
|
|
13
|
+
s.description = "The official `github` command line helper for simplifying your GitHub experience."
|
|
6
14
|
|
|
7
|
-
s.
|
|
8
|
-
s.authors = ["Chris Wanstrath, Kevin Ballard, Scott Chacon, Dr Nic Williams"]
|
|
9
|
-
s.date = %q{2010-10-25}
|
|
10
|
-
s.description = %q{The official `github` command line helper for simplifying your GitHub experience.}
|
|
11
|
-
s.email = %q{drnicwilliams@gmail.com}
|
|
12
|
-
s.executables = ["gh", "github"]
|
|
13
|
-
s.extra_rdoc_files = ["LICENSE", "README.md", "bin/gh", "bin/github", "lib/commands/commands.rb", "lib/commands/helpers.rb", "lib/commands/issues.rb", "lib/commands/network.rb", "lib/github.rb", "lib/github/command.rb", "lib/github/extensions.rb", "lib/github/helper.rb", "lib/github/ui.rb"]
|
|
14
|
-
s.files = ["History.txt", "LICENSE", "Manifest", "README.md", "Rakefile", "bin/gh", "bin/github", "lib/commands/commands.rb", "lib/commands/helpers.rb", "lib/commands/issues.rb", "lib/commands/network.rb", "lib/github.rb", "lib/github/command.rb", "lib/github/extensions.rb", "lib/github/helper.rb", "lib/github/ui.rb", "setup.rb", "spec/command_spec.rb", "spec/commands/command_browse_spec.rb", "spec/commands/command_clone_spec.rb", "spec/commands/command_create-from-local_spec.rb", "spec/commands/command_fetch_spec.rb", "spec/commands/command_fork_spec.rb", "spec/commands/command_helper.rb", "spec/commands/command_home_spec.rb", "spec/commands/command_info_spec.rb", "spec/commands/command_issues_spec.rb", "spec/commands/command_network_spec.rb", "spec/commands/command_pull-request_spec.rb", "spec/commands/command_pull_spec.rb", "spec/commands/command_search_spec.rb", "spec/commands/command_track_spec.rb", "spec/commands_spec.rb", "spec/extensions_spec.rb", "spec/github_spec.rb", "spec/helper_spec.rb", "spec/spec_helper.rb", "spec/windoze_spec.rb", "github.gemspec"]
|
|
15
|
-
s.homepage = %q{http://github.com/}
|
|
16
|
-
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Github", "--main", "README.md"]
|
|
17
|
-
s.require_paths = ["lib"]
|
|
18
|
-
s.rubyforge_project = %q{github}
|
|
19
|
-
s.rubygems_version = %q{1.3.7}
|
|
20
|
-
s.summary = %q{The official `github` command line helper for simplifying your GitHub experience.}
|
|
15
|
+
s.rubyforge_project = "github"
|
|
21
16
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
|
|
22
|
+
s.add_dependency "text-format", "1.0.0"
|
|
23
|
+
s.add_dependency "highline", "~> 1.5.1"
|
|
24
|
+
s.add_dependency "json", "~> 1.4.6"
|
|
25
|
+
s.add_dependency "launchy", "~> 0.3.7"
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
s.add_runtime_dependency(%q<json>, [">= 1.2.0"])
|
|
30
|
-
else
|
|
31
|
-
s.add_dependency(%q<text-format>, [">= 1.0.0"])
|
|
32
|
-
s.add_dependency(%q<highline>, ["~> 1.5.1"])
|
|
33
|
-
s.add_dependency(%q<json>, [">= 1.2.0"])
|
|
34
|
-
end
|
|
35
|
-
else
|
|
36
|
-
s.add_dependency(%q<text-format>, [">= 1.0.0"])
|
|
37
|
-
s.add_dependency(%q<highline>, ["~> 1.5.1"])
|
|
38
|
-
s.add_dependency(%q<json>, [">= 1.2.0"])
|
|
39
|
-
end
|
|
27
|
+
s.add_development_dependency "rake"
|
|
28
|
+
s.add_development_dependency "rspec", "~>1.3.1"
|
|
29
|
+
s.add_development_dependency "activerecord", "~>2.3.10"
|
|
40
30
|
end
|
data/lib/commands/commands.rb
CHANGED
|
@@ -46,7 +46,7 @@ end
|
|
|
46
46
|
desc 'Open the given user/project in a web browser'
|
|
47
47
|
usage 'github open [user/project]'
|
|
48
48
|
command :open do |arg|
|
|
49
|
-
helper.open "
|
|
49
|
+
helper.open "https://github.com/#{arg}"
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
desc "Info about this project."
|
|
@@ -54,7 +54,7 @@ command :info do
|
|
|
54
54
|
puts "== Info for #{helper.project}"
|
|
55
55
|
puts "You are #{helper.owner}"
|
|
56
56
|
puts "Currently tracking:"
|
|
57
|
-
helper.tracking.sort { |
|
|
57
|
+
helper.tracking.sort { |a, b| a == helper.origin ? -1 : b == helper.origin ? 1 : a.to_s <=> b.to_s }.each do |(name,user_or_url)|
|
|
58
58
|
puts " - #{user_or_url} (as #{name})"
|
|
59
59
|
end
|
|
60
60
|
end
|
|
@@ -142,7 +142,7 @@ command :clone do |user, repo, dir|
|
|
|
142
142
|
die "Specify a user to pull from" if user.nil?
|
|
143
143
|
if options[:search]
|
|
144
144
|
query = [user, repo, dir].compact.join(" ")
|
|
145
|
-
data = JSON.parse(open("
|
|
145
|
+
data = JSON.parse(open("https://github.com/api/v1/json/search/#{URI.escape query}").read)
|
|
146
146
|
if (repos = data['repositories']) && !repos.nil? && repos.length > 0
|
|
147
147
|
repo_list = repos.map do |r|
|
|
148
148
|
{ "name" => "#{r['username']}/#{r['name']}", "description" => r['description'] }
|
|
@@ -193,7 +193,7 @@ flags :rdoc => 'Create README.rdoc'
|
|
|
193
193
|
flags :rst => 'Create README.rst'
|
|
194
194
|
flags :private => 'Create private repository'
|
|
195
195
|
command :create do |repo|
|
|
196
|
-
sh "curl -F 'repository[name]=#{repo}' -F 'repository[public]=#{!options[:private]}' -F 'login=#{github_user}' -F 'token=#{github_token}'
|
|
196
|
+
sh "curl -F 'repository[name]=#{repo}' -F 'repository[public]=#{!options[:private]}' -F 'login=#{github_user}' -F 'token=#{github_token}' https://github.com/repositories"
|
|
197
197
|
mkdir repo
|
|
198
198
|
cd repo
|
|
199
199
|
git "init"
|
|
@@ -223,7 +223,7 @@ command :fork do |user, repo|
|
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
225
|
|
|
226
|
-
sh "curl -F 'login=#{github_user}' -F 'token=#{github_token}'
|
|
226
|
+
sh "curl -F 'login=#{github_user}' -F 'token=#{github_token}' https://github.com/#{user}/#{repo}/fork"
|
|
227
227
|
|
|
228
228
|
url = "git@github.com:#{github_user}/#{repo}.git"
|
|
229
229
|
if is_repo
|
|
@@ -243,8 +243,8 @@ command :'create-from-local' do
|
|
|
243
243
|
repo = File.basename(cwd)
|
|
244
244
|
is_repo = !git("status").match(/fatal/)
|
|
245
245
|
raise "Not a git repository. Use gh create instead" unless is_repo
|
|
246
|
-
created = sh "curl -F 'repository[name]=#{repo}' -F 'repository[public]=#{options[:private] != true}' -F 'login=#{github_user}' -F 'token=#{github_token}'
|
|
247
|
-
if created.out =~ %r{You are being <a href="
|
|
246
|
+
created = sh "curl -F 'repository[name]=#{repo}' -F 'repository[public]=#{options[:private] != true}' -F 'login=#{github_user}' -F 'token=#{github_token}' https://github.com/repositories"
|
|
247
|
+
if created.out =~ %r{You are being <a href="https://github.com/#{github_user}/([^"]+)"}
|
|
248
248
|
git "remote add origin git@github.com:#{github_user}/#{$1}.git"
|
|
249
249
|
git_exec "push origin master"
|
|
250
250
|
else
|
|
@@ -257,7 +257,7 @@ desc "Search GitHub for the given repository name."
|
|
|
257
257
|
usage "github search [query]"
|
|
258
258
|
command :search do |query|
|
|
259
259
|
die "Usage: github search [query]" if query.nil?
|
|
260
|
-
data = JSON.parse(open("
|
|
260
|
+
data = JSON.parse(open("https://github.com/api/v1/json/search/#{URI.escape query}").read)
|
|
261
261
|
if (repos = data['repositories']) && !repos.nil? && repos.length > 0
|
|
262
262
|
puts repos.map { |r| "#{r['username']}/#{r['name']}"}.sort.uniq
|
|
263
263
|
else
|
data/lib/commands/helpers.rb
CHANGED
|
@@ -2,10 +2,10 @@ DEV_NULL = File.exist?("/dev/null") ? "/dev/null" : "nul:" unless const_defined?
|
|
|
2
2
|
|
|
3
3
|
helper :user_and_repo_from do |url|
|
|
4
4
|
case url
|
|
5
|
-
when %r|^git://github\.com/([^/]+/[^/]+)
|
|
6
|
-
when %r|^
|
|
7
|
-
when %r|^(?:git\+ssh://)?(?:git@)?github\.com/([^/]+/[^/]+)
|
|
8
|
-
when %r|^(?:ssh://)?(?:git@)?github\.com:([^/]+/[^/]+)
|
|
5
|
+
when %r|^git://github\.com/([^/]+/[^/]+)$| then $1.split('/')
|
|
6
|
+
when %r|^https?://github\.com/([^/]+/[^/]+)$| then $1.split('/')
|
|
7
|
+
when %r|^(?:git\+ssh://)?(?:git@)?github\.com/([^/]+/[^/]+)$| then $1.split('/')
|
|
8
|
+
when %r|^(?:ssh://)?(?:git@)?github\.com:([^/]+/[^/]+)$| then $1.split('/')
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -29,7 +29,7 @@ end
|
|
|
29
29
|
|
|
30
30
|
helper :project do
|
|
31
31
|
repo = repo_for(origin)
|
|
32
|
-
if repo.nil?
|
|
32
|
+
if repo.nil? || repo.empty?
|
|
33
33
|
if url_for(origin) == ""
|
|
34
34
|
STDERR.puts "Error: missing remote 'origin'"
|
|
35
35
|
else
|
|
@@ -249,7 +249,7 @@ helper :network_page_for do |user|
|
|
|
249
249
|
end
|
|
250
250
|
|
|
251
251
|
helper :network_meta_for do |user|
|
|
252
|
-
"
|
|
252
|
+
"https://github.com/#{user}/#{project}/network_meta"
|
|
253
253
|
end
|
|
254
254
|
|
|
255
255
|
helper :issues_page_for do |user|
|
|
@@ -257,7 +257,7 @@ helper :issues_page_for do |user|
|
|
|
257
257
|
end
|
|
258
258
|
|
|
259
259
|
helper :list_issues_for do |user, state|
|
|
260
|
-
"
|
|
260
|
+
"https://github.com/api/v2/yaml/issues/list/#{user}/#{project}/#{state}"
|
|
261
261
|
end
|
|
262
262
|
|
|
263
263
|
helper :has_launchy? do |blk|
|
data/lib/github.rb
CHANGED
|
@@ -163,7 +163,9 @@ GitHub.command :default, :aliases => ['', '-h', 'help', '-help', '--help'] do
|
|
|
163
163
|
:body_indent => indent,
|
|
164
164
|
:columns => 79 # be a little more lenient than the default
|
|
165
165
|
)
|
|
166
|
-
GitHub.descriptions.sort
|
|
166
|
+
sorted = GitHub.descriptions.keys.sort
|
|
167
|
+
sorted.each do |command|
|
|
168
|
+
desc = GitHub.descriptions[command]
|
|
167
169
|
cmdstr = "%-#{longest}s" % command
|
|
168
170
|
desc = fmt.format(desc).strip # strip to eat first "indent"
|
|
169
171
|
message << " #{cmdstr} => #{desc}"
|
|
@@ -171,7 +173,7 @@ GitHub.command :default, :aliases => ['', '-h', 'help', '-help', '--help'] do
|
|
|
171
173
|
ffmt = fmt.clone
|
|
172
174
|
ffmt.body_indent += 2 # length of "% " and/or "--"
|
|
173
175
|
GitHub.usage_descriptions[command].each do |usage_descriptions|
|
|
174
|
-
usage_descriptions.each do |usage|
|
|
176
|
+
usage_descriptions.split("\n").each do |usage|
|
|
175
177
|
usage_str = "%% %-#{flongest}s" % usage
|
|
176
178
|
message << ffmt.format(usage_str)
|
|
177
179
|
end
|
data/lib/github/command.rb
CHANGED
|
@@ -67,11 +67,21 @@ module GitHub
|
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def github_user
|
|
70
|
-
git("config --get github.user")
|
|
70
|
+
user = git("config --get github.user")
|
|
71
|
+
if user.empty?
|
|
72
|
+
die("You must 'git config --global github.user [your Github username]' before running this command")
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
user
|
|
71
76
|
end
|
|
72
77
|
|
|
73
78
|
def github_token
|
|
74
|
-
git("config --get github.token")
|
|
79
|
+
token = git("config --get github.token")
|
|
80
|
+
if token.empty?
|
|
81
|
+
die("You must 'git config --global github.token [your API token]' before running this command")
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
token
|
|
75
85
|
end
|
|
76
86
|
|
|
77
87
|
def shell_user
|
|
@@ -99,8 +109,8 @@ module GitHub
|
|
|
99
109
|
err = perr.read.strip
|
|
100
110
|
end
|
|
101
111
|
|
|
102
|
-
replace @error = err
|
|
103
|
-
replace @out = out
|
|
112
|
+
replace @error = err unless err.empty?
|
|
113
|
+
replace @out = out unless out.empty?
|
|
104
114
|
|
|
105
115
|
self
|
|
106
116
|
end
|
data/lib/github/extensions.rb
CHANGED
data/spec/command_spec.rb
CHANGED
|
@@ -79,4 +79,18 @@ describe GitHub::Command do
|
|
|
79
79
|
@command.should_receive(:exit!).once
|
|
80
80
|
@command.die "message"
|
|
81
81
|
end
|
|
82
|
+
|
|
83
|
+
it "should die if a github API token cannot be found" do
|
|
84
|
+
@command.should_receive(:git).once.with("config --get github.token").and_return("")
|
|
85
|
+
@command.should_receive(:puts).once.with("=> You must 'git config --global github.token [your API token]' before running this command")
|
|
86
|
+
@command.should_receive(:exit!).once
|
|
87
|
+
@command.github_token
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should die if a github username token cannot be found" do
|
|
91
|
+
@command.should_receive(:git).once.with("config --get github.user").and_return("")
|
|
92
|
+
@command.should_receive(:puts).once.with("=> You must 'git config --global github.user [your Github username]' before running this command")
|
|
93
|
+
@command.should_receive(:exit!).once
|
|
94
|
+
@command.github_user
|
|
95
|
+
end
|
|
82
96
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
require File.dirname(__FILE__) + '/command_helper'
|
|
3
|
+
|
|
4
|
+
describe "github admin" do
|
|
5
|
+
include CommandHelper
|
|
6
|
+
|
|
7
|
+
specify "admin should open the project admin page" do
|
|
8
|
+
running :admin do
|
|
9
|
+
setup_url_for
|
|
10
|
+
@helper.should_receive(:open).once.with("https://github.com/user/project/admin")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
specify "admin drnic should open the home page of drnic's fork" do
|
|
15
|
+
running :admin, "drnic" do
|
|
16
|
+
setup_url_for
|
|
17
|
+
@helper.should_receive(:open).once.with("https://github.com/drnic/project/admin")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -76,7 +76,7 @@ describe "github clone" do
|
|
|
76
76
|
defunkt/github-gem # The official `github` command line helper for simplifying your GitHub experience.
|
|
77
77
|
pjhyett/github-gem-builder # The scripts used to build RubyGems on GitHub
|
|
78
78
|
LIST
|
|
79
|
-
@command.should_receive(:open).with("
|
|
79
|
+
@command.should_receive(:open).with("https://github.com/api/v1/json/search/github-gem").and_return(json)
|
|
80
80
|
GitHub::UI.should_receive(:display_select_list).with(question_list).
|
|
81
81
|
and_return("defunkt/github-gem")
|
|
82
82
|
@command.should_receive(:current_user?).and_return(nil)
|
|
@@ -84,4 +84,4 @@ describe "github clone" do
|
|
|
84
84
|
end
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
end
|
|
87
|
+
end
|
|
@@ -18,8 +18,8 @@ describe "github fork" do
|
|
|
18
18
|
setup_url_for "origin", "defunkt", "github-gem"
|
|
19
19
|
setup_remote "origin", :user => "defunkt", :project => "github-gem"
|
|
20
20
|
setup_user_and_branch
|
|
21
|
-
@command.should_receive(:sh).with("curl -F 'login=drnic' -F 'token=MY_GITHUB_TOKEN'
|
|
22
|
-
@command.should_receive(:git
|
|
21
|
+
@command.should_receive(:sh).with("curl -F 'login=drnic' -F 'token=MY_GITHUB_TOKEN' https://github.com/defunkt/github-gem/fork")
|
|
22
|
+
@command.should_receive(:git).with("config remote.origin.url git@github.com:drnic/github-gem.git")
|
|
23
23
|
stdout.should == "defunkt/github-gem forked\n"
|
|
24
24
|
end
|
|
25
25
|
end
|
|
@@ -27,8 +27,8 @@ describe "github fork" do
|
|
|
27
27
|
specify "fork a user/project repo" do
|
|
28
28
|
running :fork, "defunkt/github-gem" do
|
|
29
29
|
setup_github_token
|
|
30
|
-
@command.should_receive(:sh).with("curl -F 'login=drnic' -F 'token=MY_GITHUB_TOKEN'
|
|
31
|
-
@command.should_receive(:git_exec
|
|
30
|
+
@command.should_receive(:sh).with("curl -F 'login=drnic' -F 'token=MY_GITHUB_TOKEN' https://github.com/defunkt/github-gem/fork")
|
|
31
|
+
@command.should_receive(:git_exec).with("clone git@github.com:drnic/github-gem.git")
|
|
32
32
|
stdout.should == "Giving GitHub a moment to create the fork...\n"
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -36,9 +36,9 @@ describe "github fork" do
|
|
|
36
36
|
specify "fork a user project repo" do
|
|
37
37
|
running :fork, "defunkt", "github-gem" do
|
|
38
38
|
setup_github_token
|
|
39
|
-
@command.should_receive("sh").with("curl -F 'login=drnic' -F 'token=MY_GITHUB_TOKEN'
|
|
40
|
-
@command.should_receive(:git_exec
|
|
39
|
+
@command.should_receive("sh").with("curl -F 'login=drnic' -F 'token=MY_GITHUB_TOKEN' https://github.com/defunkt/github-gem/fork")
|
|
40
|
+
@command.should_receive(:git_exec).with("clone git@github.com:drnic/github-gem.git")
|
|
41
41
|
stdout.should == "Giving GitHub a moment to create the fork...\n"
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
|
-
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe "github help" do
|
|
4
|
+
|
|
5
|
+
it "should output help contents" do
|
|
6
|
+
example_output = File.expand_path(File.dirname(__FILE__) + "/../resources/help_output.txt")
|
|
7
|
+
$stdout.should_receive(:write).with(File.read(example_output))
|
|
8
|
+
GitHub.invoke(:default)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
@@ -149,8 +149,6 @@ module CommandHelper
|
|
|
149
149
|
@calls = []
|
|
150
150
|
end
|
|
151
151
|
|
|
152
|
-
undef_method *(instance_methods.map { |x| x.to_sym } - [:__id__, :__send__])
|
|
153
|
-
|
|
154
152
|
def invoke
|
|
155
153
|
@calls.each do |sym, args|
|
|
156
154
|
(@mock.obj.send @call).send sym, *args
|
|
@@ -167,4 +165,4 @@ module CommandHelper
|
|
|
167
165
|
@parent.send sym, *args
|
|
168
166
|
end
|
|
169
167
|
end
|
|
170
|
-
end
|
|
168
|
+
end
|
|
@@ -90,7 +90,7 @@ describe "github issues" do
|
|
|
90
90
|
|
|
91
91
|
state: #{state}
|
|
92
92
|
YAML
|
|
93
|
-
api_url = "
|
|
93
|
+
api_url = "https://github.com/api/v2/yaml/issues/list/#{options[:user]}/#{options[:project]}/#{state}"
|
|
94
94
|
@command.should_receive(:open).with(api_url).and_return(yaml)
|
|
95
95
|
end
|
|
96
96
|
end
|
|
@@ -11,7 +11,7 @@ describe "github search" do
|
|
|
11
11
|
'{"name":"github-gem-builder","size":76,"followers":26,"username":"pjhyett","language":"Ruby","fork":false,"id":"repo-67489","type":"repo","pushed":"2008-11-04T04:54:57Z","forks":3,"description":"The scripts used to build RubyGems on GitHub","score":3.4152448,"created":"2008-10-24T22:29:32Z"}' +
|
|
12
12
|
']}'
|
|
13
13
|
json.rewind
|
|
14
|
-
@command.should_receive(:open).with("
|
|
14
|
+
@command.should_receive(:open).with("https://github.com/api/v1/json/search/github-gem").and_return(json)
|
|
15
15
|
stdout.should == "defunkt/github-gem\npjhyett/github-gem-builder\n"
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -20,7 +20,7 @@ describe "github search" do
|
|
|
20
20
|
running :search, "xxxxxxxxxx" do
|
|
21
21
|
json = StringIO.new '{"repositories":[]}'
|
|
22
22
|
json.rewind
|
|
23
|
-
@command.should_receive(:open).with("
|
|
23
|
+
@command.should_receive(:open).with("https://github.com/api/v1/json/search/xxxxxxxxxx").and_return(json)
|
|
24
24
|
stdout.should == "No results found\n"
|
|
25
25
|
end
|
|
26
26
|
end
|
|
@@ -31,4 +31,4 @@ describe "github search" do
|
|
|
31
31
|
self.should raise_error(RuntimeError)
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
|
-
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
Usage: github command <space separated arguments>
|
|
2
|
+
Available commands:
|
|
3
|
+
admin => Open this repo's Admin panel a web browser.
|
|
4
|
+
browse => Open this repo in a web browser.
|
|
5
|
+
% github browse [user] [branch]
|
|
6
|
+
clone => Clone a repo. Uses ssh if current user is
|
|
7
|
+
% github clone [user] [repo] [dir]
|
|
8
|
+
--search: Search for [user|repo] and clone selected
|
|
9
|
+
repository
|
|
10
|
+
--ssh : Clone using the git@github.com style url.
|
|
11
|
+
config => Automatically set configuration info, or pass args to
|
|
12
|
+
specify.
|
|
13
|
+
% github config [my_username] [my_repo_name]
|
|
14
|
+
create => Create a new, empty GitHub repository
|
|
15
|
+
% github create [repo]
|
|
16
|
+
--markdown: Create README.markdown
|
|
17
|
+
--mdown : Create README.mdown
|
|
18
|
+
--private : Create private repository
|
|
19
|
+
--rdoc : Create README.rdoc
|
|
20
|
+
--rst : Create README.rst
|
|
21
|
+
--textile : Create README.textile
|
|
22
|
+
create-from-local => Create a new GitHub repository from the current local
|
|
23
|
+
repository
|
|
24
|
+
--private: Create private repository
|
|
25
|
+
fetch => Fetch from a remote to a local branch.
|
|
26
|
+
fetch_all => Fetch all refs from a user
|
|
27
|
+
fork => Forks a GitHub repository
|
|
28
|
+
% github fork
|
|
29
|
+
% github fork [user]/[repo]
|
|
30
|
+
home => Open this repo's master branch in a web browser.
|
|
31
|
+
ignore => Ignore a SHA (from 'github network commits')
|
|
32
|
+
info => Info about this project.
|
|
33
|
+
issues => Project issues tools - sub-commands : open [user],
|
|
34
|
+
closed [user]
|
|
35
|
+
--after: Only show issues updated after a certain date
|
|
36
|
+
--label: Only show issues with a certain label
|
|
37
|
+
network => Project network tools - sub-commands : web [user], list,
|
|
38
|
+
fetch, commits
|
|
39
|
+
--after : Only show commits after a certain date
|
|
40
|
+
--applies : Filter commits to patches that apply cleanly
|
|
41
|
+
--author : Filter commits on a email address of author
|
|
42
|
+
--before : Only show commits before a certain date
|
|
43
|
+
--cache : Use the network data even if it's expired
|
|
44
|
+
--common : Show common branch point
|
|
45
|
+
--limit : Only look through the first X heads - useful
|
|
46
|
+
for really large projects
|
|
47
|
+
--noapply : Filter commits to patches that do not apply
|
|
48
|
+
cleanly
|
|
49
|
+
--nocache : Do not use the cached network data
|
|
50
|
+
--project : Filter commits on a certain project
|
|
51
|
+
--shas : Only show shas
|
|
52
|
+
--sort : How to sort : date(*), branch, author
|
|
53
|
+
--thisbranch: Look at branches that match the current
|
|
54
|
+
one
|
|
55
|
+
open => Open the given user/project in a web browser
|
|
56
|
+
% github open [user/project]
|
|
57
|
+
pull => Pull from a remote.
|
|
58
|
+
% github pull [user] [branch]
|
|
59
|
+
--merge: Automatically merge remote's changes into your
|
|
60
|
+
master.
|
|
61
|
+
pull-request => Generate the text for a pull request.
|
|
62
|
+
% github pull-request [user] [branch]
|
|
63
|
+
search => Search GitHub for the given repository name.
|
|
64
|
+
% github search [query]
|
|
65
|
+
track => Track another user's repository.
|
|
66
|
+
% github track remote [user]
|
|
67
|
+
% github track remote [user/repo]
|
|
68
|
+
% github track [user]
|
|
69
|
+
% github track [user/repo]
|
|
70
|
+
--private: Use git@github.com: instead of
|
|
71
|
+
git://github.com/.
|
|
72
|
+
--ssh : Equivalent to --private
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,93 +1,142 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: github
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash: 5
|
|
5
4
|
prerelease: false
|
|
6
5
|
segments:
|
|
7
6
|
- 0
|
|
8
|
-
- 4
|
|
9
7
|
- 5
|
|
10
|
-
|
|
8
|
+
- 0
|
|
9
|
+
version: 0.5.0
|
|
11
10
|
platform: ruby
|
|
12
11
|
authors:
|
|
13
|
-
- Chris Wanstrath
|
|
12
|
+
- Chris Wanstrath
|
|
13
|
+
- Kevin Ballard
|
|
14
|
+
- Scott Chacon
|
|
15
|
+
- Dr Nic Williams
|
|
14
16
|
autorequire:
|
|
15
17
|
bindir: bin
|
|
16
18
|
cert_chain: []
|
|
17
19
|
|
|
18
|
-
date:
|
|
20
|
+
date: 2011-01-17 00:00:00 -08:00
|
|
19
21
|
default_executable:
|
|
20
22
|
dependencies:
|
|
21
23
|
- !ruby/object:Gem::Dependency
|
|
22
24
|
name: text-format
|
|
23
|
-
prerelease: false
|
|
24
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
25
26
|
none: false
|
|
26
27
|
requirements:
|
|
27
|
-
- - "
|
|
28
|
+
- - "="
|
|
28
29
|
- !ruby/object:Gem::Version
|
|
29
|
-
hash: 23
|
|
30
30
|
segments:
|
|
31
31
|
- 1
|
|
32
32
|
- 0
|
|
33
33
|
- 0
|
|
34
34
|
version: 1.0.0
|
|
35
35
|
type: :runtime
|
|
36
|
+
prerelease: false
|
|
36
37
|
version_requirements: *id001
|
|
37
38
|
- !ruby/object:Gem::Dependency
|
|
38
39
|
name: highline
|
|
39
|
-
prerelease: false
|
|
40
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
41
41
|
none: false
|
|
42
42
|
requirements:
|
|
43
43
|
- - ~>
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
|
-
hash: 1
|
|
46
45
|
segments:
|
|
47
46
|
- 1
|
|
48
47
|
- 5
|
|
49
48
|
- 1
|
|
50
49
|
version: 1.5.1
|
|
51
50
|
type: :runtime
|
|
51
|
+
prerelease: false
|
|
52
52
|
version_requirements: *id002
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
54
|
name: json
|
|
55
|
-
prerelease: false
|
|
56
55
|
requirement: &id003 !ruby/object:Gem::Requirement
|
|
57
56
|
none: false
|
|
58
57
|
requirements:
|
|
59
|
-
- -
|
|
58
|
+
- - ~>
|
|
60
59
|
- !ruby/object:Gem::Version
|
|
61
|
-
hash: 31
|
|
62
60
|
segments:
|
|
63
61
|
- 1
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
version: 1.
|
|
62
|
+
- 4
|
|
63
|
+
- 6
|
|
64
|
+
version: 1.4.6
|
|
67
65
|
type: :runtime
|
|
66
|
+
prerelease: false
|
|
68
67
|
version_requirements: *id003
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: launchy
|
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
71
|
+
none: false
|
|
72
|
+
requirements:
|
|
73
|
+
- - ~>
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
segments:
|
|
76
|
+
- 0
|
|
77
|
+
- 3
|
|
78
|
+
- 7
|
|
79
|
+
version: 0.3.7
|
|
80
|
+
type: :runtime
|
|
81
|
+
prerelease: false
|
|
82
|
+
version_requirements: *id004
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rake
|
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
86
|
+
none: false
|
|
87
|
+
requirements:
|
|
88
|
+
- - ">="
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
segments:
|
|
91
|
+
- 0
|
|
92
|
+
version: "0"
|
|
93
|
+
type: :development
|
|
94
|
+
prerelease: false
|
|
95
|
+
version_requirements: *id005
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: rspec
|
|
98
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
99
|
+
none: false
|
|
100
|
+
requirements:
|
|
101
|
+
- - ~>
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
segments:
|
|
104
|
+
- 1
|
|
105
|
+
- 3
|
|
106
|
+
- 1
|
|
107
|
+
version: 1.3.1
|
|
108
|
+
type: :development
|
|
109
|
+
prerelease: false
|
|
110
|
+
version_requirements: *id006
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: activerecord
|
|
113
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
114
|
+
none: false
|
|
115
|
+
requirements:
|
|
116
|
+
- - ~>
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
segments:
|
|
119
|
+
- 2
|
|
120
|
+
- 3
|
|
121
|
+
- 10
|
|
122
|
+
version: 2.3.10
|
|
123
|
+
type: :development
|
|
124
|
+
prerelease: false
|
|
125
|
+
version_requirements: *id007
|
|
69
126
|
description: The official `github` command line helper for simplifying your GitHub experience.
|
|
70
|
-
email:
|
|
127
|
+
email:
|
|
128
|
+
- drnicwilliams@gmail.com
|
|
71
129
|
executables:
|
|
72
130
|
- gh
|
|
73
131
|
- github
|
|
74
132
|
extensions: []
|
|
75
133
|
|
|
76
|
-
extra_rdoc_files:
|
|
77
|
-
|
|
78
|
-
- README.md
|
|
79
|
-
- bin/gh
|
|
80
|
-
- bin/github
|
|
81
|
-
- lib/commands/commands.rb
|
|
82
|
-
- lib/commands/helpers.rb
|
|
83
|
-
- lib/commands/issues.rb
|
|
84
|
-
- lib/commands/network.rb
|
|
85
|
-
- lib/github.rb
|
|
86
|
-
- lib/github/command.rb
|
|
87
|
-
- lib/github/extensions.rb
|
|
88
|
-
- lib/github/helper.rb
|
|
89
|
-
- lib/github/ui.rb
|
|
134
|
+
extra_rdoc_files: []
|
|
135
|
+
|
|
90
136
|
files:
|
|
137
|
+
- .gitignore
|
|
138
|
+
- Gemfile
|
|
139
|
+
- Gemfile.lock
|
|
91
140
|
- History.txt
|
|
92
141
|
- LICENSE
|
|
93
142
|
- Manifest
|
|
@@ -95,6 +144,7 @@ files:
|
|
|
95
144
|
- Rakefile
|
|
96
145
|
- bin/gh
|
|
97
146
|
- bin/github
|
|
147
|
+
- github.gemspec
|
|
98
148
|
- lib/commands/commands.rb
|
|
99
149
|
- lib/commands/helpers.rb
|
|
100
150
|
- lib/commands/issues.rb
|
|
@@ -104,13 +154,16 @@ files:
|
|
|
104
154
|
- lib/github/extensions.rb
|
|
105
155
|
- lib/github/helper.rb
|
|
106
156
|
- lib/github/ui.rb
|
|
157
|
+
- lib/github/version.rb
|
|
107
158
|
- setup.rb
|
|
108
159
|
- spec/command_spec.rb
|
|
160
|
+
- spec/commands/command_admin_spec.rb
|
|
109
161
|
- spec/commands/command_browse_spec.rb
|
|
110
162
|
- spec/commands/command_clone_spec.rb
|
|
111
163
|
- spec/commands/command_create-from-local_spec.rb
|
|
112
164
|
- spec/commands/command_fetch_spec.rb
|
|
113
165
|
- spec/commands/command_fork_spec.rb
|
|
166
|
+
- spec/commands/command_help_spec.rb
|
|
114
167
|
- spec/commands/command_helper.rb
|
|
115
168
|
- spec/commands/command_home_spec.rb
|
|
116
169
|
- spec/commands/command_info_spec.rb
|
|
@@ -124,21 +177,16 @@ files:
|
|
|
124
177
|
- spec/extensions_spec.rb
|
|
125
178
|
- spec/github_spec.rb
|
|
126
179
|
- spec/helper_spec.rb
|
|
180
|
+
- spec/resources/help_output.txt
|
|
127
181
|
- spec/spec_helper.rb
|
|
128
182
|
- spec/windoze_spec.rb
|
|
129
|
-
- github.gemspec
|
|
130
183
|
has_rdoc: true
|
|
131
|
-
homepage:
|
|
184
|
+
homepage: https://github.com/defunkt/github-gem
|
|
132
185
|
licenses: []
|
|
133
186
|
|
|
134
187
|
post_install_message:
|
|
135
|
-
rdoc_options:
|
|
136
|
-
|
|
137
|
-
- --inline-source
|
|
138
|
-
- --title
|
|
139
|
-
- Github
|
|
140
|
-
- --main
|
|
141
|
-
- README.md
|
|
188
|
+
rdoc_options: []
|
|
189
|
+
|
|
142
190
|
require_paths:
|
|
143
191
|
- lib
|
|
144
192
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
@@ -146,7 +194,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
146
194
|
requirements:
|
|
147
195
|
- - ">="
|
|
148
196
|
- !ruby/object:Gem::Version
|
|
149
|
-
hash:
|
|
197
|
+
hash: -2745710888565364419
|
|
150
198
|
segments:
|
|
151
199
|
- 0
|
|
152
200
|
version: "0"
|
|
@@ -155,11 +203,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
155
203
|
requirements:
|
|
156
204
|
- - ">="
|
|
157
205
|
- !ruby/object:Gem::Version
|
|
158
|
-
hash:
|
|
206
|
+
hash: -2745710888565364419
|
|
159
207
|
segments:
|
|
160
|
-
-
|
|
161
|
-
|
|
162
|
-
version: "1.2"
|
|
208
|
+
- 0
|
|
209
|
+
version: "0"
|
|
163
210
|
requirements: []
|
|
164
211
|
|
|
165
212
|
rubyforge_project: github
|
|
@@ -167,5 +214,28 @@ rubygems_version: 1.3.7
|
|
|
167
214
|
signing_key:
|
|
168
215
|
specification_version: 3
|
|
169
216
|
summary: The official `github` command line helper for simplifying your GitHub experience.
|
|
170
|
-
test_files:
|
|
171
|
-
|
|
217
|
+
test_files:
|
|
218
|
+
- spec/command_spec.rb
|
|
219
|
+
- spec/commands/command_admin_spec.rb
|
|
220
|
+
- spec/commands/command_browse_spec.rb
|
|
221
|
+
- spec/commands/command_clone_spec.rb
|
|
222
|
+
- spec/commands/command_create-from-local_spec.rb
|
|
223
|
+
- spec/commands/command_fetch_spec.rb
|
|
224
|
+
- spec/commands/command_fork_spec.rb
|
|
225
|
+
- spec/commands/command_help_spec.rb
|
|
226
|
+
- spec/commands/command_helper.rb
|
|
227
|
+
- spec/commands/command_home_spec.rb
|
|
228
|
+
- spec/commands/command_info_spec.rb
|
|
229
|
+
- spec/commands/command_issues_spec.rb
|
|
230
|
+
- spec/commands/command_network_spec.rb
|
|
231
|
+
- spec/commands/command_pull-request_spec.rb
|
|
232
|
+
- spec/commands/command_pull_spec.rb
|
|
233
|
+
- spec/commands/command_search_spec.rb
|
|
234
|
+
- spec/commands/command_track_spec.rb
|
|
235
|
+
- spec/commands_spec.rb
|
|
236
|
+
- spec/extensions_spec.rb
|
|
237
|
+
- spec/github_spec.rb
|
|
238
|
+
- spec/helper_spec.rb
|
|
239
|
+
- spec/resources/help_output.txt
|
|
240
|
+
- spec/spec_helper.rb
|
|
241
|
+
- spec/windoze_spec.rb
|