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 +4 -4
- data/Gemfile +1 -0
- data/lib/drg/tasks/gemfile.rb +39 -0
- data/lib/drg/tasks/gemfile_line.rb +1 -0
- data/lib/drg/tasks/pinner.rb +10 -33
- data/lib/drg/tasks/updater.rb +55 -0
- data/lib/drg/version.rb +1 -1
- data/lib/drg.rb +3 -0
- data/lib/tasks/drg.rake +6 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a0136e2a7979daa6dd708cf38b8e4f3c5045d7d
|
4
|
+
data.tar.gz: 9fc863ea65499c9addb8b9013174da698a405e45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 496f0f91b5ad626c40b14b39fcba120bb95b1d309f9f61a77aae7b3f50290c1471131cb9d4e92f95221025db31ec3c4da8d90abfd0804284cf2dffd1ea515b76
|
7
|
+
data.tar.gz: 797608f709a8383661a129bf02dc9941bb8d8904fe6c75f4b477375b9504e1bed8e48cf9e7566400f261e4d16aa90771a702b7d41ef361d94e1667dc033913e5
|
data/Gemfile
CHANGED
@@ -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
|
data/lib/drg/tasks/pinner.rb
CHANGED
@@ -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
|
-
|
15
|
+
gemfile.update(gem, spec.version)
|
12
16
|
end
|
13
|
-
|
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
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.
|
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
|