geminabox 0.13.0 → 0.13.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of geminabox might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d0d8d2b7b2d895ef9b0017f0e6b48132fa3e6a16
4
- data.tar.gz: f333f2cf2dbf72221cc0fd281f8b720def07d2a0
3
+ metadata.gz: 29caab70af6b8cc64c9bf3ed4f0ef14fc55fdbe5
4
+ data.tar.gz: 52f389d19e17a11eaab222efeb999cc7cbd792e3
5
5
  SHA512:
6
- metadata.gz: 9146b95e001840793b881bc3cb72dfc5103019251aa71ae1b0f5d3bd93fb59553ae2cc61478deaee5aa6615197c33149e99cc69cfac5c8c944b15b766af4accc
7
- data.tar.gz: 1dc6216ac61f994bb72ce106c3717b03e8a5599330d1c9050683f2628277cbb3daa5d3038b1170e208013510133d8da2421c7bc6f9d2905cb1c1209505eda1fc
6
+ metadata.gz: 3c40834351d3cd2d1312c3accd677c85d86492cc8f14d1628440902c290f9ea59a46fe32452e8c346ac0a314cd04488471b9adf994f33c352a8c3fadf54de5ea
7
+ data.tar.gz: 58c88a1009a4843f64a0230ceb256aa33925f71a909405734dd62fe513776d8ae48612372f01a61cbed65989b69569e7bf51ac951f86f269496ab58dc9ce67d7
@@ -51,7 +51,7 @@ Or in config.ru (before the run command), set:
51
51
 
52
52
  If you want Geminabox to carry on providing gems when rubygems.org is unavailable, add this to config.ru:
53
53
 
54
- Geminabox.allow_remote_failure = true
54
+ Geminabox.allow_remote_failure = true
55
55
 
56
56
  ## HTTP adapter
57
57
 
@@ -66,7 +66,7 @@ and specify it in config.ru:
66
66
  It is recommend (but not essential) that your adapter inherits from HttpAdapter.
67
67
  The adapter will need to replace HttpAdapter's methods with those specific to
68
68
  the alternative HTTP gem. It should also be able to handle HTTP proxy
69
- settings.
69
+ settings.
70
70
 
71
71
  Defining your own adapter also allows you to configure Geminabox to use the
72
72
  local systems SSL certificates.
@@ -123,6 +123,38 @@ Simples!
123
123
  Description:
124
124
  Push a gem up to your GemInABox
125
125
 
126
+ ## Docker
127
+
128
+ Using Gem in a Box is really simple with the Dockerfile. Move this Dockerfile into a directory that you want to use for your server.
129
+
130
+ That directory only needs to contain:
131
+
132
+ ```
133
+ config.ru (explained above)
134
+ Gemfile
135
+ Gemfile.lock
136
+ ```
137
+
138
+ Your Gemfile only needs:
139
+
140
+ ```ruby
141
+ source 'https://rubygems.org'
142
+
143
+ gem 'geminabox'
144
+ ```
145
+
146
+ From there
147
+
148
+ ```
149
+ docker build -t geminabox .
150
+ ```
151
+
152
+ ```
153
+ docker run -d -p 9292:9292 geminabox:latest
154
+ ```
155
+
156
+ Your server should now be running!
157
+
126
158
  ## Licence
127
159
 
128
160
  Fork it, mod it, choose it, use it, make it better. All under the MIT License.
@@ -50,7 +50,8 @@ module Geminabox
50
50
  :lockfile,
51
51
  :retry_interval,
52
52
  :allow_remote_failure,
53
- :ruby_gems_url
53
+ :ruby_gems_url,
54
+ :bundler_ruby_gems_url
54
55
  )
55
56
 
56
57
  def set_defaults(defaults)
@@ -70,20 +71,21 @@ module Geminabox
70
71
  end
71
72
 
