class GemCheckUpdates::Gemfile
Constants
- CONCURRENCY
- RUBYGEMS_API
Attributes
file_backup[R]
gems[R]
option[R]
Public Class Methods
new(option = GemCheckUpdates::Option.new)
click to toggle source
# File lib/gem_check_updates/gemfile.rb, line 12 def initialize(option = GemCheckUpdates::Option.new) @option = option @file_backup = "#{option.file}.backup" @gems = parse(option.update_scope) check_updates! end
Public Instance Methods
backup()
click to toggle source
# File lib/gem_check_updates/gemfile.rb, line 20 def backup FileUtils.cp(@option.file, @file_backup) end
check_updates!()
click to toggle source
# File lib/gem_check_updates/gemfile.rb, line 45 def check_updates! EventMachine.synchrony do EventMachine::Synchrony::FiberIterator.new(@gems, CONCURRENCY).each do |gem| http = EventMachine::HttpRequest.new("#{RUBYGEMS_API}/#{gem.name}.json").get response = JSON.parse(http.response) versions = response.map do |v| number = v['number'] pre_release = v['prerelease'] GemCheckUpdates::GemVersion.new(number: number, pre_release: pre_release) end gem.versions = versions GemCheckUpdates::Message.out('.') end GemCheckUpdates::Message.out("\n\n") EventMachine.stop end @gems end
parse(update_scope)
click to toggle source
# File lib/gem_check_updates/gemfile.rb, line 32 def parse(update_scope) Bundler::Definition.build(@option.file, nil, nil).dependencies.map do |gem| name = gem.name version_range, version_number = gem.requirements_list.first.split(' ') version = GemCheckUpdates::GemVersion.new(number: version_number) Gem.new(name: name, current_version: version, version_range: version_range, update_scope: update_scope) end end
remove_backup()
click to toggle source
# File lib/gem_check_updates/gemfile.rb, line 28 def remove_backup FileUtils.rm(@file_backup) end
restore()
click to toggle source
# File lib/gem_check_updates/gemfile.rb, line 24 def restore FileUtils.mv(@file_backup, @option.file) end
update()
click to toggle source
# File lib/gem_check_updates/gemfile.rb, line 68 def update gemfile_lines = [] File.open(@option.file) do |current| current.each_line do |line| gemfile_lines << line end end File.open(@option.file, 'w') do |updated| gemfile_lines.each do |line| matcher = line.match(/gem ['"](.+?)['"]\s*,\s*['"][>=|~>]*\s+(.+?)['"]/) if matcher _, name, old_version = *matcher target = @gems.find { |gem| gem.name == name } line.gsub!(old_version, target.latest_version.to_s) unless target.nil? end updated.puts(line) end end end