gemirro 1.5.0 → 2.0.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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +29 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +6 -3
  5. data/Gemfile.lock +126 -0
  6. data/MANIFEST +3 -10
  7. data/README.md +1 -1
  8. data/bin/gemirro +7 -1
  9. data/gemirro.gemspec +7 -2
  10. data/lib/gemirro/cli/index.rb +14 -4
  11. data/lib/gemirro/cli/init.rb +1 -1
  12. data/lib/gemirro/cli/update.rb +6 -0
  13. data/lib/gemirro/cli.rb +3 -1
  14. data/lib/gemirro/configuration.rb +4 -12
  15. data/lib/gemirro/gems_fetcher.rb +7 -10
  16. data/lib/gemirro/indexer.rb +286 -178
  17. data/lib/gemirro/mirror_file.rb +1 -0
  18. data/lib/gemirro/server.rb +56 -181
  19. data/lib/gemirro/source.rb +2 -15
  20. data/lib/gemirro/utils.rb +130 -65
  21. data/lib/gemirro/version.rb +1 -1
  22. data/lib/gemirro/versions_fetcher.rb +9 -10
  23. data/lib/gemirro/versions_file.rb +26 -24
  24. data/lib/gemirro.rb +0 -1
  25. data/spec/gemirro/configuration_spec.rb +9 -2
  26. data/spec/gemirro/gems_fetcher_spec.rb +1 -1
  27. data/spec/gemirro/indexer_spec.rb +5 -5
  28. data/spec/gemirro/server_spec.rb +79 -73
  29. data/spec/gemirro/source_spec.rb +1 -10
  30. data/spec/gemirro/versions_fetcher_spec.rb +3 -4
  31. data/spec/gemirro/versions_file_spec.rb +8 -32
  32. data/template/config.rb +7 -1
  33. data/template/public/dist/css/gemirro.css +25 -1
  34. data/views/gem.erb +46 -37
  35. data/views/index.erb +41 -33
  36. data/views/layout.erb +4 -17
  37. data/views/not_found.erb +4 -4
  38. metadata +79 -16
  39. data/lib/gemirro/cache.rb +0 -115
  40. data/spec/gemirro/cache_spec.rb +0 -32
  41. data/template/public/dist/css/bootstrap.min.css +0 -7
  42. data/template/public/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  43. data/template/public/dist/fonts/glyphicons-halflings-regular.svg +0 -288
  44. data/template/public/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  45. data/template/public/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  46. data/template/public/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  47. data/template/public/dist/js/bootstrap.min.js +0 -7
data/views/layout.erb CHANGED
@@ -2,31 +2,18 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
7
6
  <meta name="description" content="Ruby gems mirror">
8
7
  <meta name="author" content="Pierre Rambaud">
9
8
 
10
9
  <title>Gemirro - a simple ruby gems mirror</title>
11
10
 
12
- <link href="/dist/css/bootstrap.min.css" media="screen" rel="stylesheet" type="text/css" />
13
11
  <link href="/dist/css/gemirro.css" media="screen" rel="stylesheet" type="text/css" />
14
-
15
12
  </head>
16
13
  <body>
17
- <div class="container-fluid">
18
- <div class="row">
19
- <div class="col-lg-12 text-center">
20
- <h1>Gemirro</h1>
21
- </div>
22
- </div>
23
- <div class="row">
24
- <div class="col-lg-12">
25
- <%= yield %>
26
- </div>
27
- </div>
28
- </div>
29
- <script src="/dist/js/jquery-3.2.1.slim.min.js" type="text/javascript"></script>
30
- <script src="/dist/js/bootstrap.bundle.min.js" type="text/javascript"></script>
14
+ <header>
15
+ <h1>Gemirro</h1>
16
+ </header>
17
+ <%= yield %>
31
18
  </body>
32
19
  </html>
