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 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.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
- puts "%#{longest_gem_name_length}s %s" % [gemname, versions.join(", ")]
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
- gems = GemsParser.new(file).gems
21
- np = projects[name] ||= {}
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)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Narnach-gems
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wes Oldenbeuving