saviour 0.4.4 → 0.4.5

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: 74f1d7faa90b8712dbf65f86ce592db60c296ac3
4
- data.tar.gz: 680a73e0bb124fc7de9ca66ea09e1ee486088731
3
+ metadata.gz: 6a8dde206061328305a93bbcbcf03ef6e15d9659
4
+ data.tar.gz: 828b58ec76d1974a88bf595ea2306cded359f752
5
5
  SHA512:
6
- metadata.gz: a152333b01f299de797c04ab0d76a07401ebdf673cb2e2d93f02151b495b4d8d18bafbec884b9ddb53aaf12ae94bf409d0e1769ae60e0e06fa939be14486a2ea
7
- data.tar.gz: eabe42debcdc6c8caf0e48f8fbb4645964bb848329198844607ef0b7b3cd93bd41855bfdf5ccb71aaaac717921c10b6c6203203ad203d3eb1c03236fced79860
6
+ metadata.gz: 0a13bc0dced7f96b5306a6ef7dbb72f01a66d8b9f9f962b4de99697eea8212db71f706abb9f7d12ef1cb29ae5a879d329c408937ddffd9f225d1c35ae4bb4e76
7
+ data.tar.gz: dee3ef8dab84f49536c9c311d23e97cbe66ee6e1e5278fe48f02267720dfa7178a424b814746ba0dd1fdf67d4cd8e213c11f37d17e26144fa1bd281e40a801ea
data/README.md CHANGED
@@ -410,6 +410,20 @@ some File instance different than the one you received pointing to a file.
410
410
 
411
411
  From inside a process you can also access the current store dir with `store_dir`.
412
412
 
413
+ From inside a process, you can also call `halt_process` to abort the current processing and upload of the file.
414
+ This can be useful for example for an "image_thumb" attachment that can be generic. If you're able to generate a
415
+ thumbnail image for the given file, then it works normally, otherwise halt:
416
+
417
+ ```ruby
418
+ process_with_file do |file, filename|
419
+ if can_generate_thumbnail?(file) # Only if jpg, png or pdf file
420
+ create_thumbnail(file, filename)
421
+ else
422
+ halt_process
423
+ end
424
+ end
425
+ ```
426
+
413
427
  Finally, processors can be disabled entirely via a configuration parameter. Example:
414
428
 