72
73
  set_defaults(
73
- data: File.join(File.dirname(__FILE__), *%w[.. data]),
74
- public_folder: File.join(File.dirname(__FILE__), *%w[.. public]),
75
- build_legacy: false,
76
- incremental_updates: true,
77
- views: File.join(File.dirname(__FILE__), *%w[.. views]),
78
- allow_replace: false,
79
- gem_permissions: 0644,
80
- rubygems_proxy: (ENV['RUBYGEMS_PROXY'] == 'true'),
81
- allow_delete: true,
82
- http_adapter: HttpClientAdapter.new,
83
- lockfile: '/tmp/geminabox.lockfile',
84
- retry_interval: 60,
85
- allow_remote_failure: false,
86
- ruby_gems_url: 'https://rubygems.org/'
74
+ data: File.join(File.dirname(__FILE__), *%w[.. data]),
75
+ public_folder: File.join(File.dirname(__FILE__), *%w[.. public]),
76
+ build_legacy: false,
77
+ incremental_updates: true,
78
+ views: File.join(File.dirname(__FILE__), *%w[.. views]),
79
+ allow_replace: false,
80
+ gem_permissions: 0644,
81
+ rubygems_proxy: (ENV['RUBYGEMS_PROXY'] == 'true'),
82
+ allow_delete: true,
83
+ http_adapter: HttpClientAdapter.new,
84
+ lockfile: '/tmp/geminabox.lockfile',
85
+ retry_interval: 60,
86
+ allow_remote_failure: false,
87
+ ruby_gems_url: 'https://rubygems.org/',
88
+ bundler_ruby_gems_url: 'https://bundler.rubygems.org/'
87
89
  )
88
90
 
89
91
  end
@@ -52,7 +52,7 @@ module Geminabox
52
52
 
53
53
  def read_int(key_hash)
54
54
  path = path(key_hash)
55
- yield(path) if File.exists?(path)
55
+ yield(path) if File.exist?(path)
56
56
  end
57
57
 
58
58
  def write(key_hash, value)
@@ -2,6 +2,8 @@ module Geminabox
2
2
  class GemListMerge
3
3
  attr_accessor :list
4
4
 
5
+ IGNORE_DEPENDENCIES = 0..-2
6
+
5
7
  def self.from(*lists)
6
8
  lists.map{|list| new(list)}.inject(:merge)
7
9
  end
@@ -11,40 +13,10 @@ module Geminabox
11
13
  end
12
14
 
13
15
  def merge(other)
14
- combine_hashes(other).values.flatten.sort do |x, y|
15
- x.values[ignore_dependencies] <=> y.values[ignore_dependencies]
16
- end
17
- end
18
-
19
- def hash
20
- list.each do |item|
21
- ensure_symbols_as_keys(item)
22
- name = item[:name].to_sym
23
- collection[name] ||= []
24
- collection[name] << item unless collection[name].include?(item)
25
- end
26
- collection
27
- end
28
-
29
- def collection
30
- @collection ||= {}
31
- end
32
-
33
- def combine_hashes(other)
34
- hash.merge(other.hash) do |key, value, other_value|
35
- (value + other_value).uniq{|v| v.values[ignore_dependencies]}
36
- end
37
- end
38
-
39
- def ignore_dependencies
40
- 0..-2
41
- end
42
-
43
- def ensure_symbols_as_keys(item)
44
- item.keys.each do |key|
45
- next if key.kind_of? Symbol
46
- item[key.to_sym] = item.delete(key)
47
- end
16
+ merged = (list + other.list)
17
+ merged.uniq! {|val| val.values[IGNORE_DEPENDENCIES] }
18
+ merged.sort_by! {|x| x.values[IGNORE_DEPENDENCIES] }
19
+ merged
48
20
  end
49
21
 
50
22
  end
@@ -48,7 +48,7 @@ module Geminabox
48
48
 
49
49
  private
50
50
  def ensure_existing_data_folder_compatible
51
- if File.exists? Geminabox.data
51
+ if File.exist? Geminabox.data
52
52
  ensure_data_folder_is_directory
53
53
  ensure_data_folder_is_writable
54
54
  end
@@ -6,7 +6,7 @@ module Geminabox
6
6
  include Nesty::NestedError
7
7
 
8
8
  def initialize(code, reason)
9
- @code = code.to_s
9
+ @code = code
10
10
  @reason = reason
11
11
  end
12
12
  end
@@ -25,7 +25,10 @@ module Geminabox
25
25
  end
26
26
 
27
27
  def http_client
28
- @http_client ||= HTTPClient.new(ENV['http_proxy'])
28
+ @http_client ||= HTTPClient.new(ENV['http_proxy']).tap {|client|
29
+ client.transparent_gzip_decompression = true
30
+ client.keep_alive_timeout = 32 # sec
31
+ }
29
32
  end
30
33
 
31
34
  end
@@ -21,7 +21,12 @@ module Geminabox
21
21
  end
22
22
 
23
23
  def get_remote
