geminabox 1.2.0 → 1.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 77b89503a829fdd9920415b1ef7a814ed83c7c41c00bbb2923abb5b906d5bbff
4
- data.tar.gz: a4a597b442efdb2b33dc4cc85f99465e8d23092bdd0775b75a634d8cca3912ef
2
+ SHA1:
3
+ metadata.gz: 58341b99ae23a2be5f634b571d4f2d95f7c3824b
4
+ data.tar.gz: d5dab4aa7155ca48994f6bac27902072f3fead85
5
5
  SHA512:
6
- metadata.gz: 9a29e0c9c9d7f60bb39c961a0c040451c709eab18bc676d1e7bb4bc8349ecd2e90b794bba87d948079eda2726aca20ec4a295d32a66cc0696bfece508bc46a8b
7
- data.tar.gz: 2f818ce266be7f996ab7cd8094df2bc4a0d14f5e1d3aa9d7bca581a89aaa3a94e3ab1aa1e50b3e833da418cf8572b60f4cd1c6c3e470c58f881b0c2150997362
6
+ metadata.gz: 52a5d0c2190743b85fe4f588e80a0283725ca2e00f11216747cfc2f8e200eb0621789223e859804480ffe6e03b7f282e2fcfe3768d217e33fbd200ed5cb595b8
7
+ data.tar.gz: bf43c59a32f80f9ba739ed632a2529acf71f052f5842f4ce0fdc44210d6671a1fbb722c3a3bd1f98ec60c059c2a9c0238dbe1e4fe5d284c91fc8fbce6d7d85f1
data/lib/geminabox.rb CHANGED
@@ -46,6 +46,7 @@ module Geminabox
46
46
  :gem_permissions,
47
47
  :allow_delete,
48
48
  :rubygems_proxy,
49
+ :rubygems_proxy_merge_strategy,
49
50
  :http_adapter,
50
51
  :lockfile,
51
52
  :retry_interval,
@@ -73,23 +74,24 @@ module Geminabox
73
74
  end
74
75
 
75
76
  set_defaults(
76
- data: File.join(File.dirname(__FILE__), *%w[.. data]),
77
- public_folder: File.join(File.dirname(__FILE__), *%w[.. public]),
78
- build_legacy: false,
79
- incremental_updates: true,
80
- views: File.join(File.dirname(__FILE__), *%w[.. views]),
81
- allow_replace: false,
82
- gem_permissions: 0644,
83
- rubygems_proxy: (ENV['RUBYGEMS_PROXY'] == 'true'),
84
- allow_delete: true,
85
- http_adapter: HttpClientAdapter.new,
86
- lockfile: '/tmp/geminabox.lockfile',
87
- retry_interval: 60,
88
- allow_remote_failure: false,
89
- ruby_gems_url: 'https://rubygems.org/',
90
- bundler_ruby_gems_url: 'https://bundler.rubygems.org/',
91
- allow_upload: true,
92
- on_gem_received: nil
77
+ data: File.join(File.dirname(__FILE__), *%w[.. data]),
78
+ public_folder: File.join(File.dirname(__FILE__), *%w[.. public]),
79
+ build_legacy: false,
80
+ incremental_updates: true,
81
+ views: File.join(File.dirname(__FILE__), *%w[.. views]),
82
+ allow_replace: false,
83
+ gem_permissions: 0644,
84
+ rubygems_proxy: (ENV['RUBYGEMS_PROXY'] == 'true'),
85
+ rubygems_proxy_merge_strategy: ENV.fetch('RUBYGEMS_PROXY_MERGE_STRATEGY') { :local_gems_take_precedence_over_remote_gems }.to_sym,
86
+ allow_delete: true,
87
+ http_adapter: HttpClientAdapter.new,
88
+ lockfile: '/tmp/geminabox.lockfile',
89
+ retry_interval: 60,
90
+ allow_remote_failure: false,
91
+ ruby_gems_url: 'https://rubygems.org/',
92
+ bundler_ruby_gems_url: 'https://bundler.rubygems.org/',
93
+ allow_upload: true,
94
+ on_gem_received: nil
93
95
  )
