class Blondie::Builder
Constants
- RUBY_GEMS_URL
Attributes
gemfile_path[R]
Public Class Methods
new(gemfile_path)
click to toggle source
# File lib/blondie/builder.rb, line 10 def initialize(gemfile_path) @gemfile_path = gemfile_path end
Public Instance Methods
urls()
click to toggle source
# File lib/blondie/builder.rb, line 14 def urls @urls ||= {}.tap do |hash| gems_hash.each do |key, value| version = value.last&.gsub(/\"|'/, "") specifier = value.first.gsub(/\"|'/, "") if value.count == 2 specifier&.gsub!("\"", "") library = key.gsub(/('|,|")/, "") url = "#{RUBY_GEMS_URL}#{library}" url += versioned_url(library, specifier, version) hash[library] = url end end end
Private Instance Methods
clean_up_versions(versions)
click to toggle source
# File lib/blondie/builder.rb, line 62 def clean_up_versions(versions) versions.delete_at(0) versions = versions.select do |v| v.strip! !v.include?("ruby") && ( v.include?("java") || v.include?("i386-mingw32") || v.include?("i386-mswin32") ) || ( !v.include?("ruby") || !v.include?("java") || !v.include?("i386-mingw32") || !v.include?("i386-mswin32") ) end versions.each { |v| v.gsub!(/(\(|\s|\)|,|ruby|java|i386-mingw32|i386-mswin32)/, "")} end
gems_hash()
click to toggle source
# File lib/blondie/builder.rb, line 90 def gems_hash @gems_hash ||= {}.tap do |hash| File.foreach(gemfile_path) do |line| deps = line.split(" ") if deps&.first&.[](0..3) == "gem" next if deps.count > 4 value = [ deps[2] ] value << deps[3] hash[deps[1]] = value.compact end end end end
resolve_latest_version(library, specifier, version)
click to toggle source
# File lib/blondie/builder.rb, line 36 def resolve_latest_version(library, specifier, version) version += ".0" if version&.count(".") == 1 version += ".0.0" if version && version.count(".") == 0 versions = `gem search ^#{library}$ --remote --all` versions = versions.split(",") versions = clean_up_versions(versions) case specifier when ">", ">=", nil versions.first when "~>" versions.each_with_index do |v, index| next_ver = if index == 0 versions[index] else versions[index - 1] end if v == version return next_ver unless version_bump?(v, next_ver) return v end end raise 'gem version does not exist' end end
specifier_greater?(specifier)
click to toggle source
# File lib/blondie/builder.rb, line 86 def specifier_greater?(specifier) specifier && specifier.match(">") end
version_bump?(current_version, next_version)
click to toggle source
# File lib/blondie/builder.rb, line 80 def version_bump?(current_version, next_version) return false if current_version[0].to_i == (next_version[0].to_i - 1) && current_version[2] < next_version[2] true end
versioned_url(library, specifier, version)
click to toggle source
# File lib/blondie/builder.rb, line 30 def versioned_url(library, specifier, version) return "-#{version}.gem" if version && !specifier_greater?(specifier) "-#{resolve_latest_version(library, specifier, version)}.gem" end