Sha256: 36988aa1be5b5d56bff4431db4305917285626ef100ca9fca757104a2655c911
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 KB
Contents
require 'net/http' require 'rubygems/spec_fetcher' class GemStalker attr_accessor :username, :name, :repository, :version def initialize(options = {}) @username = options[:username] @repository = options[:repository] @version = options[:version] || determine_version end def built? Net::HTTP.start('gems.github.com') {|http| response = http.head(gem_path) response.code == "200" } end def gem? Net::HTTP.start('github.com') {|http| res = http.get(master_path) return res.body =~ /alt\=.Rubygem./ if res.code == "200" } false end def in_specfile? fetcher = Gem::SpecFetcher.new specs = fetcher.load_specs(URI.parse('http://gems.github.com/'), 'specs') specs.any? do |(name, spec)| name == gem_name && spec.version.to_s == @version end end def edit_repo_url "http://github.com/#{@username}/#{@repository}/edit" end protected def gem_path "/gems/#{gem_name}-#{@version}.gem" end def gem_name "#{@username}-#{@repository}" end def gemspec_path # TODO this seems very unfuture proof, and also specific to master branch... "/#{@username}/#{@repository}/blob/master/#{@repository}.gemspec?raw=true" end def master_path "/#{@username}/#{@repository}/tree/master" end def determine_version res = nil Net::HTTP.start('github.com') {|http| res = http.get(gemspec_path) } if res.code == "200" gemspec_file = res.body gemspec = nil # TODO this assumes Ruby format, but GitHub is cool with YAML Thread.new { gemspec = eval("$SAFE = 3\n#{gemspec_file}") }.join gemspec.version.to_s end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
technicalpickles-gemstalker-0.3.0 | lib/gem_stalker.rb |