gemirro 1.4.0 → 1.6.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +29 -0
  3. data/.rubocop.yml +6 -3
  4. data/Gemfile +9 -0
  5. data/Gemfile.lock +126 -0
  6. data/MANIFEST +6 -10
  7. data/README.md +1 -1
  8. data/bin/gemirro +7 -1
  9. data/gemirro.gemspec +9 -9
  10. data/lib/gemirro/cli/index.rb +12 -3
  11. data/lib/gemirro/cli/init.rb +6 -1
  12. data/lib/gemirro/cli/server.rb +2 -4
  13. data/lib/gemirro/cli/update.rb +6 -0
  14. data/lib/gemirro/configuration.rb +1 -1
  15. data/lib/gemirro/gems_fetcher.rb +5 -10
  16. data/lib/gemirro/http.rb +6 -6
  17. data/lib/gemirro/indexer.rb +397 -90
  18. data/lib/gemirro/mirror_file.rb +1 -0
  19. data/lib/gemirro/server.rb +73 -160
  20. data/lib/gemirro/source.rb +2 -2
  21. data/lib/gemirro/utils.rb +123 -68
  22. data/lib/gemirro/version.rb +1 -1
  23. data/lib/gemirro/versions_fetcher.rb +6 -2
  24. data/lib/gemirro.rb +1 -1
  25. data/spec/gemirro/http_spec.rb +83 -24
  26. data/spec/gemirro/indexer_spec.rb +3 -0
  27. data/spec/gemirro/server_spec.rb +76 -47
  28. data/template/config.rb +6 -0
  29. data/template/public/dist/css/gemirro.css +25 -1
  30. data/template/public/latest_specs.4.8 +0 -0
  31. data/template/public/prerelease_specs.4.8 +0 -0
  32. data/template/public/specs.4.8 +0 -0
  33. data/views/gem.erb +46 -37
  34. data/views/index.erb +41 -33
  35. data/views/layout.erb +5 -25
  36. data/views/not_found.erb +4 -4
  37. metadata +72 -89
  38. data/lib/gemirro/cache.rb +0 -115
  39. data/spec/gemirro/cache_spec.rb +0 -32
  40. data/template/public/dist/css/bootstrap.min.css +0 -7
  41. data/template/public/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  42. data/template/public/dist/fonts/glyphicons-halflings-regular.svg +0 -288
  43. data/template/public/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  44. data/template/public/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  45. data/template/public/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  46. data/template/public/dist/js/bootstrap.min.js +0 -7
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.4.0
4
+ version: 1.6.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: 2024-10-10 00:00:00.000000000 Z
11
+ date: 2025-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -39,207 +39,193 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: confstruct
42
+ name: compact_index
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.1'
47
+ version: '0.15'
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
- version: '1.1'
54
+ version: '0.15'
55
55
  - !ruby/object:Gem::Dependency
56
- name: erubis
56
+ name: confstruct
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.7'
61
+ version: '1.1'
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
- version: '2.7'
68
+ version: '1.1'
69
69
  - !ruby/object:Gem::Dependency
70
- name: httpclient
70
+ name: erubis
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.8'
75
+ version: '2.7'
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
- version: '2.8'
82
+ version: '2.7'
83
83
  - !ruby/object:Gem::Dependency
84
- name: parallel
84
+ name: httpclient
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.21'
89
+ version: '2.8'
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
- version: '1.21'
96
+ version: '2.8'
97
97
  - !ruby/object:Gem::Dependency
98
- name: sinatra
98
+ name: logger
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '2.1'
104
- - - "<"
101
+ - - ">"
105
102
  - !ruby/object:Gem::Version
106
- version: '4.0'
103
+ version: '0'
107
104
  type: :runtime
108
105
  prerelease: false
109
106
  version_requirements: !ruby/object:Gem::Requirement
110
107
  requirements:
111
- - - ">="
108
+ - - ">"
112
109
  - !ruby/object:Gem::Version
113
- version: '2.1'
114
- - - "<"
115
- - !ruby/object:Gem::Version
116
- version: '4.0'
110
+ version: '0'
117
111
  - !ruby/object:Gem::Dependency
118
- name: sinatra-static-assets
112
+ name: mutex_m
119
113
  requirement: !ruby/object:Gem::Requirement
120
114
  requirements:
121
- - - "~>"
115
+ - - ">"
122
116
  - !ruby/object:Gem::Version
