drg 0.1.0 → 0.2.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: 7e52689c00f9c11fe0a845187c639503111478a2
4
- data.tar.gz: 7adbad6788c9342dac8b7924cd3350ea4f152100
3
+ metadata.gz: 8a0136e2a7979daa6dd708cf38b8e4f3c5045d7d
4
+ data.tar.gz: 9fc863ea65499c9addb8b9013174da698a405e45
5
5
  SHA512:
6
- metadata.gz: 8108423f078d9bc28ccb16b8390b3d65f4174f4dd2118492ede2ea420f071a667a6b2a079c1eb8f6cf0b6f32b25de7780afe813608957168671bdce8aaf701bf
7
- data.tar.gz: 41a66f0004ab961863457dcb40d1f102fa40da682ee46c34d461309a8b7ad05ea9d9e3643f4428eafc90737e8252f8f2a4cbe7b435cb258202529642e3699f63
6
+ metadata.gz: 496f0f91b5ad626c40b14b39fcba120bb95b1d309f9f61a77aae7b3f50290c1471131cb9d4e92f95221025db31ec3c4da8d90abfd0804284cf2dffd1ea515b76
7
+ data.tar.gz: 797608f709a8383661a129bf02dc9941bb8d8904fe6c75f4b477375b9504e1bed8e48cf9e7566400f261e4d16aa90771a702b7d41ef361d94e1667dc033913e5
data/Gemfile CHANGED
@@ -8,4 +8,5 @@ group :development, :test do
8
8
  gem 'object_tracker', '>= 1.0.5'
9
9
  gem 'byebug'
10
10
  end
11
+ gem 'ruby_parser', '3.7.1'
11
12
  gem 'slop'
@@ -0,0 +1,39 @@
1
+ module DRG
2
+ module Tasks
3
+ class Gemfile
4
+ attr_accessor :file
5
+
6
+ def initialize
7
+ @file = ::Bundler.default_gemfile
8
+ end
9
+
10
+ def update(gem, version)
11
+ lines[gem] = gem.update(version)
12
+ end
13
+
14
+ def find_by_name(name)
15
+ lines.each_with_index.each do |line, index|
16
+ next if line =~ /:?path:?\s*(=>)?\s*/
17
+ next if line =~ /:?git(hub)?:?\s*(=>)?\s*/
18
+ if line =~ /gem\s*['"]#{name}["']/
19
+ return GemfileLine.new line, index
20
+ end
21
+ end
22
+ nil
23
+ end
24
+
25
+ def lines
26
+ @lines ||= File.readlines file
27
+ end
28
+
29
+ def write
30
+ File.open(file, 'wb') do |f|
31
+ lines.each do |line|
32
+ f << line
33
+ end
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -2,6 +2,7 @@ module DRG
2
2
  module Tasks
3
3
  class GemfileLine < Struct.new(:line, :index)
4
4
  alias to_s line
5
+ alias to_int index
5
6
 
6
7
  def ==(other)
7
8
  line.to_s == other.to_s
@@ -1,46 +1,23 @@
1
- require 'bundler'
2
-
3
1
  module DRG
4
2
  module Tasks
5
3
  class Pinner
4
+ attr_reader :gemfile
5
+
6
+ def initialize(gemfile = Gemfile.new)
7
+ @gemfile = gemfile
8
+ end
9
+
6
10
  def perform
7
11
  log %Q(Pinning Gemfile "#{gemfile}")
8
- Bundler.locked_gems.specs.each do |spec|
9
- gem = find_by_name(spec.name)
12
+ ::Bundler.locked_gems.specs.each do |spec|
13
+ gem = gemfile.find_by_name(spec.name)
10
14
  next unless gem
11
- lines[gem.index] = gem.update(spec.version)
15
+ gemfile.update(gem, spec.version)
12
16
  end
13
- write_to_gemfile
17
+ gemfile.write
14
18
  log %Q(Done)
15
19
  end
16
20
 
17
- def write_to_gemfile
18
- File.open(gemfile, 'wb') do |f|
19
- lines.each do |line|
20
- f << line
21
- end
22
- end
23
- end
24
-
25
- def find_by_name(name)
26
- lines.each_with_index.each do |line, index|
27
- next if line =~ /:?path:?\s*(=>)?\s*/
28
- next if line =~ /:?git(hub)?:?\s*(=>)?\s*/
29
- if line =~ /gem\s*['"]#{name}["']/
30
- return GemfileLine.new line, index
31
- end
32
- end
33
- nil
34
- end
35
-
36
- def lines
37
- @lines ||= File.readlines(gemfile)
38
- end
39
-
40
- def gemfile
41
- Bundler.default_gemfile
42
- end
43
-
44
21
  private