415
429
  ```
@@ -22,13 +22,20 @@ module Saviour
22
22
  def write(contents, filename)
23
23
  raise RuntimeError, "Please use `store_dir` before trying to write" unless store_dir
24
24
 
25
- if Config.processing_enabled
26
- contents, filename = Uploader::ProcessorsRunner.new(self).run!(contents, filename)
25
+ catch(:halt_process) do
26
+ if Config.processing_enabled
27
+ contents, filename = Uploader::ProcessorsRunner.new(self).run!(contents, filename)
28
+ end
29
+
30
+ path = ::File.join(store_dir, filename)
31
+ Config.storage.write(contents, path)
32
+
33
+ path
27
34
  end
35
+ end
28
36
 
29
- path = ::File.join(store_dir, filename)
30
- Config.storage.write(contents, path)
31
- path
37
+ def halt_process
38
+ throw(:halt_process)
32
39
  end
33
40
 
34
41
  def store_dir
@@ -105,8 +105,11 @@ module Saviour
105
105
 
106
106
  path = uploader.write(source_data, filename_to_be_assigned)
107
107
  @source_was = @source
108
- @persisted_path = path
109
- path
108
+
109
+ if path
110
+ @persisted_path = path
111
+ path
112
+ end
110
113
  end
111
114
 
112
115
  def source_data
@@ -32,7 +32,7 @@ module Saviour
32
32
  Config.storage.delete(current_path) if current_path
33
33
 
34
34
  new_path = @model.send(column).write
35
- persistence_layer.write(column, new_path) if persistence_layer
35
+ persistence_layer.write(column, new_path) if persistence_layer && new_path
36
36
  end
37
37
 
38
38
  def attached_files
@@ -1,3 +1,3 @@
1
1
  module Saviour
2
- VERSION = "0.4.4"
2
+ VERSION = "0.4.5"
3
3
  end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe "halt processor behavior" do
4
+ before { allow(Saviour::Config).to receive(:storage).and_return(Saviour::LocalStorage.new(local_prefix: @tmpdir, public_url_prefix: "http://domain.com")) }
5
+
6
+ let(:uploader) {
7
+ Class.new(Saviour::BaseUploader) do
8
+ store_dir { "/store/dir" }
9
+ process { |_contents, _name| halt_process }
10
+ end
11
+ }
12
+
13
+ let(:klass) {
14
+ klass = Class.new(Test) {
15
+ include Saviour::Model
16
+ }
17
+ klass.attach_file :file, uploader
18
+ klass
19
+ }
20
+
21
+ it "does not write the file" do
22
+ a = klass.create!
23
+
24
+ expect(Saviour::Config.storage).to_not receive(:write)
25
+
26
+ a.update_attributes! file: StringIO.new("contents")
27
+ expect(a.reload.read_attribute(:file)).to be_nil
28
+ end
29
+
30
+ it "is considered as not persisted after save" do
31
+ a = klass.new
32
+ a.file = StringIO.new("contents")
33
+ expect(a.file.persisted?).to be_falsey
34
+ a.save
35
+ expect(a.file.persisted?).to be_falsey
36
+ end
37
+
38
+ it "is considered as not dirty after save" do
39
+ a = klass.new
40
+ a.file = StringIO.new("contents")
41
+ expect(a.file.changed?).to be_truthy
42
+ a.save
43
+ expect(a.file.changed?).to be_falsey
44
+ end
45
+ end
@@ -28,7 +28,7 @@ describe Saviour::BaseUploader do
28
28
  expect(subject.processors[0][:opts]).to eq({})
29
29
 
30
30
  expect(subject.processors[1][:method_or_block]).to eq :resize
31
- expect(subject.processors[1][:opts]).to eq({width: 50})
31
+ expect(subject.processors[1][:opts]).to eq({ width: 50 })
32
32
  end
33
33
 
34
34
  it do
@@ -66,23 +66,23 @@ describe Saviour::BaseUploader do
66
66
 
67
67
  describe "initialization with data" do
68
68
  it "can declare wathever" do
69
- uploader = Class.new(Saviour::BaseUploader).new(data: {a: "2", data: "my file"})
69
+ uploader = Class.new(Saviour::BaseUploader).new(data: { a: "2", data: "my file" })
70
70
  expect(uploader).to respond_to :a
71
71
  expect(uploader).to respond_to :data
72
72
  expect(uploader.a).to eq "2"
73
73
  end
74
74
 
75
75
  it do
76
- uploader = Class.new(Saviour::BaseUploader).new(data: {a: "2", data: "my file"})
76
+ uploader = Class.new(Saviour::BaseUploader).new(data: { a: "2", data: "my file" })
77
77
  expect(uploader).to respond_to :a
78
78
 
79
- uploader = Class.new(Saviour::BaseUploader).new(data: {name: "johny"})
79
+ uploader = Class.new(Saviour::BaseUploader).new(data: { name: "johny" })
80
80
  expect(uploader).not_to respond_to :a
81
81
  end
82
82
  end
83
83
 
84
84
  describe "#write" do
85
- subject { uploader.new(data: {model: "model", attached_as: "attached_as"}) }
85
+ subject { uploader.new(data: { model: "model", attached_as: "attached_as" }) }
86
86
 
87
87
  context do
88
88
  let(:uploader) { Class.new(Saviour::BaseUploader) }
@@ -173,17 +173,29 @@ describe Saviour::BaseUploader do
173
173
  } }
174
174
 
175
175
  let(:model) { double(id: 8, name: "Robert") }
176
- subject { uploader.new(data: {model: model, attached_as: "attached_as"}) }
176
+ subject { uploader.new(data: { model: model, attached_as: "attached_as" }) }
177
177
 
178
178
  it "can access model from processors" do
179
179
  expect(Saviour::Config.storage).to receive(:write).with("content", "/store/dir/Robert_8_output.png")
180
180
  subject.write("content", "output.png")
181
181
  end
182
182
  end
183
+
184
+ describe "returns nil if halted" do
185
+ let(:uploader) { Class.new(Saviour::BaseUploader) {
186
+ store_dir { "/store/dir" }
187
+ process { halt_process }
188
+ } }
189
+
190
+ it do
191
+ expect(Saviour::Config.storage).to_not receive(:write)
192
+ expect(subject.write("contents", "file.jpg")).to be_nil
193
+ end
194
+ end
183
195
  end
184
196
 
185
197
  describe "#process_with_file" do
186
- subject { uploader.new(data: {model: "model", attached_as: "attached_as"}) }
198
+ subject { uploader.new(data: { model: "model", attached_as: "attached_as" }) }
187
199
 
188
200
  context do
189
201
  let(:uploader) { Class.new(Saviour::BaseUploader) {
@@ -119,7 +119,7 @@ describe Saviour::File do
119
119
 
120
120
  uploader = double
121
121
  allow(file).to receive(:uploader).and_return(uploader)
122
- expect(uploader).to receive(:write)
122
+ expect(uploader).to receive(:write).and_return("/some/path")
123
123
  file.write
124
124
 
125
125
  expect(file).not_to be_changed
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saviour
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Campos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-05 00:00:00.000000000 Z
11
+ date: 2017-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -177,6 +177,7 @@ files:
177
177
  - spec/feature/crud_workflows_spec.rb
178
178
  - spec/feature/dirty_spec.rb
179
179
  - spec/feature/follow_file_spec.rb
180
+ - spec/feature/halt_processor_spec.rb
180
181
  - spec/feature/persisted_path_spec.rb
181
182
  - spec/feature/processors_api.rb
182
183
  - spec/feature/reload_model_spec.rb