kt-paperclip 6.2.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 +7 -0
- data/.codeclimate.yml +17 -0
- data/.github/issue_template.md +3 -0
- data/.gitignore +19 -0
- data/.hound.yml +1050 -0
- data/.rubocop.yml +1 -0
- data/.travis.yml +47 -0
- data/Appraisals +24 -0
- data/CONTRIBUTING.md +86 -0
- data/Gemfile +18 -0
- data/LICENSE +24 -0
- data/NEWS +515 -0
- data/README.md +1053 -0
- data/RELEASING.md +17 -0
- data/Rakefile +52 -0
- data/UPGRADING +17 -0
- data/features/basic_integration.feature +85 -0
- data/features/migration.feature +29 -0
- data/features/rake_tasks.feature +62 -0
- data/features/step_definitions/attachment_steps.rb +110 -0
- data/features/step_definitions/html_steps.rb +15 -0
- data/features/step_definitions/rails_steps.rb +257 -0
- data/features/step_definitions/s3_steps.rb +14 -0
- data/features/step_definitions/web_steps.rb +106 -0
- data/features/support/env.rb +12 -0
- data/features/support/fakeweb.rb +11 -0
- data/features/support/file_helpers.rb +34 -0
- data/features/support/fixtures/boot_config.txt +15 -0
- data/features/support/fixtures/gemfile.txt +5 -0
- data/features/support/fixtures/preinitializer.txt +20 -0
- data/features/support/paths.rb +28 -0
- data/features/support/rails.rb +39 -0
- data/features/support/selectors.rb +19 -0
- data/gemfiles/4.2.gemfile +20 -0
- data/gemfiles/5.0.gemfile +20 -0
- data/gemfiles/5.1.gemfile +20 -0
- data/gemfiles/5.2.gemfile +20 -0
- data/gemfiles/6.0.gemfile +20 -0
- data/lib/generators/paperclip/USAGE +8 -0
- data/lib/generators/paperclip/paperclip_generator.rb +36 -0
- data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +15 -0
- data/lib/paperclip.rb +215 -0
- data/lib/paperclip/attachment.rb +617 -0
- data/lib/paperclip/attachment_registry.rb +60 -0
- data/lib/paperclip/callbacks.rb +42 -0
- data/lib/paperclip/content_type_detector.rb +80 -0
- data/lib/paperclip/errors.rb +34 -0
- data/lib/paperclip/file_command_content_type_detector.rb +28 -0
- data/lib/paperclip/filename_cleaner.rb +15 -0
- data/lib/paperclip/geometry.rb +157 -0
- data/lib/paperclip/geometry_detector_factory.rb +45 -0
- data/lib/paperclip/geometry_parser_factory.rb +31 -0
- data/lib/paperclip/glue.rb +17 -0
- data/lib/paperclip/has_attached_file.rb +116 -0
- data/lib/paperclip/helpers.rb +60 -0
- data/lib/paperclip/interpolations.rb +201 -0
- data/lib/paperclip/interpolations/plural_cache.rb +18 -0
- data/lib/paperclip/io_adapters/abstract_adapter.rb +75 -0
- data/lib/paperclip/io_adapters/attachment_adapter.rb +47 -0
- data/lib/paperclip/io_adapters/data_uri_adapter.rb +22 -0
- data/lib/paperclip/io_adapters/empty_string_adapter.rb +19 -0
- data/lib/paperclip/io_adapters/file_adapter.rb +26 -0
- data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +16 -0
- data/lib/paperclip/io_adapters/identity_adapter.rb +17 -0
- data/lib/paperclip/io_adapters/nil_adapter.rb +37 -0
- data/lib/paperclip/io_adapters/registry.rb +36 -0
- data/lib/paperclip/io_adapters/stringio_adapter.rb +36 -0
- data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +44 -0
- data/lib/paperclip/io_adapters/uri_adapter.rb +68 -0
- data/lib/paperclip/locales/en.yml +18 -0
- data/lib/paperclip/logger.rb +21 -0
- data/lib/paperclip/matchers.rb +64 -0
- data/lib/paperclip/matchers/have_attached_file_matcher.rb +54 -0
- data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +101 -0
- data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +59 -0
- data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +97 -0
- data/lib/paperclip/media_type_spoof_detector.rb +90 -0
- data/lib/paperclip/missing_attachment_styles.rb +84 -0
- data/lib/paperclip/processor.rb +56 -0
- data/lib/paperclip/processor_helpers.rb +52 -0
- data/lib/paperclip/rails_environment.rb +21 -0
- data/lib/paperclip/railtie.rb +31 -0
- data/lib/paperclip/schema.rb +81 -0
- data/lib/paperclip/storage.rb +3 -0
- data/lib/paperclip/storage/filesystem.rb +99 -0
- data/lib/paperclip/storage/fog.rb +252 -0
- data/lib/paperclip/storage/s3.rb +461 -0
- data/lib/paperclip/style.rb +106 -0
- data/lib/paperclip/tempfile.rb +42 -0
- data/lib/paperclip/tempfile_factory.rb +22 -0
- data/lib/paperclip/thumbnail.rb +131 -0
- data/lib/paperclip/url_generator.rb +76 -0
- data/lib/paperclip/validators.rb +73 -0
- data/lib/paperclip/validators/attachment_content_type_validator.rb +88 -0
- data/lib/paperclip/validators/attachment_file_name_validator.rb +75 -0
- data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +28 -0
- data/lib/paperclip/validators/attachment_presence_validator.rb +28 -0
- data/lib/paperclip/validators/attachment_size_validator.rb +109 -0
- data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +29 -0
- data/lib/paperclip/version.rb +3 -0
- data/lib/tasks/paperclip.rake +140 -0
- data/paperclip.gemspec +50 -0
- data/shoulda_macros/paperclip.rb +134 -0
- data/spec/database.yml +4 -0
- data/spec/paperclip/attachment_definitions_spec.rb +13 -0
- data/spec/paperclip/attachment_processing_spec.rb +79 -0
- data/spec/paperclip/attachment_registry_spec.rb +158 -0
- data/spec/paperclip/attachment_spec.rb +1590 -0
- data/spec/paperclip/content_type_detector_spec.rb +47 -0
- data/spec/paperclip/file_command_content_type_detector_spec.rb +40 -0
- data/spec/paperclip/filename_cleaner_spec.rb +13 -0
- data/spec/paperclip/geometry_detector_spec.rb +38 -0
- data/spec/paperclip/geometry_parser_spec.rb +73 -0
- data/spec/paperclip/geometry_spec.rb +255 -0
- data/spec/paperclip/glue_spec.rb +42 -0
- data/spec/paperclip/has_attached_file_spec.rb +78 -0
- data/spec/paperclip/integration_spec.rb +702 -0
- data/spec/paperclip/interpolations_spec.rb +270 -0
- data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +160 -0
- data/spec/paperclip/io_adapters/attachment_adapter_spec.rb +140 -0
- data/spec/paperclip/io_adapters/data_uri_adapter_spec.rb +88 -0
- data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
- data/spec/paperclip/io_adapters/file_adapter_spec.rb +131 -0
- data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +137 -0
- data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
- data/spec/paperclip/io_adapters/nil_adapter_spec.rb +25 -0
- data/spec/paperclip/io_adapters/registry_spec.rb +35 -0
- data/spec/paperclip/io_adapters/stringio_adapter_spec.rb +64 -0
- data/spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb +146 -0
- data/spec/paperclip/io_adapters/uri_adapter_spec.rb +221 -0
- data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
- data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +108 -0
- data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
- data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
- data/spec/paperclip/media_type_spoof_detector_spec.rb +120 -0
- data/spec/paperclip/meta_class_spec.rb +30 -0
- data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +88 -0
- data/spec/paperclip/paperclip_spec.rb +196 -0
- data/spec/paperclip/plural_cache_spec.rb +37 -0
- data/spec/paperclip/processor_helpers_spec.rb +57 -0
- data/spec/paperclip/processor_spec.rb +26 -0
- data/spec/paperclip/rails_environment_spec.rb +30 -0
- data/spec/paperclip/rake_spec.rb +103 -0
- data/spec/paperclip/schema_spec.rb +252 -0
- data/spec/paperclip/storage/filesystem_spec.rb +79 -0
- data/spec/paperclip/storage/fog_spec.rb +560 -0
- data/spec/paperclip/storage/s3_live_spec.rb +188 -0
- data/spec/paperclip/storage/s3_spec.rb +1695 -0
- data/spec/paperclip/style_spec.rb +251 -0
- data/spec/paperclip/tempfile_factory_spec.rb +33 -0
- data/spec/paperclip/tempfile_spec.rb +35 -0
- data/spec/paperclip/thumbnail_spec.rb +504 -0
- data/spec/paperclip/url_generator_spec.rb +221 -0
- data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
- data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +159 -0
- data/spec/paperclip/validators/attachment_presence_validator_spec.rb +85 -0
- data/spec/paperclip/validators/attachment_size_validator_spec.rb +235 -0
- data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +48 -0
- data/spec/paperclip/validators_spec.rb +164 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/support/assertions.rb +84 -0
- data/spec/support/fake_model.rb +24 -0
- data/spec/support/fake_rails.rb +12 -0
- data/spec/support/fixtures/12k.png +0 -0
- data/spec/support/fixtures/50x50.png +0 -0
- data/spec/support/fixtures/5k.png +0 -0
- data/spec/support/fixtures/animated +0 -0
- data/spec/support/fixtures/animated.gif +0 -0
- data/spec/support/fixtures/animated.unknown +0 -0
- data/spec/support/fixtures/bad.png +1 -0
- data/spec/support/fixtures/empty.html +1 -0
- data/spec/support/fixtures/empty.xlsx +0 -0
- data/spec/support/fixtures/fog.yml +8 -0
- data/spec/support/fixtures/rotated.jpg +0 -0
- data/spec/support/fixtures/s3.yml +8 -0
- data/spec/support/fixtures/spaced file.jpg +0 -0
- data/spec/support/fixtures/spaced file.png +0 -0
- data/spec/support/fixtures/text.txt +1 -0
- data/spec/support/fixtures/twopage.pdf +0 -0
- data/spec/support/fixtures/uppercase.PNG +0 -0
- data/spec/support/matchers/accept.rb +5 -0
- data/spec/support/matchers/exist.rb +5 -0
- data/spec/support/matchers/have_column.rb +23 -0
- data/spec/support/mock_attachment.rb +24 -0
- data/spec/support/mock_interpolator.rb +24 -0
- data/spec/support/mock_url_generator_builder.rb +26 -0
- data/spec/support/model_reconstruction.rb +72 -0
- data/spec/support/reporting.rb +11 -0
- data/spec/support/test_data.rb +13 -0
- data/spec/support/version_helper.rb +9 -0
- metadata +586 -0
@@ -0,0 +1,196 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paperclip do
|
4
|
+
context ".run" do
|
5
|
+
before do
|
6
|
+
Paperclip.options[:log_command] = false
|
7
|
+
expect(Terrapin::CommandLine).to receive(:new).with("convert", "stuff", {}).and_return(double(run: nil))
|
8
|
+
@original_command_line_path = Terrapin::CommandLine.path
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
Paperclip.options[:log_command] = true
|
13
|
+
Terrapin::CommandLine.path = @original_command_line_path
|
14
|
+
end
|
15
|
+
|
16
|
+
it "runs the command with Terrapin" do
|
17
|
+
Paperclip.run("convert", "stuff")
|
18
|
+
end
|
19
|
+
|
20
|
+
it "saves Terrapin::CommandLine.path that set before" do
|
21
|
+
Terrapin::CommandLine.path = "/opt/my_app/bin"
|
22
|
+
Paperclip.run("convert", "stuff")
|
23
|
+
expect(Terrapin::CommandLine.path).to match("/opt/my_app/bin")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "does not duplicate Terrapin::CommandLine.path on multiple runs" do
|
27
|
+
expect(Terrapin::CommandLine).to receive(:new).with("convert", "more_stuff", {}).and_return(double(run: nil))
|
28
|
+
Terrapin::CommandLine.path = nil
|
29
|
+
Paperclip.options[:command_path] = "/opt/my_app/bin"
|
30
|
+
Paperclip.run("convert", "stuff")
|
31
|
+
Paperclip.run("convert", "more_stuff")
|
32
|
+
|
33
|
+
cmd_path = Paperclip.options[:command_path]
|
34
|
+
assert_equal 1, Terrapin::CommandLine.path.scan(cmd_path).count
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it "does not raise errors when doing a lot of running" do
|
39
|
+
Paperclip.options[:command_path] = ["/usr/local/bin"] * 1024
|
40
|
+
Terrapin::CommandLine.path = "/something/else"
|
41
|
+
100.times do |x|
|
42
|
+
Paperclip.run("echo", x.to_s)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "Calling Paperclip.log without options[:logger] set" do
|
47
|
+
before do
|
48
|
+
Paperclip.logger = nil
|
49
|
+
Paperclip.options[:logger] = nil
|
50
|
+
end
|
51
|
+
|
52
|
+
after do
|
53
|
+
Paperclip.options[:logger] = ActiveRecord::Base.logger
|
54
|
+
Paperclip.logger = ActiveRecord::Base.logger
|
55
|
+
end
|
56
|
+
|
57
|
+
it "does not raise an error when log is called" do
|
58
|
+
silence_stream(STDOUT) do
|
59
|
+
Paperclip.log("something")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
context "Calling Paperclip.run with a logger" do
|
64
|
+
it "passes the defined logger if :log_command is set" do
|
65
|
+
Paperclip.options[:log_command] = true
|
66
|
+
expect(Terrapin::CommandLine).to receive(:new).with("convert", "stuff", logger: Paperclip.logger).and_return(double(run: nil))
|
67
|
+
Paperclip.run("convert", "stuff")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "Paperclip.each_instance_with_attachment" do
|
72
|
+
before do
|
73
|
+
@file = File.new(fixture_file("5k.png"), "rb")
|
74
|
+
d1 = Dummy.create(avatar: @file)
|
75
|
+
d2 = Dummy.create
|
76
|
+
d3 = Dummy.create(avatar: @file)
|
77
|
+
@expected = [d1, d3]
|
78
|
+
end
|
79
|
+
|
80
|
+
after { @file.close }
|
81
|
+
|
82
|
+
it "yields every instance of a model that has an attachment" do
|
83
|
+
actual = []
|
84
|
+
Paperclip.each_instance_with_attachment("Dummy", "avatar") do |instance|
|
85
|
+
actual << instance
|
86
|
+
end
|
87
|
+
expect(actual).to match_array @expected
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it "raises when sent #processor and the name of a class that doesn't exist" do
|
92
|
+
assert_raises(LoadError) { Paperclip.processor(:boogey_man) }
|
93
|
+
end
|
94
|
+
|
95
|
+
it "returns a class when sent #processor and the name of a class under Paperclip" do
|
96
|
+
assert_equal ::Paperclip::Thumbnail, Paperclip.processor(:thumbnail)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "gets a class from a namespaced class name" do
|
100
|
+
class ::One; class Two; end; end
|
101
|
+
assert_equal ::One::Two, Paperclip.class_for("One::Two")
|
102
|
+
end
|
103
|
+
|
104
|
+
it "raises when class doesn't exist in specified namespace" do
|
105
|
+
class ::Three; end
|
106
|
+
class ::Four; end
|
107
|
+
assert_raises NameError do
|
108
|
+
Paperclip.class_for("Three::Four")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context "An ActiveRecord model with an 'avatar' attachment" do
|
113
|
+
before do
|
114
|
+
rebuild_model path: "tmp/:class/omg/:style.:extension"
|
115
|
+
@file = File.new(fixture_file("5k.png"), "rb")
|
116
|
+
end
|
117
|
+
|
118
|
+
after { @file.close }
|
119
|
+
|
120
|
+
it "does not error when trying to also create a 'blah' attachment" do
|
121
|
+
assert_nothing_raised do
|
122
|
+
Dummy.class_eval do
|
123
|
+
has_attached_file :blah
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context "with a subclass" do
|
129
|
+
before do
|
130
|
+
class ::SubDummy < Dummy; end
|
131
|
+
end
|
132
|
+
|
133
|
+
it "is able to use the attachment from the subclass" do
|
134
|
+
assert_nothing_raised do
|
135
|
+
@subdummy = SubDummy.create(avatar: @file)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
after do
|
140
|
+
SubDummy.delete_all
|
141
|
+
begin
|
142
|
+
Object.send(:remove_const, "SubDummy")
|
143
|
+
rescue StandardError
|
144
|
+
nil
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
it "has an avatar getter method" do
|
150
|
+
assert Dummy.new.respond_to?(:avatar)
|
151
|
+
end
|
152
|
+
|
153
|
+
it "has an avatar setter method" do
|
154
|
+
assert Dummy.new.respond_to?(:avatar=)
|
155
|
+
end
|
156
|
+
|
157
|
+
context "that is valid" do
|
158
|
+
before do
|
159
|
+
@dummy = Dummy.new
|
160
|
+
@dummy.avatar = @file
|
161
|
+
end
|
162
|
+
|
163
|
+
it "is valid" do
|
164
|
+
assert @dummy.valid?
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
it "does not have Attachment in the ActiveRecord::Base namespace" do
|
169
|
+
assert_raises(NameError) do
|
170
|
+
ActiveRecord::Base::Attachment
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "configuring a custom processor" do
|
176
|
+
before do
|
177
|
+
@freedom_processor = Class.new do
|
178
|
+
def make(file, _options = {}, _attachment = nil)
|
179
|
+
file
|
180
|
+
end
|
181
|
+
end.new
|
182
|
+
|
183
|
+
Paperclip.configure do |config|
|
184
|
+
config.register_processor(:freedom, @freedom_processor)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
it "is able to find the custom processor" do
|
189
|
+
assert_equal @freedom_processor, Paperclip.processor(:freedom)
|
190
|
+
end
|
191
|
+
|
192
|
+
after do
|
193
|
+
Paperclip.clear_processors!
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Plural cache" do
|
4
|
+
it "caches pluralizations" do
|
5
|
+
cache = Paperclip::Interpolations::PluralCache.new
|
6
|
+
symbol = :box
|
7
|
+
|
8
|
+
first = cache.pluralize_symbol(symbol)
|
9
|
+
second = cache.pluralize_symbol(symbol)
|
10
|
+
expect(first).to equal(second)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "caches pluralizations and underscores" do
|
14
|
+
class BigBox; end
|
15
|
+
cache = Paperclip::Interpolations::PluralCache.new
|
16
|
+
klass = BigBox
|
17
|
+
|
18
|
+
first = cache.underscore_and_pluralize_class(klass)
|
19
|
+
second = cache.underscore_and_pluralize_class(klass)
|
20
|
+
expect(first).to equal(second)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "pluralizes words" do
|
24
|
+
cache = Paperclip::Interpolations::PluralCache.new
|
25
|
+
symbol = :box
|
26
|
+
|
27
|
+
expect(cache.pluralize_symbol(symbol)).to eq("boxes")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "pluralizes and underscore class names" do
|
31
|
+
class BigBox; end
|
32
|
+
cache = Paperclip::Interpolations::PluralCache.new
|
33
|
+
klass = BigBox
|
34
|
+
|
35
|
+
expect(cache.underscore_and_pluralize_class(klass)).to eq("big_boxes")
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paperclip::ProcessorHelpers do
|
4
|
+
describe ".load_processor" do
|
5
|
+
context "when the file exists in lib/paperclip" do
|
6
|
+
it "loads it correctly" do
|
7
|
+
pathname = Pathname.new("my_app")
|
8
|
+
main_path = "main_path"
|
9
|
+
alternate_path = "alternate_path"
|
10
|
+
|
11
|
+
allow(Rails).to receive(:root).and_return(pathname)
|
12
|
+
expect(File).to receive(:expand_path).with(pathname.join("lib/paperclip", "custom.rb")).and_return(main_path)
|
13
|
+
expect(File).to receive(:expand_path).with(pathname.join("lib/paperclip_processors", "custom.rb")).and_return(alternate_path)
|
14
|
+
expect(File).to receive(:exist?).with(main_path).and_return(true)
|
15
|
+
expect(File).to receive(:exist?).with(alternate_path).and_return(false)
|
16
|
+
|
17
|
+
expect(Paperclip).to receive(:require).with(main_path)
|
18
|
+
|
19
|
+
Paperclip.load_processor(:custom)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when the file exists in lib/paperclip_processors" do
|
24
|
+
it "loads it correctly" do
|
25
|
+
pathname = Pathname.new("my_app")
|
26
|
+
main_path = "main_path"
|
27
|
+
alternate_path = "alternate_path"
|
28
|
+
|
29
|
+
allow(Rails).to receive(:root).and_return(pathname)
|
30
|
+
expect(File).to receive(:expand_path).with(pathname.join("lib/paperclip", "custom.rb")).and_return(main_path)
|
31
|
+
expect(File).to receive(:expand_path).with(pathname.join("lib/paperclip_processors", "custom.rb")).and_return(alternate_path)
|
32
|
+
expect(File).to receive(:exist?).with(main_path).and_return(false)
|
33
|
+
expect(File).to receive(:exist?).with(alternate_path).and_return(true)
|
34
|
+
|
35
|
+
expect(Paperclip).to receive(:require).with(alternate_path)
|
36
|
+
|
37
|
+
Paperclip.load_processor(:custom)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when the file does not exist in lib/paperclip_processors" do
|
42
|
+
it "raises an error" do
|
43
|
+
pathname = Pathname.new("my_app")
|
44
|
+
main_path = "main_path"
|
45
|
+
alternate_path = "alternate_path"
|
46
|
+
|
47
|
+
allow(Rails).to receive(:root).and_return(pathname)
|
48
|
+
allow(File).to receive(:expand_path).with(pathname.join("lib/paperclip", "custom.rb")).and_return(main_path)
|
49
|
+
allow(File).to receive(:expand_path).with(pathname.join("lib/paperclip_processors", "custom.rb")).and_return(alternate_path)
|
50
|
+
allow(File).to receive(:exist?).with(main_path).and_return(false)
|
51
|
+
allow(File).to receive(:exist?).with(alternate_path).and_return(false)
|
52
|
+
|
53
|
+
assert_raises(LoadError) { Paperclip.processor(:custom) }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paperclip::Processor do
|
4
|
+
it "instantiates and call #make when sent #make to the class" do
|
5
|
+
processor = double
|
6
|
+
expect(processor).to receive(:make)
|
7
|
+
expect(Paperclip::Processor).to receive(:new).with(:one, :two, :three).and_return(processor)
|
8
|
+
Paperclip::Processor.make(:one, :two, :three)
|
9
|
+
end
|
10
|
+
|
11
|
+
context "Calling #convert" do
|
12
|
+
it "runs the convert command with Terrapin" do
|
13
|
+
Paperclip.options[:log_command] = false
|
14
|
+
expect(Terrapin::CommandLine).to receive(:new).with("convert", "stuff", {}).and_return(double(run: nil))
|
15
|
+
Paperclip::Processor.new("filename").convert("stuff")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "Calling #identify" do
|
20
|
+
it "runs the identify command with Terrapin" do
|
21
|
+
Paperclip.options[:log_command] = false
|
22
|
+
expect(Terrapin::CommandLine).to receive(:new).with("identify", "stuff", {}).and_return(double(run: nil))
|
23
|
+
Paperclip::Processor.new("filename").identify("stuff")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Paperclip::RailsEnvironment do
|
4
|
+
it "returns nil when Rails isn't defined" do
|
5
|
+
resetting_rails_to(nil) do
|
6
|
+
expect(Paperclip::RailsEnvironment.get).to be_nil
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it "returns nil when Rails.env isn't defined" do
|
11
|
+
resetting_rails_to({}) do
|
12
|
+
expect(Paperclip::RailsEnvironment.get).to be_nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns the value of Rails.env if it is set" do
|
17
|
+
resetting_rails_to(OpenStruct.new(env: "foo")) do
|
18
|
+
expect(Paperclip::RailsEnvironment.get).to eq "foo"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def resetting_rails_to(new_value)
|
23
|
+
previous_rails = Object.send(:remove_const, "Rails")
|
24
|
+
Object.const_set("Rails", new_value) unless new_value.nil?
|
25
|
+
yield
|
26
|
+
ensure
|
27
|
+
Object.send(:remove_const, "Rails") if Object.const_defined?("Rails")
|
28
|
+
Object.const_set("Rails", previous_rails)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "rake"
|
3
|
+
load "./lib/tasks/paperclip.rake"
|
4
|
+
|
5
|
+
describe Rake do
|
6
|
+
context "calling `rake paperclip:refresh:thumbnails`" do
|
7
|
+
before do
|
8
|
+
rebuild_model
|
9
|
+
allow(Paperclip::Task).to receive(:obtain_class).and_return("Dummy")
|
10
|
+
@bogus_instance = Dummy.new
|
11
|
+
@bogus_instance.id = "some_id"
|
12
|
+
allow(@bogus_instance.avatar).to receive(:reprocess!)
|
13
|
+
@valid_instance = Dummy.new
|
14
|
+
allow(@valid_instance.avatar).to receive(:reprocess!)
|
15
|
+
allow(Paperclip::Task).to receive(:log_error)
|
16
|
+
allow(Paperclip).to receive(:each_instance_with_attachment).and_yield(@bogus_instance).and_yield(@valid_instance)
|
17
|
+
end
|
18
|
+
context "when there is an exception in reprocess!" do
|
19
|
+
before do
|
20
|
+
allow(@bogus_instance.avatar).to receive(:reprocess!).and_raise
|
21
|
+
end
|
22
|
+
|
23
|
+
it "catches the exception" do
|
24
|
+
assert_nothing_raised do
|
25
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "continues to the next instance" do
|
30
|
+
expect(@valid_instance.avatar).to receive(:reprocess!)
|
31
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
32
|
+
end
|
33
|
+
|
34
|
+
it "prints the exception" do
|
35
|
+
exception_msg = "Some Exception"
|
36
|
+
allow(@bogus_instance.avatar).to receive(:reprocess!).and_raise(exception_msg)
|
37
|
+
expect(Paperclip::Task).to receive(:log_error) do |str|
|
38
|
+
str.match exception_msg
|
39
|
+
end
|
40
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
41
|
+
end
|
42
|
+
|
43
|
+
it "prints the class name" do
|
44
|
+
expect(Paperclip::Task).to receive(:log_error) do |str|
|
45
|
+
str.match "Dummy"
|
46
|
+
end
|
47
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
48
|
+
end
|
49
|
+
|
50
|
+
it "prints the instance ID" do
|
51
|
+
expect(Paperclip::Task).to receive(:log_error) do |str|
|
52
|
+
str.match "ID #{@bogus_instance.id}"
|
53
|
+
end
|
54
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "when there is an error in reprocess!" do
|
59
|
+
before do
|
60
|
+
@errors = double("errors")
|
61
|
+
allow(@errors).to receive(:full_messages).and_return([""])
|
62
|
+
allow(@errors).to receive(:blank?).and_return(false)
|
63
|
+
allow(@bogus_instance).to receive(:errors).and_return(@errors)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "continues to the next instance" do
|
67
|
+
expect(@valid_instance.avatar).to receive(:reprocess!)
|
68
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
69
|
+
end
|
70
|
+
|
71
|
+
it "prints the error" do
|
72
|
+
error_msg = "Some Error"
|
73
|
+
allow(@errors).to receive(:full_messages).and_return([error_msg])
|
74
|
+
expect(Paperclip::Task).to receive(:log_error) do |str|
|
75
|
+
str.match error_msg
|
76
|
+
end
|
77
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
78
|
+
end
|
79
|
+
|
80
|
+
it "prints the class name" do
|
81
|
+
expect(Paperclip::Task).to receive(:log_error) do |str|
|
82
|
+
str.match "Dummy"
|
83
|
+
end
|
84
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
85
|
+
end
|
86
|
+
|
87
|
+
it "prints the instance ID" do
|
88
|
+
expect(Paperclip::Task).to receive(:log_error) do |str|
|
89
|
+
str.match "ID #{@bogus_instance.id}"
|
90
|
+
end
|
91
|
+
::Rake::Task["paperclip:refresh:thumbnails"].execute
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "Paperclip::Task.log_error method" do
|
97
|
+
it "prints its argument to STDERR" do
|
98
|
+
msg = "Some Message"
|
99
|
+
expect($stderr).to receive(:puts).with(msg)
|
100
|
+
Paperclip::Task.log_error(msg)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|