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