jeffrafter-gemstalker 0.2.1 → 0.3.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.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|