spitball 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/spitball.rb +9 -5
- data/lib/spitball/client_common.rb +30 -0
- data/lib/spitball/remote.rb +23 -27
- data/spec/spitball_spec.rb +4 -4
- data/spitball.gemspec +2 -1
- metadata +4 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/lib/spitball.rb
CHANGED
@@ -4,6 +4,7 @@ require 'ext/bundler_lockfile_parser'
|
|
4
4
|
require 'ext/bundler_fake_dsl'
|
5
5
|
|
6
6
|
class Spitball
|
7
|
+
require 'spitball/client_common'
|
7
8
|
require 'spitball/digest'
|
8
9
|
require 'spitball/repo'
|
9
10
|
require 'spitball/file_lock'
|
@@ -16,6 +17,7 @@ class Spitball
|
|
16
17
|
VERSION = '1.0'
|
17
18
|
|
18
19
|
include Spitball::Digest
|
20
|
+
include Spitball::ClientCommon
|
19
21
|
|
20
22
|
attr_reader :gemfile, :gemfile_lock, :without, :options
|
21
23
|
|
@@ -26,11 +28,6 @@ class Spitball
|
|
26
28
|
@without = (options[:without] || []).map{|w| w.to_sym}
|
27
29
|
end
|
28
30
|
|
29
|
-
def copy_to(dest)
|
30
|
-
cache!
|
31
|
-
FileUtils.cp(tarball_path, dest)
|
32
|
-
end
|
33
|
-
|
34
31
|
def cached?
|
35
32
|
File.exist? tarball_path
|
36
33
|
end
|
@@ -51,6 +48,13 @@ class Spitball
|
|
51
48
|
end
|
52
49
|
end
|
53
50
|
|
51
|
+
private
|
52
|
+
|
53
|
+
def copy_tarball_data(dest)
|
54
|
+
cache!
|
55
|
+
FileUtils.cp(tarball_path, dest)
|
56
|
+
end
|
57
|
+
|
54
58
|
def create_bundle
|
55
59
|
ENV['BUNDLE_GEMFILE'] = gemfile_path # make bundler happy! :) *cry*
|
56
60
|
Spitball::Repo.make_cache_dirs
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Spitball::ClientCommon
|
2
|
+
def copy_to(path)
|
3
|
+
case path
|
4
|
+
when /\.tar\.gz$/, /\.tgz$/
|
5
|
+
copy_tarball_data(path)
|
6
|
+
else
|
7
|
+
tmp_tgz = File.join(path, 'spitball.tgz')
|
8
|
+
FileUtils.mkdir_p path
|
9
|
+
|
10
|
+
copy_tarball_data(tmp_tgz)
|
11
|
+
`tar xzf #{tmp_tgz} -C #{path}`
|
12
|
+
|
13
|
+
FileUtils.rm_rf(tmp_tgz)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def cached?
|
18
|
+
raise NotImplementedError
|
19
|
+
end
|
20
|
+
|
21
|
+
def cache!
|
22
|
+
raise NotImplementedError
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def copy_tarball_data(path)
|
28
|
+
raise NotImplementedError
|
29
|
+
end
|
30
|
+
end
|
data/lib/spitball/remote.rb
CHANGED
@@ -3,6 +3,8 @@ require 'uri'
|
|
3
3
|
|
4
4
|
class Spitball::Remote
|
5
5
|
|
6
|
+
include Spitball::ClientCommon
|
7
|
+
|
6
8
|
def initialize(gemfile, gemfile_lock, opts = {})
|
7
9
|
@gemfile = gemfile
|
8
10
|
@gemfile_lock = gemfile_lock
|
@@ -10,25 +12,13 @@ class Spitball::Remote
|
|
10
12
|
@port = opts[:port]
|
11
13
|
end
|
12
14
|
|
13
|
-
def
|
14
|
-
|
15
|
-
when /\.tar\.gz$/, /\.tgz$/
|
16
|
-
data = generate_remote_tarball
|
17
|
-
File.open(path, 'w') { |f| f.write data }
|
18
|
-
else
|
19
|
-
begin
|
20
|
-
File.open('tmp.tgz', 'w') { |f| f.write data }
|
21
|
-
FileUtils.mkdir_p path
|
22
|
-
`tar xvf tmp.tgz -C #{path}`
|
23
|
-
ensure
|
24
|
-
FileUtils.rm_rf('tmp.tgz')
|
25
|
-
end
|
26
|
-
end
|
15
|
+
def cached?
|
16
|
+
!!@tarball_url
|
27
17
|
end
|
28
18
|
|
29
|
-
|
19
|
+
def cache!(sync = true) # ignore sync
|
20
|
+
return if cached?
|
30
21
|
|
31
|
-
def generate_remote_tarball
|
32
22
|
url = URI.parse("http://#{@host}:#{@port}/create")
|
33
23
|
req = Net::HTTP::Post.new(url.path)
|
34
24
|
req.form_data = {'gemfile' => @gemfile, 'gemfile_lock' => @gemfile_lock}
|
@@ -37,21 +27,25 @@ class Spitball::Remote
|
|
37
27
|
http.request(req) {|r| puts r.read_body }
|
38
28
|
end
|
39
29
|
|
40
|
-
|
30
|
+
case res.code
|
31
|
+
when '201', '202' # Created, Accepted
|
32
|
+
@tarball_url = res['Location']
|
33
|
+
else
|
34
|
+
raise Spitball::ServerFailure, "Expected 2xx response code. Got #{res.code}."
|
35
|
+
end
|
36
|
+
rescue URI::InvalidURIError => e
|
37
|
+
raise Spitball::ClientError, e.message
|
38
|
+
end
|
41
39
|
|
42
|
-
|
43
|
-
case res.code
|
44
|
-
when '201', '202' # Created, Accepted
|
45
|
-
get_tarball_data res['Location']
|
46
|
-
else
|
47
|
-
raise Spitball::ServerFailure, "Expected 2xx response code. Got #{res.code}."
|
48
|
-
end
|
40
|
+
private
|
49
41
|
|
42
|
+
def copy_tarball_data(path)
|
43
|
+
cache!
|
44
|
+
print "\nDownloading tarball..."; $stdout.flush
|
45
|
+
data = get_tarball_data @tarball_url
|
50
46
|
puts "done."
|
51
47
|
|
52
|
-
data
|
53
|
-
rescue URI::InvalidURIError => e
|
54
|
-
raise Spitball::ClientError, e.message
|
48
|
+
File.open(path, 'w') { |f| f.write data }
|
55
49
|
end
|
56
50
|
|
57
51
|
def get_tarball_data(location)
|
@@ -62,5 +56,7 @@ class Spitball::Remote
|
|
62
56
|
else
|
63
57
|
raise Spitball::ServerFailure, "Spitball download failed."
|
64
58
|
end
|
59
|
+
rescue URI::InvalidURIError => e
|
60
|
+
raise Spitball::ClientError, e.message
|
65
61
|
end
|
66
62
|
end
|
data/spec/spitball_spec.rb
CHANGED
@@ -83,8 +83,8 @@ describe Spitball do
|
|
83
83
|
describe "create_bundle" do
|
84
84
|
it "generates a bundle at the bundle_path" do
|
85
85
|
mock(@spitball).install_gem(anything, anything).times(any_times)
|
86
|
-
capture_stdout { @spitball.create_bundle }
|
87
|
-
File.exist?(@spitball.tarball_path).should == true
|
86
|
+
capture_stdout { @spitball.send :create_bundle }
|
87
|
+
File.exist?(@spitball.send(:tarball_path)).should == true
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
@@ -128,10 +128,10 @@ describe Spitball do
|
|
128
128
|
it "should use without" do
|
129
129
|
@spitball = Spitball.new(@gemfile, @lockfile)
|
130
130
|
mock(@spitball).install_gem(anything, anything).times(7)
|
131
|
-
@spitball.create_bundle
|
131
|
+
@spitball.send :create_bundle
|
132
132
|
@spitball = Spitball.new(@gemfile, @lockfile, :without => 'development')
|
133
133
|
mock(@spitball).install_gem(anything, anything).times(6)
|
134
|
-
@spitball.create_bundle
|
134
|
+
@spitball.send :create_bundle
|
135
135
|
end
|
136
136
|
end
|
137
137
|
end
|
data/spitball.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{spitball}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Matt Freels", "Brandon Mitchell", "Joshua Hull"]
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"lib/ext/bundler_fake_dsl.rb",
|
28
28
|
"lib/ext/bundler_lockfile_parser.rb",
|
29
29
|
"lib/spitball.rb",
|
30
|
+
"lib/spitball/client_common.rb",
|
30
31
|
"lib/spitball/digest.rb",
|
31
32
|
"lib/spitball/file_lock.rb",
|
32
33
|
"lib/spitball/remote.rb",
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spitball
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 2
|
10
|
+
version: 0.3.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Freels
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/ext/bundler_fake_dsl.rb
|
85
85
|
- lib/ext/bundler_lockfile_parser.rb
|
86
86
|
- lib/spitball.rb
|
87
|
+
- lib/spitball/client_common.rb
|
87
88
|
- lib/spitball/digest.rb
|
88
89
|
- lib/spitball/file_lock.rb
|
89
90
|
- lib/spitball/remote.rb
|