drg 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c11a9f67d3fbdd3b319183860c5a9fd362ab321
4
- data.tar.gz: 686a0d355a95ead41e3bec771225b9330a3102c5
3
+ metadata.gz: 5ece4e76fe57c0056130e3a1809bd13b200ad294
4
+ data.tar.gz: 943bbc7a72cf482778304b1eeeedaf5f0efad396
5
5
  SHA512:
6
- metadata.gz: 78841e2535b13a2b58981b53de029193d19fc76a47caaa6aaef57d63f24e58e3d74a5d6b8a21bea5862cefeb0e9e61bf349195934f0c3af8d3093a1c217361c2
7
- data.tar.gz: a2c6fd319ae2234a0fb7ee6e449c1663110e368c8fadd41a4859c7301fcd74dc566d37bf758cefda2cf0691ed03ea3c0a12749997f5f8dad4c8e1af03baaf4ae
6
+ metadata.gz: 1ad6230949e7d2e883c6203732a92d0a74cd19143bb5a89bac327afc591b1673ede60db4a24e5b9cbb27fbd47385c5f3fcdb79a107cd42318113babf7c10d7ba
7
+ data.tar.gz: 669c61428c0ef3b0f8206b29520b45523e023010e4d32ae0e525a96724794eaa10ea06e2bbc0a67a97e6a2e8724967801eec114b805a1924e39b992ce1f9dba7
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/drg.svg)](http://badge.fury.io/rb/drg)
4
4
 
5
5
  A Ruby utility to help automate dependency management using Bundler. You can pin Gem versions to the current or the next
6
- available level. DRG can automatically update your gems to the latest available version, similar to Gemnasium.
6
+ available level.
7
7
 
8
8
  ## Requirements
9
9
 
@@ -20,27 +20,16 @@ gem 'drg'
20
20
  ## Tasks
21
21
 
22
22
  ```bash
23
- rake drg:update
24
23
  rake drg:pin
25
24
  rake drg:pin:major
26
25
  rake drg:pin:minor
27
26
  rake drg:pin:patch
27
+ rake drg:pin:latest
28
28
  rake drg:pin:patch_latest
29
29
  rake drg:pin:minor_latest
30
30
  rake drg:unpin
31
31
  ```
32
32
 
33
- ### drg:update
34
-
35
- DRG loves updating gems! Run this command to check for outdated gems and try to update them to the latest available version.
36
- Each outdated gem will be updated, then DRG will run your tests (with `rake`) and if your tests pass, the new version will be written to your Gemfile!
37
-
38
- ```bash
39
- rake drg:update
40
- ```
41
-
42
- Easy!
43
-
44
33
  ### drg:pin
45
34
 
46
35
  DRG really wants to help you manage your project's gems. But DRG doesn't want to replace Bundler. Instead, we want to build on
@@ -6,7 +6,7 @@ module DRG
6
6
  attr_reader :gemfile, :type, :updated_gems
7
7
  attr_writer :versions
8
8
 
9
- # @param [Symbol] type of pin to perform. Available options are [:major, :minor, :patch]
9
+ # @param [Symbol] type of pin to perform. Available options are [:available, :minor, :patch]
10
10
  def initialize(type = :patch)
11
11
  @type = type
12
12
  @gemfile = Gemfile.new
@@ -18,24 +18,17 @@ module DRG
18
18
  if gem_name
19
19
  update ::Bundler.locked_gems.specs.find { |spec| spec.name == gem_name }
20
20
  else
21
- update_all
21
+ Updater.new.perform do |gems|
22
+ load_versions gems.map &:name
23
+ gems.each do |gem|
24
+ update ::Bundler.locked_gems.specs.find { |spec| spec.name == gem.name }
25
+ end
26
+ end
22
27
  end
23
28
  gemfile.write if gemfile.saved_lines.any?
24
29
  log %Q(Done.#{' You may want run `bundle update`' if updated_gems.any?})
25
30
  end
26
31
 
27
- def update_all
28
- log %Q(No gem specified)
29
- Updater.new.perform method(:update_handler)
30
- end
31
-
32
- def update_handler(gems)
33
- load_versions gems.map &:name
34
- gems.each do |gem|
35
- update ::Bundler.locked_gems.specs.find { |spec| spec.name == gem.name }
36
- end
37
- end
38
-
39
32
  # @note calls #latest_minor_version and #latest_patch_version
40
33
  def update(spec)
41
34
  gem = gemfile.find_by_name spec.name
@@ -51,6 +44,14 @@ module DRG
51
44
  end
52
45
  end
53
46
 
47
+ #
48
+ # Private
49
+ #
50
+
51
+ def latest_available_version(name, current_version)
52
+ new_versions(name, current_version).first
53
+ end
54
+
54
55
  # @param [String] name of the gem
55
56
  # @param [String] current_version of the gem
56
57
  def latest_minor_version(name, current_version)
@@ -95,6 +96,7 @@ module DRG
95
96
  end
96
97
 
97
98
  def load_gem_versions(gems)
99
+ gems.reject! { |gem_name| gemfile.find_by_name(gem_name).nil? }
98
100
  log %Q(Searching for latest #{type} versions of #{gems.join(' ')} ...)
99
101
  `gem query -ra #{gems.join(' ')}`
100
102
  end
@@ -104,19 +106,6 @@ module DRG
104
106
  def higher?(list, other_list)
105
107
  list[0].to_i > other_list[0].to_i || list[1].to_i > other_list[1].to_i || list[2].to_i > other_list[2].to_i
106
108
  end
107
-
108
- # @todo delete if not used
109
- #
110
- # @param [String] name of the gem
111
- # @param [String] current_version of the gem
112
- # def next_patch_version(name, current_version)
113
- # new_versions(name, current_version).select { |version|
114
- # puts segments = version.scan(/\d+/)
115
- # patch_version = segments.last.to_i
116
- # minor_version = segments[-2].to_i
117
- # patch_version > current_version.segments[-1] && minor_version <= current_version.segments[-2]
118
- # }.last
119
- # end
120
109
  end
121
110
  end
122
111
  end
@@ -3,64 +3,20 @@ module DRG
3
3
  class Updater
4
4
  include Log
5
5
 
6
- attr_reader :gemfile, :bundler
7
-
8
- def initialize
9
- @gemfile = Gemfile.new
10
- @bundler = Bundler::CLI.new [], debug: true, current_command: OpenStruct.new
11
- @versions = {}
12
- end
13
-
14
- # Updates the projects outdated gems listed in the Gemfile
6
+ # Loads the current version of outdated gems
15
7
  #
16
- # @todo Cleanup old gems when finished
17
8
  # @note `bundle outdated` returns lines that look like 'slop (newest 4.2.0, installed 3.6.0) in group "default"'
18
9
  # @param [#call] handler needs to be a callable object that takes an array of gems [OpenStruct] (default :update_all)
19
- def perform(handler = method(:update_all))
10
+ def perform
20
11
  log 'Searching for outdated gems ....'
21
12
  outdated = `bundle outdated`.scan(/\s\*\s(.+)\s/).flatten
22
- gems = outdated.map do |item|
23
- gem = OpenStruct.new
24
- gem.name = item[/([\-\w0-9]+)\s/, 1]
25
- gem.entry = gemfile.find_by_name(gem.name)
26
- next unless gem.entry
27
- gem.latest_version = item[/newest\s([\d.\w]+)/, 1]
28
- gem.current_version = item[/installed\s([\d.\w]+)/, 1]
29
- gem
30
- end.compact
13
+ gems = outdated.map { |item| OpenStruct.new(name: item[/([\-\w0-9]+)\s/, 1]) }
31
14
  if gems.any?
32
- handler.call gems
15
+ yield gems
33
16
  else
34
17
  log 'All gems up to date!'
35
18
  end
36
19
  end
37
-
38
- def update_all(gems)
39
- gems.each &method(:update)
40
- end
41
-
42
- # @param [#name, #current_version, #latest_version, #entry] gem is the gem to update, where #entry is a GemfileLine
43
- def update(gem)
44
- log(%Q[Updating "#{gem.name}" from #{gem.current_version} to #{gem.latest_version}])
45
- gemfile.remove_version gem.entry
46
- bundler.update(gem.name)
47
- if $0.to_i.zero?
48
- log(%Q[Succeeded in installing "#{gem.name}" (#{gem.latest_version})])
49
- if system('rake')
50
- log(%Q[Tests passed! Updating Gemfile entry for "#{gem.name}" to #{gem.latest_version}])
51
- gemfile.update(gem.entry, gem.latest_version)
52
- gemfile.write
53
- end
54
- else
55
- fail StandardError, %Q[Failed to update "#{gem.name}"]
56
- end
57
- rescue Bundler::GemNotFound, Bundler::InstallError, Bundler::VersionConflict => e
58
- log %Q[Failed to find a compatible of "#{gem.name}" (#{gem.latest_version}): #{e.class} #{e.message}]
59
- gemfile.rollback
60
- rescue => e
61
- gemfile.rollback
62
- log "#{e.class}: #{e.message}\n#{e.backtrace}"
63
- end
64
20
  end
65
21
  end
66
22
  end
data/lib/drg/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DRG
2
- VERSION = '0.8.1'.freeze
2
+ VERSION = '0.9.0'.freeze
3
3
  end
data/lib/tasks/drg.rake CHANGED
@@ -27,6 +27,11 @@ namespace :drg do
27
27
  DRG::Tasks::Pinner.new(:patch).perform
28
28
  end
29
29
 
30
+ desc 'Pins all gems [or the requested gem] to the latest version'
31
+ task :latest, [:gem_name] do |_, options|
32
+ DRG::Tasks::ProgessivePinner.new(:available).perform(options[:gem_name])
33
+ end
34
+
30
35
  desc 'Pins all gems [or the requested gem] to the latest available patch version'
31
36
  task :minor_latest, [:gem_name] do |_, options|
32
37
  DRG::Tasks::ProgessivePinner.new(:minor).perform(options[:gem_name])
@@ -37,9 +42,4 @@ namespace :drg do
37
42
  DRG::Tasks::ProgessivePinner.new(:patch).perform(options[:gem_name])
38
43
  end
39
44
  end
40
-
41
- desc 'Updates your gems in the Gemfile to the latest compatible version'
42
- task :update do
43
- DRG::Tasks::Updater.new.perform
44
- end
45
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Buckley
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-19 00:00:00.000000000 Z
11
+ date: 2015-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler