saviour 0.5.10 → 0.5.11

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.
@@ -23,6 +23,7 @@ describe "remove attachment" do
23
23
 
24
24
  a.remove_file!
25
25
 
26
+ expect(a.file.persisted?).to be_falsey
26
27
  expect(a.file.read).to be_falsey
27
28
  expect(a[:file]).to be_nil
28
29
  end
@@ -44,24 +45,49 @@ describe "remove attachment" do
44
45
  a = klass.create! file: Saviour::StringSource.new("Some contents", "filename.txt")
45
46
 
46
47
  expect(a.file.read).to eq "Some contents"
48
+ path = a[:file]
47
49
 
48
50
  ActiveRecord::Base.transaction do
49
51
  a.remove_file!
50
52
  raise ActiveRecord::Rollback
51
53
  end
52
54
 
55
+ # Changes only propagate once the model is manually reloaded, same as any
56
+ # other AR attribute
57
+ expect(a.file.persisted?).to be_falsey
58
+
59
+ a.reload
60
+
61
+ expect(a.file.persisted?).to be_truthy
53
62
  expect(a.file.read).to eq "Some contents"
54
- expect(a[:file]).to be_present
63
+ expect(Saviour::Config.storage.exists?(path)).to be_truthy
64
+ end
65
+
66
+ it "removes associated file and column after commit" do
67
+ a = klass.create! file: Saviour::StringSource.new("Some contents", "filename.txt")
68
+
69
+ expect(a.file.read).to eq "Some contents"
70
+ path = a[:file]
71
+
72
+ ActiveRecord::Base.transaction do
73
+ a.remove_file!
74
+ expect(Saviour::Config.storage.exists?(path)).to be_truthy
75
+ end
76
+
77
+ expect(Saviour::Config.storage.exists?(path)).to be_falsey
78
+ expect(a.file.read).to be_falsey
79
+ expect(a[:file]).to be_nil
55
80
  end
56
81
 
57
- it "removes associated file and column on commit" do
82
+ it "attachment appears as nil after deletion and before commit" do
58
83
  a = klass.create! file: Saviour::StringSource.new("Some contents", "filename.txt")
59
84
 
60
85
  expect(a.file.read).to eq "Some contents"
61
86
 
62
87
  ActiveRecord::Base.transaction do
63
88
  a.remove_file!
64
- expect(a.file.read).to eq "Some contents"
89
+ expect(a.file.persisted?).to be_falsey
90
+ expect(a[:file]).to be_nil
65
91
  end
66
92
 
67
93
  expect(a.file.read).to be_falsey
@@ -79,6 +105,27 @@ describe "remove attachment" do
79
105
  expect(a.file.read).to be_falsey
80
106
  expect(a[:file]).to be_nil
81
107
  end
108
+
109
+ it "allows for the same file path to be deleted and later updated" do
110
+ a = klass.create! file: Saviour::StringSource.new("Some contents", "filename.txt")
111
+ path = a[:file]
112
+
113
+ ActiveRecord::Base.transaction do
114
+ a.remove_file!
115
+ expect(a.file.persisted?).to be_falsey
116
+ expect(Saviour::Config.storage.exists?(path)).to be_truthy
117
+ expect(Saviour::Config.storage.read(path)).to eq "Some contents"
118
+
119
+ a.update_attributes!(file: Saviour::StringSource.new("Other contents", "filename.txt"))
120
+ expect(a.file.persisted?).to be_truthy
121
+ expect(a.file.read).to eq "Other contents"
122
+ expect(Saviour::Config.storage.exists?(path)).to be_truthy
123
+ end
124
+
125
+ # Deletion has not occurred
126
+ expect(Saviour::Config.storage.exists?(path)).to be_truthy
127
+ expect(Saviour::Config.storage.read(path)).to eq "Other contents"
128
+ end
82
129
  end
83
130
 
84
131
  context "with followers" do
@@ -72,10 +72,9 @@ describe "stash data on process" do
72
72
 
73
73
  a = klass.create!
74
74
 
75
- # - 1 initial empty query
76
75
  # - 2 queries to update size
77
76
  # - 1 query to assign stored paths
78
- expect_to_yield_queries(count: 4) do
77
+ expect_to_yield_queries(count: 3) do
79
78
  a.update_attributes! file: Saviour::StringSource.new("a" * 74, "file.txt"),
80
79
  file_thumb: Saviour::StringSource.new("a" * 31, "file_2.txt")
81
80
  end
@@ -131,8 +131,7 @@ describe Saviour::File do
131
131
 
132
132
  describe "#filename" do
133
133
  it "returns the filename of the persisted file" do
134
- file = Saviour::File.new(uploader_klass, dummy_class.new, :file)
135
- file.set_path! "/mocked/path/file.rar"
134
+ file = Saviour::File.new(uploader_klass, dummy_class.new, :file, "/mocked/path/file.rar")
136
135
  expect(file.filename).to eq "file.rar"
137
136
  end
138
137
 
@@ -149,8 +148,7 @@ describe Saviour::File do
149
148
  end
150
149
 
