tessa 0.7.0 → 0.8.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 +4 -4
- data/bin/rspec +17 -0
- data/lib/tessa/asset.rb +4 -0
- data/lib/tessa/upload.rb +15 -0
- data/lib/tessa/upload/uploads_file.rb +23 -0
- data/lib/tessa/version.rb +1 -1
- data/spec/tessa/asset_spec.rb +24 -0
- data/spec/tessa/upload/uploads_file_spec.rb +78 -0
- data/spec/tessa/upload_spec.rb +46 -1
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f249bb180317b0210a3ccb8ac00990203ef3b958
|
4
|
+
data.tar.gz: d1977678af1fd84081e3ecc11b67469461c9d0ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cfbfe4952713a3d56f5f35fe440135f1da9bc41d44e43e2a0db496729a599bf78916b587ea9f4c897765410630755f7ac32442591e8dc365c04f1da96a04caa
|
7
|
+
data.tar.gz: 590c79b194d50cb6e0d5db7399ab8e65ed4b6e47d4bd3396cc3eca03be8b0068e787b6d5185bf1a7ddf29bd159a2e76d5710fb1ff7f70332911c12e57161fd76
|
data/bin/rspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'rspec' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("rspec-core", "rspec")
|
data/lib/tessa/asset.rb
CHANGED
data/lib/tessa/upload.rb
CHANGED
@@ -7,10 +7,25 @@ module Tessa
|
|
7
7
|
attribute :upload_url, String
|
8
8
|
attribute :upload_method, String
|
9
9
|
|
10
|
+
def upload_file(file)
|
11
|
+
if UploadsFile.new(upload: self).(file)
|
12
|
+
asset.complete!
|
13
|
+
else
|
14
|
+
asset.cancel!
|
15
|
+
false
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
10
19
|
def self.create(connection: Tessa.config.connection,
|
11
20
|
strategy: Tessa.config.strategy,
|
12
21
|
**options)
|
13
22
|
new_from_response connection.post('/uploads', options.merge(strategy: strategy))
|
14
23
|
end
|
24
|
+
|
25
|
+
private def asset
|
26
|
+
Asset.new(id: asset_id)
|
27
|
+
end
|
15
28
|
end
|
16
29
|
end
|
30
|
+
|
31
|
+
require 'tessa/upload/uploads_file'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Tessa::Upload::UploadsFile
|
2
|
+
attr_reader :upload, :connection
|
3
|
+
|
4
|
+
def initialize(upload:, connection: self.class.connection_factory)
|
5
|
+
@upload = upload
|
6
|
+
@connection = connection
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(file)
|
10
|
+
params = { file: Faraday::UploadIO.new(file, "application/octet-stream") }
|
11
|
+
connection
|
12
|
+
.public_send(upload.upload_method, upload.upload_url, params)
|
13
|
+
.success?
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.connection_factory
|
17
|
+
Faraday.new do |conn|
|
18
|
+
conn.request :multipart
|
19
|
+
conn.request :url_encoded
|
20
|
+
conn.adapter Faraday.default_adapter
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/tessa/version.rb
CHANGED
data/spec/tessa/asset_spec.rb
CHANGED
@@ -143,4 +143,28 @@ RSpec.describe Tessa::Asset do
|
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
|
+
describe ".create" do
|
147
|
+
let(:upload) { instance_double(Tessa::Upload) }
|
148
|
+
|
149
|
+
before :each do
|
150
|
+
allow(Tessa::Upload).to receive(:create).and_return(upload)
|
151
|
+
allow(upload).to receive(:upload_file)
|
152
|
+
end
|
153
|
+
|
154
|
+
it "requires a file param" do
|
155
|
+
expect { described_class.create }.to raise_error(ArgumentError)
|
156
|
+
expect { described_class.create(file: "abc") }.to_not raise_error
|
157
|
+
end
|
158
|
+
|
159
|
+
it "creates a new upload" do
|
160
|
+
expect(Tessa::Upload).to receive(:create).with(foo: :bar, baz: :boom).and_return(upload)
|
161
|
+
described_class.create(file: "abc", foo: :bar, baz: :boom)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "uploads the passed file to the upload's URL" do
|
165
|
+
expect(Tessa::Upload).to receive(:create).and_return(upload)
|
166
|
+
expect(upload).to receive(:upload_file).with(:file)
|
167
|
+
described_class.create(file: :file)
|
168
|
+
end
|
169
|
+
end
|
146
170
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Tessa::Upload::UploadsFile do
|
4
|
+
describe "#initialize" do
|
5
|
+
it "requires an upload and sets it to attribute" do
|
6
|
+
expect { described_class.new }.to raise_error(ArgumentError)
|
7
|
+
obj = described_class.new(upload: :upload)
|
8
|
+
expect(obj.upload).to eq(:upload)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "optionally takes a connection" do
|
12
|
+
obj = described_class.new(upload: :upload, connection: :conn)
|
13
|
+
expect(obj.connection).to eq(:conn)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "defaults connection to empty Faraday connection" do
|
17
|
+
expect(described_class).to receive(:connection_factory).and_return(:foo)
|
18
|
+
obj = described_class.new(upload: :upload)
|
19
|
+
expect(obj.connection).to eq(:foo)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#call" do
|
24
|
+
let(:upload) {
|
25
|
+
instance_double(
|
26
|
+
Tessa::Upload,
|
27
|
+
upload_url: "http://upload/path?arg=1",
|
28
|
+
upload_method: "post"
|
29
|
+
)
|
30
|
+
}
|
31
|
+
let(:connection) {
|
32
|
+
Faraday.new { |f| f.adapter :test, stubs }
|
33
|
+
}
|
34
|
+
subject(:task) { described_class.new(upload: upload, connection: connection) }
|
35
|
+
|
36
|
+
context "uploads file successfully" do
|
37
|
+
let(:stubs) {
|
38
|
+
Faraday::Adapter::Test::Stubs.new do |stub|
|
39
|
+
stub.post("http://upload/path?arg=1") { |env|
|
40
|
+
[200, {}, '']
|
41
|
+
}
|
42
|
+
end
|
43
|
+
}
|
44
|
+
|
45
|
+
it "calls the upload_url with upload_method HTTP method" do
|
46
|
+
file = __FILE__
|
47
|
+
expect(connection).to receive(:post).with("http://upload/path?arg=1", hash_including(:file)).and_call_original
|
48
|
+
expect(task.call(file)).to be_truthy
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "uploads file successfully" do
|
53
|
+
let(:stubs) {
|
54
|
+
Faraday::Adapter::Test::Stubs.new do |stub|
|
55
|
+
stub.post("http://upload/path?arg=1") { |env|
|
56
|
+
[500, {}, '']
|
57
|
+
}
|
58
|
+
end
|
59
|
+
}
|
60
|
+
|
61
|
+
it "calls the upload_url with upload_method HTTP method" do
|
62
|
+
file = __FILE__
|
63
|
+
expect(connection).to receive(:post).with("http://upload/path?arg=1", hash_including(:file)).and_call_original
|
64
|
+
expect(task.call(file)).to be_falsey
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe ".connection_factory" do
|
70
|
+
it "returns a new Faraday::Connection with the default adapter and url_encoded and multipart" do
|
71
|
+
obj = described_class.connection_factory
|
72
|
+
expect(obj).to be_a(Faraday::Connection)
|
73
|
+
expect(obj.builder.handlers)
|
74
|
+
.to eq([Faraday::Request::Multipart, Faraday::Request::UrlEncoded, Faraday::Adapter::NetHttp])
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
data/spec/tessa/upload_spec.rb
CHANGED
@@ -26,7 +26,52 @@ RSpec.describe Tessa::Upload do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
describe "
|
29
|
+
describe "#upload_file" do
|
30
|
+
subject(:upload) { described_class.new }
|
31
|
+
let(:task) { instance_double(described_class::UploadsFile) }
|
32
|
+
|
33
|
+
before :each do
|
34
|
+
allow(described_class::UploadsFile).to receive(:new).and_return(task)
|
35
|
+
allow(task).to receive(:call)
|
36
|
+
allow(Tessa::Asset).to receive(:new).and_return(instance_spy(Tessa::Asset))
|
37
|
+
end
|
38
|
+
|
39
|
+
it "initializes UploadsFile with self and passes argument to call" do
|
40
|
+
expect(task).to receive(:call).with(:file)
|
41
|
+
expect(described_class::UploadsFile).to receive(:new).with(upload: upload).and_return(task)
|
42
|
+
upload.upload_file(:file)
|
43
|
+
end
|
44
|
+
|
45
|
+
context "with a successful upload" do
|
46
|
+
before :each do
|
47
|
+
allow(task).to receive(:call).and_return(true)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "updates the asset to complete state and returns asset" do
|
51
|
+
upload.asset_id = 123
|
52
|
+
asset = Tessa::Asset.new(id: 123)
|
53
|
+
expect(Tessa::Asset).to receive(:new).with(id: 123).and_return(asset)
|
54
|
+
expect(asset).to receive(:complete!).and_return(:asset)
|
55
|
+
expect(upload.upload_file(:file)).to eq(:asset)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "with a failed upload" do
|
60
|
+
before :each do
|
61
|
+
allow(task).to receive(:call).and_return(false)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "updates the asset to canceled state and returns false" do
|
65
|
+
upload.asset_id = 123
|
66
|
+
asset = Tessa::Asset.new(id: 123)
|
67
|
+
expect(Tessa::Asset).to receive(:new).with(id: 123).and_return(asset)
|
68
|
+
expect(asset).to receive(:cancel!).and_return(:asset)
|
69
|
+
expect(upload.upload_file(:file)).to eq(false)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe ".create" do
|
30
75
|
subject(:call) { described_class.create(call_args) }
|
31
76
|
|
32
77
|
include_examples "remote call macro", :post, "/uploads", Tessa::Upload
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tessa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Powell
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-02-
|
12
|
+
date: 2017-02-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -85,7 +85,8 @@ description: Manage your assets.
|
|
85
85
|
email:
|
86
86
|
- jpowell@watermark.org
|
87
87
|
- tpetticrew@watermark.org
|
88
|
-
executables:
|
88
|
+
executables:
|
89
|
+
- rspec
|
89
90
|
extensions: []
|
90
91
|
extra_rdoc_files: []
|
91
92
|
files:
|
@@ -97,6 +98,7 @@ files:
|
|
97
98
|
- LICENSE.txt
|
98
99
|
- README.md
|
99
100
|
- Rakefile
|
101
|
+
- bin/rspec
|
100
102
|
- circle.yml
|
101
103
|
- lib/tessa.rb
|
102
104
|
- lib/tessa/asset.rb
|
@@ -110,6 +112,7 @@ files:
|
|
110
112
|
- lib/tessa/rack_upload_proxy.rb
|
111
113
|
- lib/tessa/response_factory.rb
|
112
114
|
- lib/tessa/upload.rb
|
115
|
+
- lib/tessa/upload/uploads_file.rb
|
113
116
|
- lib/tessa/version.rb
|
114
117
|
- lib/tessa/view_helpers.rb
|
115
118
|
- spec/spec_helper.rb
|
@@ -123,6 +126,7 @@ files:
|
|
123
126
|
- spec/tessa/model_field_spec.rb
|
124
127
|
- spec/tessa/model_spec.rb
|
125
128
|
- spec/tessa/rack_upload_proxy_spec.rb
|
129
|
+
- spec/tessa/upload/uploads_file_spec.rb
|
126
130
|
- spec/tessa/upload_spec.rb
|
127
131
|
- tessa.gemspec
|
128
132
|
homepage: https://github.com/watermarkchurch/tessa-client
|
@@ -161,4 +165,5 @@ test_files:
|
|
161
165
|
- spec/tessa/model_field_spec.rb
|
162
166
|
- spec/tessa/model_spec.rb
|
163
167
|
- spec/tessa/rack_upload_proxy_spec.rb
|
168
|
+
- spec/tessa/upload/uploads_file_spec.rb
|
164
169
|
- spec/tessa/upload_spec.rb
|