gemirro 1.2.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 743376753a6202cadfe4fb780411c3b1a5c13b551aed1025abca32ec98bb8d0d
4
- data.tar.gz: 9b251517b641c81a708c1d66e15c300d2e159d8024512107de2366418f638927
3
+ metadata.gz: 56fa41eef2a76a964a6d885f5c78ea8e6193c2442ae9dc7b3db6cae10c934ea9
4
+ data.tar.gz: '08152e167296fd41283619abf268f08279b950ff3d683f500f3cdce5fe49ae5e'
5
5
  SHA512:
6
- metadata.gz: 2d2bf4a45e5d4128ddfe0fe392bf326d8f35afbdb98ddbdca27edd3be53ff8841e51e6e96b7bc95a99b1a44a259a535453b2d6b28a6583a6d4cf6f46d2226bf1
7
- data.tar.gz: 6a3eebf032d60e1eaf61b55fba14c0988d85e27b80d4a90ea69cbeb50c6e7a81cb73d648bd61144e46be42600af01e5c9ae30ef350a41674c8f1a92374ee1c30
6
+ metadata.gz: 0ab54b560eb64207ce1074ac87c02a71569ecf626069a59ae4aa3bfb8dbc5e504c57712e57e216a9c0d27347fca1c54db3037846fefe90ad1ad70de35423b257
7
+ data.tar.gz: da5e332d738e42ca80ed7946a2bb598b213ce50d54df704f672d3717d010b07bfa5dc3e07d7b3290cc95557f657635a7de46ab9372c6a981b3b19f233c3f2acf
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.2
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.5
3
4
  Include:
4
5
  - '**/Gemfile'
5
6
  - lib/**/*.rb
@@ -14,13 +15,9 @@ AllCops:
14
15
  Naming/FileName:
15
16
  Exclude:
16
17
  - Rakefile
17
- ModuleLength:
18
+ Layout/MethodLength:
18
19
  Enabled: false
19
- MethodLength:
20
- Enabled: false
21
- ClassLength:
22
- Enabled: false
23
- ParameterLists:
20
+ Layout/ClassLength:
24
21
  Enabled: false
25
22
  Metrics/CyclomaticComplexity:
26
23
  Enabled: false
@@ -34,3 +31,7 @@ Security/MarshalLoad:
34
31
  Enabled: false
35
32
  Style/ExpandPathArguments:
36
33
  Enabled: false
34
+ Style/OptionalBooleanParameter:
35
+ Enabled: false
36
+ Lint/MissingSuper:
37
+ Enabled: false
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org/'
2
4
 
3
5
  gemspec
data/MANIFEST CHANGED
@@ -1,6 +1,5 @@
1
1
  .gitignore
2
2
  .rubocop.yml
3
- .travis.yml
4
3
  Gemfile
5
4
  LICENSE
6
5
  MANIFEST
@@ -62,9 +61,8 @@ template/public/dist/fonts/glyphicons-halflings-regular.ttf
62
61
  template/public/dist/fonts/glyphicons-halflings-regular.woff
63
62
  template/public/dist/fonts/glyphicons-halflings-regular.woff2
64
63
  template/public/dist/js/bootstrap.min.js
65
- template/public/dist/js/jquery.min.js
66
64
  template/public/gems/.gitkeep
67
65
  views/gem.erb
68
66
  views/index.erb
69
67
  views/layout.erb
70
- views/not_found.erb
68
+ views/not_found.erb
data/README.md CHANGED
@@ -29,7 +29,7 @@ This is done by running the `gemirro init` command.
29
29
  $ gemirro init /srv/http/mirror.com/
