jeffrafter-gemstalker 0.1.0 → 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/LICENSE +20 -0
- data/README +24 -0
- data/Rakefile +46 -0
- data/VERSION.yml +1 -1
- data/bin/stalk +68 -0
- metadata +8 -7
- data/lib/gemstalker.rb +0 -57
- data/test/gemstalker_test.rb +0 -50
- data/test/test_helper.rb +0 -10
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Josh Nichols
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
gemstalker
|
2
|
+
==========
|
3
|
+
|
4
|
+
GemStalker is a small library to determine if GitHub has built a gem yet.
|
5
|
+
|
6
|
+
require 'gemstalker'
|
7
|
+
|
8
|
+
stalker = GemStalker.new(:username => 'technicalpickles', :repository => 'jeweler', :version => '0.7.2'
|
9
|
+
|
10
|
+
if stalker.built?
|
11
|
+
puts "zomg, it's built, im so telling everyone"
|
12
|
+
if stalker.in_specfile?
|
13
|
+
puts "sweeeet, i can install it nao"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
You can also omit the version, and it will take the version from the repository's gemspec on the master branch.
|
18
|
+
|
19
|
+
Origin code borrowed and inspired by hasmygembuiltyet.org.
|
20
|
+
|
21
|
+
COPYRIGHT
|
22
|
+
=========
|
23
|
+
|
24
|
+
Copyright (c) 2009 Josh Nichols. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'jeweler'
|
7
|
+
Jeweler::Tasks.new do |s|
|
8
|
+
s.name = "gemstalker"
|
9
|
+
s.summary = "GemStalker is a small library to determine if GitHub has built a gem yet."
|
10
|
+
s.email = "josh@technicalpickles.com"
|
11
|
+
s.homepage = "http://github.com/technicalpickles/gemstalker"
|
12
|
+
s.description = "A library for determining if GitHub has built a gem yet"
|
13
|
+
s.authors = ["Josh Nichols"]
|
14
|
+
s.files = FileList["[A-Z]*", "{bin, lib, test}/**/*"]
|
15
|
+
s.executables = "stalk"
|
16
|
+
s.bindir = "bin"
|
17
|
+
end
|
18
|
+
rescue LoadError
|
19
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
20
|
+
end
|
21
|
+
|
22
|
+
Rake::TestTask.new do |t|
|
23
|
+
t.libs << 'lib'
|
24
|
+
t.pattern = 'test/**/*_test.rb'
|
25
|
+
t.verbose = false
|
26
|
+
end
|
27
|
+
|
28
|
+
Rake::RDocTask.new do |rdoc|
|
29
|
+
rdoc.rdoc_dir = 'rdoc'
|
30
|
+
rdoc.title = 'gemstalker'
|
31
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
32
|
+
rdoc.rdoc_files.include('README*')
|
33
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
34
|
+
end
|
35
|
+
|
36
|
+
begin
|
37
|
+
require 'rcov/rcovtask'
|
38
|
+
Rcov::RcovTask.new do |t|
|
39
|
+
t.libs << 'test'
|
40
|
+
t.test_files = FileList['test/**/*_test.rb']
|
41
|
+
t.verbose = true
|
42
|
+
end
|
43
|
+
rescue LoadError
|
44
|
+
end
|
45
|
+
|
46
|
+
task :default => :test
|
data/VERSION.yml
CHANGED
data/bin/stalk
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'gemstalker'
|
4
|
+
|
5
|
+
def usage
|
6
|
+
puts ""
|
7
|
+
puts "Usage:"
|
8
|
+
puts ""
|
9
|
+
puts " stalk <username> <repository> [version]"
|
10
|
+
puts ""
|
11
|
+
puts "Begins stalking a gem at the specified location e.g. stalk techinicalpickles jeweler"
|
12
|
+
puts ""
|
13
|
+
end
|
14
|
+
|
15
|
+
if ARGV.length == 0 || ARGV.include?("-h") || ARGV.include?("--help")
|
16
|
+
usage
|
17
|
+
exit
|
18
|
+
end
|
19
|
+
|
20
|
+
trap "SIGINT" do
|
21
|
+
puts ""
|
22
|
+
puts "Stopping"
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
|
26
|
+
options = {:username => ARGV[0], :repository => ARGV[1]}
|
27
|
+
options[:version] = ARGV[2] if ARGV.length >= 3
|
28
|
+
stalker = GemStalker.new(options)
|
29
|
+
|
30
|
+
$stdout.sync = true
|
31
|
+
|
32
|
+
if ARGV.length < 3
|
33
|
+
puts "Using version #{stalker.version}"
|
34
|
+
end
|
35
|
+
|
36
|
+
unless stalker.gem?
|
37
|
+
puts "The repository is not configured as a rubygem"
|
38
|
+
puts "Configure the property in the Admin tab of the repository"
|
39
|
+
exit
|
40
|
+
end
|
41
|
+
|
42
|
+
waiting = false
|
43
|
+
|
44
|
+
puts "Checking to see if the gem has been built"
|
45
|
+
loop do
|
46
|
+
if stalker.built?
|
47
|
+
puts "" if waiting
|
48
|
+
puts "=> Zomg, it's built, I'm so telling everyone"
|
49
|
+
break
|
50
|
+
end
|
51
|
+
print "."
|
52
|
+
waiting = true
|
53
|
+
sleep(5)
|
54
|
+
end
|
55
|
+
|
56
|
+
waiting = false
|
57
|
+
|
58
|
+
puts "Checking to see if it is in the specfile"
|
59
|
+
loop do
|
60
|
+
if stalker.in_specfile?
|
61
|
+
puts "" if waiting
|
62
|
+
puts "=> Sweeeet, everyone can install it now"
|
63
|
+
break
|
64
|
+
end
|
65
|
+
print "."
|
66
|
+
waiting = true
|
67
|
+
sleep(5)
|
68
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jeffrafter-gemstalker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Nichols
|
@@ -10,22 +10,23 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
|
12
12
|
date: 2009-02-09 00:00:00 -08:00
|
13
|
-
default_executable:
|
13
|
+
default_executable: stalk
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: A library for determining if GitHub has built a gem yet
|
17
17
|
email: josh@technicalpickles.com
|
18
|
-
executables:
|
19
|
-
|
18
|
+
executables:
|
19
|
+
- stalk
|
20
20
|
extensions: []
|
21
21
|
|
22
22
|
extra_rdoc_files: []
|
23
23
|
|
24
24
|
files:
|
25
|
+
- LICENSE
|
26
|
+
- Rakefile
|
27
|
+
- README
|
25
28
|
- VERSION.yml
|
26
|
-
-
|
27
|
-
- test/gemstalker_test.rb
|
28
|
-
- test/test_helper.rb
|
29
|
+
- bin/stalk
|
29
30
|
has_rdoc: false
|
30
31
|
homepage: http://github.com/technicalpickles/gemstalker
|
31
32
|
post_install_message:
|
data/lib/gemstalker.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
|
3
|
-
class GemStalker
|
4
|
-
attr_accessor :username, :name, :repository, :version
|
5
|
-
|
6
|
-
def initialize(options = {})
|
7
|
-
@username = options[:username]
|
8
|
-
@repository = options[:repository]
|
9
|
-
@version = options[:version] || determine_version
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
def built?
|
14
|
-
Net::HTTP.start('gems.github.com') {|http|
|
15
|
-
response = http.head(gem_path)
|
16
|
-
response.code == "200"
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
def in_specfile?
|
21
|
-
fetcher = Gem::SpecFetcher.new
|
22
|
-
specs = fetcher.load_specs(URI.parse('http://gems.github.com/'), 'specs')
|
23
|
-
specs.any? do |(name, spec)|
|
24
|
-
name == gem_name && spec.version.to_s == @version
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
|
30
|
-
def gem_path
|
31
|
-
"/gems/#{gem_name}-#{@version}.gem"
|
32
|
-
end
|
33
|
-
|
34
|
-
def gem_name
|
35
|
-
"#{@username}-#{@repository}"
|
36
|
-
end
|
37
|
-
|
38
|
-
def gemspec_path
|
39
|
-
# TODO this seems very unfuture proof, and also specific to master branch...
|
40
|
-
"/#{@username}/#{@repository}/blob/master/#{@repository}.gemspec?raw=true"
|
41
|
-
end
|
42
|
-
|
43
|
-
def determine_version
|
44
|
-
res = nil
|
45
|
-
Net::HTTP.start('github.com') {|http|
|
46
|
-
res = http.get(gemspec_path)
|
47
|
-
}
|
48
|
-
|
49
|
-
if res.code == "200"
|
50
|
-
gemspec_file = res.body
|
51
|
-
gemspec = nil
|
52
|
-
# TODO this assumes Ruby format, but GitHub is cool with YAML
|
53
|
-
Thread.new { gemspec = eval("$SAFE = 3\n#{gemspec_file}") }.join
|
54
|
-
gemspec.version.to_s
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
data/test/gemstalker_test.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
|
3
|
-
class GemstalkerTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
context "a stalker for a specific version of a gem that has not been built" do
|
6
|
-
setup do
|
7
|
-
@stalker = GemStalker.new(:username => 'technicalpickles', :repository => 'jeweler', :version => '0.9.3')
|
8
|
-
end
|
9
|
-
|
10
|
-
should "not be built yet" do
|
11
|
-
assert ! @stalker.built?
|
12
|
-
end
|
13
|
-
|
14
|
-
should "not be in specfile yet" do
|
15
|
-
assert ! @stalker.in_specfile?
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
context "a stalker for a specific version of a gem that has been built and is available" do
|
20
|
-
setup do
|
21
|
-
@stalker = GemStalker.new(:username => 'technicalpickles', :repository => 'jeweler', :version => '0.8.1')
|
22
|
-
end
|
23
|
-
|
24
|
-
should "be built" do
|
25
|
-
assert @stalker.built?
|
26
|
-
end
|
27
|
-
|
28
|
-
should "be in specfile" do
|
29
|
-
assert @stalker.in_specfile?
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "a stalker without a specific version of a gem that has been built" do
|
34
|
-
setup do
|
35
|
-
@stalker = GemStalker.new(:username => 'technicalpickles', :repository => 'jeweler')
|
36
|
-
end
|
37
|
-
|
38
|
-
should "determine version" do
|
39
|
-
assert_equal '0.8.1', @stalker.version
|
40
|
-
end
|
41
|
-
|
42
|
-
should "be built" do
|
43
|
-
assert @stalker.built?
|
44
|
-
end
|
45
|
-
|
46
|
-
should "be in specfile" do
|
47
|
-
assert @stalker.in_specfile?
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
data/test/test_helper.rb
DELETED