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 +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
|