24
- File.open(proxy_path, 'w'){|f| f.write(remote_content)}
24
+ begin
25
+ File.open(proxy_path, 'w'){|f| f.write(remote_content)}
26
+ rescue
27
+ File.unlink(proxy_path) if File.exists?(proxy_path)
28
+ raise $!
29
+ end
25
30
  end
26
31
 
27
32
  end
@@ -31,7 +31,7 @@ module Geminabox
31
31
  end
32
32
 
33
33
  def file_exists?(path)
34
- File.exists? path
34
+ File.exist? path
35
35
  end
36
36
 
37
37
  def proxy_folder_path
@@ -71,7 +71,7 @@ module Geminabox
71
71
  end
72
72
 
73
73
  def proxy_folder_exists?
74
- Dir.exists?(proxy_file_folder)
74
+ Dir.exist?(proxy_file_folder)
75
75
  end
76
76
 
77
77
  def create_proxy_folder
@@ -83,7 +83,7 @@ module Geminabox
83
83
  end
84
84
 
85
85
  def local_folder_exists?
86
- Dir.exists?(local_file_folder)
86
+ Dir.exist?(local_file_folder)
87
87
  end
88
88
 
89
89
  def create_local_folder
@@ -58,7 +58,7 @@ module Geminabox
58
58
 
59
59
  file = File.expand_path(File.join(Server.data, *request.path_info))
60
60
 
61
- unless File.exists?(file)
61
+ unless File.exist?(file)
62
62
  ruby_gems_url = Geminabox.ruby_gems_url
63
63
  path = File.join(ruby_gems_url, *request.path_info)
64
64
  content = Geminabox.http_adapter.get_content(path)
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'uri'
2
3
 
3
4
  module Geminabox
4
5
  module RubygemsDependency
@@ -13,14 +14,14 @@ module Geminabox
13
14
  gems.map(&:to_s).join(',')
14
15
  ].join
15
16
  body = Geminabox.http_adapter.get_content(url)
16
- JSON.parse(body)
17
+ Marshal.load(body)
17
18
  rescue Exception => e
18
19
  return [] if Geminabox.allow_remote_failure
19
20
  raise e
20
21
  end
21
22
 
22
23
  def rubygems_uri
23
- "https://bundler.rubygems.org/api/v1/dependencies.json"
24
+ URI.join(Geminabox.bundler_ruby_gems_url, '/api/v1/dependencies')
24
25
  end
25
26
 
26
27
  end
@@ -125,7 +125,7 @@ module Geminabox
125
125
  end
126
126
 
127
127
  serialize_update do
128
- File.delete file_path if File.exists? file_path
128
+ File.delete file_path if File.exist? file_path
129
129
  self.class.reindex(:force_rebuild)
130
130
  redirect url("/")
131
131
  end
@@ -221,7 +221,7 @@ HTML
221
221
 
222
222
  def all_gems_with_duplicates
223
223
  specs_files_paths.map do |specs_file_path|
224
- if File.exists?(specs_file_path)
224
+ if File.exist?(specs_file_path)
225
225
  Marshal.load(Gem.gunzip(Gem.read_binary(specs_file_path)))
226
226
  else
227
227
  []
@@ -279,7 +279,7 @@ HTML
279
279
  File::open(spec_file, 'r') do |unzipped_spec_file|
280
280
  unzipped_spec_file.binmode
281
281
  Marshal.load(Gem.inflate(unzipped_spec_file.read))
282
- end if File.exists? spec_file
282
+ end if File.exist? spec_file
283
283
  end
284
284
 
285
285
  def default_platform
@@ -1,3 +1,3 @@
1
1
  module Geminabox
2
- VERSION = '0.13.0' unless defined? VERSION
2
+ VERSION = '0.13.1' unless defined? VERSION
3
3
  end
@@ -85,7 +85,7 @@ class Gem::Commands::InaboxCommand < Gem::Command
85
85
  config = Gem.configuration.load_file(config_path).merge(:host => host)
86
86
 
87
87
  dirname = File.dirname(config_path)
88
- Dir.mkdir(dirname) unless File.exists?(dirname)
88
+ Dir.mkdir(dirname) unless File.exist?(dirname)
89
89
 
90
90
  File.open(config_path, 'w') do |f|
91
91
  f.write config.to_yaml
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geminabox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.13.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Lea
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-02-15 00:00:00.000000000 Z
13
+ date: 2016-05-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: sinatra