lib/gemline.rb in gemline-0.4.5 vs lib/gemline.rb in gemline-0.5.0
- old
+ new
@@ -1,9 +1,11 @@
-require 'net/https'
-require 'clipboard'
-require 'json'
+require "net/https"
+require "clipboard"
+require "json"
+require_relative "./gemline/rubygems"
+
class Gemline
attr_accessor :gem, :gemline, :json, :response
def self.query(gem_name, options = {})
g = Gemline.new(gem_name, options)
@@ -17,71 +19,68 @@
end
end
def initialize(gem_name, options = {})
@gem = sanitize_gem_name(gem_name)
- @json = Gemline.get_rubygem_json(@gem)
+ @json = Gemline::Rubygems.get_rubygem_json(@gem)
unless gem_not_found?
@response = JSON.parse(@json)
- @gemline = Gemline.create_gemline(@gem, response['version'], options)
+ @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.
+ 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.options_to_string(options = {})
+ if options[:group]
+ options[:group] = [options[:group]].flatten.map(&:to_sym)
+ options[:group] = options[:group].first if options[:group].length == 1
+ end
- 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
- request = Net::HTTP::Get.new(uri.request_uri)
- response = http.request(request)
- response.body
+ options.map { |k, v| "#{k}: #{value_to_string(v)}" }.join(", ")
end
+ def self.value_to_string(val)
+ case val
+ when Array
+ val.to_s
+ when Symbol
+ ":#{val}"
+ when String
+ "\"#{val}\""
+ end
+ end
+
def self.create_gemline(gem_name, version, options)
if options[:gemspec]
- return gemspec_gemline(gem_name, version, options)
+ gemspec_gemline(gem_name, version, options)
else
- return gemfile_gemline(gem_name, version, options.delete_if {|k,v| k == :gemspec})
+ gemfile_gemline(gem_name, version, options.delete_if { |k, _| k == :gemspec })
end
end
def self.gemfile_gemline(gem_name, version, options)
- line = %Q{gem "#{gem_name}", "~> #{version}"}
- line << ", " + options_to_string(options) if !options.empty?
- line
+ %Q{gem "#{gem_name}", "~> #{version}"#{gemfile_gemline_options_suffix(options)}}
end
- 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)/, ' => ')
+ def self.gemfile_gemline_options_suffix(options)
+ !options.empty? ? ", " + options_to_string(options) : ""
end
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
+ dependency_signifier = options[:group]&.include?('development') ? "add_development_dependency" : "add_dependency"
+ %Q{gem.#{dependency_signifier} "#{gem_name}", "~> #{version}"}
end
def self.copy_to_clipboard(gemline)
- begin
- Clipboard.copy gemline
- $stderr.puts " Gem line copied to your clipboard. Ready to paste into your Gemfile"
- rescue
- ## Yeah, I hate this too. But it does what I want -- silently fail if Clipboard fails.
- end
+ Clipboard.copy gemline
+ $stderr.puts " Gem line copied to your clipboard. Ready to paste into your Gemfile"
+ rescue
+ ## Yeah, I hate this too. But it does what I want -- silently fail if Clipboard fails.
end
end