lib/gemline.rb in gemline-0.3.2 vs lib/gemline.rb in gemline-0.4.0

- old
+ new

@@ -3,83 +3,79 @@ require 'clipboard' class Gemline attr_accessor :gem, :gemline, :json, :response - def self.query(gem_name) - gem_name = sanitize_gem_name(gem_name) - check_input(gem_name) + def self.query(gem_name, options = {}) + g = Gemline.new(gem_name, options) - g = Gemline.new(gem_name) - if g.gem_not_found? $stderr.puts "Ruby gem #{gem_name} was not found on rubygems.org" Kernel.exit 1 else puts g.gemline copy_to_clipboard(g.gemline) end end - def self.sanitize_gem_name(gem_name) - gem_name.to_s.gsub(/[^\w\-]+/,'') - end - - def initialize(gem_name, options = {}) - @gem = gem_name.to_s.gsub(/[^\w\-]+/,'') # Yeah, a little over-defensive. + @gem = sanitize_gem_name(gem_name) @json = Gemline.get_rubygem_json(@gem) unless gem_not_found? @response = JSON.parse(@json) @gemline = Gemline.create_gemline(@gem, response['version'], options) end end + def sanitize_gem_name(gem_name) + gem_name.to_s.gsub(/[^\w\-]+/,'') # Yeah, a little over-defensive. + end + def gem_not_found? @json.match(/(could not be found|does not exist)/) end - - + + private - + def self.get_rubygem_json(gem_name) uri = URI.parse("https://rubygems.org/api/v1/gems/#{gem_name}.json") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) response.body end - def self.create_gemline(gem_name, version, options = {}) + def self.create_gemline(gem_name, version, options) if options[:gemspec] - return gemspec_gemline(gem_name, version) + return gemspec_gemline(gem_name, version, options) else - return gemfile_gemline(gem_name, version) + return gemfile_gemline(gem_name, version, options.delete_if {|k,v| k == :gemspec}) end end - def self.gemfile_gemline(gem_name, version) - %Q{gem "#{gem_name}", "~> #{version}"} + def self.gemfile_gemline(gem_name, version, options) + line = %Q{gem "#{gem_name}", "~> #{version}"} + line << ", " + options_to_string(options) if !options.empty? + line end - def self.gemspec_gemline(gem_name, version) - %Q{gem.add_dependency "#{gem_name}", ">= #{version}"} + def self.options_to_string(options = {}) + if options[:group] + options[:group] = [options[:group]].flatten.map { |x| x.to_sym } + options[:group] = options[:group].first if options[:group].length == 1 + end + options.inspect.delete('{}').gsub(/(?!\s)=>(?!\s)/, ' => ') end - - def self.check_input(gem_name) - if (gem_name.empty? || ['-h','--help','help'].include?(gem_name)) - $stderr.puts "Usage: gemline [GEM NAME]" - $stderr.puts " Prints a Gemfile require line for a Ruby gem on Rubygems.org" - Kernel.exit 1 + def self.gemspec_gemline(gem_name, version, options) + if options[:group] && options[:group].include?('development') + %Q{gem.add_development_dependency "#{gem_name}", "~> #{version}"} + else + %Q{gem.add_dependency "#{gem_name}", "~> #{version}"} end - - # if (['-v','--version'].include?(gem_name)) - # puts "gemline #{Gemline::VERSION}" - # exit - # end end def self.copy_to_clipboard(gemline) begin Clipboard.copy gemline