public
Description: A Ruby web application framework
Homepage: http://www.mackframework.com
Clone URL: git://github.com/markbates/mack.git
Click here to lend your support to: mack and make a donation at www.pledgie.com !
Finished up work on the gem config system.
markbates (author)
Tue Apr 01 18:30:18 -0700 2008
commit  e3fd5ee2135fb494dc81067983bee972e86a458d
tree    ac908d23f3bec42ddd8b7651996e6008b74ab3c6
parent  d43054f18cb825935ff6a150f84c8821fd7c6e50
...
5
6
7
8
9
10
 
 
 
11
12
...
5
6
7
 
 
 
8
9
10
11
12
0
@@ -5,7 +5,7 @@
0
 # require_file, optional, is a file in the gem you want to require.
0
 require_gems do |gem|
0
   # examples:
0
- # gem.add('redgreen', '1.2.2', 'redgreen')
0
- # gem.add('test-spec')
0
- # gem.add('rubyzip', '0.9.1')
0
+ # gem.add :redgreen, :version => "1.2.2", :libs => :redgreen
0
+ # gem.add :termios
0
+ # gem.add :rubyzip, :source => "http://gems.rubyforge.org"
0
 end
0
\ No newline at end of file
...
12
13
14
 
15
16
17
...
12
13
14
15
16
17
18
0
@@ -12,6 +12,7 @@ module Kernel
0
     Mack::Utils::Crypt::Keeper.instance.worker(worker).decrypt(value)
0
   end
0
   
0
+ # Returns Mack::Utils::GemManager
0
   def require_gems
0
     yield Mack::Utils::GemManager.instance
0
   end
...
11
12
13
14
15
16
17
18
 
 
 
 
19
20
21
...
11
12
13
 
 
 
 
 
14
15
16
17
18
19
20
0
@@ -11,11 +11,10 @@ namespace :gem do
0
   task :install => :setup do
0
     runner = Gem::GemRunner.new
0
     Mack::Utils::GemManager.instance.required_gem_list.each do |g|
0
- unless g.version.blank?
0
- runner.run(["install", g.name, "--version=#{g.version}"])
0
- else
0
- runner.run(["install", g.name])
0
- end
0
+ params = ["install", g.name.to_s]
0
+ params << "--version=#{g.version}" if g.version?
0
+ params << "--source=#{g.source}" if g.source?
0
+ runner.run(params)
0
     end
0
   end # install
0
   
...
1
2
 
 
 
 
 
 
 
3
4
5
6
7
8
 
9
10
11
12
13
 
 
 
 
 
 
 
 
 
 
14
15
 
16
17
18
19
20
 
21
 
 
22
23
24
25
 
26
27
28
29
30
 
31
32
33
 
 
34
35
 
36
37
38
 
 
 
39
40
41
42
43
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
46
47
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
15
16
17
18
 
 
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
 
 
34
35
36
37
38
 
 
 
39
40
41
42
43
 
44
45
46
 
47
48
49
 
50
51
 
 
52
53
54
55
56
57
 
 
 
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
0
@@ -1,47 +1,75 @@
0
 module Mack
0
   module Utils
0
+ # This class is used to add gems to your application in an easy to use way.
0
+ #
0
+ # require_gems do |gem|
0
+ # gem.add :redgreen, :version => "1.2.2", :libs => :redgreen
0
+ # gem.add :termios
0
+ # gem.add "rubyzip", :source => "http:// gems.rubyforge.org"
0
+ # end
0
     class GemManager
0
       include Singleton
0
 
0
       attr_accessor :required_gem_list
0
       
0
- def initialize
0
+ def initialize # :nodoc:
0
         @required_gem_list = []
0
       end
0
       
0
- def add(name, version = nil, require_file = nil)
0
- @required_gem_list << Mack::Utils::GemManager::GemObject.new(name, version, require_file)
0
+ # Adds a new gem to the system. This does NOT actually require the gem
0
+ # or any of it's 'libs'. You need to call the do_requires method to actually
0
+ # require any of the 'libs' defined for this gem.
0
+ #
0
+ # Options:
0
+ # * <code>:source => "http:// gems.rubyforge.org"</code>
0
+ # * <code>:version => "1.2.3"</code>
0
+ # * <code>:libs => "file" or :libs => ["file1", "file2"]</code>
0
+ def add(name, options = {})
0
+ @required_gem_list << Mack::Utils::GemManager::GemObject.new(name, options)
0
       end
0
       
0
+ # Requires the gem and any libs that you've specified.
0
       def do_requires
0
         @required_gem_list.each do |g|
0
- if g.version.nil?
0
- gem(g.name)
0
- else
0
+ if g.version?
0
             gem(g.name, g.version)
0
+ else
0
+ gem(g.name)
0
           end
0
- unless g.require_file.blank?
0
- require g.require_file
0
- end
0
+ g.libs.each {|l| require l.to_s} if g.libs?
0
         end
0
       end
0
       
0
       private
0
- class GemObject
0
+ class GemObject # :nodoc:
0
         attr_accessor :name
0
         attr_accessor :version
0
- attr_accessor :require_file
0
+ attr_accessor :libs
0
+ attr_accessor :source
0
         
0
- def initialize(name, version, require_file)
0
+ def initialize(name, options = {})
0
           self.name = name
0
- self.version = version
0
- self.require_file = require_file
0
+ self.version = options[:version]
0
+ self.libs = [options[:libs]].flatten.compact
0
+ self.source = options[:source]
0
         end
0
         
0
         def to_s
