geminabox 0.6.0 → 0.6.1pre1

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.

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
- query_gems = params[:gems].split(',')
47
- deps = load_gems.gems.select {|gem| query_gems.include?(gem.name) }.map do |gem|
48
- spec = spec_for(gem.name, gem.number)
49
- {
50
- :name => gem.name,
51
- :number => gem.number.version,
52
- :platform => gem.platform,
53
- :dependencies => spec.dependencies.select {|dep| dep.type == :runtime}.map {|dep| [dep.name, dep.requirement.to_s] }
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
@@ -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.0
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-09 00:00:00.000000000 Z
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: &70215540161800 !ruby/object:Gem::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: *70215540161800
24
+ version_requirements: *70334000572040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: builder
27
- requirement: &70215540161340 !ruby/object:Gem::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: *70215540161340
35
+ version_requirements: *70334000571620
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: httpclient
38
- requirement: &70215540160880 !ruby/object:Gem::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: *70215540160880
46
+ version_requirements: *70334000571120
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &70215540160460 !ruby/object:Gem::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: *70215540160460
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: &70215540160040 !ruby/object:Gem::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: *70215540160040
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: -3189528604600378611
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: '0'
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