tessa 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b7f3dd0551a23f631be89b7befc712c7ddbd0e59
4
- data.tar.gz: 35378a19a53e6f06410b4527618ea422040a6fdd
3
+ metadata.gz: 8a12436b10f2fa00988bce92ba546e84d7d39f33
4
+ data.tar.gz: b601a69166646ac06659519cecee7f487609edbf
5
5
  SHA512:
6
- metadata.gz: 2b13cd9b633e0a3185a5dcea73743c99e8362348ee5640433185fa3d66fae7467c641e2204cd1499767c7ff2801cc4b8d49aa8c793b79357db6fa0214ac9537e
7
- data.tar.gz: 08a6da9b9941798f92fe9957b6754e0cdc8434cd31eaa5d7afec23ce55e79ce6cdf0dfcae8ec64132236887b0a33f90734f7e3522f8ce3088606defa5ab3373a
6
+ metadata.gz: eb4517664519fcf6f650fc715b1f08cf556df91618bf7ba52a1171b6f9f11fc0bf452276562c563c19ba99a178837422e1fa2e5d8d55ebff89f510fac297d925
7
+ data.tar.gz: a83ec8ea8bc251c9d9420654e98b728d5e524bebade9ad89f3174b11eaebae433a0fa5259137afd6588b3c1ffdc94cc5e990fff24da091b675b259270f18a19f
data/.travis.yml CHANGED
@@ -4,3 +4,6 @@ notifications:
4
4
  email: false
5
5
  rvm:
6
6
  - 2.1.0
7
+ addons:
8
+ code_climate:
9
+ repo_token: a1d1020f21ac7490fa6c577e7718c505a0bc7f13a5e4537ec7ca9f1a594bad07
data/Gemfile CHANGED
@@ -7,3 +7,7 @@ group :development do
7
7
  gem 'pry'
8
8
  gem 'dotenv'
9
9
  end
10
+
11
+ group :test do
12
+ gem "codeclimate-test-reporter", require: nil
13
+ end
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
@@ -13,7 +13,7 @@ require "tessa/controller_helpers"
13
13
  require "tessa/model"
14
14
  require "tessa/rack_upload_proxy"
15
15
  require "tessa/upload"
16
-
16
+ require "tessa/view_helpers"
17
17
 
18
18
  module Tessa
19
19
  def self.config
data/lib/tessa/asset.rb CHANGED
@@ -27,5 +27,11 @@ module Tessa
27
27
  connection: Tessa.config.connection)
28
28
  new_from_response connection.get("/assets/#{ids.join(",")}")
29
29
  end
30
+
31
+ def failure?
32
+ false
33
+ end
30
34
  end
31
35
  end
36
+
37
+ require 'tessa/asset/failure'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Tessa
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -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
@@ -1,3 +1,6 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
1
4
  require 'tessa'
2
5
 
3
6
  Dir[File.expand_path("../support/*.rb", __FILE__)].each do |file|
@@ -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[0]).to receive(:apply)
94
- expect(set.changes[1]).not_to receive(:apply)
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
@@ -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 "#find" do
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] }
@@ -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.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-03-20 00:00:00.000000000 Z
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