jeffrafter-gemstalker 0.2.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,18 @@
1
+ = gemstalker
2
+
3
+ GemStalker is a small utility to determine if GitHub has built a gem yet.
4
+
5
+ sudo gem install technicalpickles-gemstalker --source http://gems.github.com
6
+ gemstalk yourusername yourrepo yourversion
7
+
8
+ You can also omit the version, and it will take the version from the repository's gemspec on the master branch.
9
+
10
+ == Contributions and credit
11
+
12
+ Origin code borrowed and inspired by hasmygembuiltyet.org.
13
+
14
+ Contributions from Jeff Rafter.
15
+
16
+ == COPYRIGHT
17
+
18
+ Copyright (c) 2009 Josh Nichols. See LICENSE for details.
data/Rakefile CHANGED
@@ -4,24 +4,23 @@ require 'rake/rdoctask'
4
4
 
5
5
  begin
6
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"
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = "gemstalker"
9
+ gem.summary = "GemStalker is a small library to determine if GitHub has built a gem yet."
10
+ gem.email = "josh@technicalpickles.com"
11
+ gem.homepage = "http://github.com/technicalpickles/gemstalker"
12
+ gem.description = "A library for determining if GitHub has built a gem yet"
13
+ gem.authors = ["Josh Nichols"]
14
+ gem.files = FileList["[A-Z]*", "{bin,lib,test}/**/*"]
16
15
  end
17
16
  rescue LoadError
18
17
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
19
18
  end
20
19
 
21
- Rake::TestTask.new do |t|
22
- t.libs << 'lib'
23
- t.pattern = 'test/**/*_test.rb'
24
- t.verbose = false
20
+ Rake::TestTask.new do |test|
21
+ test.libs << 'lib'
22
+ test.pattern = 'test/**/*_test.rb'
23
+ test.verbose = false
25
24
  end
26
25
 
27
26
  Rake::RDocTask.new do |rdoc|
@@ -34,10 +33,10 @@ end
34
33
 
35
34
  begin
36
35
  require 'rcov/rcovtask'
37
- Rcov::RcovTask.new do |t|
38
- t.libs << 'test'
39
- t.test_files = FileList['test/**/*_test.rb']
40
- t.verbose = true
36
+ Rcov::RcovTask.new do |rcov|
37
+ rcov.libs << 'test'
38
+ rcov.test_files = FileList['test/**/*_test.rb']
39
+ rcov.verbose = true
41
40
  end
42
41
  rescue LoadError
43
42
  end
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
+ :patch: 3
2
3
  :major: 0
3
- :minor: 2
4
- :patch: 1
4
+ :minor: 3
data/bin/gemstalk ADDED
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__), '..', 'lib')
3
+ require 'gem_stalker'
4
+
5
+ def usage
6
+ puts ""
7
+ puts "Usage:"
8
+ puts ""
9
+ puts " #{File.basename $0} <username> <repository> [version]"
10
+ puts ""
11
+ puts "Begins stalking a gem at the specified location. Example:"
12
+ puts ""
13
+ puts " #{File.basename $0} techinicalpickles jeweler"
14
+ end
15
+
16
+ if ARGV.length == 0 || ARGV.include?("-h") || ARGV.include?("--help")
17
+ usage
18
+ exit
19
+ end
20
+
21
+ trap "SIGINT" do
22
+ puts ""
23
+ puts "Stopping"
24
+ exit
25
+ end
26
+
27
+ options = {:username => ARGV[0], :repository => ARGV[1]}
28
+ options[:version] = ARGV[2] if ARGV.length >= 3
29
+ stalker = GemStalker.new(options)
30
+
31
+ $stdout.sync = true
32
+
33
+ unless stalker.gem?
34
+ puts "The repository is not configured as a rubygem yet."
35
+ puts "Go to the following url, and check 'RubyGem'"
36
+ puts "\t#{stalker.edit_repo_url}"
37
+ exit
38
+ end
39
+
40
+ if ARGV.length < 3
41
+ puts "Using version #{stalker.version}"
42
+ end
43
+
44
+ waiting = false
45
+
46
+ puts "Checking to see if the gem has been built:"
47
+ loop do
48
+ if stalker.built?
49
+ puts "." if waiting
50
+ puts "=> Zomg, it's built, I'm so telling everyone!"
51
+ break
52
+ end
53
+ print "."
54
+ waiting = true
55
+ sleep(5)
56
+ end
57
+
58
+ waiting = false
59
+
60
+ puts "Checking to see if it is in the specfile:"
61
+ loop do
62
+ if stalker.in_specfile?
63
+ puts "." if waiting
64
+ puts "=> Sweeeet, everyone can install it now!"
65
+ break
66
+ end
67
+ print "."
68
+ waiting = true
69
+ sleep(60*5)
70
+ end
@@ -1,8 +1,16 @@
1
1
  require 'net/http'
2
+ require 'rubygems/spec_fetcher'
2
3
 
4
+ # Small class for determining if a gem has been built on GitHub and if it's installable.
3
5
  class GemStalker
4
6
  attr_accessor :username, :name, :repository, :version
5
7
 
8
+ # Accepts the following options:
9
+ #
10
+ # username:: GitHub username
11
+ # repository:: repository name
12
+ # version:: version to stalk. Defaults to checking the repository for a
13
+ # gemspec to determine the latest version.
6
14
  def initialize(options = {})
7
15
  @username = options[:username]
8
16
  @repository = options[:repository]
@@ -10,6 +18,7 @@ class GemStalker
10
18
 
11
19
  end
12
20
 
21
+ # Is it built yet?
13
22
  def built?
14
23
  Net::HTTP.start('gems.github.com') {|http|
15
24
  response = http.head(gem_path)
@@ -17,6 +26,7 @@ class GemStalker
17
26
  }
18
27
  end
19
28
 
29
+ # Is RubyGem building enabled for the repository?
20
30
  def gem?
21
31
  Net::HTTP.start('github.com') {|http|
22
32
  res = http.get(master_path)
@@ -25,6 +35,7 @@ class GemStalker
25
35
  false
26
36
  end
27
37
 
38
+ # Is it in the specs yet? ie is it installable yet?
28
39
  def in_specfile?
29
40
  fetcher = Gem::SpecFetcher.new
30
41
  specs = fetcher.load_specs(URI.parse('http://gems.github.com/'), 'specs')
@@ -33,6 +44,11 @@ class GemStalker
33
44
  end
34
45
  end
35
46
 
47
+ # Path to edit the repository
48
+ def edit_repo_url
49
+ "http://github.com/#{@username}/#{@repository}/edit"
50
+ end
51
+
36
52
  protected
37
53
 
38
54
  def gem_path
@@ -52,6 +68,8 @@ class GemStalker
52
68
  "/#{@username}/#{@repository}/tree/master"
53
69
  end
54
70
 
71
+
72
+
55
73
  def determine_version
56
74
  res = nil
57
75
  Net::HTTP.start('github.com') {|http|