drg 0.1.0 → 0.2.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: 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