Narnach-gems 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +6 -0
- data/bin/gems +7 -1
- data/gems.gemspec +1 -1
- data/lib/gems.rb +15 -8
- data/lib/gems_config.rb +34 -18
- data/lib/gems_parser.rb +6 -6
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -5,6 +5,12 @@ Rails code would not get into dependency issues.
|
|
5
5
|
|
6
6
|
== Recent changes
|
7
7
|
|
8
|
+
=== Version 0.1.3
|
9
|
+
Bugfix: gem-specific installation options actually work as intended: passing compiler options to gems with C extensions.
|
10
|
+
|
11
|
+
=== Version 0.1.2
|
12
|
+
Allow gem-specific installation options.
|
13
|
+
|
8
14
|
=== Version 0.1.1
|
9
15
|
The install and uninstall actions now show a summary of the gems installed/uninstalled/failed.
|
10
16
|
|
data/bin/gems
CHANGED
@@ -27,11 +27,15 @@ when 'projects'
|
|
27
27
|
gems_config.project_names.each do |project|
|
28
28
|
puts project
|
29
29
|
end
|
30
|
+
when 'configure'
|
31
|
+
gems_config = GemsConfig.new(project)
|
32
|
+
gemname = ARGV.shift
|
33
|
+
gems_config.set_gem_options(gemname, ARGV)
|
30
34
|
else 'help'
|
31
35
|
puts <<-EOS
|
32
36
|
Syntax:
|
33
37
|
gems <action> <arguments>
|
34
|
-
|
38
|
+
|
35
39
|
Actions and arguments:
|
36
40
|
install <name>
|
37
41
|
Install all gems in project <name>.
|
@@ -47,5 +51,7 @@ Actions and arguments:
|
|
47
51
|
The file will be overwritten and can be parsed by the import action.
|
48
52
|
projects
|
49
53
|
List all stored project names.
|
54
|
+
configure <name> <gem> [option1 option2 option3]
|
55
|
+
Configure a specific gem inside a project to use specific options when installing.
|
50
56
|
EOS
|
51
57
|
end
|
data/gems.gemspec
CHANGED
@@ -3,7 +3,7 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.name = 'gems'
|
4
4
|
s.summary = "Gems is a simple tool to manage sets of RubyGems."
|
5
5
|
s.description = "Gems is a simple tool to manage sets of RubyGems. It can be used to install and uninstall large numbers of gems."
|
6
|
-
s.version = '0.1.
|
6
|
+
s.version = '0.1.3'
|
7
7
|
s.date = '2008-08-19'
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Wes Oldenbeuving"]
|
data/lib/gems.rb
CHANGED
@@ -2,25 +2,32 @@ require 'gems_config'
|
|
2
2
|
|
3
3
|
class Gems
|
4
4
|
attr_reader :project, :gems, :gems_config
|
5
|
-
|
5
|
+
|
6
6
|
def initialize(project)
|
7
7
|
@project = project
|
8
8
|
@gems_config = GemsConfig.new(@project)
|
9
9
|
@gems = @gems_config.gems
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def list
|
13
13
|
puts 'Gems in "%s":' % project
|
14
14
|
gems.each do |gemname, versions|
|
15
|
-
|
15
|
+
line = "%#{longest_gem_name_length}s %s" % [gemname, versions.join(", ")]
|
16
|
+
if gems_config.options_for(gemname).size > 0
|
17
|
+
line << ' [%s]' % gems_config.options_for(gemname).join(" ")
|
18
|
+
end
|
19
|
+
puts line
|
16
20
|
end
|
17
21
|
end
|
18
|
-
|
22
|
+
|
19
23
|
def install
|
20
24
|
puts "Installing all gems and versions in '%s'" % project
|
21
25
|
results = {}
|
22
26
|
each_gem_with_version do |gemname, version|
|
23
27
|
cmd = "sudo gem install --ignore-dependencies --no-rdoc --no-ri -v %s %s" % [version, gemname]
|
28
|
+
if gems_config.options_for(gemname).size > 0
|
29
|
+
cmd << ' -- %s' % gems_config.options_for(gemname).join(" ")
|
30
|
+
end
|
24
31
|
puts cmd
|
25
32
|
result = system(cmd)
|
26
33
|
results['%s-%s' % [gemname, version]] = result
|
@@ -32,7 +39,7 @@ class Gems
|
|
32
39
|
puts
|
33
40
|
puts "Failed to install: %s" % unsuccessful.map{|ary| ary[0]}.sort.join(", ")
|
34
41
|
end
|
35
|
-
|
42
|
+
|
36
43
|
def uninstall
|
37
44
|
puts "Uninstalling all gems and versions in '%s'" % project
|
38
45
|
results = {}
|
@@ -49,9 +56,9 @@ class Gems
|
|
49
56
|
puts
|
50
57
|
puts "Failed to uninstall: %s" % unsuccessful.map{|ary| ary[0]}.sort.join(", ")
|
51
58
|
end
|
52
|
-
|
59
|
+
|
53
60
|
private
|
54
|
-
|
61
|
+
|
55
62
|
def each_gem_with_version(&block)
|
56
63
|
raise ArgumentError, 'No block provided' unless block
|
57
64
|
gems.each do |gemname, versions|
|
@@ -60,7 +67,7 @@ class Gems
|
|
60
67
|
end
|
61
68
|
end
|
62
69
|
end
|
63
|
-
|
70
|
+
|
64
71
|
def longest_gem_name_length
|
65
72
|
gems.map{|ary| ary[0].size}.max
|
66
73
|
end
|
data/lib/gems_config.rb
CHANGED
@@ -3,60 +3,76 @@ require 'gems_parser'
|
|
3
3
|
|
4
4
|
class GemsConfig
|
5
5
|
attr_reader :name
|
6
|
-
|
6
|
+
|
7
7
|
def initialize(name)
|
8
8
|
@name = name
|
9
9
|
end
|
10
10
|
|
11
11
|
def export_gems(file)
|
12
|
-
File.open(file,'wb') do |f|
|
12
|
+
File.open(file,'wb') do |f|
|
13
13
|
gems.sort_by{|gemname, versions| gemname}.each do |gemname, versions|
|
14
14
|
f.puts "%s (%s)" % [gemname, versions.join(", ")]
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def import_gems(file)
|
20
|
-
|
21
|
-
|
22
|
-
np['gems'] = gems
|
20
|
+
new_gems = GemsParser.new(file).gems
|
21
|
+
self.gems = new_gems
|
23
22
|
save_config
|
24
23
|
end
|
25
|
-
|
24
|
+
|
25
|
+
def options_for(gemname)
|
26
|
+
gem_options[gemname] || []
|
27
|
+
end
|
28
|
+
|
29
|
+
def set_gem_options(gemname, options)
|
30
|
+
gem_options[gemname] = options
|
31
|
+
save_config
|
32
|
+
end
|
33
|
+
|
26
34
|
def gems
|
27
|
-
project['gems']
|
35
|
+
project['gems'] ||= {}
|
28
36
|
end
|
29
|
-
|
37
|
+
|
30
38
|
def project_names
|
31
39
|
projects.keys.sort
|
32
40
|
end
|
33
|
-
|
41
|
+
|
34
42
|
protected
|
35
|
-
|
43
|
+
|
36
44
|
def config
|
37
45
|
@config ||= load_config
|
38
46
|
end
|
39
|
-
|
47
|
+
|
48
|
+
def gem_options
|
49
|
+
project['gems_options'] ||= {}
|
50
|
+
end
|
51
|
+
|
52
|
+
def gems=(new_gems)
|
53
|
+
project['gems'] = new_gems
|
54
|
+
end
|
55
|
+
|
40
56
|
def project
|
41
|
-
projects[name]
|
57
|
+
projects[name] ||= {}
|
42
58
|
end
|
43
|
-
|
59
|
+
|
44
60
|
def projects
|
45
61
|
config['projects'] ||= {}
|
46
62
|
end
|
47
|
-
|
63
|
+
|
48
64
|
private
|
49
|
-
|
65
|
+
|
50
66
|
def config_file
|
51
67
|
File.expand_path('~/.gems.yml')
|
52
68
|
end
|
53
|
-
|
69
|
+
|
54
70
|
def load_config
|
55
71
|
YAML.load_file(config_file)
|
56
72
|
rescue SystemCallError, ArgumentError
|
57
73
|
{}
|
58
74
|
end
|
59
|
-
|
75
|
+
|
60
76
|
def save_config
|
61
77
|
File.open(config_file, 'wb') {|f| f.puts(config.to_yaml)}
|
62
78
|
end
|
data/lib/gems_parser.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
class GemsParser
|
2
2
|
attr_reader :file
|
3
|
-
|
3
|
+
|
4
4
|
def initialize(file)
|
5
5
|
@file = file
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def gems
|
9
9
|
@gems ||= parse_gems
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
protected
|
13
13
|
|
14
14
|
def str
|
15
15
|
@str ||= read_file
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
private
|
19
|
-
|
19
|
+
|
20
20
|
def parse_gems
|
21
21
|
parsed_gems = []
|
22
22
|
str.each do |line|
|
@@ -32,7 +32,7 @@ class GemsParser
|
|
32
32
|
end
|
33
33
|
return parsed_gems
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def read_file
|
37
37
|
raise 'File does not exist: "%s"' % file unless File.exist?(file)
|
38
38
|
File.read(file)
|