Narnach-gems 0.1.1 → 0.1.3
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.
- 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)
|