current_gem 0.0.6 → 0.1.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/README +19 -19
- data/Rakefile +10 -9
- data/lib/current_gem/version.rb +2 -2
- data/lib/current_gem.rb +35 -32
- data/lib/rubygems/commands/current_path_command.rb +3 -3
- data/lib/rubygems_plugin.rb +2 -7
- metadata +40 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8971224f3fe87b1cba795193f59550f6dfcb1c6
|
4
|
+
data.tar.gz: b5e04718421465e5bc3d4a5a098fc7ad2c4e1724
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e301a011b8b554410f7089229c5e628aa7759061070f524d1f588e66b40b5f7882a261c5c0bc9ee61c7d7933a236abbd28a947730d8f97b07f1503ad249864ab
|
7
|
+
data.tar.gz: ae934417dcf74cbf72cb23df96def57041fac5fb3672306ef82c19decf1fb4d3dbdca55180c72408352adbe500c41ab7743d34c3e13c08da2c9b67c811f1c1ef
|
data/README
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
= current_gem - Maintain symlinks to the most recent versions of installed
|
1
|
+
= current_gem - Maintain symlinks to the most recent versions of installed Ruby Gems.
|
2
2
|
|
3
3
|
== VERSION
|
4
4
|
|
5
|
-
This documentation refers to current_gem version 0.0
|
5
|
+
This documentation refers to current_gem version 0.1.0
|
6
6
|
|
7
7
|
|
8
8
|
== DESCRIPTION
|
9
9
|
|
10
10
|
CurrentGem maintains symlinks to the most recent versions of your installed
|
11
|
-
|
11
|
+
Ruby Gems by hooking into the install and update process. Thus, you have a
|
12
12
|
stable path at your disposal that always points to the current version of
|
13
13
|
a gem.
|
14
14
|
|
@@ -44,57 +44,57 @@ or run
|
|
44
44
|
|
45
45
|
> gem spec <gem_name>
|
46
46
|
|
47
|
-
|
47
|
+
on the command line (this is a built-in command).
|
48
48
|
|
49
49
|
You can get a gem's current path programmatically with
|
50
50
|
|
51
|
-
|
51
|
+
require 'current_gem'
|
52
52
|
|
53
|
-
|
53
|
+
CurrentGem.path_for(gem_name)
|
54
54
|
CurrentGem.path_for(spec)
|
55
55
|
|
56
|
-
or by
|
56
|
+
or by running
|
57
57
|
|
58
58
|
> gem current_path <gem_name>
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
on the command line.
|
60
|
+
on the command line (turn on the <tt>--resolve</tt>/<tt>-r</tt> switch to
|
61
|
+
resolve the link target).
|
64
62
|
|
65
63
|
Finally, get the gem's current version with
|
66
64
|
|
67
|
-
|
65
|
+
require 'current_gem'
|
68
66
|
|
69
|
-
|
67
|
+
CurrentGem.version_for(gem_name)
|
70
68
|
CurrentGem.version_for(spec)
|
71
69
|
|
72
70
|
or by running
|
73
71
|
|
74
72
|
> gem current_version <gem_name>
|
75
73
|
|
74
|
+
on the command line.
|
75
|
+
|
76
76
|
=== Updating
|
77
77
|
|
78
78
|
In case you want to update all symlinks at once (or you want to get started
|
79
|
-
after installing CurrentGem for the first time) call
|
79
|
+
after installing CurrentGem for the first time), call
|
80
80
|
|
81
81
|
require 'current_gem'
|
82
82
|
CurrentGem.update_all
|
83
83
|
|
84
|
-
or
|
84
|
+
or run
|
85
85
|
|
86
86
|
> gem symlink_current
|
87
87
|
|
88
|
-
on the command line (turn on the
|
88
|
+
on the command line (turn on the <tt>--verbose</tt>/<tt>-V</tt> switch to see
|
89
|
+
the actual links).
|
89
90
|
|
90
91
|
Whenever you install or update any gems the symlinks will be created/updated
|
91
|
-
automatically. If you uninstall a gem the symlink will be pointed at the most
|
92
|
+
automatically. If you uninstall a gem, the symlink will be pointed at the most
|
92
93
|
recent remaining version or, if none are left, removed as well.
|
93
94
|
|
94
95
|
|
95
96
|
== LINKS
|
96
97
|
|
97
|
-
<b></b>
|
98
98
|
Documentation:: http://blackwinter.github.com/current_gem
|
99
99
|
Source code:: http://github.com/blackwinter/current_gem
|
100
100
|
RubyGem:: http://rubygems.org/gems/current_gem
|
@@ -110,7 +110,7 @@ RubyGem:: http://rubygems.org/gems/current_gem
|
|
110
110
|
Copyright (C) 2009-2012 University of Cologne,
|
111
111
|
Albertus-Magnus-Platz, 50923 Cologne, Germany
|
112
112
|
|
113
|
-
Copyright (C) 2013 Jens Wille
|
113
|
+
Copyright (C) 2013-2014 Jens Wille
|
114
114
|
|
115
115
|
current_gem is free software: you can redistribute it and/or modify it under
|
116
116
|
the terms of the GNU Affero General Public License as published by the Free
|
data/Rakefile
CHANGED
@@ -4,16 +4,17 @@ begin
|
|
4
4
|
require 'hen'
|
5
5
|
|
6
6
|
Hen.lay! {{
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
7
|
+
gem: {
|
8
|
+
name: %q{current_gem},
|
9
|
+
version: CurrentGem::VERSION,
|
10
|
+
summary: %q{Maintain symlinks to the most recent versions of installed Ruby Gems.},
|
11
|
+
author: %q{Jens Wille},
|
12
|
+
email: %q{jens.wille@gmail.com},
|
13
|
+
license: %q{AGPL-3.0},
|
14
|
+
homepage: :blackwinter,
|
15
15
|
|
16
|
-
:
|
16
|
+
required_ruby_version: '>= 1.9.3',
|
17
|
+
required_rubygems_version: '>= 1.8.0'
|
17
18
|
}
|
18
19
|
}}
|
19
20
|
rescue LoadError => err
|
data/lib/current_gem/version.rb
CHANGED
data/lib/current_gem.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
#--
|
2
2
|
###############################################################################
|
3
3
|
# #
|
4
|
-
# current_gem -- Maintain symlinks to current
|
4
|
+
# current_gem -- Maintain symlinks to current Ruby Gems #
|
5
5
|
# #
|
6
6
|
# Copyright (C) 2009-2012 University of Cologne, #
|
7
7
|
# Albertus-Magnus-Platz, #
|
8
8
|
# 50923 Cologne, Germany #
|
9
9
|
# #
|
10
|
-
# Copyright (C) 2013 Jens Wille
|
10
|
+
# Copyright (C) 2013-2014 Jens Wille #
|
11
11
|
# #
|
12
12
|
# Authors: #
|
13
13
|
# Jens Wille <jens.wille@gmail.com> #
|
@@ -37,16 +37,16 @@ module CurrentGem
|
|
37
37
|
|
38
38
|
extend self
|
39
39
|
|
40
|
-
|
40
|
+
SPEC_DIR = ENV['CURRENT_GEM_SPEC_DIR'] || 'specifications'
|
41
|
+
CURR_DIR = ENV['CURRENT_GEM_CURR_DIR'] || 'current'
|
42
|
+
|
43
|
+
FileUtils = ENV['DRY_RUN'] ? ::FileUtils::DryRun : ::FileUtils
|
41
44
|
|
42
45
|
def find(arg)
|
43
46
|
case arg
|
44
|
-
when Gem::Installer, Gem::Uninstaller
|
45
|
-
|
46
|
-
|
47
|
-
find_by_spec(arg)
|
48
|
-
else
|
49
|
-
find_by_name(arg)
|
47
|
+
when Gem::Installer, Gem::Uninstaller then find_by_installer(arg)
|
48
|
+
when Gem::Specification then find_by_spec(arg)
|
49
|
+
else find_by_name(arg)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -62,15 +62,15 @@ module CurrentGem
|
|
62
62
|
spec.version if spec
|
63
63
|
end
|
64
64
|
|
65
|
-
def update(
|
66
|
-
symlink(find(
|
65
|
+
def update(installer)
|
66
|
+
symlink(find(installer)) if can_symlink?
|
67
67
|
end
|
68
68
|
|
69
69
|
def update_all(gem_dir = Gem.dir)
|
70
70
|
return unless can_symlink?
|
71
71
|
|
72
72
|
path = base_path_for(gem_dir)
|
73
|
-
|
73
|
+
FileUtils.rm_r(path) if File.directory?(path)
|
74
74
|
|
75
75
|
Gem::Specification.latest_specs.each { |spec| symlink(spec, path) }
|
76
76
|
end
|
@@ -84,26 +84,25 @@ module CurrentGem
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
##############################################################################
|
88
87
|
private
|
89
|
-
##############################################################################
|
90
88
|
|
91
|
-
def find_by_installer(
|
92
|
-
spec =
|
93
|
-
ver = "#{inst.is_a?(Gem::Installer) ? '>' : '!='} #{spec.version}"
|
89
|
+
def find_by_installer(installer)
|
90
|
+
spec, op = installer.spec, installer.is_a?(Gem::Installer) ? '>' : '!='
|
94
91
|
|
95
|
-
curr = find_by_spec(spec,
|
96
|
-
curr.loaded_from ||= File.join(
|
92
|
+
curr = find_by_spec(spec, "#{op} #{spec.version}") || spec
|
93
|
+
curr.loaded_from ||= File.join(installer.gem_home, SPEC_DIR, curr.spec_name)
|
97
94
|
|
98
95
|
curr
|
99
96
|
end
|
100
97
|
|
101
|
-
def find_by_spec(spec,
|
102
|
-
find_by_name(spec.name,
|
98
|
+
def find_by_spec(spec, req = nil)
|
99
|
+
find_by_name(spec.name, req)
|
103
100
|
end
|
104
101
|
|
105
|
-
def find_by_name(name,
|
106
|
-
Gem::
|
102
|
+
def find_by_name(name, req = nil)
|
103
|
+
req ||= Gem::Requirement.default
|
104
|
+
|
105
|
+
Gem::Specification.find_all_by_name(name.to_s, req).reject { |spec|
|
107
106
|
spec.version.prerelease?
|
108
107
|
}.last
|
109
108
|
end
|
@@ -111,19 +110,23 @@ module CurrentGem
|
|
111
110
|
def symlink(spec, path = base_path_for(spec))
|
112
111
|
return unless can_symlink? && !spec.version.prerelease?
|
113
112
|
|
114
|
-
|
115
|
-
|
113
|
+
FileUtils.mkdir_p(path) unless File.exist?(path)
|
114
|
+
|
115
|
+
unless File.writable?(path) || ENV['DRY_RUN']
|
116
|
+
raise Gem::FilePermissionError, path
|
117
|
+
end
|
116
118
|
|
117
|
-
|
118
|
-
|
119
|
+
if File.exist?(dst = current_path_for(spec, path)) || File.symlink?(dst)
|
120
|
+
FileUtils.rm(dst)
|
121
|
+
end
|
119
122
|
|
120
|
-
|
121
|
-
|
123
|
+
if File.exist?(src = spec.full_gem_path)
|
124
|
+
FileUtils.symlink(src, dst, verbose: Gem.configuration.really_verbose)
|
125
|
+
end
|
122
126
|
end
|
123
127
|
|
124
|
-
def base_path_for(
|
125
|
-
|
126
|
-
File.join(gem_dir, 'current')
|
128
|
+
def base_path_for(arg)
|
129
|
+
File.join(arg.is_a?(Gem::Specification) ? arg.base_dir : arg, CURR_DIR)
|
127
130
|
end
|
128
131
|
|
129
132
|
def current_path_for(spec, path = base_path_for(spec))
|
@@ -7,7 +7,7 @@
|
|
7
7
|
# Albertus-Magnus-Platz, #
|
8
8
|
# 50923 Cologne, Germany #
|
9
9
|
# #
|
10
|
-
# Copyright (C) 2013 Jens Wille
|
10
|
+
# Copyright (C) 2013-2014 Jens Wille #
|
11
11
|
# #
|
12
12
|
# Authors: #
|
13
13
|
# Jens Wille <jens.wille@gmail.com> #
|
@@ -32,7 +32,7 @@ class Gem::Commands::CurrentPathCommand < Gem::Command
|
|
32
32
|
|
33
33
|
def initialize
|
34
34
|
super 'current_path', "Display the location of a gem's current symlink",
|
35
|
-
:
|
35
|
+
resolve: false
|
36
36
|
|
37
37
|
add_option('-r', '--resolve', 'Display value of symbolic link') { |value, options|
|
38
38
|
options[:resolve] = true
|
@@ -49,7 +49,7 @@ class Gem::Commands::CurrentPathCommand < Gem::Command
|
|
49
49
|
|
50
50
|
def execute
|
51
51
|
path = CurrentGem.path_for(get_one_gem_name)
|
52
|
-
return unless path && File.
|
52
|
+
return unless path && File.exist?(path)
|
53
53
|
|
54
54
|
path = File.readlink(path) if options[:resolve]
|
55
55
|
say path
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -3,13 +3,8 @@ require 'current_gem'
|
|
3
3
|
|
4
4
|
if CurrentGem.can_symlink?
|
5
5
|
|
6
|
-
Gem.post_install
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
Gem.post_uninstall do |uninst|
|
11
|
-
CurrentGem.update(uninst)
|
12
|
-
end
|
6
|
+
Gem.post_install { |installer| CurrentGem.update(installer) }
|
7
|
+
Gem.post_uninstall { |uninstaller| CurrentGem.update(uninstaller) }
|
13
8
|
|
14
9
|
[:symlink_current, :current_path, :current_version].each { |command|
|
15
10
|
Gem::CommandManager.instance.register_command(command)
|
metadata
CHANGED
@@ -1,16 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: current_gem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Wille
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
11
|
+
date: 2014-09-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: hen
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Maintain symlinks to the most recent versions of installed Ruby Gems.
|
14
42
|
email: jens.wille@gmail.com
|
15
43
|
executables: []
|
16
44
|
extensions: []
|
@@ -19,16 +47,16 @@ extra_rdoc_files:
|
|
19
47
|
- COPYING
|
20
48
|
- ChangeLog
|
21
49
|
files:
|
50
|
+
- COPYING
|
51
|
+
- ChangeLog
|
52
|
+
- README
|
53
|
+
- Rakefile
|
22
54
|
- lib/current_gem.rb
|
23
55
|
- lib/current_gem/version.rb
|
24
56
|
- lib/rubygems/commands/current_path_command.rb
|
25
57
|
- lib/rubygems/commands/current_version_command.rb
|
26
58
|
- lib/rubygems/commands/symlink_current_command.rb
|
27
59
|
- lib/rubygems_plugin.rb
|
28
|
-
- COPYING
|
29
|
-
- ChangeLog
|
30
|
-
- README
|
31
|
-
- Rakefile
|
32
60
|
homepage: http://github.com/blackwinter/current_gem
|
33
61
|
licenses:
|
34
62
|
- AGPL-3.0
|
@@ -36,7 +64,7 @@ metadata: {}
|
|
36
64
|
post_install_message:
|
37
65
|
rdoc_options:
|
38
66
|
- "--title"
|
39
|
-
- current_gem Application documentation (v0.0
|
67
|
+
- current_gem Application documentation (v0.1.0)
|
40
68
|
- "--charset"
|
41
69
|
- UTF-8
|
42
70
|
- "--line-numbers"
|
@@ -49,7 +77,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
49
77
|
requirements:
|
50
78
|
- - ">="
|
51
79
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
80
|
+
version: 1.9.3
|
53
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
82
|
requirements:
|
55
83
|
- - ">="
|
@@ -57,8 +85,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
57
85
|
version: 1.8.0
|
58
86
|
requirements: []
|
59
87
|
rubyforge_project:
|
60
|
-
rubygems_version: 2.1
|
88
|
+
rubygems_version: 2.4.1
|
61
89
|
signing_key:
|
62
90
|
specification_version: 4
|
63
|
-
summary: Maintain symlinks to the most recent versions of installed
|
91
|
+
summary: Maintain symlinks to the most recent versions of installed Ruby Gems.
|
64
92
|
test_files: []
|