lib/gemline.rb in gemline-0.0.4 vs lib/gemline.rb in gemline-0.1.0

- old
+ new

@@ -1,60 +1,65 @@ +Encoding.default_external = Encoding::UTF_8 + require 'crack/json' require 'net/http' +require 'yaml' +YAML::ENGINE.yamler = 'syck' + class Gemline attr_accessor :gem, :gemline, :json, :response - def self.query(gem) - gem = gem.to_s.gsub(/[^\w\-]+/,'') - check_input(gem) + def self.query(gem_name) + gem_name = gem_name.to_s.gsub(/[^\w\-]+/,'') + check_input(gem_name) - g = Gemline.new(gem) - + g = Gemline.new(gem_name) + if g.gem_not_found? - puts "Rubygem #{gem} was not found on rubygems.org" + puts "Ruby gem #{gem_name} was not found on rubygems.org" exit else puts g.gemline copy_to_clipboard(g.gemline) end end - def initialize(gem) - @gem = gem.to_s.gsub(/[^\w\-]+/,'') # Yeah, a little over-defensive. + def initialize(gem_name) + @gem = gem_name.to_s.gsub(/[^\w\-]+/,'') # Yeah, a little over-defensive. @json = Gemline.get_rubygem_json(@gem) unless gem_not_found? @response = Crack::JSON.parse(@json) @gemline = Gemline.create_gemline(@gem, response['version']) end end def gem_not_found? - @json.match(/could not be found/) + @json.match(/(could not be found|does not exist)/) end private - def self.get_rubygem_json(gem) - Net::HTTP.get(URI.parse("http://rubygems.org/api/v1/gems/#{gem}.json")) + def self.get_rubygem_json(gem_name) + Net::HTTP.get(URI.parse("http://rubygems.org/api/v1/gems/#{gem_name}.json")) end - def self.create_gemline(gem, version) - %Q{gem "#{gem}", "~> #{version}"} + def self.create_gemline(gem_name, version) + %Q{gem "#{gem_name}", "~> #{version}"} end - def self.check_input(gem) - if (gem.empty? || ['-h','--help','help'].include?(gem)) + def self.check_input(gem_name) + if (gem_name.empty? || ['-h','--help','help'].include?(gem_name)) puts "Usage: gemline [GEM NAME]" puts " Prints a Gemfile require line for a Ruby gem on Rubygems.org" exit end - # if (['-v','--version'].include?(gem)) + # if (['-v','--version'].include?(gem_name)) # puts "gemline #{Gemline::VERSION}" # exit # end end @@ -63,9 +68,11 @@ if clipboard = IO.popen('pbcopy', 'r+') clipboard.puts gemline puts " Gem line copied to your clipboard. Ready to paste into your Gemfile" end rescue + ## Yeah, I hate this too. But it does what I want -- silently fail if pbcopy isn't available. + ## TODO: Use something more reliable and cross-platform. end end end