94
96
 
95
97
  end
@@ -1,23 +1,38 @@
1
- module Geminabox
2
- class GemListMerge
3
- attr_accessor :list
4
-
5
- IGNORE_DEPENDENCIES = 0..-2
1
+ require "set"
6
2
 
7
- def self.from(*lists)
8
- lists.map{|list| new(list)}.inject(:merge)
3
+ module Geminabox
4
+ module GemListMerge
5
+ def self.merge(local_gem_list, remote_gem_list, strategy:)
6
+ strategy_for(strategy).merge(local_gem_list, remote_gem_list)
9
7
  end
10
8
 
11
- def initialize(list)
12
- @list = list
9
+ def self.strategy_for(strategy)
10
+ case strategy
11
+ when :local_gems_take_precedence_over_remote_gems
12
+ LocalGemsTakePrecedenceOverRemoteGems
13
+ when :combine_local_and_remote_gem_versions
14
+ CombineLocalAndRemoteGemVersions
15
+ else
16
+ raise ArgumentError, "Merge strategy must be :local_gems_take_precedence_over_remote_gems (default) or :merge_local_and_remote_gem_versions"
17
+ end
13
18
  end
14
19
 
15
- def merge(other)
16
- merged = (list + other.list)
17
- merged.uniq! {|val| val.values[IGNORE_DEPENDENCIES] }
18
- merged.sort_by! {|x| x.values[IGNORE_DEPENDENCIES] }
19
- merged
20
+ module LocalGemsTakePrecedenceOverRemoteGems
21
+ def self.merge(local_gem_list, remote_gem_list)
22
+ names = Set.new(local_gem_list.map { |gem| gem[:name] })
23
+ local_gem_list + remote_gem_list.reject { |gem| names.include? gem[:name] }
24
+ end
20
25
  end
21
26
 
27
+ module CombineLocalAndRemoteGemVersions
28
+ IGNORE_DEPENDENCIES = 0..-2
29
+
30
+ def self.merge(local_gem_list, remote_gem_list)
31
+ merged = local_gem_list + remote_gem_list
32
+ merged.uniq! {|val| val.values[IGNORE_DEPENDENCIES] }
33
+ merged.sort_by! {|x| x.values[IGNORE_DEPENDENCIES] }
34
+ merged
35
+ end
36
+ end
22
37
  end
23
38
  end
@@ -312,7 +312,7 @@ HTML
312
312
  end
313
313
 
314
314
  def combined_gem_list
315
- GemListMerge.from(local_gem_list, remote_gem_list)
315
+ GemListMerge.merge(local_gem_list, remote_gem_list, strategy: Geminabox.rubygems_proxy_merge_strategy)
316
316
  end
317
317
 
318
318
  helpers do
@@ -1,3 +1,3 @@
1
1
  module Geminabox
2
- VERSION = '1.2.0' unless defined? VERSION
2
+ VERSION = '1.3.0' unless defined? VERSION
3
3
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geminabox
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Lea
8
8
  - Jack Foy
9
9
  - Rob Nichols
10
10
  - Naotoshi Seo
11
- autorequire:
11
+ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2020-03-04 00:00:00.000000000 Z
14
+ date: 2021-03-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: sinatra
@@ -149,7 +149,7 @@ licenses:
149
149
  - MIT-LICENSE
150
150
  metadata:
151
151
  source_code_uri: https://github.com/geminabox/geminabox
152
- post_install_message:
152
+ post_install_message:
153
153
  rdoc_options:
154
154
  - "--main"
155
155
  - README.md
@@ -166,8 +166,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
166
  - !ruby/object:Gem::Version
167
167
  version: '0'
168
168
  requirements: []
169
- rubygems_version: 3.0.3
170
- signing_key:
169
+ rubyforge_project:
170
+ rubygems_version: 2.6.14
171
+ signing_key:
171
172
  specification_version: 4
172
173
  summary: Really simple rubygem hosting
173
174
  test_files: []