45
22
 
46
23
  def log(msg = nil)
@@ -0,0 +1,55 @@
1
+ module DRG
2
+ module Tasks
3
+ class Updater
4
+ attr_reader :gemfile
5
+
6
+ def initialize
7
+ @gemfile = Gemfile.new
8
+ @versions = {}
9
+ end
10
+
11
+ def perform
12
+ `bundle outdated`.scan(/\s\*\s(.+)\s/).flatten.each &method(:try_update)
13
+ end
14
+
15
+ # @param [Item] item from the `bundle outdated` command (e.g. 'slop (newest 4.2.0, installed 3.6.0) in group "default"')
16
+ def try_update(item)
17
+ name = item[/(\w+)\s/, 1]
18
+ gem = gemfile.find_by_name(name)
19
+ return unless gem
20
+ latest_version = item[/newest\s([\d.]+)/, 1]
21
+ log(%Q(Trying to update gem "#{name}" to #{latest_version}))
22
+ if system("bundle update #{name}")
23
+ log(%Q[Succeeded in installing "#{name}" (#{latest_version})])
24
+ if system('rake')
25
+ log(%Q(Tests passed after updating "#{name}" to version #{latest_version}))
26
+ gemfile.update(gem, latest_version)
27
+ gemfile.write
28
+ else
29
+ log(%Q(Tests failed after updating "#{name}" to version #{latest_version}))
30
+ end
31
+ else
32
+ log(%Q[Failed to install "#{name}" (#{latest_version})])
33
+ end
34
+ end
35
+
36
+ # @param [String] name of the gem
37
+ # @param [String] current_version of the gem
38
+ def new_versions(name, current_version)
39
+ versions(name).select { |version| version > current_version }
40
+ end
41
+
42
+ # @param [String] name of the gem
43
+ # @return [Array] a list of available versions (e.g. ['1.2.0', '1.1.0'])
44
+ def versions(name)
45
+ @versions[name] ||= `gem query -radn ^#{name}$`.scan(/([\d.]+),/).flatten
46
+ end
47
+
48
+ private
49
+
50
+ def log(msg = nil)
51
+ puts %Q( * #{msg})
52
+ end
53
+ end
54
+ end
55
+ end
data/lib/drg/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Drg
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
data/lib/drg.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'ostruct'
2
2
  require 'set'
3
+ require 'bundler'
3
4
  require 'drg/version'
4
5
 
5
6
  module DRG
@@ -9,7 +10,9 @@ module DRG
9
10
  autoload :FileContext, 'drg/file_context'
10
11
 
11
12
  module Tasks
13
+ autoload :Updater, 'drg/tasks/updater'
12
14
  autoload :Pinner, 'drg/tasks/pinner'
15
+ autoload :Gemfile, 'drg/tasks/gemfile'
13
16
  autoload :GemfileLine, 'drg/tasks/gemfile_line'
14
17
  end
15
18
  end
data/lib/tasks/drg.rake CHANGED
@@ -5,4 +5,10 @@ namespace :drg do
5
5
  task :pin do
6
6
  DRG::Tasks::Pinner.new.perform
7
7
  end
8
+
9
+ desc 'Updates your gems in the Gemfile to the latest compatible version'
10
+ task :update do
11
+ # sh 'cd /Users/ryanbuckley/apps/dontspreadit && which ruby'
12
+ DRG::Tasks::Updater.new.perform
13
+ end
8
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Buckley
@@ -121,8 +121,10 @@ files:
121
121
  - lib/drg/judge.rb
122
122
  - lib/drg/let.rb
123
123
  - lib/drg/scanner.rb
124
+ - lib/drg/tasks/gemfile.rb
124
125
  - lib/drg/tasks/gemfile_line.rb
125
126
  - lib/drg/tasks/pinner.rb
127
+ - lib/drg/tasks/updater.rb
126
128
  - lib/drg/version.rb
127
129
  - lib/tasks/drg.rake
128
130
  homepage: https://github.com/ridiculous/drg