0
- t = "#{self.name.downcase}"
0
- t << "-#{self.version}" unless self.version.blank?
0
- t
0
+ t = self.name.to_s
0
+ t << "-#{self.version}" if self.version?
0
+ t.downcase
0
+ end
0
+
0
+ def libs?
0
+ !self.libs.empty?
0
+ end
0
+
0
+ def version?
0
+ !self.version.blank?
0
+ end
0
+
0
+ def source?
0
+ !self.source.blank?
0
         end
0
         
0
       end
...
10
11
12
13
 
14
15
16
...
10
11
12
 
13
14
15
16
0
@@ -10,7 +10,7 @@ class GemHelper # :nodoc:
0
     self.project = "magrathea"
0
     self.package = "mack"
0
     self.gem_name = "mack"
0
- self.version = "0.4.1.106"
0
+ self.version = "0.4.1.111"
0
   end
0
   
0
   def gem_name_with_version
...
1
2
3
 
 
4
5
...
1
 
 
2
3
4
5
0
@@ -1,4 +1,4 @@
0
 require_gems do |gem|
0
- gem.add('redgreen', '1.2.2', 'redgreen')
0
- gem.add('termios')
0
+ gem.add :redgreen, :version => "1.2.2", :libs => :redgreen
0
+ gem.add :termios
0
 end
0
\ No newline at end of file
...
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
 
 
 
 
 
50
51
52
53
 
 
 
 
 
 
 
54
55
56
...
12
13
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
0
@@ -12,45 +12,81 @@ class GemManagerTest < Test::Unit::TestCase
0
   end
0
 
0
   def test_add
0
- assert_difference(gem_manager.required_gem_list, :size) do
0
- require_gems do |g|
0
- g.add("termios")
0
- end
0
- assert_equal "termios", gem_manager.required_gem_list.last.to_s
0
- end
0
- assert_difference(gem_manager.required_gem_list, :size) do
0
- require_gems do |g|
0
- g.add("redgreen", "1.2.2")
0
- end
0
- assert_equal "redgreen-1.2.2", gem_manager.required_gem_list.last.to_s
0
- end
0
- assert_difference(gem_manager.required_gem_list, :size) do
0
- require_gems do |g|
0
- g.add("redgreen", "1.2.2", "redgreen")
0
- end
0
- assert_equal "redgreen-1.2.2", gem_manager.required_gem_list.last.to_s
0
- end
0
+ g = add_gem(:gem_1)
0
+ assert_equal "gem_1", g.to_s
0
+ assert !g.libs?
0
+
0
+ g = add_gem(:gem_2, :version => "1.2.2")
0
+ assert_equal "gem_2-1.2.2", g.to_s
0
+ assert !g.libs?
0
+
0
+ g = add_gem(:gem_2, :version => "1.2.2", :libs => :gem_2)
0
+ assert_equal "gem_2-1.2.2", g.to_s
0
+ assert g.libs?
0
+ end
0
+
0
+ def test_libs
0
+ g = add_gem(:gem_1)
0
+ assert !g.libs?
0
+ assert_equal [], g.libs
0
+
0
+ g = add_gem(:gem_1, :libs => :foo)
0
+ assert g.libs?
0
+ assert_equal [:foo], g.libs
0
+
0
+ g = add_gem(:gem_1, :libs => [:foo])
0
+ assert g.libs?
0
+ assert_equal [:foo], g.libs
0
+
0
+ g = add_gem(:gem_1, :libs => [:foo, "bar"])
0
+ assert g.libs?
0
+ assert_equal [:foo, "bar"], g.libs
0
+ end
0
+
0
+ def test_version
0
+ g = add_gem(:gem_1)
0
+ assert !g.version?
0
+
0
+ g = add_gem(:gem_1, :version => "1.0.0")
0
+ assert g.version?
0
+ assert_equal "1.0.0", g.version
0
+ end
0
+
0
+ def test_source
0
+ g = add_gem(:gem_1)
0
+ assert !g.source?
0
+
0
+ g = add_gem(:gem_1, :source => "http://gems.rubyforge.org")
0
+ assert g.source?
0
+ assert_equal "http://gems.rubyforge.org", g.source
0
+ end
0
+
0
+ def test_to_s
0
+ g = add_gem(:gem_1)
0
+ assert_equal "gem_1", g.to_s
0
+
0
+ g = add_gem(:gem_1, :version => "1.0.0")
0
+ assert_equal "gem_1-1.0.0", g.to_s
0
   end
0
   
0
   def test_do_requires
0
- assert_difference(gem_manager.required_gem_list, :size) do
0
- require_gems do |g|
0
- g.add("termios")
0
- end
0
- assert_equal "termios", gem_manager.required_gem_list.last.to_s
0
- gem_manager.do_requires
0
- end
0
- assert_difference(gem_manager.required_gem_list, :size, 2) do
0
- require_gems do |g|
0
- g.add("redgreen", "1.2.2")
0
- g.add("redgreen", "1.2.3", "redgreen")
0
- end
0
- assert_equal "redgreen-1.2.3", gem_manager.required_gem_list.last.to_s
0
- end
0
+ g = add_gem(:termios)
0
+ assert_equal "termios", g.to_s
0
+ gem_manager.do_requires
0
+ g = add_gem(:redgreen, :version => "1.2.2")
0
+ g = add_gem(:redgreen, :version => "1.2.3", :libs => :redgreen)
0
+ assert_equal "redgreen-1.2.3", gem_manager.required_gem_list.last.to_s
0
     assert_raise(Gem::LoadError) { gem_manager.do_requires }
0
   end
0
   
0
   private
0
+
0
+ def add_gem(name, options = {})
0
+ assert_difference(gem_manager.required_gem_list, :size) do
0
+ require_gems {|g| g.add(name, options)}
0
+ return gem_manager.required_gem_list.last
0
+ end
0
+ end
0
 
0
   def gem_manager
0
     Mack::Utils::GemManager.instance

Comments

    No one has commented yet.