drg 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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