30
30
  ```
31
31
 
32
- Once created you can edit the main configuration file called `config.rb`.
32
+ Once created you can edit the main configuration file called [config.rb](https://github.com/PierreRambaud/gemirro/blob/master/template/config.rb).
33
33
  This configuration file specifies what source to mirror, destination directory, server host and port, etc.
34
34
 
35
35
  Once configured and if you add gem in the `define_source`, you can pull them by running the following command:
data/bin/gemirro CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require File.expand_path('../../lib/gemirro', __FILE__)
4
5
 
data/gemirro.gemspec CHANGED
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'date'
2
4
  require File.expand_path('../lib/gemirro/version', __FILE__)
3
5
 
4
6
  Gem::Specification.new do |s|
5
7
  s.name = 'gemirro'
6
8
  s.version = Gemirro::VERSION
7
- s.date = Date.today.to_s
8
9
  s.authors = ['Pierre Rambaud']
9
10
  s.email = 'pierre.rambaud86@gmail.com'
10
11
  s.license = 'GPL-3.0'
@@ -15,22 +16,23 @@ Gem::Specification.new do |s|
15
16
 
16
17
  s.files = File.read(File.expand_path('../MANIFEST', __FILE__)).split("\n")
17
18
 
18
- s.required_ruby_version = '>= 2.2'
19
+ s.required_ruby_version = '>= 2.5'
19
20
 
20
- s.add_dependency 'addressable', '~>2.5'
21
+ s.add_dependency 'addressable', '~>2.8'
21
22
  s.add_dependency 'builder', '~>3.2'
22
- s.add_dependency 'confstruct', '~>1.0'
23
+ s.add_dependency 'confstruct', '~>1.1'
23
24
  s.add_dependency 'erubis', '~>2.7'
24
25
  s.add_dependency 'httpclient', '~>2.8'
25
- s.add_dependency 'parallel', '~>1.12'
26
- s.add_dependency 'sinatra', '~>2.0.1'
26
+ s.add_dependency 'parallel', '~>1.21'
27
+ s.add_dependency 'sinatra', '>=2.1', '<4.0'
28
+ s.add_dependency 'sinatra-static-assets', '~>1.0'
27
29
  s.add_dependency 'slop', '~>3.6'
28
- s.add_dependency 'thin', '~>1.7'
30
+ s.add_dependency 'thin', '~>1.8'
29
31
 
30
- s.add_development_dependency 'fakefs', '~>0.11'
31
- s.add_development_dependency 'rack-test', '~>0.7'
32
- s.add_development_dependency 'rake', '~>12.1'
33
- s.add_development_dependency 'rspec', '~>3.7'
34
- s.add_development_dependency 'rubocop', '~>0.51'
35
- s.add_development_dependency 'simplecov', '~>0.15'
32
+ s.add_development_dependency 'fakefs', '~>1'
33
+ s.add_development_dependency 'rack-test', '~>1.1'
34
+ s.add_development_dependency 'rake', '~>13'
35
+ s.add_development_dependency 'rspec', '~>3.10'
36
+ s.add_development_dependency 'rubocop', '~>1'
37
+ s.add_development_dependency 'simplecov', '~>0.21'
36
38
  end
data/lib/gemirro/cache.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The Cache class contains all method to store marshal informations
@@ -102,6 +104,7 @@ module Gemirro
102
104
  #
103
105
  def write(key_hash, value)
104
106
  return value if value.nil? || value.empty?
107
+
105
108
  File.open(key_path(key_hash), 'wb') do |f|
106
109
  Marshal.dump(value, f)
107
110
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gemirro::CLI.options.command 'index' do
2
4
  banner 'Usage: gemirro index [OPTIONS]'
3
5
  description 'Retrieve specs list from source.'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gemirro::CLI.options.command 'init' do
2
4
  banner 'Usage: gemirro init [DIRECTORY] [OPTIONS]'
3
5
  description 'Sets up a new mirror'
@@ -16,8 +18,10 @@ Gemirro::CLI.options.command 'init' do
16
18
  else
17
19
  Dir.glob("#{template}/**/*", File::FNM_DOTMATCH).each do |file|
18
20
  next if ['.', '..'].include?(File.basename(file))
21
+
19
22
  dest = File.join(directory, file.gsub(/^#{template}/, ''))
20
23
  next if File.exist?(dest)
24
+
21
25
  FileUtils.cp_r(file, dest)
22
26
  end
23
27
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gemirro::CLI.options.command 'list' do
2
4
  banner 'Usage: gemirro list [OPTIONS]'
3
5
  description 'List available gems.'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gemirro::CLI.options.command 'server' do
2
4
  banner 'Usage: gemirro server [OPTIONS]'
3
5
  description 'Manage web server'
@@ -36,7 +38,7 @@ Gemirro::CLI.options.command 'server' do
36
38
  end
37
39
 
38
40
  # Copy stdout because we'll need to reopen it later on
39
- @orig_stdout = STDOUT.clone
41
+ @orig_stdout = $stdout.clone
40
42
  $PROGRAM_NAME = 'gemirro'
41
43
 
42
44
  def create_pid
@@ -44,7 +46,7 @@ Gemirro::CLI.options.command 'server' do
44
46
  f.write(Process.pid.to_s)
45
47
  end
46
48
  rescue Errno::EACCES
47
- STDOUT.reopen @orig_stdout
49
+ $stdout.reopen @orig_stdout
48
50
  puts "Error: Can't write to #{@pid_file} - Permission denied"
49
51
  exit!
50
52
  end
@@ -63,20 +65,18 @@ Gemirro::CLI.options.command 'server' do
63
65
 
64
66
  def start
65
67
  puts 'Starting...'
66
- if File.exist?(@pid_file)
67
- if running?(pid)
68
- puts "Error: #{$PROGRAM_NAME} already running"
69
- abort
70
- end
68
+ if File.exist?(@pid_file) && running?(pid)
69
+ puts "Error: #{$PROGRAM_NAME} already running"
70
+ abort
71
71
  end
72
72
 
73
73
  Process.daemon if Gemirro::Utils.configuration.server.daemonize
74
74
  create_pid
75
- STDOUT.reopen @orig_stdout
75
+ $stdout.reopen @orig_stdout
76
76
  puts "done! (PID is #{pid})\n"
77
77
  Gemirro::Server.run!
78
78
  destroy_pid
79
- STDOUT.reopen '/dev/null', 'a'
79
+ $stdout.reopen '/dev/null', 'a'
80
80
  end
81
81
 
82
82
  def stop
@@ -113,6 +113,7 @@ Gemirro::CLI.options.command 'server' do
113
113
 
114
114
  def running?(process_id)
115
115
  return false if process_id.nil?
116
+
116
117
  Process.getpgid(process_id.to_i) != -1
117
118
  rescue Errno::ESRCH
118
119
  false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gemirro::CLI.options.command 'update' do
2
4
  banner 'Usage: gemirro update [OPTIONS]'
3
5
  description 'Updates the list of Gems'
data/lib/gemirro/cli.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  # CLI mode
3
5
  module CLI
@@ -32,9 +34,7 @@ module Gemirro
32
34
  config_file += '/config.rb' unless config_file.end_with?('.rb') ||
33
35
  !File.directory?(config_file)
34
36
 
35
- unless File.file?(config_file)
36
- abort "The configuration file #{config_file} does not exist"
37
- end
37
+ abort "The configuration file #{config_file} does not exist" unless File.file?(config_file)
38
38
 
39
39
  require(config_file)
40
40
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Configuration
2
4
  module Gemirro
3
5
  ##
@@ -40,7 +42,7 @@ module Gemirro
40
42
  # @return [Logger]
41
43
  #
42
44
  def logger
43
- @logger ||= Logger.new(STDOUT)
45
+ @logger ||= Logger.new($stdout)
44
46
  end
45
47
 
46
48
  ##
data/lib/gemirro/gem.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The Gem class contains data about a Gem such as the name, requirement as
@@ -14,6 +16,7 @@ module Gemirro
14
16
  class Gem
15
17
  attr_reader :name, :requirement
16
18
  attr_accessor :gemspec, :platform
19
+
17
20
  ONLY_LATEST = %i[latest newest].freeze
18
21
 
19
22
  ##
@@ -33,9 +36,7 @@ module Gemirro
33
36
  def initialize(name, requirement = nil, platform = 'ruby')
34
37
  requirement ||= ::Gem::Requirement.default
35
38
 
36
- if requirement.is_a?(String)
37
- requirement = ::Gem::Requirement.new(requirement)
38
- end
39
+ requirement = ::Gem::Requirement.new(requirement) if requirement.is_a?(String)
39
40
 
40
41
  @name = name
41
42
  @requirement = requirement
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The Gem class contains data about a Gem such as the name, requirement as
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The VersionCollection class contains a collection of ::Gem::Version
@@ -10,8 +12,7 @@ module Gemirro
10
12
  class GemVersionCollection
11
13
  include Enumerable
12
14
 
13
- attr_reader :gems
14
- attr_reader :grouped
15
+ attr_reader :gems, :grouped
15
16
 
16
17
  ##
17
18
  # @param [Array] gems
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The GemsFetcher class is responsible for downloading Gems from an external
data/lib/gemirro/http.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The Http class is responsible for executing GET request
@@ -18,9 +20,7 @@ module Gemirro
18
20
  def self.get(url)
19
21
  response = client.get(url, follow_redirect: true)
20
22
 
21
- unless HTTP::Status.successful?(response.status)
22
- raise HTTPClient::BadResponseError, response.reason
23
- end
23
+ raise HTTPClient::BadResponseError, response.reason unless HTTP::Status.successful?(response.status)
24
24
 
25
25
  response
26
26
  end
@@ -29,7 +29,34 @@ module Gemirro
29
29
  # @return [HTTPClient]
30
30
  #
31
31
  def self.client
32
- @client ||= HTTPClient.new
32
+ client ||= HTTPClient.new
33
+ config = Utils.configuration
34
+ if defined?(config.upstream_user)
35
+ user = config.upstream_user
36
+ password = config.upstream_password
37
+ domain = config.upstream_domain
38
+ client.set_auth(domain, user, password)
39
+ end
40
+
41
+ if defined?(config.proxy)
42
+ proxy = config.proxy
43
+ client.proxy=(proxy)
44
+ end
45
+
46
+ # Use my own ca file for self signed cert
47
+ if defined?(config.rootca)
48
+ abort "The configuration file #{config.rootca} does not exist" unless File.file?(config.rootca)
49
+ client.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_PEER
50
+ client.ssl_config.set_trust_ca(config.rootca)
51
+ elsif defined?(config.verify_mode)
52
+ client.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE unless config.verify_mode
53
+ end
54
+
55
+ # Enforce base auth
56
+ if defined?(config.basic_auth)
57
+ client.force_basic_auth=(true) if config.basic_auth
58
+ end
59
+ @client = client
33
60
  end
34
61
  end
35
62
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The Indexer class is responsible for downloading useful file directly
@@ -38,8 +40,8 @@ module Gemirro
38
40
 
39
41
  unless defined?(Builder::XChar)
40
42
  raise 'Gem::Indexer requires that the XML Builder ' \
41
- 'library be installed:' \
42
- "\n\tgem install builder"
43
+ 'library be installed:' \
44
+ "\n\tgem install builder"
43
45
  end
44
46
 
45
47
  options = { build_modern: true }.merge options
@@ -118,6 +120,7 @@ module Gemirro
118
120
  else
119
121
  source_content = download_from_source(file)
120
122
  next if source_content.nil?
123
+
121
124
  MirrorFile.new(dst_name).write(source_content)
122
125
  end
123
126
 
@@ -136,6 +139,7 @@ module Gemirro
136
139
  Utils.logger.info("Download from source: #{file}")
137
140
  resp = Http.get("#{source_host}/#{File.basename(file)}")
138
141
  return unless resp.code == 200
142
+
139
143
  resp.body
140
144
  end
141
145
 
@@ -155,7 +159,7 @@ module Gemirro
155
159
  #
156
160
  def build_indicies
157
161
  specs = *map_gems_to_specs(gem_file_list)
158
- specs.select! { |s| s.class == ::Gem::Specification }
162
+ specs.select! { |s| s.instance_of?(::Gem::Specification) }
159
163
  ::Gem::Specification.dirs = []
160
164
  ::Gem::Specification.all = specs
161
165
 
@@ -178,22 +182,23 @@ module Gemirro
178
182
  #
179
183
  def map_gems_to_specs(gems)
180
184
  gems.map.with_index do |gemfile, index|
181
- # rubocop:disable Metrics/LineLength
182
185
  Utils.logger.info("[#{index + 1}/#{gems.size}]: Processing #{gemfile.split('/')[-1]}")
183
- # rubocop:enable Metrics/LineLength
184
-
185
186
  if File.size(gemfile).zero?
186
187
  Utils.logger.warn("Skipping zero-length gem: #{gemfile}")
187
188
  next
188
189
  end
189
190
 
190
191
  begin
191
- spec = if ::Gem::Package.respond_to? :open
192
- ::Gem::Package
193
- .open(File.open(gemfile, 'rb'), 'r', &:metadata)
194
- else
195
- ::Gem::Package.new(gemfile).spec
196
- end
192
+ begin
193
+ spec = if ::Gem::Package.respond_to? :open
194
+ ::Gem::Package
195
+ .open(File.open(gemfile, 'rb'), 'r', &:metadata)
196
+ else
197
+ ::Gem::Package.new(gemfile).spec
198
+ end
199
+ rescue NotImplementedError
200
+ next
201
+ end
197
202
 
198
203
  spec.loaded_from = gemfile
199
204
 
@@ -325,6 +330,7 @@ module Gemirro
325
330
  end
326
331
 
327
332
  return false if source_content.nil?
333
+
328
334
  new_content = source_content.concat(content).uniq
329
335
  create_zlib_file(dst_name, new_content)
330
336
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The MirrorDirectory is used for dealing with files and directories that are
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # Similar to {Gemirro::MirrorDirectory} the MirrorFile class is used to
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sinatra/base'
4
+ require 'sinatra/static_assets'
2
5
  require 'thin'
3
6
  require 'uri'
4
7
  require 'addressable/uri'
@@ -8,16 +11,18 @@ module Gemirro
8
11
  # Launch Sinatra server to easily download gems.
9
12
  #
10
13
  class Server < Sinatra::Base
11
- # rubocop:disable Metrics/LineLength
12
- URI_REGEXP = /^(.*)-(\d+(?:\.\d+){1,4}.*?)(?:-(x86-(?:(?:mswin|mingw)(?:32|64)).*?|java))?\.(gem(?:spec\.rz)?)$/
13
- GEMSPEC_TYPE = 'gemspec.rz'.freeze
14
- GEM_TYPE = 'gem'.freeze
14
+ register Sinatra::StaticAssets
15
+
16
+ # rubocop:disable Layout/LineLength
17
+ URI_REGEXP = /^(.*)-(\d+(?:\.\d+){1,4}.*?)(?:-(x86-(?:(?:mswin|mingw)(?:32|64)).*?|java))?\.(gem(?:spec\.rz)?)$/.freeze
18
+ # rubocop:enable Layout/LineLength
19
+ GEMSPEC_TYPE = 'gemspec.rz'
20
+ GEM_TYPE = 'gem'
15
21
 
16
22
  access_logger = Logger.new(Utils.configuration.server.access_log).tap do |logger|
17
- ::Logger.class_eval { alias_method :write, :'<<' }
23
+ ::Logger.class_eval { alias_method :write, :<< }
18
24
  logger.level = ::Logger::INFO
19
25
  end
20
- # rubocop:enable Metrics/LineLength
21
26
 
22
27
  error_logger = File.new(Utils.configuration.server.error_log, 'a+')
23
28
  error_logger.sync = true
@@ -128,6 +133,7 @@ module Gemirro
128
133
  #
129
134
  def fetch_gem(resource)
130
135
  return unless Utils.configuration.fetch_gem
136
+
131
137
  name = File.basename(resource)
132
138
  result = name.match(URI_REGEXP)
133
139
  return unless result
@@ -139,10 +145,8 @@ module Gemirro
139
145
  gem = Utils.stored_gem(gem_name, gem_version, gem_platform)
140
146
  gem.gemspec = true if gem_type == GEMSPEC_TYPE
141
147
 
142
- # rubocop:disable Metrics/LineLength
143
148
  return if Utils.gems_fetcher.gem_exists?(gem.filename(gem_version)) && gem_type == GEM_TYPE
144
149
  return if Utils.gems_fetcher.gemspec_exists?(gem.gemspec_filename(gem_version)) && gem_type == GEMSPEC_TYPE
145
- # rubocop:enable Metrics/LineLength
146
150
 
147
151
  Utils.logger
148
152
  .info("Try to download #{gem_name} with version #{gem_version}")
@@ -216,9 +220,7 @@ module Gemirro
216
220
  gem_collection = Parallel.map(gem_collection, in_threads: 4) do |gem|
217
221
  [gem, spec_for(gem.name, gem.number, gem.platform)]
218
222
  end
219
- gem_collection.reject! do |_, spec|
220
- spec.nil?
221
- end
223
+ gem_collection.compact!
222
224
 
223
225
  Parallel.map(gem_collection, in_threads: 4) do |gem, spec|
224
226
  dependencies = spec.dependencies.select do |d|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The Source class is used for storing information about an external source
@@ -34,7 +36,7 @@ module Gemirro
34
36
  "Fetching #{Configuration.versions_file} on #{@name} (#{@host})"
35
37
  )
36
38
 
37
- Http.get(host + '/' + Configuration.versions_file).body
39
+ Http.get("#{host}/#{Configuration.versions_file}").body
38
40
  end
39
41
 
40
42
  ##
@@ -47,7 +49,7 @@ module Gemirro
47
49
  "Fetching #{Configuration.prerelease_versions_file}" \
48
50
  " on #{@name} (#{@host})"
49
51
  )
50
- Http.get(host + '/' + Configuration.prerelease_versions_file).body
52
+ Http.get("#{host}/#{Configuration.prerelease_versions_file}").body
51
53
  end
52
54
 
53
55
  ##
data/lib/gemirro/utils.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The Utils class is responsible for executing specific traitments
@@ -16,6 +18,7 @@ module Gemirro
16
18
  :gems_fetcher,
17
19
  :gems_collection,
18
20
  :stored_gems)
21
+
19
22
  ##
20
23
  # Cache class to store marshal and data into files
21
24
  #
@@ -44,6 +47,7 @@ module Gemirro
44
47
  Parallel.map(file_paths, in_threads: 4) do |file_path|
45
48
  next if data[:files].key?(file_path) &&
46
49
  data[:files][file_path] == File.mtime(file_path)
50
+
47
51
  has_file_changed = true
48
52
  end
49
53
 
@@ -53,6 +57,7 @@ module Gemirro
53
57
  gems = []
54
58
  Parallel.map(file_paths, in_threads: 4) do |file_path|
55
59
  next unless File.exist?(file_path)
60
+
56
61
  gems.concat(Marshal.load(Zlib::GzipReader.open(file_path).read))
57
62
  data[:files][file_path] = File.mtime(file_path)
58
63
  end
@@ -75,7 +80,7 @@ module Gemirro
75
80
  File.join(configuration.destination,
76
81
  [specs_file_type,
77
82
  marshal_version,
78
- 'gz' + (orig ? '.orig' : '')].join('.'))
83
+ "gz#{orig ? '.orig' : ''}"].join('.'))
79
84
  end
80
85
  end
81
86
 
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Gemirro Version
2
4
  module Gemirro
3
- VERSION = '1.2.0'.freeze
5
+ VERSION = '1.4.0'
4
6
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The VersionsFetcher class is used for retrieving the file that contains all
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gemirro
2
4
  ##
3
5
  # The VersionsFile class acts as a small Ruby wrapper around the RubyGems
data/lib/gemirro.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'confstruct'
2
4
  require 'digest/sha2'
3
5
  require 'fileutils'
@@ -13,9 +15,7 @@ require 'stringio'
13
15
  require 'tempfile'
14
16
  require 'zlib'
15
17
 
16
- unless $LOAD_PATH.include?(File.expand_path('../', __FILE__))
17
- $LOAD_PATH.unshift(File.expand_path('../', __FILE__))
18
- end
18
+ $LOAD_PATH.unshift(File.expand_path('../', __FILE__)) unless $LOAD_PATH.include?(File.expand_path('../', __FILE__))
19
19
 
20
20
  require 'gemirro/version'
21
21
  require 'gemirro/configuration'
@@ -72,6 +72,7 @@ module Gemirro
72
72
  expect(@config.ignore_gem('rake', '1.0.0', 'ruby')).to eq(['1.0.0'])
73
73
  expect(@config.ignored_gems).to eq('ruby' => {'rake' => ['1.0.0']})
74
74
  expect(@config.ignore_gem?('rake', '1.0.0', 'ruby')).to be_truthy
75
+ expect(@config.ignore_gem?('rake', '1.0.0', 'java')).to be_falsy
75
76
  end
76
77
 
77
78
  it 'should add and return source' do
@@ -37,6 +37,7 @@ module Gemirro
37
37
  expect(@fetcher.ignore_gem?('gemirro', '0.0.1', 'ruby')).to be_falsy
38
38
  Utils.configuration.ignore_gem('gemirro', '0.0.1', 'ruby')
39
39
  expect(@fetcher.ignore_gem?('gemirro', '0.0.1', 'ruby')).to be_truthy
40
+ expect(@fetcher.ignore_gem?('gemirro', '0.0.1', 'java')).to be_falsy
40
41
  end
41
42
 
42
43
  it 'should log error when fetch gem failed' do