geminabox 0.6.0 → 0.6.1pre1
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.
Potentially problematic release.
This version of geminabox might be problematic. Click here for more details.
- data/lib/geminabox.rb +23 -10
- data/lib/geminabox/disk_cache.rb +39 -0
- data/lib/geminabox/version.rb +1 -0
- data/lib/rubygems_plugin.rb +1 -1
- metadata +29 -19
data/lib/geminabox.rb
CHANGED
@@ -5,6 +5,7 @@ require 'sinatra/base'
|
|
5
5
|
require 'rubygems/builder'
|
6
6
|
require 'rubygems/indexer'
|
7
7
|
require 'hostess'
|
8
|
+
require 'geminabox/version'
|
8
9
|
|
9
10
|
class Geminabox < Sinatra::Base
|
10
11
|
enable :static, :methodoverride
|
@@ -30,6 +31,11 @@ class Geminabox < Sinatra::Base
|
|
30
31
|
end
|
31
32
|
|
32
33
|
autoload :GemVersionCollection, "geminabox/gem_version_collection"
|
34
|
+
autoload :DiskCache, "geminabox/disk_cache"
|
35
|
+
|
36
|
+
before do
|
37
|
+
headers 'X-Powered-By' => "geminabox #{GeminaboxVersion}"
|
38
|
+
end
|
33
39
|
|
34
40
|
get '/' do
|
35
41
|
@gems = load_gems
|
@@ -43,17 +49,19 @@ class Geminabox < Sinatra::Base
|
|
43
49
|
end
|
44
50
|
|
45
51
|
get '/api/v1/dependencies' do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
disk_cache.cache(params[:gems]) do
|
53
|
+
query_gems = params[:gems].split(',')
|
54
|
+
deps = load_gems.gems.select {|gem| query_gems.include?(gem.name) }.map do |gem|
|
55
|
+
spec = spec_for(gem.name, gem.number)
|
56
|
+
{
|
57
|
+
:name => gem.name,
|
58
|
+
:number => gem.number.version,
|
59
|
+
:platform => gem.platform,
|
60
|
+
:dependencies => spec.dependencies.select {|dep| dep.type == :runtime}.map {|dep| [dep.name, dep.requirement.to_s] }
|
61
|
+
}
|
62
|
+
end
|
63
|
+
Marshal.dump(deps)
|
55
64
|
end
|
56
|
-
Marshal.dump(deps)
|
57
65
|
end
|
58
66
|
|
59
67
|
get '/upload' do
|
@@ -154,6 +162,7 @@ HTML
|
|
154
162
|
reindex(:force_rebuild)
|
155
163
|
end
|
156
164
|
end
|
165
|
+
disk_cache.flush
|
157
166
|
end
|
158
167
|
|
159
168
|
def indexer
|
@@ -164,6 +173,10 @@ HTML
|
|
164
173
|
File.expand_path(File.join(settings.data, *request.path_info))
|
165
174
|
end
|
166
175
|
|
176
|
+
def disk_cache
|
177
|
+
@disk_cache = Geminabox::DiskCache.new(File.join(settings.data, "_cache"))
|
178
|
+
end
|
179
|
+
|
167
180
|
def load_gems
|
168
181
|
@loaded_gems ||=
|
169
182
|
%w(specs prerelease_specs).inject(GemVersionCollection.new){|gems, specs_file_type|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
3
|
+
class Geminabox::DiskCache
|
4
|
+
attr_reader :root_path
|
5
|
+
|
6
|
+
def initialize(root_path)
|
7
|
+
@root_path = root_path
|
8
|
+
ensure_dir_exists!
|
9
|
+
end
|
10
|
+
|
11
|
+
def flush
|
12
|
+
FileUtils.rm_rf(root_path)
|
13
|
+
ensure_dir_exists!
|
14
|
+
end
|
15
|
+
|
16
|
+
def cache(key)
|
17
|
+
key = Digest::MD5.hexdigest(key)
|
18
|
+
read(key) || write(key, yield)
|
19
|
+
end
|
20
|
+
|
21
|
+
def read(key)
|
22
|
+
path = File.join(root_path, key)
|
23
|
+
File.read(path) if File.exists?(path)
|
24
|
+
end
|
25
|
+
|
26
|
+
def write(key, value)
|
27
|
+
path = File.join(root_path, key)
|
28
|
+
File.open(path, 'wb'){|f|
|
29
|
+
f << value
|
30
|
+
}
|
31
|
+
value
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
|
36
|
+
def ensure_dir_exists!
|
37
|
+
FileUtils.mkdir_p(root_path)
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
GeminaboxVersion = '0.6.1pre1' unless defined? GeminaboxVersion
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Gem::CommandManager.instance.register_command :inabox
|
1
|
+
Gem::CommandManager.instance.register_command :inabox if defined? Gem::CommandManager
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geminabox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.1pre1
|
5
|
+
prerelease: 5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Tom Lea
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &70334000572040 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70334000572040
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: builder
|
27
|
-
requirement: &
|
27
|
+
requirement: &70334000571620 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70334000571620
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: httpclient
|
38
|
-
requirement: &
|
38
|
+
requirement: &70334000571120 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70334000571120
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
|
-
requirement: &
|
49
|
+
requirement: &70334000570580 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,21 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70334000570580
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rack-test
|
60
|
+
requirement: &70334000570160 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70334000570160
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: minitest
|
60
|
-
requirement: &
|
71
|
+
requirement: &70334000569540 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,7 +76,7 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *70334000569540
|
69
80
|
description: A sinatra based gem hosting app, with client side gem push style functionality.
|
70
81
|
email: contrib@tomlea.co.uk
|
71
82
|
executables: []
|
@@ -74,8 +85,10 @@ extra_rdoc_files:
|
|
74
85
|
- README.markdown
|
75
86
|
files:
|
76
87
|
- README.markdown
|
88
|
+
- lib/geminabox/disk_cache.rb
|
77
89
|
- lib/geminabox/gem_version.rb
|
78
90
|
- lib/geminabox/gem_version_collection.rb
|
91
|
+
- lib/geminabox/version.rb
|
79
92
|
- lib/geminabox.rb
|
80
93
|
- lib/geminabox_client.rb
|
81
94
|
- lib/hostess.rb
|
@@ -105,16 +118,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
118
|
version: '0'
|
106
119
|
segments:
|
107
120
|
- 0
|
108
|
-
hash: -
|
121
|
+
hash: -868340683115565236
|
109
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
123
|
none: false
|
111
124
|
requirements:
|
112
|
-
- - ! '
|
125
|
+
- - ! '>'
|
113
126
|
- !ruby/object:Gem::Version
|
114
|
-
version:
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
hash: -3189528604600378611
|
127
|
+
version: 1.3.1
|
118
128
|
requirements: []
|
119
129
|
rubyforge_project:
|
120
130
|
rubygems_version: 1.8.10
|