gem-mirror 0.0.3 → 0.0.4

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