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 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