gem-mirror 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ require File.expand_path('../lib/gem-mirror/version', __FILE__)
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'gem-mirror'
5
5
  s.version = GemMirror::VERSION
6
- s.date = '2012-02-03'
6
+ s.date = '2012-02-04'
7
7
  s.authors = ['Yorick Peterse']
8
8
  s.email = 'yorickpeterse@gmail.com'
9
9
  s.summary = 'Gem for easily creating your own RubyGems mirror.'
@@ -27,8 +27,14 @@ module GemMirror
27
27
  # @param [Gem::Requirement] requirement
28
28
  #
29
29
  def initialize(name, requirement = nil)
30
+ requirement ||= ::Gem::Requirement.default
31
+
32
+ if requirement.is_a?(String)
33
+ requirement = ::Gem::Requirement.new(requirement)
34
+ end
35
+
30
36
  @name = name
31
- @requirement = requirement || ::Gem::Requirement.default
37
+ @requirement = requirement
32
38
  end
33
39
 
34
40
  ##
@@ -42,7 +48,7 @@ module GemMirror
42
48
  # @return [TrueClass|FalseClass]
43
49
  #
44
50
  def has_version?
45
- return version && version != '0.0.0'
51
+ return version && !version.segments.reject { |s| s == 0 }.empty?
46
52
  end
47
53
 
48
54
  ##
@@ -25,13 +25,7 @@ module GemMirror
25
25
  #
26
26
  def fetch
27
27
  source.gems.each do |gem|
28
- if gem.has_version?
29
- versions = [gem.version]
30
- else
31
- versions = versions_file.versions_for(gem.name)
32
- end
33
-
34
- versions.each do |version|
28
+ versions_for(gem).each do |version|
35
29
  filename = gem.filename(version)
36
30
  satisfied = gem.requirement.satisfied_by?(version)
37
31
  name = gem.name
@@ -68,6 +62,30 @@ module GemMirror
68
62
  end
69
63
  end
70
64
 
65
+ ##
66
+ # Returns an Array containing the versions that should be fetched for a
67
+ # Gem.
68
+ #
69
+ # @param [GemMirror::Gem] gem
70
+ # @return [Array]
71
+ #
72
+ def versions_for(gem)
73
+ available = versions_file.versions_for(gem.name)
74
+ versions = gem.has_version? ? [gem.version] : available
75
+ available_names = available.map(&:to_s)
76
+
77
+ # Get rid of invalid versions. Due to Gem::Version having a custom ==
78
+ # method, which treats "3.4" the same as "3.4.0" we'll have to compare
79
+ # the versions as String instances.
80
+ versions = versions.select do |version|
81
+ available_names.include?(version.to_s)
82
+ end
83
+
84
+ versions = [available.last] if versions.empty?
85
+
86
+ return versions
87
+ end
88
+
71
89
  ##
72
90
  # Tries to download the specification for a Gem and version. This method
73
91
  # returns the raw inflated data instead of an instance of
@@ -150,10 +168,23 @@ module GemMirror
150
168
  # @return [Array]
151
169
  #
152
170
  def dependencies_for(spec)
153
- dependencies = []
154
171
  possible_dependencies = configuration.development ? spec.dependencies \
155
172
  : spec.runtime_dependencies
156
173
 
174
+ dependencies = filter_dependencies(possible_dependencies)
175
+
176
+ return assign_gem_versions(dependencies)
177
+ end
178
+
179
+ ##
180
+ # Filters a list of dependencies based on whether or not they are ignored.
181
+ #
182
+ # @param [Array] possible_dependencies
183
+ # @return [Array]
184
+ #
185
+ def filter_dependencies(possible_dependencies)
186
+ dependencies = []
187
+
157
188
  possible_dependencies.each do |dependency|
158
189
  gem = Gem.new(dependency.name, dependency.requirement)
159
190
 
@@ -165,6 +196,26 @@ module GemMirror
165
196
  return dependencies
166
197
  end
167
198
 
199
+ ##
200
+ # Processes a list of Gems and sets their versions to the latest one
201
+ # available in case no specific version is given.
202
+ #
203
+ # @param [Array] gems
204
+ # @return [Array]
205
+ #
206
+ def assign_gem_versions(gems)
207
+ gems = gems.map do |gem|
208
+ unless gem.has_version?
209
+ latest = versions_file.versions_for(gem.name).last
210
+ gem = Gem.new(gem.name, latest.to_s) if latest
211
+ end
212
+
213
+ gem
214
+ end
215
+
216
+ return gems
217
+ end
218
+
168
219
  ##
169
220
  # @see GemMirror::Configuration#logger
170
221
  # @return [Logger]
@@ -75,7 +75,7 @@ module GemMirror
75
75
  # @param [String] requirement
76
76
  #
77
77
  def gem(name, requirement = nil)
78
- gems << Gem.new(name, ::Gem::Requirement.new(requirement))
78
+ gems << Gem.new(name, requirement)
79
79
  end
80
80
 
81
81
  private
@@ -1,3 +1,3 @@
1
1
  module GemMirror
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end # GemMirror
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem-mirror
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-03 00:00:00.000000000 Z
12
+ date: 2012-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: slop