data/views/not_found.erb CHANGED
@@ -1,4 +1,4 @@
1
- <div class="center-block text-center">
2
- <h1>Page not found.</h1>
3
- <a class="btn btn-default" href="<%= url('/') %>">Back to <%= url('/') %> →</a>
4
- </div>
1
+
2
+ <h1>Page not found.</h1>
3
+
4
+ <a class="btn" href="<%= url('/') %>">Back to <%= url('/') %> →</a>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemirro
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre Rambaud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-20 00:00:00.000000000 Z
11
+ date: 2025-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: compact_index
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.15'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.15'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: confstruct
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +94,48 @@ dependencies:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: '2.8'
97
+ - !ruby/object:Gem::Dependency
98
+ name: logger
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">"
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: mutex_m
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">"
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: ostruct
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">"
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">"
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
83
139
  - !ruby/object:Gem::Dependency
84
140
  name: parallel
85
141
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +150,20 @@ dependencies:
94
150
  - - "~>"
95
151
  - !ruby/object:Gem::Version
96
152
  version: '1.21'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubygems-generate_index
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">"
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">"
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
97
167
  - !ruby/object:Gem::Dependency
98
168
  name: sinatra
99
169
  requirement: !ruby/object:Gem::Requirement
@@ -132,16 +202,16 @@ dependencies:
132
202
  name: stringio
133
203
  requirement: !ruby/object:Gem::Requirement
134
204
  requirements:
135
- - - "~>"
205
+ - - ">"
136
206
  - !ruby/object:Gem::Version
137
- version: '3.1'
207
+ version: '0'
138
208
  type: :runtime
139
209
  prerelease: false
140
210
  version_requirements: !ruby/object:Gem::Requirement
141
211
  requirements:
142
- - - "~>"
212
+ - - ">"
143
213
  - !ruby/object:Gem::Version
144
- version: '3.1'
214
+ version: '0'
145
215
  - !ruby/object:Gem::Dependency
146
216
  name: thin
147
217
  requirement: !ruby/object:Gem::Requirement
@@ -163,9 +233,11 @@ executables:
163
233
  extensions: []
164
234
  extra_rdoc_files: []
165
235
  files:
236
+ - ".github/workflows/ruby.yml"
166
237
  - ".gitignore"
167
238
  - ".rubocop.yml"
168
239
  - Gemfile
240
+ - Gemfile.lock
169
241
  - LICENSE
170
242
  - MANIFEST
171
243
  - README.md
@@ -173,7 +245,6 @@ files:
173
245
  - bin/gemirro
174
246
  - gemirro.gemspec
175
247
  - lib/gemirro.rb
176
- - lib/gemirro/cache.rb
177
248
  - lib/gemirro/cli.rb
178
249
  - lib/gemirro/cli/index.rb
179
250
  - lib/gemirro/cli/init.rb
@@ -197,7 +268,6 @@ files:
197
268
  - lib/gemirro/versions_file.rb
198
269
  - spec/fixtures/gems/gemirro-0.0.1.gem
199
270
  - spec/fixtures/quick/gemirro-0.0.1.gemspec.rz
200
- - spec/gemirro/cache_spec.rb
201
271
  - spec/gemirro/cli_spec.rb
202
272
  - spec/gemirro/configuration_spec.rb
203
273
  - spec/gemirro/gem_spec.rb
@@ -218,14 +288,7 @@ files:
218
288
  - task/rubocop.rake
219
289
  - template/config.rb
220
290
  - template/logs/.gitkeep
221
- - template/public/dist/css/bootstrap.min.css
222
291
  - template/public/dist/css/gemirro.css
223
- - template/public/dist/fonts/glyphicons-halflings-regular.eot
224
- - template/public/dist/fonts/glyphicons-halflings-regular.svg
225
- - template/public/dist/fonts/glyphicons-halflings-regular.ttf
226
- - template/public/dist/fonts/glyphicons-halflings-regular.woff
227
- - template/public/dist/fonts/glyphicons-halflings-regular.woff2
228
- - template/public/dist/js/bootstrap.min.js
229
292
  - template/public/gems/.gitkeep
