drg 0.7.0 → 0.8.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: 0ff6322a9656b0257833c2751052ea6a48ed660d
4
- data.tar.gz: ffbc2637332c3b297d443afd1e8e825d8fb9cc0d
3
+ metadata.gz: a8e48ecc9dad0ef6b8aa9c7caaff1116d79ee336
4
+ data.tar.gz: 0aab8b29bb2723129fc0c6ccf2b29fa2051ab02c
5
5
  SHA512:
6
- metadata.gz: 3333f0efac20212de8c076e397dd417179f94ad6ff57dc26f58d954a2d3139df6b212626936231e12234b069d41bbd9bdb59623b651584b83ed6732d83097bc7
7
- data.tar.gz: 5604de606a2ae228850c93ecfea851566abd34e7651a87659a69c37f45dae7f638d0e3b4ff0dd85e71d616bbd49e4be4adaac8fe5b7b794d0cfe895517e9ad12
6
+ metadata.gz: 06c35400aa6eecb7286b3b86ae9cc1c1cceb36151059e10bf409ff7bc0704bb446fdbb8b9d37aa52001039fe3391df53e9f31c4759edcaa9e1fcc67bc61664e7
7
+ data.tar.gz: 1e4f1d10aeb53d42ab9630a503fd07760f0ed1acc3614cde78d776666b8194d9637768f84a42964f4d0645029456f768afe3fb90485487cf081e79ad34ddbacb
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # DRG
2
2
 
3
- A Ruby utility to help automate common tasks! Currently includes enhanced dependency management using Bundler. You
4
- can pin Gem versions to the current or the next available level (major, minor, or patch). Can also automatically
5
- update your gems to the latest available version.
3
+ A Ruby utility to help automate dependency management using Bundler. You can pin Gem versions to the current or the next
4
+ available level. DRG can automatically update your gems to the latest available version, similar to Gemnasium.
6
5
 
7
6
  ## Requirements
8
7
 
@@ -50,7 +49,7 @@ or `:path` will be ignored. You can "pin" all your versions to the current versi
50
49
  rake drg:pin
51
50
  ```
52
51
 
53
- Will update a Gemfile to their full version:
52
+ This task will update your Gemfile with the gem's full version. It'll change:
54
53
 
55
54
  ```ruby
56
55
  gem 'rails'
@@ -59,7 +58,7 @@ gem 'therubyracer', '~> 0.12', platforms: :ruby
59
58
  gem 'drg' # need this
60
59
  ```
61
60
 
62
- it'll get changed to
61
+ to:
63
62
 
64
63
  ```ruby
65
64
  gem 'rails', '4.2.3'
@@ -70,19 +69,19 @@ gem 'drg', '0.4.1' # need this
70
69
 
71
70
  ### drg:pin:minor
72
71
 
73
- Want to pin gems at their _minor_ version?
72
+ Want to pin gems at their __minor__ version?
74
73
 
75
74
  ```bash
76
75
  rake drg:pin:minor
77
76
  ```
78
77
 
79
- Will update a Gemfile
78
+ This task will update your Gemfile with the approximate gem's minor version. It'll change:
80
79
 
81
80
  ```ruby
82
81
  gem 'rails', '4.2.3'
83
82
  ```
84
83
 
85
- to
84
+ to:
86
85
 
87
86
  ```ruby
88
87
  gem 'rails', '~> 4.2'
@@ -90,13 +89,13 @@ gem 'rails', '~> 4.2'
90
89
 
91
90
  ### drg:pin:patch
92
91
 
93
- Want to pin gems at their _patch_ version?
92
+ Want to pin gems at their __patch__ version?
94
93
 
95
94
  ```bash
96
95
  rake drg:pin:minor
97
96
  ```
98
97
 
99
- Will update a Gemfile
98
+ This task will update your Gemfile with the approximate gem's patch version. It'll change:
100
99
 
101
100
  ```ruby
102
101
  gem 'rails', '4.2.3'
