gemirro 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of gemirro might be problematic. Click here for more details.
- checksums.yaml +5 -13
- data/README.md +2 -2
- data/lib/gemirro/configuration.rb +8 -3
- data/lib/gemirro/indexer.rb +50 -8
- data/lib/gemirro/server.rb +30 -18
- data/lib/gemirro/version.rb +1 -1
- data/spec/gemirro/indexer_spec.rb +49 -11
- data/template/config.rb +8 -3
- metadata +31 -31
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NDk1ZDFlYWYxYmE1NjY1MmNiNzUxYzRjZjA0N2Q2MzI1YjNlZDEyZg==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9237dacb278367d0711772c1aa07972bdb0298a3
|
4
|
+
data.tar.gz: c707b4dd8ade6d496703e5901dc228e64248345f
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ZDNhNDQ4NjIwYTU5OWJlMTM4MzY4OWZmODg0MmY2NDUxOThmZTY4NGZhMzZm
|
11
|
-
MmZiYzBlNzI5NzcxMzIxMTdkOGIwNzA2ZmJjYmFlZWM5NjAzMzU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MDhkOTcyMTk5NDIyMzI5MzA0YTM1ODAxNmIzMDliZWMzMWY2ZWY4YjdmZTQw
|
14
|
-
YjJhZWM4NjU2YmU3MGJhOWZlMTk4NDE2YzYwM2UyMTg1YWRmMDU5NjZjN2Iw
|
15
|
-
ZTQ0MWEwNjA4OTI4NjEwN2YwNTY1ZDU3OTFkMjk0ODQ1ZmMyZjY=
|
6
|
+
metadata.gz: 25934f8f35928f90b98a48a9ef650243694e48db0a59a6fcb8f64d3d1a5dcdec902d04bea6d658d825ff2e2bd8a61e2733fddbcc45da1f2d1cbb76dcf7219070
|
7
|
+
data.tar.gz: d00781c9a26a8e564368b5a80f88b7d1e8ccbc0407a0cd95831d08e3dffe8d9bf739d95861b921d6f6951a5193f36b93dac0427c544e9c4666aaf63514fa751a
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Gemirro | [![Build Status](https://travis-ci.org/PierreRambaud/gemirro.svg)](https://travis-ci.org/PierreRambaud/gemirro)
|
2
2
|
|
3
3
|
Gemirro is a Ruby application that makes it easy way to create your own RubyGems mirror without having to push or write all gem you wanted in a configuration file.
|
4
|
-
It does mirroring
|
5
|
-
More you only need to
|
4
|
+
It does mirroring without any authentication and you can add your private gems in the `gems` directory.
|
5
|
+
More, to mirroring a source, you only need to start the server, and gems will automaticly be downloaded when needed.
|
6
6
|
|
7
7
|
## Requirements
|
8
8
|
|
@@ -5,7 +5,12 @@ module Gemirro
|
|
5
5
|
# @return [Gemirro::Configuration]
|
6
6
|
#
|
7
7
|
def self.configuration
|
8
|
-
@configuration ||= Configuration.new
|
8
|
+
@configuration ||= Configuration.new do
|
9
|
+
server do
|
10
|
+
access_log '/tmp/gemirro.access.log'
|
11
|
+
error_log '/tmp/gemirro.error.log'
|
12
|
+
end
|
13
|
+
end
|
9
14
|
end
|
10
15
|
|
11
16
|
##
|
@@ -13,8 +18,8 @@ module Gemirro
|
|
13
18
|
# destination directory, source, ignored Gems, etc.
|
14
19
|
#
|
15
20
|
class Configuration < Confstruct::Configuration
|
16
|
-
attr_reader :
|
17
|
-
attr_accessor :source, :ignored_gems
|
21
|
+
attr_reader :mirror_directory
|
22
|
+
attr_accessor :source, :ignored_gems, :logger
|
18
23
|
|
19
24
|
##
|
20
25
|
# Returns the logger
|
data/lib/gemirro/indexer.rb
CHANGED
@@ -38,18 +38,60 @@ module Gemirro
|
|
38
38
|
verbose: verbose, force: true)
|
39
39
|
end
|
40
40
|
|
41
|
-
files
|
42
|
-
path.sub(/^#{Regexp.escape @directory}\/?/, '')
|
43
|
-
end
|
44
|
-
|
45
|
-
files.each do |file|
|
41
|
+
files.each do |path|
|
42
|
+
file = path.sub(/^#{Regexp.escape @directory}\/?/, '')
|
46
43
|
dst_name = File.join @dest_directory, file
|
47
|
-
next if File.exist?(dst_name) &&
|
48
|
-
|
44
|
+
# next if File.exist?(dst_name) &&
|
45
|
+
# (File.mtime(dst_name) >= Time.now - 360)
|
49
46
|
|
50
47
|
resp = Http.get("#{Gemirro.configuration.source.host}/#{file}")
|
51
48
|
next unless resp.code == 200
|
52
|
-
|
49
|
+
source_content = resp.body
|
50
|
+
|
51
|
+
if ["#{@specs_index}.gz",
|
52
|
+
"#{@latest_specs_index}.gz",
|
53
|
+
"#{@prerelease_specs_index}.gz"].include?(path)
|
54
|
+
source_content = Marshal.load(
|
55
|
+
Zlib::GzipReader.new(StringIO.new(source_content)).read)
|
56
|
+
content = Marshal.load(Zlib::GzipReader.open(path).read)
|
57
|
+
new_content = source_content.concat(content).uniq
|
58
|
+
|
59
|
+
Zlib::GzipWriter.open(dst_name) do |io|
|
60
|
+
io.write(Marshal.dump(new_content))
|
61
|
+
end
|
62
|
+
else
|
63
|
+
MirrorFile.new(dst_name).write(source_content)
|
64
|
+
end
|
65
|
+
|
66
|
+
FileUtils.rm_rf(path)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def update_gemspecs
|
71
|
+
make_temp_directories
|
72
|
+
|
73
|
+
specs_mtime = File.stat(@dest_specs_index).mtime
|
74
|
+
newest_mtime = Time.at 0
|
75
|
+
|
76
|
+
updated_gems = gem_file_list.select do |gem|
|
77
|
+
gem_mtime = File.stat(gem).mtime
|
78
|
+
newest_mtime = gem_mtime if gem_mtime > newest_mtime
|
79
|
+
gem_mtime >= specs_mtime
|
80
|
+
end
|
81
|
+
|
82
|
+
terminate_interaction(0) if updated_gems.empty?
|
83
|
+
|
84
|
+
specs = map_gems_to_specs updated_gems
|
85
|
+
::Gem::Specification.dirs = []
|
86
|
+
::Gem::Specification.add_specs(*specs)
|
87
|
+
files = build_marshal_gemspecs
|
88
|
+
|
89
|
+
files.each do |path|
|
90
|
+
file = path.sub(/^#{Regexp.escape @directory}\/?/, '')
|
91
|
+
src_name = File.join @directory, file
|
92
|
+
dst_name = File.join @dest_directory, file
|
93
|
+
FileUtils.mv(src_name, dst_name)
|
94
|
+
File.utime newest_mtime, newest_mtime, dst_name
|
53
95
|
end
|
54
96
|
end
|
55
97
|
end
|
data/lib/gemirro/server.rb
CHANGED
@@ -14,16 +14,34 @@ module Gemirro
|
|
14
14
|
class Server < Sinatra::Base
|
15
15
|
attr_accessor :versions_fetcher, :gems_fetcher
|
16
16
|
|
17
|
+
access_logger = Logger.new(Gemirro.configuration.server.access_log)
|
18
|
+
.tap do |logger|
|
19
|
+
::Logger.class_eval { alias_method :write, :'<<' }
|
20
|
+
logger.level = ::Logger::INFO
|
21
|
+
end
|
22
|
+
|
23
|
+
error_logger = ::File.new(Gemirro.configuration.server.error_log, 'a+')
|
24
|
+
error_logger.sync = true
|
25
|
+
|
26
|
+
before do
|
27
|
+
Gemirro.configuration.logger = access_logger
|
28
|
+
env['rack.errors'] = error_logger
|
29
|
+
end
|
30
|
+
|
17
31
|
##
|
18
32
|
# Configure server
|
19
33
|
#
|
20
34
|
configure do
|
21
35
|
config = Gemirro.configuration
|
22
|
-
config.
|
23
|
-
config.
|
24
|
-
set :port, config.
|
25
|
-
set :bind, config.
|
36
|
+
config.server.host = 'localhost' if config.server.host.nil?
|
37
|
+
config.server.port = '2000' if config.server.port.nil?
|
38
|
+
set :port, config.server.port
|
39
|
+
set :bind, config.server.host
|
26
40
|
set :destination, config.destination.gsub(/\/$/, '')
|
41
|
+
set :environment, config.environment
|
42
|
+
|
43
|
+
enable :logging
|
44
|
+
use Rack::CommonLogger, access_logger
|
27
45
|
end
|
28
46
|
|
29
47
|
##
|
@@ -73,20 +91,21 @@ module Gemirro
|
|
73
91
|
logger.error(e.message)
|
74
92
|
end
|
75
93
|
|
76
|
-
|
94
|
+
update_gemspecs
|
77
95
|
end
|
78
96
|
|
79
97
|
##
|
80
|
-
#
|
98
|
+
# Update gemspecs files
|
81
99
|
#
|
82
100
|
# @return [Indexer]
|
83
101
|
#
|
84
|
-
def
|
102
|
+
def update_gemspecs
|
85
103
|
indexer = Indexer.new(settings.destination)
|
86
104
|
indexer.ui = ::Gem::SilentUI.new
|
87
105
|
|
88
|
-
logger.info('
|
89
|
-
indexer.
|
106
|
+
logger.info('Updating gemspecs files...')
|
107
|
+
indexer.update_gemspecs
|
108
|
+
logger.info('Done')
|
90
109
|
end
|
91
110
|
|
92
111
|
##
|
@@ -108,14 +127,6 @@ module Gemirro
|
|
108
127
|
end.compact
|
109
128
|
end
|
110
129
|
|
111
|
-
##
|
112
|
-
# @see Gemirro::Configuration#logger
|
113
|
-
# @return [Logger]
|
114
|
-
#
|
115
|
-
def logger
|
116
|
-
configuration.logger
|
117
|
-
end
|
118
|
-
|
119
130
|
##
|
120
131
|
# @see Gemirro.configuration
|
121
132
|
#
|
@@ -127,7 +138,8 @@ module Gemirro
|
|
127
138
|
# @see Gemirro::VersionsFetcher.fetch
|
128
139
|
#
|
129
140
|
def versions_fetcher
|
130
|
-
@versions_fetcher ||= Gemirro::VersionsFetcher
|
141
|
+
@versions_fetcher ||= Gemirro::VersionsFetcher
|
142
|
+
.new(configuration.source).fetch
|
131
143
|
end
|
132
144
|
|
133
145
|
##
|
data/lib/gemirro/version.rb
CHANGED
@@ -20,18 +20,20 @@ module Gemirro
|
|
20
20
|
dir.add_directory('gem_generate_index/quick/Marshal.4.8')
|
21
21
|
::Gem.configuration.should_receive(:really_verbose).once.and_return(true)
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
indexer = Indexer.new('./')
|
24
|
+
indexer.should_receive(:say)
|
25
25
|
.once.with('Downloading index into production dir ./')
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
indexer.quick_marshal_dir = 'gem_generate_index/quick/Marshal.4.8'
|
27
|
+
indexer.dest_directory = './'
|
28
|
+
indexer.directory = 'gem_generate_index'
|
29
|
+
indexer.files = [
|
30
30
|
'gem_generate_index/quick/Marshal.4.8',
|
31
31
|
'gem_generate_index/specs.4.8.gz'
|
32
32
|
]
|
33
33
|
|
34
34
|
FileUtils.should_receive(:mkdir_p).once.with('./quick', verbose: true)
|
35
|
+
FileUtils.should_receive(:rm_rf)
|
36
|
+
.once.with('gem_generate_index/specs.4.8.gz')
|
35
37
|
FileUtils.should_receive(:rm_rf)
|
36
38
|
.once.with('./quick/Marshal.4.8', verbose: true)
|
37
39
|
FileUtils.should_receive(:mv)
|
@@ -45,11 +47,47 @@ module Gemirro
|
|
45
47
|
Http.should_receive(:get)
|
46
48
|
.with('https://rubygems.org/specs.4.8.gz').and_return(http_get)
|
47
49
|
|
48
|
-
files =
|
49
|
-
expect(files).to eq(['specs.4.8.gz'])
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
files = indexer.install_indicies
|
51
|
+
expect(files).to eq(['gem_generate_index/specs.4.8.gz'])
|
52
|
+
expect(MirrorFile.new('specs.4.8.gz').read).to eq('content')
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should exit if there is no new gems' do
|
56
|
+
dir = MirrorDirectory.new('./')
|
57
|
+
dir.add_directory('gem_generate_index/gems')
|
58
|
+
MirrorFile.new('./specs.4.8').write('')
|
59
|
+
|
60
|
+
indexer = Indexer.new('./')
|
61
|
+
indexer.should_receive(:make_temp_directories).and_return(true)
|
62
|
+
|
63
|
+
expect { indexer.update_gemspecs }.to raise_error SystemExit
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should generate gemspecs files' do
|
67
|
+
dir = MirrorDirectory.new('/')
|
68
|
+
dir.add_directory('gems')
|
69
|
+
dir.add_directory('quick')
|
70
|
+
dir.add_directory('tmp')
|
71
|
+
|
72
|
+
indexer = Indexer.new('/')
|
73
|
+
|
74
|
+
dir.add_directory("#{indexer.directory.gsub(/^\//, '')}/gems")
|
75
|
+
dir.add_directory("#{indexer.directory.gsub(/^\//, '')}/quick")
|
76
|
+
MirrorFile.new('/specs.4.8').write('')
|
77
|
+
MirrorFile.new("#{indexer.directory}/gems/gemirro-0.1.0.gem").write('')
|
78
|
+
MirrorFile.new('gems/gemirro-0.1.0.gem').write('')
|
79
|
+
MirrorFile.new("#{indexer.directory}/quick/gemirro-0.1.0.gemspec.rz")
|
80
|
+
.write('test')
|
81
|
+
|
82
|
+
indexer.should_receive(:gem_file_list)
|
83
|
+
.and_return(['gems/gemirro-0.1.0.gem'])
|
84
|
+
indexer.should_receive(:make_temp_directories).once.and_return(true)
|
85
|
+
indexer.should_receive(:build_marshal_gemspecs).once.and_return([
|
86
|
+
"#{indexer.directory}/quick/gemirro-0.1.0.gemspec.rz"])
|
87
|
+
|
88
|
+
indexer.update_gemspecs
|
89
|
+
expect(File.read('/quick/gemirro-0.1.0.gemspec.rz'))
|
90
|
+
.to eq('test')
|
53
91
|
end
|
54
92
|
end
|
55
93
|
end
|
data/template/config.rb
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
# change settings such as the location to store Gem files in and what source
|
4
4
|
# and Gems you'd like to mirror at start.
|
5
5
|
Gemirro.configuration.configure do
|
6
|
+
# Define sinatra environment
|
7
|
+
environment :production
|
8
|
+
|
6
9
|
# The directory to store indexing information as well as the Gem files in.
|
7
10
|
destination File.expand_path('../public', __FILE__)
|
8
11
|
|
@@ -11,10 +14,12 @@ Gemirro.configuration.configure do
|
|
11
14
|
logger.level = Logger::INFO
|
12
15
|
|
13
16
|
# If you want to run your server on a specific host and port, you must
|
14
|
-
# change the following
|
17
|
+
# change the following parameters (server_host and server_port).
|
15
18
|
#
|
16
|
-
#
|
17
|
-
#
|
19
|
+
# server.host 'localhost'
|
20
|
+
# server.port '2000'
|
21
|
+
server.access_log File.expand_path('../logs/access.log', __FILE__)
|
22
|
+
server.error_log File.expand_path('../logs/error.log', __FILE__)
|
18
23
|
|
19
24
|
# You must define a source wich where gems will be downloaded.
|
20
25
|
# All gem in the block will be downloaded with the update command.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemirro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Rambaud
|
@@ -14,168 +14,168 @@ dependencies:
|
|
14
14
|
name: slop
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.6'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: httpclient
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '2.4'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: confstruct
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.2'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: builder
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '3.2'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sinatra
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '1.4'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.4'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: thin
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '1.6'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - ~>
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.6'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - ~>
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '10.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - ~>
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '10.0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rack-test
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- - ~>
|
115
|
+
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0.6'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- - ~>
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0.6'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rspec
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - ~>
|
129
|
+
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '3.0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - ~>
|
136
|
+
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '3.0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: simplecov
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - ~>
|
143
|
+
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0.9'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- - ~>
|
150
|
+
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0.9'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rubocop
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- - ~>
|
157
|
+
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0.25'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- - ~>
|
164
|
+
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0.25'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: fakefs
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- - ~>
|
171
|
+
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0.5'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- - ~>
|
178
|
+
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0.5'
|
181
181
|
description: Create your own gem mirror with a simple TCPServer.
|
@@ -185,9 +185,9 @@ executables:
|
|
185
185
|
extensions: []
|
186
186
|
extra_rdoc_files: []
|
187
187
|
files:
|
188
|
-
- .gitignore
|
189
|
-
- .rubocop.yml
|
190
|
-
- .travis.yml
|
188
|
+
- ".gitignore"
|
189
|
+
- ".rubocop.yml"
|
190
|
+
- ".travis.yml"
|
191
191
|
- Gemfile
|
192
192
|
- LICENSE
|
193
193
|
- MANIFEST
|
@@ -240,17 +240,17 @@ require_paths:
|
|
240
240
|
- lib
|
241
241
|
required_ruby_version: !ruby/object:Gem::Requirement
|
242
242
|
requirements:
|
243
|
-
- - ~>
|
243
|
+
- - "~>"
|
244
244
|
- !ruby/object:Gem::Version
|
245
245
|
version: 1.9.2
|
246
246
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
247
247
|
requirements:
|
248
|
-
- -
|
248
|
+
- - ">="
|
249
249
|
- !ruby/object:Gem::Version
|
250
250
|
version: '0'
|
251
251
|
requirements: []
|
252
252
|
rubyforge_project:
|
253
|
-
rubygems_version: 2.
|
253
|
+
rubygems_version: 2.2.0.rc.1
|
254
254
|
signing_key:
|
255
255
|
specification_version: 4
|
256
256
|
summary: Gem for easily creating your own RubyGems mirror.
|