151
150
  it "it's false when not yet assigned but persisted" do
152
- file = Saviour::File.new(uploader_klass, dummy_class.new, :file)
153
- file.set_path! "/path/dummy.jpg"
151
+ file = Saviour::File.new(uploader_klass, dummy_class.new, :file, "/path/dummy.jpg")
154
152
  expect(file).not_to be_blank
155
153
  end
156
154
 
@@ -161,16 +159,14 @@ describe Saviour::File do
161
159
  end
162
160
 
163
161
  it "it's false when persisted and assigned" do
164
- file = Saviour::File.new(uploader_klass, dummy_class.new, :file)
165
- file.set_path! "/path/dummy.jpg"
162
+ file = Saviour::File.new(uploader_klass, dummy_class.new, :file, "/path/dummy.jpg")
166
163
  expect(file).not_to be_blank
167
164
  end
168
165
  end
169
166
 
170
167
  describe "#clone" do
171
168
  it "returns a cloned instance pointing to the same stored file" do
172
- file = Saviour::File.new(uploader_klass, dummy_class.new, :file)
173
- file.set_path! "/path/dummy.jpg"
169
+ file = Saviour::File.new(uploader_klass, dummy_class.new, :file, "/path/dummy.jpg")
174
170
 
175
171
  new_file = file.clone
176
172
  expect(new_file.persisted_path).to eq "/path/dummy.jpg"
@@ -179,16 +175,10 @@ describe Saviour::File do
179
175
 
180
176
  describe "#==" do
181
177
  it "compares by object persisted path if persisted" do
182
- a = Saviour::File.new(uploader_klass, dummy_class.new, :file)
183
- a.set_path! "/path/dummy.jpg"
184
-
185
- b = Saviour::File.new(uploader_klass, dummy_class.new, :file)
186
- b.set_path! "/path/dummy.jpg"
178
+ a = Saviour::File.new(uploader_klass, dummy_class.new, :file, "/path/dummy.jpg")
179
+ b = Saviour::File.new(uploader_klass, dummy_class.new, :file, "/path/dummy.jpg")
187
180
 
188
181
  expect(a).to eq b
189
-
190
- b.set_path! "/path/dummy2.jpg"
191
- expect(a).to_not eq b
192
182
  end
193
183
 
194
184
  it "compares by content if not persisted" do
@@ -30,6 +30,15 @@ RSpec.configure do |config|
30
30
  end
31
31
 
32
32
  ActiveSupport::Notifications.subscribe "sql.active_record" do |name, started, finished, unique_id, data|
33
- AssertionsTracker.data.push(data[:sql]) if data[:name] == "SQL"
33
+ if ActiveRecord.gem_version >= Gem::Version.new("5.2.0")
34
+ if data[:name] =~ /(Create|Update|Destroy)/
35
+ sql = data[:sql]
36
+ sql = sql.gsub("?").with_index { |_, i| ActiveRecord::Base.connection.quote(data[:type_casted_binds][i]) }
37
+
38
+ AssertionsTracker.data.push(sql)
39
+ end
40
+ else
41
+ AssertionsTracker.data.push(data[:sql]) if data[:name] == "SQL"
42
+ end
34
43
  end
35
44
 
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.5.10
4
+ version: 0.5.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Campos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-29 00:00:00.000000000 Z
11
+ date: 2018-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,34 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '5.2'
19
+ version: '5.1'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: '5.0'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '5.2'
26
+ version: '5.1'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: activesupport
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - ">="
38
32
  - !ruby/object:Gem::Version
39
- version: '5.0'
33
+ version: '5.1'
40
34
  type: :runtime
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - ">="
45
39
  - !ruby/object:Gem::Version
46
- version: '5.0'
40
+ version: '5.1'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: concurrent-ruby
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -184,8 +178,8 @@ files:
184
178
  - LICENSE.txt
185
179
  - README.md
186
180
  - Rakefile
187
- - gemfiles/5.0.gemfile
188
181
  - gemfiles/5.1.gemfile
182
+ - gemfiles/5.2.gemfile
189
183
  - lib/saviour.rb
190
184
  - lib/saviour/base_uploader.rb
191
185
  - lib/saviour/config.rb
@@ -196,6 +190,7 @@ files:
196
190
  - lib/saviour/local_storage.rb
197
191
  - lib/saviour/model.rb
198
192
  - lib/saviour/persistence_layer.rb
193
+ - lib/saviour/read_only_file.rb
199
194
  - lib/saviour/s3_storage.rb
200
195
  - lib/saviour/source_filename_extractor.rb
201
196
  - lib/saviour/string_source.rb
@@ -206,7 +201,7 @@ files:
206
201
  - lib/saviour/version.rb
207
202
  - saviour.gemspec
208
203
  - spec/feature/allow_overriding_attached_as_method_spec.rb
209
- - spec/feature/concurrent_processors_spec.rb
204
+ - spec/feature/concurrency_spec.rb
210
205
  - spec/feature/crud_workflows_spec.rb
211
206
  - spec/feature/dirty_spec.rb
212
207
  - spec/feature/follow_file_spec.rb