gemtronics 0.3.2 → 0.4.0
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/lib/gemtronics/definition.rb +88 -0
- data/lib/gemtronics/grouper.rb +4 -5
- data/lib/gemtronics/manager.rb +9 -18
- metadata +3 -2
@@ -0,0 +1,88 @@
|
|
1
|
+
module Gemtronics
|
2
|
+
# Represents the definition of a Gem.
|
3
|
+
class Definition < Hash
|
4
|
+
|
5
|
+
# Get/set the name of the gem.
|
6
|
+
attr_accessor :name
|
7
|
+
# Get/set the version of the gem. Defaults to <tt>>=0.0.0</tt>
|
8
|
+
attr_accessor :version
|
9
|
+
# Get/set the source of the gem. Defaults to <tt>http://gems.rubyforge.org</tt>
|
10
|
+
attr_accessor :source
|
11
|
+
|
12
|
+
# Returns true/false if the gem should be required. Defaults to <tt>true</tt>.
|
13
|
+
def load?
|
14
|
+
# method built dynamically. This is just a stub for RDoc.
|
15
|
+
end
|
16
|
+
|
17
|
+
# Set whether the gem should be required.
|
18
|
+
def load=(x)
|
19
|
+
# method built dynamically. This is just a stub for RDoc.
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns an Array of files that should be required. Defaults to <tt>[<name>]</tt>
|
23
|
+
def require_list
|
24
|
+
return [self.name] unless self.has_key?(:require)
|
25
|
+
return [self.fetch(:require)].flatten
|
26
|
+
end
|
27
|
+
|
28
|
+
# Sets the names of the files that should be required.
|
29
|
+
def require_list=(x)
|
30
|
+
self.store(:require, [x].flatten)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns <tt><name>-<version></tt>.
|
34
|
+
#
|
35
|
+
# Example:
|
36
|
+
# gd = Gemtronics::Definition.new
|
37
|
+
# gd.name = 'configatron'
|
38
|
+
# gd.version = '2.3.0'
|
39
|
+
# gd.to_s #=> 'configatron-2.3.0'
|
40
|
+
def to_s
|
41
|
+
return "#{self.name}-#{self.version}"
|
42
|
+
end
|
43
|
+
|
44
|
+
# Generates an install command string.
|
45
|
+
#
|
46
|
+
# Example:
|
47
|
+
# gd = Gemtronics::Definition.new
|
48
|
+
# gd.name = 'configatron'
|
49
|
+
# gd.version = '2.3.0'
|
50
|
+
# gd.install_command #=> 'gem install configatron --source=http://gems.rubyforge.org --version=2.3.0'
|
51
|
+
def install_command
|
52
|
+
cmd = "gem install #{self.name} --source=#{self.source}"
|
53
|
+
unless self.version.match(/^(\>\=|\>)/)
|
54
|
+
cmd << " --version=#{self.version}"
|
55
|
+
end
|
56
|
+
return cmd
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns <tt>true/false</tt> depending on whether the gem
|
60
|
+
# is installed or not.
|
61
|
+
def installed?
|
62
|
+
begin
|
63
|
+
gem(self.name, self.version)
|
64
|
+
return true
|
65
|
+
rescue Gem::LoadError => e
|
66
|
+
return true if e.message.match(/can't activate/)
|
67
|
+
return false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
def self.build_method(name, defval = nil, key = name) # :nodoc:
|
73
|
+
define_method(name) do
|
74
|
+
return defval unless self.has_key?(key)
|
75
|
+
return self.fetch(key)
|
76
|
+
end
|
77
|
+
define_method("#{name.to_s.gsub('?', '')}=") do |x|
|
78
|
+
self.store(key, x)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
build_method(:name)
|
83
|
+
build_method(:version, '>=0.0.0')
|
84
|
+
build_method(:source, 'http://gems.rubyforge.org')
|
85
|
+
build_method(:load?, true, :load)
|
86
|
+
|
87
|
+
end # Definition
|
88
|
+
end # Gemtronics
|
data/lib/gemtronics/grouper.rb
CHANGED
@@ -79,15 +79,14 @@ module Gemtronics
|
|
79
79
|
ind = self.gems.size
|
80
80
|
g = {}
|
81
81
|
self.gems.each_with_index do |gemdef, i|
|
82
|
-
if gemdef
|
82
|
+
if gemdef.name == name
|
83
83
|
g = gemdef
|
84
84
|
ind = i
|
85
85
|
break
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
-
g = self.group_options.merge({:name => name, :require => [name]}.merge(g).merge(options))
|
90
|
-
g[:require] = [g[:require]].flatten
|
89
|
+
g = Gemtronics::Definition[self.group_options.merge({:name => name, :require => [name]}.merge(g).merge(options))]
|
91
90
|
self.gems[ind] = g
|
92
91
|
self.dependents.each do |dep|
|
93
92
|
Gemtronics.group(dep).add(name, options)
|
@@ -112,7 +111,7 @@ module Gemtronics
|
|
112
111
|
# now have the following gems: <tt>gem1, gem3, gem4</tt>
|
113
112
|
def remove(name)
|
114
113
|
self.gems.each do |g|
|
115
|
-
if g
|
114
|
+
if g.name = name.to_s
|
116
115
|
self.gems.delete(g)
|
117
116
|
break
|
118
117
|
end
|
@@ -139,7 +138,7 @@ module Gemtronics
|
|
139
138
|
if group
|
140
139
|
Gemtronics.group(name.to_sym).dependents << self.name
|
141
140
|
group.gems.dup.each do |gemdef|
|
142
|
-
self.add(gemdef
|
141
|
+
self.add(gemdef.name, gemdef)
|
143
142
|
end
|
144
143
|
end
|
145
144
|
end
|
data/lib/gemtronics/manager.rb
CHANGED
@@ -100,9 +100,9 @@ module Gemtronics
|
|
100
100
|
return if group.nil?
|
101
101
|
options = {:verbose => false}.merge(options)
|
102
102
|
group.gems.each do |g|
|
103
|
-
if g
|
104
|
-
gem(g
|
105
|
-
g
|
103
|
+
if g.load? == true
|
104
|
+
gem(g.name, g.version)
|
105
|
+
g.require_list.each do |f|
|
106
106
|
puts "require #{f}" if options[:verbose]
|
107
107
|
require f
|
108
108
|
end
|
@@ -138,14 +138,11 @@ module Gemtronics
|
|
138
138
|
return if group.nil?
|
139
139
|
|
140
140
|
group.gems.each do |g|
|
141
|
-
unless gem_installed?(g
|
142
|
-
cmd =
|
143
|
-
unless g[:version].match(/^(\>\=|\>)/)
|
144
|
-
cmd << " --version=#{g[:version]}"
|
145
|
-
end
|
141
|
+
unless gem_installed?(g)
|
142
|
+
cmd = g.install_command
|
146
143
|
puts cmd
|
147
144
|
system cmd
|
148
|
-
self.installed_gems <<
|
145
|
+
self.installed_gems << g.to_s
|
149
146
|
end
|
150
147
|
end
|
151
148
|
end
|
@@ -161,15 +158,9 @@ module Gemtronics
|
|
161
158
|
end
|
162
159
|
|
163
160
|
private
|
164
|
-
def gem_installed?(
|
165
|
-
|
166
|
-
|
167
|
-
gem(name, version)
|
168
|
-
return true
|
169
|
-
rescue Gem::LoadError => e
|
170
|
-
return true if e.message.match(/can't activate/)
|
171
|
-
return false
|
172
|
-
end
|
161
|
+
def gem_installed?(gemdef) # :nodoc:
|
162
|
+
return true if self.installed_gems.include?(gemdef.to_s)
|
163
|
+
return gemdef.installed?
|
173
164
|
end
|
174
165
|
|
175
166
|
end # Manager
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemtronics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- markbates
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-19 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -23,6 +23,7 @@ extra_rdoc_files:
|
|
23
23
|
- README
|
24
24
|
- LICENSE
|
25
25
|
files:
|
26
|
+
- lib/gemtronics/definition.rb
|
26
27
|
- lib/gemtronics/gemtronics.rb
|
27
28
|
- lib/gemtronics/grouper.rb
|
28
29
|
- lib/gemtronics/manager.rb
|