gemtronics 0.4.0 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/gemtronics/definition.rb +22 -0
- data/lib/gemtronics/grouper.rb +12 -0
- data/lib/gemtronics/manager.rb +57 -6
- metadata +2 -2
@@ -68,6 +68,28 @@ module Gemtronics
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
+
# Calls the <tt>gem</tt> method with <tt>name</tt> and <tt>version</tt>.
|
72
|
+
# It does NOT do any requiring!
|
73
|
+
#
|
74
|
+
# Example:
|
75
|
+
# gd = Gemtronics::Definition.new
|
76
|
+
# gd.name = 'my_gem'
|
77
|
+
# gd.version = '1.2.3'
|
78
|
+
# gd.load_gem # => gem('my_gem', '1.2.3')
|
79
|
+
def load_gem
|
80
|
+
gem(self.name, self.version)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Calls the <tt>load_gem</tt> method and then requires each
|
84
|
+
# file in the <tt>require_list</tt>
|
85
|
+
def require_gem(options = {})
|
86
|
+
load_gem
|
87
|
+
self.require_list.each do |f|
|
88
|
+
puts "require #{f}" if options[:verbose]
|
89
|
+
require f
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
71
93
|
private
|
72
94
|
def self.build_method(name, defval = nil, key = name) # :nodoc:
|
73
95
|
define_method(name) do
|
data/lib/gemtronics/grouper.rb
CHANGED
@@ -143,5 +143,17 @@ module Gemtronics
|
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
|
+
# Finds and returns a Gemtronics::Definition for the specified
|
147
|
+
# gem, if one exists.
|
148
|
+
#
|
149
|
+
# Example:
|
150
|
+
# Gemtronics.group(:test).search('gem1')
|
151
|
+
def search(name, options = {})
|
152
|
+
self.gems.each do |g|
|
153
|
+
return g if g.name == name
|
154
|
+
end
|
155
|
+
return nil
|
156
|
+
end
|
157
|
+
|
146
158
|
end # Grouper
|
147
159
|
end # Gemtronics
|
data/lib/gemtronics/manager.rb
CHANGED
@@ -13,7 +13,6 @@ module Gemtronics
|
|
13
13
|
|
14
14
|
def initialize # :nodoc:
|
15
15
|
reset!
|
16
|
-
self.installed_gems = []
|
17
16
|
end
|
18
17
|
|
19
18
|
# Creates, or reopens a new group of gems. It takes the name of the
|
@@ -101,11 +100,7 @@ module Gemtronics
|
|
101
100
|
options = {:verbose => false}.merge(options)
|
102
101
|
group.gems.each do |g|
|
103
102
|
if g.load? == true
|
104
|
-
|
105
|
-
g.require_list.each do |f|
|
106
|
-
puts "require #{f}" if options[:verbose]
|
107
|
-
require f
|
108
|
-
end
|
103
|
+
g.require_gem
|
109
104
|
end
|
110
105
|
end
|
111
106
|
end
|
@@ -155,6 +150,62 @@ module Gemtronics
|
|
155
150
|
|
156
151
|
def reset! # :nodoc:
|
157
152
|
self.groups = {}
|
153
|
+
self.installed_gems = []
|
154
|
+
end
|
155
|
+
|
156
|
+
# Finds and returns a Gemtronics::Definition for the specified
|
157
|
+
# gem, if one exists.
|
158
|
+
#
|
159
|
+
# Search Order:
|
160
|
+
# If the option <tt>:group</tt> is passed in it will search
|
161
|
+
# only within that group.
|
162
|
+
#
|
163
|
+
# If <tt>RAILS_ENV</tt> is defined it will search in the group
|
164
|
+
# that matches the current Rails environment
|
165
|
+
#
|
166
|
+
# Finally it will search all gems and return the first one it
|
167
|
+
# finds. There is no guarantee as to the order it searches through
|
168
|
+
# the groups.
|
169
|
+
#
|
170
|
+
# Gemtronics.find('gem1')
|
171
|
+
# Gemtronics.find('gem1', :group => :production)
|
172
|
+
def find(name, options = {})
|
173
|
+
group = options[:group]
|
174
|
+
if group
|
175
|
+
group = self.groups[group.to_sym]
|
176
|
+
return nil if group.nil?
|
177
|
+
gemdef = group.search(name, options)
|
178
|
+
return gemdef unless gemdef.nil?
|
179
|
+
elsif defined?(RAILS_ENV)
|
180
|
+
return find(name, {:group => RAILS_ENV.to_sym}.merge(options))
|
181
|
+
else
|
182
|
+
self.groups.each do |key, group|
|
183
|
+
gemdef = group.search(name, options)
|
184
|
+
return gemdef unless gemdef.nil?
|
185
|
+
end
|
186
|
+
end
|
187
|
+
raise "#{name} has not been defined!"
|
188
|
+
end
|
189
|
+
|
190
|
+
# Allows you to chain method calls together. An important note is
|
191
|
+
# that the <tt>*args</tt> are only passed into the first method in
|
192
|
+
# the chain.
|
193
|
+
#
|
194
|
+
# Example:
|
195
|
+
# Gemtronics.find_and_require_gem('gem1', :group => :production)
|
196
|
+
#
|
197
|
+
# This will call the <tt>find</tt> method on Gemtronics::Manager
|
198
|
+
# and pass it the arguments <tt>{:group => :production}</tt>. It will then
|
199
|
+
# call the <tt>require_gem</tt> method on the Gemtronics::Definition class
|
200
|
+
# returned by the <tt>find</tt> method.
|
201
|
+
def method_missing(sym, *args)
|
202
|
+
chain = sym.to_s.split('_and_')
|
203
|
+
raise NoMethodError.new(sym.to_s) if chain.nil? || chain.empty? || chain.size == 1
|
204
|
+
res = self.send(chain[0], *args)
|
205
|
+
chain[1..chain.size].each do |meth|
|
206
|
+
res = res.send(meth)
|
207
|
+
end
|
208
|
+
return res
|
158
209
|
end
|
159
210
|
|
160
211
|
private
|
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.
|
4
|
+
version: 0.4.5
|
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-20 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|