tessa 0.4.0 → 0.5.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/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +7 -7
- data/lib/tessa.rb +1 -1
- data/lib/tessa/asset.rb +6 -0
- data/lib/tessa/asset/failure.rb +37 -0
- data/lib/tessa/model.rb +8 -0
- data/lib/tessa/version.rb +1 -1
- data/lib/tessa/view_helpers.rb +21 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/tessa/asset/failure_spec.rb +48 -0
- data/spec/tessa/asset_change_set_spec.rb +2 -2
- data/spec/tessa/asset_spec.rb +7 -1
- data/spec/tessa/model_spec.rb +75 -0
- data/tessa.gemspec +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8a12436b10f2fa00988bce92ba546e84d7d39f33
|
|
4
|
+
data.tar.gz: b601a69166646ac06659519cecee7f487609edbf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: eb4517664519fcf6f650fc715b1f08cf556df91618bf7ba52a1171b6f9f11fc0bf452276562c563c19ba99a178837422e1fa2e5d8d55ebff89f510fac297d925
|
|
7
|
+
data.tar.gz: a83ec8ea8bc251c9d9420654e98b728d5e524bebade9ad89f3174b11eaebae433a0fa5259137afd6588b3c1ffdc94cc5e990fff24da091b675b259270f18a19f
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -35,12 +35,12 @@ TODO: Write usage instructions here
|
|
|
35
35
|
4. Push to the branch (`git push origin my-new-feature`)
|
|
36
36
|
5. Create a new Pull Request
|
|
37
37
|
|
|
38
|
-
[0]: https://github.com/watermarkchurch/tessa
|
|
38
|
+
[0]: https://github.com/watermarkchurch/tessa-client
|
|
39
39
|
[1]: https://img.shields.io/gem/v/tessa.svg?style=flat
|
|
40
40
|
[2]: http://rubygems.org/gems/tessa "Gem Version"
|
|
41
|
-
[3]: https://img.shields.io/travis/watermarkchurch/tessa/master.svg?style=flat
|
|
42
|
-
[4]: https://travis-ci.org/watermarkchurch/tessa "Build Status"
|
|
43
|
-
[5]: https://codeclimate.com/github/watermarkchurch/tessa/badges/coverage.svg
|
|
44
|
-
[6]: https://codeclimate.com/github/watermarkchurch/tessa "Coverage Status"
|
|
45
|
-
[7]: https://img.shields.io/codeclimate/github/watermarkchurch/tessa.svg?style=flat
|
|
46
|
-
[8]: https://codeclimate.com/github/watermarkchurch/tessa "Code Climate"
|
|
41
|
+
[3]: https://img.shields.io/travis/watermarkchurch/tessa-client/master.svg?style=flat
|
|
42
|
+
[4]: https://travis-ci.org/watermarkchurch/tessa-client "Build Status"
|
|
43
|
+
[5]: https://codeclimate.com/github/watermarkchurch/tessa-client/badges/coverage.svg
|
|
44
|
+
[6]: https://codeclimate.com/github/watermarkchurch/tessa-client "Coverage Status"
|
|
45
|
+
[7]: https://img.shields.io/codeclimate/github/watermarkchurch/tessa-client.svg?style=flat
|
|
46
|
+
[8]: https://codeclimate.com/github/watermarkchurch/tessa-client "Code Climate"
|
data/lib/tessa.rb
CHANGED
data/lib/tessa/asset.rb
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'delegate'
|
|
2
|
+
|
|
3
|
+
class Tessa::Asset::Failure < SimpleDelegator
|
|
4
|
+
attr_reader :message
|
|
5
|
+
|
|
6
|
+
def initialize(id:, message:)
|
|
7
|
+
@message = message
|
|
8
|
+
super(::Tessa::Asset.new(id: id))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.factory(id:, response:)
|
|
12
|
+
new(id: id, message: message_from_status(response.status))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.message_from_status(status)
|
|
16
|
+
case status.to_s
|
|
17
|
+
when /5\d{2}/
|
|
18
|
+
"The service is unavailable at this time."
|
|
19
|
+
when /4\d{2}/
|
|
20
|
+
"There was a problem retrieving the data for this asset."
|
|
21
|
+
else
|
|
22
|
+
"An error occurred."
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def failure?
|
|
27
|
+
true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def meta
|
|
31
|
+
{
|
|
32
|
+
name: "Not Found",
|
|
33
|
+
size: "0",
|
|
34
|
+
mime_type: "application/octet-stream"
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/tessa/model.rb
CHANGED
|
@@ -38,6 +38,14 @@ module Tessa
|
|
|
38
38
|
else
|
|
39
39
|
Tessa::Asset.find(ids)
|
|
40
40
|
end
|
|
41
|
+
rescue Tessa::RequestFailed => err
|
|
42
|
+
if ids.is_a?(Array)
|
|
43
|
+
ids.map do |id|
|
|
44
|
+
Tessa::Asset::Failure.factory(id: id, response: err.response)
|
|
45
|
+
end
|
|
46
|
+
else
|
|
47
|
+
Tessa::Asset::Failure.factory(id: ids, response: err.response)
|
|
48
|
+
end
|
|
41
49
|
end
|
|
42
50
|
|
|
43
51
|
end
|
data/lib/tessa/version.rb
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Tessa
|
|
2
|
+
module ViewHelpers
|
|
3
|
+
def tessa_image_tag(asset)
|
|
4
|
+
handle_asset_failure(asset) do
|
|
5
|
+
image_tag(asset.private_url)
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def handle_asset_failure(asset)
|
|
12
|
+
if asset.failure?
|
|
13
|
+
content_tag(:div, asset.message, class: "tessa-asset-failure")
|
|
14
|
+
else
|
|
15
|
+
yield
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
ActionView::Base.send :include, Tessa::ViewHelpers if defined?(ActionView)
|
data/spec/spec_helper.rb
CHANGED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
RSpec.describe Tessa::Asset::Failure do
|
|
4
|
+
subject(:failure) { described_class.new(args) }
|
|
5
|
+
let(:id) { rand(100) }
|
|
6
|
+
let(:args) {
|
|
7
|
+
{ id: id, message: "Test" }
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
describe "#initialize" do
|
|
11
|
+
it "sets id to attribute" do
|
|
12
|
+
expect(failure.id).to eq(args[:id])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "sets message to attribute" do
|
|
16
|
+
expect(failure.message).to eq(args[:message])
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe ".factory" do
|
|
21
|
+
let(:message) { 'test message' }
|
|
22
|
+
let(:response) { double(status: 500) }
|
|
23
|
+
subject(:failure) { described_class.factory(id: id, response: response) }
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
it "returns instance of Failure" do
|
|
27
|
+
expect(described_class).to receive(:message_from_status)
|
|
28
|
+
.with(response.status).and_return(message)
|
|
29
|
+
expect(failure.id).to eq(id)
|
|
30
|
+
expect(failure.message).to eq(message)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "responds like a blank asset" do
|
|
35
|
+
asset = Tessa::Asset.new
|
|
36
|
+
expect(failure.status).to eq(asset.status)
|
|
37
|
+
expect(failure.strategy).to eq(asset.strategy)
|
|
38
|
+
expect(failure.public_url).to eq(asset.public_url)
|
|
39
|
+
expect(failure.private_url).to eq(asset.private_url)
|
|
40
|
+
expect(failure.delete_url).to eq(asset.delete_url)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe "#failure?" do
|
|
44
|
+
it "returns true" do
|
|
45
|
+
expect(failure).to be_failure
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -90,8 +90,8 @@ RSpec.describe Tessa::AssetChangeSet do
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
it "only calls apply on unique elements" do
|
|
93
|
-
expect(set.changes
|
|
94
|
-
|
|
93
|
+
expect(el = set.changes.uniq.first).to receive(:apply)
|
|
94
|
+
(set.changes - [el]).each { |o| expect(el).to_not receive(:apply) }
|
|
95
95
|
set.apply
|
|
96
96
|
end
|
|
97
97
|
end
|
data/spec/tessa/asset_spec.rb
CHANGED
|
@@ -65,7 +65,13 @@ RSpec.describe Tessa::Asset do
|
|
|
65
65
|
include_examples "remote call macro", :delete, "/assets/123", Tessa::Asset
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
describe "#
|
|
68
|
+
describe "#failure?" do
|
|
69
|
+
it "returns false" do
|
|
70
|
+
expect(asset.failure?).to be(false)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe ".find" do
|
|
69
75
|
let(:faraday_stubs) {
|
|
70
76
|
Faraday::Adapter::Test::Stubs.new do |stub|
|
|
71
77
|
stub.get("/assets/#{id_query}") { |env| [200, {}, remote_response.to_json] }
|
data/spec/tessa/model_spec.rb
CHANGED
|
@@ -327,6 +327,81 @@ RSpec.describe Tessa::Model do
|
|
|
327
327
|
end
|
|
328
328
|
end
|
|
329
329
|
|
|
330
|
+
describe "#fetch_tessa_remote_assets" do
|
|
331
|
+
subject(:result) { model.new.fetch_tessa_remote_assets(arg) }
|
|
332
|
+
|
|
333
|
+
before do
|
|
334
|
+
model.asset :avatar
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
context "argument is `nil`" do
|
|
338
|
+
let(:arg) { nil }
|
|
339
|
+
|
|
340
|
+
it "returns nil" do
|
|
341
|
+
expect(result).to be_nil
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
context "argument is `[]`" do
|
|
346
|
+
let(:arg) { [] }
|
|
347
|
+
|
|
348
|
+
it "returns []" do
|
|
349
|
+
expect(result).to be_a(Array)
|
|
350
|
+
expect(result).to be_empty
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
context "when argument is not blank" do
|
|
355
|
+
let(:id) { rand(100) }
|
|
356
|
+
let(:arg) { id }
|
|
357
|
+
|
|
358
|
+
it "calls Tessa::Asset.find with arguments" do
|
|
359
|
+
expect(Tessa::Asset).to receive(:find).with(arg)
|
|
360
|
+
result
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
context "when Tessa::Asset.find raises RequestFailed exception" do
|
|
364
|
+
let(:error) {
|
|
365
|
+
Tessa::RequestFailed.new("test exception", double(status: '500'))
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
before do
|
|
369
|
+
allow(Tessa::Asset).to receive(:find).and_raise(error)
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
context "argument is single id" do
|
|
373
|
+
let(:arg) { id }
|
|
374
|
+
|
|
375
|
+
it "returns Failure" do
|
|
376
|
+
expect(result).to be_a(Tessa::Asset::Failure)
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
it "returns asset with proper data" do
|
|
380
|
+
expect(result.id).to eq(arg)
|
|
381
|
+
end
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
context "argument is array" do
|
|
385
|
+
let(:arg) { [ id, id * 2 ] }
|
|
386
|
+
|
|
387
|
+
it "returns array" do
|
|
388
|
+
expect(result).to be_a(Array)
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
it "returns instances of Failure" do
|
|
392
|
+
expect(result).to all( be_a(Tessa::Asset::Failure) )
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
it "returns array with an asset for each id passed" do
|
|
396
|
+
arg.zip(result) do |a, r|
|
|
397
|
+
expect(r.id).to eq(a)
|
|
398
|
+
end
|
|
399
|
+
end
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
end
|
|
404
|
+
|
|
330
405
|
describe "#remove_all_tessa_assets" do
|
|
331
406
|
let(:instance) { model.new }
|
|
332
407
|
before do
|
data/tessa.gemspec
CHANGED
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
|
10
10
|
spec.email = ["jpowell@watermark.org", "tpetticrew@watermark.org"]
|
|
11
11
|
spec.summary = %q{Manage your assets.}
|
|
12
12
|
spec.description = %q{Manage your assets.}
|
|
13
|
-
spec.homepage = "https://github.com/watermarkchurch/tessa"
|
|
13
|
+
spec.homepage = "https://github.com/watermarkchurch/tessa-client"
|
|
14
14
|
spec.license = "MIT"
|
|
15
15
|
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
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.5.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: 2015-
|
|
12
|
+
date: 2015-05-12 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: faraday
|
|
@@ -99,6 +99,7 @@ files:
|
|
|
99
99
|
- Rakefile
|
|
100
100
|
- lib/tessa.rb
|
|
101
101
|
- lib/tessa/asset.rb
|
|
102
|
+
- lib/tessa/asset/failure.rb
|
|
102
103
|
- lib/tessa/asset_change.rb
|
|
103
104
|
- lib/tessa/asset_change_set.rb
|
|
104
105
|
- lib/tessa/config.rb
|
|
@@ -109,8 +110,10 @@ files:
|
|
|
109
110
|
- lib/tessa/response_factory.rb
|
|
110
111
|
- lib/tessa/upload.rb
|
|
111
112
|
- lib/tessa/version.rb
|
|
113
|
+
- lib/tessa/view_helpers.rb
|
|
112
114
|
- spec/spec_helper.rb
|
|
113
115
|
- spec/support/remote_call_macro.rb
|
|
116
|
+
- spec/tessa/asset/failure_spec.rb
|
|
114
117
|
- spec/tessa/asset_change_set_spec.rb
|
|
115
118
|
- spec/tessa/asset_change_spec.rb
|
|
116
119
|
- spec/tessa/asset_spec.rb
|
|
@@ -121,7 +124,7 @@ files:
|
|
|
121
124
|
- spec/tessa/rack_upload_proxy_spec.rb
|
|
122
125
|
- spec/tessa/upload_spec.rb
|
|
123
126
|
- tessa.gemspec
|
|
124
|
-
homepage: https://github.com/watermarkchurch/tessa
|
|
127
|
+
homepage: https://github.com/watermarkchurch/tessa-client
|
|
125
128
|
licenses:
|
|
126
129
|
- MIT
|
|
127
130
|
metadata: {}
|
|
@@ -148,6 +151,7 @@ summary: Manage your assets.
|
|
|
148
151
|
test_files:
|
|
149
152
|
- spec/spec_helper.rb
|
|
150
153
|
- spec/support/remote_call_macro.rb
|
|
154
|
+
- spec/tessa/asset/failure_spec.rb
|
|
151
155
|
- spec/tessa/asset_change_set_spec.rb
|
|
152
156
|
- spec/tessa/asset_change_spec.rb
|
|
153
157
|
- spec/tessa/asset_spec.rb
|