123
- version: '1.0'
117
+ version: '0'
124
118
  type: :runtime
125
119
  prerelease: false
126
120
  version_requirements: !ruby/object:Gem::Requirement
127
121
  requirements:
128
- - - "~>"
122
+ - - ">"
129
123
  - !ruby/object:Gem::Version
130
- version: '1.0'
124
+ version: '0'
131
125
  - !ruby/object:Gem::Dependency
132
- name: slop
126
+ name: ostruct
133
127
  requirement: !ruby/object:Gem::Requirement
134
128
  requirements:
135
- - - "~>"
129
+ - - ">"
136
130
  - !ruby/object:Gem::Version
137
- version: '3.6'
131
+ version: '0'
138
132
  type: :runtime
139
133
  prerelease: false
140
134
  version_requirements: !ruby/object:Gem::Requirement
141
135
  requirements:
142
- - - "~>"
136
+ - - ">"
143
137
  - !ruby/object:Gem::Version
144
- version: '3.6'
138
+ version: '0'
145
139
  - !ruby/object:Gem::Dependency
146
- name: thin
140
+ name: parallel
147
141
  requirement: !ruby/object:Gem::Requirement
148
142
  requirements:
149
143
  - - "~>"
150
144
  - !ruby/object:Gem::Version
151
- version: '1.8'
145
+ version: '1.21'
152
146
  type: :runtime
153
147
  prerelease: false
154
148
  version_requirements: !ruby/object:Gem::Requirement
155
149
  requirements:
156
150
  - - "~>"
157
151
  - !ruby/object:Gem::Version
158
- version: '1.8'
152
+ version: '1.21'
159
153
  - !ruby/object:Gem::Dependency
160
- name: fakefs
154
+ name: rubygems-generate_index
161
155
  requirement: !ruby/object:Gem::Requirement
162
156
  requirements:
163
- - - "~>"
157
+ - - ">"
164
158
  - !ruby/object:Gem::Version
165
- version: '1'
166
- type: :development
159
+ version: '0'
160
+ type: :runtime
167
161
  prerelease: false
168
162
  version_requirements: !ruby/object:Gem::Requirement
169
163
  requirements:
170
- - - "~>"
164
+ - - ">"
171
165
  - !ruby/object:Gem::Version
172
- version: '1'
166
+ version: '0'
173
167
  - !ruby/object:Gem::Dependency
174
- name: rack-test
168
+ name: sinatra
175
169
  requirement: !ruby/object:Gem::Requirement
176
170
  requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '1.1'
180
- type: :development
181
- prerelease: false
182
- version_requirements: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
171
+ - - ">="
185
172
  - !ruby/object:Gem::Version
186
- version: '1.1'
187
- - !ruby/object:Gem::Dependency
188
- name: rake
189
- requirement: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
173
+ version: '3.1'
174
+ - - "<"
192
175
  - !ruby/object:Gem::Version
193
- version: '13'
194
- type: :development
176
+ version: '4.0'
177
+ type: :runtime
195
178
  prerelease: false
196
179
  version_requirements: !ruby/object:Gem::Requirement
197
180
  requirements:
198
- - - "~>"
181
+ - - ">="
199
182
  - !ruby/object:Gem::Version
200
- version: '13'
183
+ version: '3.1'
184
+ - - "<"
185
+ - !ruby/object:Gem::Version
186
+ version: '4.0'
201
187
  - !ruby/object:Gem::Dependency
202
- name: rspec
188
+ name: slop
203
189
  requirement: !ruby/object:Gem::Requirement
204
190
  requirements:
205
191
  - - "~>"
206
192
  - !ruby/object:Gem::Version
207
- version: '3.10'
208
- type: :development
193
+ version: '3.6'
194
+ type: :runtime
209
195
  prerelease: false
210
196
  version_requirements: !ruby/object:Gem::Requirement
211
197
  requirements:
212
198
  - - "~>"
213
199
  - !ruby/object:Gem::Version
214
- version: '3.10'
200
+ version: '3.6'
215
201
  - !ruby/object:Gem::Dependency
216
- name: rubocop
202
+ name: stringio
217
203
  requirement: !ruby/object:Gem::Requirement
218
204
  requirements:
219
- - - "~>"
205
+ - - ">"
220
206
  - !ruby/object:Gem::Version
221
- version: '1'
222
- type: :development
207
+ version: '0'
208
+ type: :runtime
223
209
  prerelease: false