@@ -108,7 +107,7 @@ to
108
107
  gem 'rails', '~> 4.2.3'
109
108
  ```
110
109
 
111
- This can be combined with `bundle update` to quickly update all gems to the latest patch or minor level.
110
+ This can be combined with `bundle update` to quickly update all gems to the latest version.
112
111
 
113
112
  ### drg:pin:major
114
113
 
@@ -120,7 +119,7 @@ Pins your gems at the major level:
120
119
 
121
120
  ### drg:pin:patch_latest
122
121
 
123
- Updates the patch version for each outdated gem to the highest available version. This command should be run after `drg:pin` to ensure your gem versions are normalized.
122
+ Updates the patch version for each outdated gem to the latest version:
124
123
 
125
124
  ```bash
126
125
  rake drg:pin:patch_latest #=> updates all gems in the Gemfile
@@ -138,7 +137,7 @@ Same as `patch_latest` except it updates the minor version to the latest
138
137
 
139
138
  ### drg:unpin
140
139
 
141
- Remove the versions from your Gemfile. Start fresh!
140
+ Remove the versions from your Gemfile. A clean start!
142
141
 
143
142
  ```bash
144
143
  rake drg:unpin
data/drg.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = DRG::VERSION
9
9
  spec.authors = ["Ryan Buckley"]
10
10
  spec.email = ["arebuckley@gmail.com"]
11
- spec.summary = %q{DRG automation}
12
- spec.description = %q{DRG automates common tasks}
11
+ spec.summary = %q{DRG that Gemfile! The missing bundler extension}
12
+ spec.description = %q{DRG that Gemfile! The missing bundler extension. Gem version automation with Bundler}
13
13
  spec.homepage = "https://github.com/ridiculous/drg"
14
14
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
15
15
  spec.bindir = "exe"
@@ -29,17 +29,20 @@ module DRG
29
29
  Updater.new.perform method(:update_handler)
30
30
  end
31
31
 
32
- def update_handler(gem)
33
- update ::Bundler.locked_gems.specs.find { |spec| spec.name == gem.name }
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
34
37
  end
35
38
 
39
+ # @note calls #latest_minor_version and #latest_patch_version
36
40
  def update(spec)
37
41
  gem = gemfile.find_by_name spec.name
38
42
  if gem
39
- log %Q[Searching for latest #{type} version of "#{spec.name}" (currently #{spec.version.to_s}) ...]
40
43
  latest_version = public_send("latest_#{type}_version", spec.name, spec.version)
41
44
  if latest_version
42
- log "Updating to version #{latest_version}"
45
+ log %Q(Updating "#{spec.name}" from #{spec.version.to_s} to #{latest_version})
43
46
  gemfile.update gem, latest_version
44
47
  updated_gems << gem.name
45
48
  else
@@ -79,14 +82,27 @@ module DRG
79
82
  # @param [String] name of the gem
80
83
  # @return [Array] a list of available versions (e.g. ['1.2.0', '1.1.0'])
81
84
  def versions(name)
82
- @versions[name] ||= `gem query -radn ^#{name}$`.scan(/([\d.]+),/).flatten.uniq
85
+ @versions[name] ||= begin
86
+ log %Q(Searching for latest #{type} version of "#{name}" ...)
87
+ `gem query -radn ^#{name}$`.scan(/([\d.]+),/).flatten.uniq
88
+ end
89
+ end
90
+
91
+ def load_versions(gems)
92
+ load_gem_versions(gems).scan(/^(#{Array(gems).join('|')})\s\(([\d.\s,\w\-]+)\)$/).each do |gem_name, versions|
93
+ @versions[gem_name] = versions.to_s.split(', ')
94
+ end
95
+ end
96
+
97
+ def load_gem_versions(gems)
98
+ log %Q(Searching for latest #{type} versions of #{gems.join(' ')} ...)
99
+ `gem query -ra #{gems.join(' ')}`
83
100
  end
84
101
 
102
+ # @param [Array] list of a gem version's segments
103
+ # @param [Array] other_list of another gem version's segments
85
104
  def higher?(list, other_list)
86
- return true if list[0].to_i > other_list[0].to_i
87
- return true if list[1].to_i > other_list[1].to_i
88
- return true if list[2].to_i > other_list[2].to_i
89
- false
105
+ 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
90
106
  end
91
107
 
92
108
  # @todo delete if not used
@@ -3,11 +3,10 @@ module DRG
3
3
  class Updater
4
4
  include Log
5
5
 
6
- attr_reader :gemfile, :failures, :bundler
6
+ attr_reader :gemfile, :bundler
7
7
 
8
8
  def initialize
9
9
  @gemfile = Gemfile.new
10
- @failures = Set.new
11
10
  @bundler = Bundler::CLI.new [], debug: true, current_command: OpenStruct.new
12
11
  @versions = {}
13
12
  end
@@ -16,7 +15,8 @@ module DRG
16
15
  #
17
16
  # @todo Cleanup old gems when finished
18
17
  # @note `bundle outdated` returns lines that look like 'slop (newest 4.2.0, installed 3.6.0) in group "default"'
19
- def perform(handler = method(:try_update))
18
+ # @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))
20
20
  log 'Searching for outdated gems ....'
21
21
  outdated = `bundle outdated`.scan(/\s\*\s(.+)\s/).flatten
22
22
  gems = outdated.map do |item|
@@ -29,14 +29,18 @@ module DRG
29
29
  gem
30
30
  end.compact
31
31
  if gems.any?
32
- gems.each &handler
32
+ handler.call gems
33
33
  else
34
34
  log 'All gems up to date!'
35
35
  end
36
36
  end
37
37
 
38
- # @param [OpenStruct] gem
39
- def try_update(gem)
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)
40
44
  log(%Q[Updating "#{gem.name}" from #{gem.current_version} to #{gem.latest_version}])
41
45
  gemfile.remove_version gem.entry
42
46
  bundler.update(gem.name)
@@ -46,20 +50,16 @@ module DRG
46
50
  log(%Q[Tests passed! Updating Gemfile entry for "#{gem.name}" to #{gem.latest_version}])
47
51
  gemfile.update(gem.entry, gem.latest_version)
48
52
  gemfile.write
49
- else
50
- failures << gem.name
51
53
  end
52
54
  else
53
55
  fail StandardError, %Q[Failed to update "#{gem.name}"]
54
56
  end
55
57
  rescue Bundler::GemNotFound, Bundler::InstallError, Bundler::VersionConflict => e
56
- # @todo retry it later
57
58
  log %Q[Failed to find a compatible of "#{gem.name}" (#{gem.latest_version}): #{e.class} #{e.message}]
58
59
  gemfile.rollback
59
- failures << gem.name
60
60
  rescue => e
61
- puts "#{e.class}: #{e.message} #{e.backtrace}"
62
61
  gemfile.rollback
62
+ log "#{e.class}: #{e.message}\n#{e.backtrace}"
63
63
  end
64
64
  end
65
65
  end
data/lib/drg/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DRG
2
- VERSION = '0.7.0'.freeze
2
+ VERSION = '0.8.0'.freeze
3
3
  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.7.0
4
+ version: 0.8.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-18 00:00:00.000000000 Z
11
+ date: 2015-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,7 +86,8 @@ dependencies:
86
86
  - - "<"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '4'
89
- description: DRG automates common tasks
89
+ description: DRG that Gemfile! The missing bundler extension. Gem version automation
90
+ with Bundler
90
91
  email:
91
92
  - arebuckley@gmail.com
92
93
  executables: []
@@ -139,5 +140,5 @@ rubyforge_project:
139
140
  rubygems_version: 2.4.6
140
141
  signing_key:
141
142
  specification_version: 4
142
- summary: DRG automation
143
+ summary: DRG that Gemfile! The missing bundler extension
143
144
  test_files: []