230
293
  - views/gem.erb
231
294
  - views/index.erb
@@ -244,7 +307,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
244
307
  requirements:
245
308
  - - ">="
246
309
  - !ruby/object:Gem::Version
247
- version: '2.5'
310
+ version: '3.0'
248
311
  required_rubygems_version: !ruby/object:Gem::Requirement
249
312
  requirements:
250
313
  - - ">="
data/lib/gemirro/cache.rb DELETED
@@ -1,115 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Gemirro
4
- ##
5
- # The Cache class contains all method to store marshal informations
6
- # into files.
7
- #
8
- # @!attribute [r] root_path
9
- # @return [String]
10
- #
11
- class Cache
12
- attr_reader :root_path
13
-
14
- ##
15
- # Initialize cache root path
16
- #
17
- # @param [String] path
18
- #
19
- def initialize(path)
20
- @root_path = path
21
- create_root_path
22
- end
23
-
24
- ##
25
- # Create root path
26
- #
27
- def create_root_path
28
- FileUtils.mkdir_p(@root_path)
29
- end
30
-
31
- ##
32
- # Flush cache directory
33
- #
34
- def flush
35
- FileUtils.rm_rf(@root_path)
36
- create_root_path
37
- end
38
-
39
- ##
40
- # Flush key
41
- #
42
- # @param [String] key
43
- #
44
- def flush_key(key)
45
- path = key_path(key2hash(key))
46
- FileUtils.rm_f(path)
47
- end
48
-
49
- ##
50
- # Cache data
51
- #
52
- # @param [String] key
53
- #
54
- # @return [Mixed]
55
- #
56
- def cache(key)
57
- key_hash = key2hash(key)
58
- read(key_hash) || (write(key_hash, yield) if block_given?)
59
- end
60
-
61
- private
62
-
63
- ##
64
- # Convert key to hash
65
- #
66
- # @param [String] key
67
- #
68
- # @return [String]
69
- #
70
- def key2hash(key)
71
- Digest::MD5.hexdigest(key)
72
- end
73
-
74
- ##
75
- # Path from key hash
76
- #
77
- # @param [String] key_hash
78
- #
79
- # @return [String]
80
- #
81
- def key_path(key_hash)
82
- File.join(@root_path, key_hash)
83
- end
84
-
85
- ##
86
- # Read cache
87
- #
88
- # @param [String] key_hash
89
- #
90
- # @return [Mixed]
91
- #
92
- def read(key_hash)
93
- path = key_path(key_hash)
94
- Marshal.load(File.open(path)) if File.exist?(path)
95
- end
96
-
97
- ##
98
- # write cache
99
- #
100
- # @param [String] key_hash
101
- # @param [Mixed] value
102
- #
103
- # @return [Mixed]
104
- #
105
- def write(key_hash, value)
106
- return value if value.nil? || value.empty?
107
-
108
- File.open(key_path(key_hash), 'wb') do |f|
109
- Marshal.dump(value, f)
110
- end
111
-
112
- value
113
- end
114
- end
115
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
- require 'gemirro/mirror_directory'
3
- require 'gemirro/cache'
4
-
5
- # Gem tests
6
- module Gemirro
7
- describe 'Cache' do
8
- include FakeFS::SpecHelpers
9
- before(:each) do
10
- MirrorDirectory.new('/tmp')
11
- @cache = Cache.new('/tmp')
12
- end
13
-
14
- it 'should play with flush key' do
15
- @cache.cache('foo') do
16
- 'something'
17
- end
18
- expect(@cache.cache('foo')).to eq('something')
19
- @cache.flush_key('foo')
20
- expect(@cache.cache('foo')).to be_nil
21
- end
22
-
23
- it 'should play with flush' do
24
- @cache.cache('foo') do
25
- 'something'
26
- end
27
- expect(@cache.cache('foo')).to eq('something')
28
- @cache.flush
29
- expect(@cache.cache('foo')).to be_nil
30
- end
31
- end
32
- end