224
210
  version_requirements: !ruby/object:Gem::Requirement
225
211
  requirements:
226
- - - "~>"
212
+ - - ">"
227
213
  - !ruby/object:Gem::Version
228
- version: '1'
214
+ version: '0'
229
215
  - !ruby/object:Gem::Dependency
230
- name: simplecov
216
+ name: thin
231
217
  requirement: !ruby/object:Gem::Requirement
232
218
  requirements:
233
219
  - - "~>"
234
220
  - !ruby/object:Gem::Version
235
- version: '0.21'
236
- type: :development
221
+ version: '1.8'
222
+ type: :runtime
237
223
  prerelease: false
238
224
  version_requirements: !ruby/object:Gem::Requirement
239
225
  requirements:
240
226
  - - "~>"
241
227
  - !ruby/object:Gem::Version
242
- version: '0.21'
228
+ version: '1.8'
243
229
  description: Create your own gems mirror.
244
230
  email: pierre.rambaud86@gmail.com
245
231
  executables:
@@ -247,9 +233,11 @@ executables:
247
233
  extensions: []
248
234
  extra_rdoc_files: []
249
235
  files:
236
+ - ".github/workflows/ruby.yml"
250
237
  - ".gitignore"
251
238
  - ".rubocop.yml"
252
239
  - Gemfile
240
+ - Gemfile.lock
253
241
  - LICENSE
254
242
  - MANIFEST
255
243
  - README.md
@@ -257,7 +245,6 @@ files:
257
245
  - bin/gemirro
258
246
  - gemirro.gemspec
259
247
  - lib/gemirro.rb
260
- - lib/gemirro/cache.rb
261
248
  - lib/gemirro/cli.rb
262
249
  - lib/gemirro/cli/index.rb
263
250
  - lib/gemirro/cli/init.rb
@@ -281,7 +268,6 @@ files:
281
268
  - lib/gemirro/versions_file.rb
282
269
  - spec/fixtures/gems/gemirro-0.0.1.gem
283
270
  - spec/fixtures/quick/gemirro-0.0.1.gemspec.rz
284
- - spec/gemirro/cache_spec.rb
285
271
  - spec/gemirro/cli_spec.rb
286
272
  - spec/gemirro/configuration_spec.rb
287
273
  - spec/gemirro/gem_spec.rb
@@ -302,15 +288,11 @@ files:
302
288
  - task/rubocop.rake
303
289
  - template/config.rb
304
290
  - template/logs/.gitkeep
305
- - template/public/dist/css/bootstrap.min.css
306
291
  - template/public/dist/css/gemirro.css
307
- - template/public/dist/fonts/glyphicons-halflings-regular.eot
308
- - template/public/dist/fonts/glyphicons-halflings-regular.svg
309
- - template/public/dist/fonts/glyphicons-halflings-regular.ttf
310
- - template/public/dist/fonts/glyphicons-halflings-regular.woff
311
- - template/public/dist/fonts/glyphicons-halflings-regular.woff2
312
- - template/public/dist/js/bootstrap.min.js
313
292
  - template/public/gems/.gitkeep
293
+ - template/public/latest_specs.4.8
294
+ - template/public/prerelease_specs.4.8
295
+ - template/public/specs.4.8
314
296
  - views/gem.erb
315
297
  - views/index.erb
316
298
  - views/layout.erb
@@ -318,7 +300,8 @@ files:
318
300
  homepage: https://github.com/PierreRambaud/gemirro
319
301
  licenses:
320
302
  - GPL-3.0
321
- metadata: {}
303
+ metadata:
304
+ rubygems_mfa_required: 'true'
322
305
  post_install_message:
323
306
  rdoc_options: []
324
307
  require_paths:
@@ -327,14 +310,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
327
310
  requirements:
328
311
  - - ">="
329
312
  - !ruby/object:Gem::Version
330
- version: '2.5'
313
+ version: '3.0'
331
314
  required_rubygems_version: !ruby/object:Gem::Requirement
332
315
  requirements:
333
316
  - - ">="
334
317
  - !ruby/object:Gem::Version
335
318
  version: '0'
336
319
  requirements: []
337
- rubygems_version: 3.3.7
320
+ rubygems_version: 3.4.19
338
321
  signing_key:
339
322
  specification_version: 4
340
323
  summary: Gem for easily creating your own gems mirror.
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