paperclip 3.5.2 → 5.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +17 -0
  3. data/.gitignore +0 -6
  4. data/.hound.yml +1055 -0
  5. data/.rubocop.yml +1 -0
  6. data/.travis.yml +19 -13
  7. data/Appraisals +4 -16
  8. data/CONTRIBUTING.md +29 -13
  9. data/Gemfile +10 -7
  10. data/LICENSE +1 -3
  11. data/NEWS +226 -23
  12. data/README.md +494 -152
  13. data/RELEASING.md +17 -0
  14. data/Rakefile +6 -8
  15. data/UPGRADING +12 -9
  16. data/features/basic_integration.feature +27 -8
  17. data/features/migration.feature +0 -24
  18. data/features/step_definitions/attachment_steps.rb +36 -28
  19. data/features/step_definitions/html_steps.rb +2 -2
  20. data/features/step_definitions/rails_steps.rb +68 -37
  21. data/features/step_definitions/s3_steps.rb +2 -2
  22. data/features/step_definitions/web_steps.rb +1 -103
  23. data/features/support/env.rb +3 -2
  24. data/features/support/file_helpers.rb +2 -2
  25. data/features/support/fixtures/gemfile.txt +1 -1
  26. data/features/support/paths.rb +1 -1
  27. data/features/support/rails.rb +2 -25
  28. data/gemfiles/4.2.gemfile +17 -0
  29. data/gemfiles/5.0.gemfile +17 -0
  30. data/lib/generators/paperclip/paperclip_generator.rb +0 -2
  31. data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
  32. data/lib/paperclip/attachment.rb +160 -47
  33. data/lib/paperclip/attachment_registry.rb +4 -1
  34. data/lib/paperclip/callbacks.rb +13 -1
  35. data/lib/paperclip/content_type_detector.rb +26 -24
  36. data/lib/paperclip/errors.rb +8 -1
  37. data/lib/paperclip/file_command_content_type_detector.rb +6 -8
  38. data/lib/paperclip/geometry_detector_factory.rb +10 -3
  39. data/lib/paperclip/geometry_parser_factory.rb +1 -1
  40. data/lib/paperclip/glue.rb +1 -1
  41. data/lib/paperclip/has_attached_file.rb +17 -1
  42. data/lib/paperclip/helpers.rb +14 -10
  43. data/lib/paperclip/interpolations/plural_cache.rb +6 -5
  44. data/lib/paperclip/interpolations.rb +27 -14
  45. data/lib/paperclip/io_adapters/abstract_adapter.rb +28 -4
  46. data/lib/paperclip/io_adapters/attachment_adapter.rb +13 -8
  47. data/lib/paperclip/io_adapters/data_uri_adapter.rb +11 -16
  48. data/lib/paperclip/io_adapters/empty_string_adapter.rb +5 -4
  49. data/lib/paperclip/io_adapters/file_adapter.rb +12 -6
  50. data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +8 -8
  51. data/lib/paperclip/io_adapters/identity_adapter.rb +12 -6
  52. data/lib/paperclip/io_adapters/nil_adapter.rb +8 -5
  53. data/lib/paperclip/io_adapters/registry.rb +6 -2
  54. data/lib/paperclip/io_adapters/stringio_adapter.rb +15 -16
  55. data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +10 -6
  56. data/lib/paperclip/io_adapters/uri_adapter.rb +41 -19
  57. data/lib/paperclip/locales/en.yml +1 -0
  58. data/lib/paperclip/matchers/have_attached_file_matcher.rb +2 -1
  59. data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +4 -4
  60. data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +2 -1
  61. data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
  62. data/lib/paperclip/media_type_spoof_detector.rb +89 -0
  63. data/lib/paperclip/processor.rb +5 -41
  64. data/lib/paperclip/processor_helpers.rb +50 -0
  65. data/lib/paperclip/rails_environment.rb +25 -0
  66. data/lib/paperclip/schema.rb +9 -7
  67. data/lib/paperclip/storage/filesystem.rb +14 -3
  68. data/lib/paperclip/storage/fog.rb +47 -22
  69. data/lib/paperclip/storage/s3.rb +144 -73
  70. data/lib/paperclip/style.rb +8 -2
  71. data/lib/paperclip/tempfile_factory.rb +6 -4
  72. data/lib/paperclip/thumbnail.rb +26 -14
  73. data/lib/paperclip/url_generator.rb +25 -14
  74. data/lib/paperclip/validators/attachment_content_type_validator.rb +4 -0
  75. data/lib/paperclip/validators/attachment_file_name_validator.rb +80 -0
  76. data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +29 -0
  77. data/lib/paperclip/validators/attachment_presence_validator.rb +4 -0
  78. data/lib/paperclip/validators/attachment_size_validator.rb +5 -3
  79. data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +27 -0
  80. data/lib/paperclip/validators.rb +12 -3
  81. data/lib/paperclip/version.rb +3 -1
  82. data/lib/paperclip.rb +31 -11
  83. data/lib/tasks/paperclip.rake +34 -5
  84. data/paperclip.gemspec +18 -17
  85. data/shoulda_macros/paperclip.rb +13 -3
  86. data/{test → spec}/database.yml +0 -0
  87. data/spec/paperclip/attachment_definitions_spec.rb +13 -0
  88. data/{test/attachment_processing_test.rb → spec/paperclip/attachment_processing_spec.rb} +17 -20
  89. data/spec/paperclip/attachment_registry_spec.rb +158 -0
  90. data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +524 -400
  91. data/{test/content_type_detector_test.rb → spec/paperclip/content_type_detector_spec.rb} +17 -19
  92. data/{test/file_command_content_type_detector_test.rb → spec/paperclip/file_command_content_type_detector_spec.rb} +7 -6
  93. data/spec/paperclip/filename_cleaner_spec.rb +14 -0
  94. data/spec/paperclip/geometry_detector_spec.rb +39 -0
  95. data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
  96. data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +50 -52
  97. data/spec/paperclip/glue_spec.rb +44 -0
  98. data/spec/paperclip/has_attached_file_spec.rb +158 -0
  99. data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +141 -133
  100. data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +70 -46
  101. data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +101 -0
  102. data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +38 -34
  103. data/spec/paperclip/io_adapters/data_uri_adapter_spec.rb +89 -0
  104. data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
  105. data/spec/paperclip/io_adapters/file_adapter_spec.rb +131 -0
  106. data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +121 -0
  107. data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
  108. data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
  109. data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +12 -9
  110. data/{test/io_adapters/stringio_adapter_test.rb → spec/paperclip/io_adapters/stringio_adapter_spec.rb} +21 -18
  111. data/{test/io_adapters/uploaded_file_adapter_test.rb → spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb} +46 -46
  112. data/spec/paperclip/io_adapters/uri_adapter_spec.rb +172 -0
  113. data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
  114. data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +109 -0
  115. data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
  116. data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
  117. data/spec/paperclip/media_type_spoof_detector_spec.rb +79 -0
  118. data/spec/paperclip/meta_class_spec.rb +30 -0
  119. data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
  120. data/{test/paperclip_test.rb → spec/paperclip/paperclip_spec.rb} +46 -71
  121. data/spec/paperclip/plural_cache_spec.rb +37 -0
  122. data/spec/paperclip/processor_helpers_spec.rb +57 -0
  123. data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +5 -5
  124. data/spec/paperclip/rails_environment_spec.rb +33 -0
  125. data/{test/rake_test.rb → spec/paperclip/rake_spec.rb} +15 -15
  126. data/spec/paperclip/schema_spec.rb +248 -0
  127. data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
  128. data/spec/paperclip/storage/fog_spec.rb +561 -0
  129. data/spec/paperclip/storage/s3_live_spec.rb +188 -0
  130. data/spec/paperclip/storage/s3_spec.rb +1693 -0
  131. data/spec/paperclip/style_spec.rb +255 -0
  132. data/spec/paperclip/tempfile_factory_spec.rb +33 -0
  133. data/spec/paperclip/tempfile_spec.rb +35 -0
  134. data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +150 -131
  135. data/spec/paperclip/url_generator_spec.rb +222 -0
  136. data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
  137. data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
  138. data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +20 -20
  139. data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +77 -64
  140. data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +52 -0
  141. data/spec/paperclip/validators_spec.rb +164 -0
  142. data/spec/spec_helper.rb +47 -0
  143. data/spec/support/assertions.rb +82 -0
  144. data/spec/support/conditional_filter_helper.rb +5 -0
  145. data/spec/support/fake_model.rb +25 -0
  146. data/spec/support/fake_rails.rb +12 -0
  147. data/{test → spec/support}/fixtures/12k.png +0 -0
  148. data/{test → spec/support}/fixtures/50x50.png +0 -0
  149. data/{test → spec/support}/fixtures/5k.png +0 -0
  150. data/{test → spec/support}/fixtures/animated +0 -0
  151. data/{test → spec/support}/fixtures/animated.gif +0 -0
  152. data/{test → spec/support}/fixtures/animated.unknown +0 -0
  153. data/{test → spec/support}/fixtures/bad.png +0 -0
  154. data/spec/support/fixtures/empty.html +1 -0
  155. data/spec/support/fixtures/empty.xlsx +0 -0
  156. data/{test → spec/support}/fixtures/fog.yml +0 -0
  157. data/{test → spec/support}/fixtures/rotated.jpg +0 -0
  158. data/{test → spec/support}/fixtures/s3.yml +0 -0
  159. data/spec/support/fixtures/spaced file.jpg +0 -0
  160. data/{test → spec/support}/fixtures/spaced file.png +0 -0
  161. data/{test → spec/support}/fixtures/text.txt +0 -0
  162. data/{test → spec/support}/fixtures/twopage.pdf +0 -0
  163. data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
  164. data/spec/support/matchers/accept.rb +5 -0
  165. data/spec/support/matchers/exist.rb +5 -0
  166. data/spec/support/matchers/have_column.rb +23 -0
  167. data/{test → spec}/support/mock_attachment.rb +2 -0
  168. data/{test → spec}/support/mock_interpolator.rb +0 -0
  169. data/{test → spec}/support/mock_url_generator_builder.rb +2 -2
  170. data/spec/support/model_reconstruction.rb +68 -0
  171. data/spec/support/reporting.rb +11 -0
  172. data/spec/support/test_data.rb +13 -0
  173. data/spec/support/version_helper.rb +9 -0
  174. metadata +262 -297
  175. data/RUNNING_TESTS.md +0 -4
  176. data/cucumber/paperclip_steps.rb +0 -6
  177. data/gemfiles/3.0.gemfile +0 -11
  178. data/gemfiles/3.1.gemfile +0 -11
  179. data/gemfiles/3.2.gemfile +0 -11
  180. data/gemfiles/4.0.gemfile +0 -11
  181. data/test/attachment_definitions_test.rb +0 -12
  182. data/test/attachment_registry_test.rb +0 -77
  183. data/test/filename_cleaner_test.rb +0 -14
  184. data/test/generator_test.rb +0 -80
  185. data/test/geometry_detector_test.rb +0 -24
  186. data/test/has_attached_file_test.rb +0 -125
  187. data/test/helper.rb +0 -215
  188. data/test/io_adapters/abstract_adapter_test.rb +0 -58
  189. data/test/io_adapters/data_uri_adapter_test.rb +0 -67
  190. data/test/io_adapters/empty_string_adapter_test.rb +0 -17
  191. data/test/io_adapters/file_adapter_test.rb +0 -119
  192. data/test/io_adapters/http_url_proxy_adapter_test.rb +0 -102
  193. data/test/io_adapters/identity_adapter_test.rb +0 -8
  194. data/test/io_adapters/uri_adapter_test.rb +0 -102
  195. data/test/matchers/have_attached_file_matcher_test.rb +0 -24
  196. data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -110
  197. data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -69
  198. data/test/matchers/validate_attachment_size_matcher_test.rb +0 -86
  199. data/test/meta_class_test.rb +0 -32
  200. data/test/paperclip_missing_attachment_styles_test.rb +0 -90
  201. data/test/plural_cache_test.rb +0 -36
  202. data/test/schema_test.rb +0 -200
  203. data/test/storage/fog_test.rb +0 -453
  204. data/test/storage/s3_live_test.rb +0 -179
  205. data/test/storage/s3_test.rb +0 -1348
  206. data/test/style_test.rb +0 -213
  207. data/test/support/mock_model.rb +0 -2
  208. data/test/tempfile_factory_test.rb +0 -13
  209. data/test/url_generator_test.rb +0 -187
  210. data/test/validators/attachment_content_type_validator_test.rb +0 -323
  211. data/test/validators_test.rb +0 -32
data/test/style_test.rb DELETED
@@ -1,213 +0,0 @@
1
- # encoding: utf-8
2
- require './test/helper'
3
-
4
- class StyleTest < Test::Unit::TestCase
5
-
6
- context "A style rule" do
7
- setup do
8
- @attachment = attachment :path => ":basename.:extension",
9
- :styles => { :foo => {:geometry => "100x100#", :format => :png} },
10
- :whiny => true
11
- @style = @attachment.styles[:foo]
12
- end
13
-
14
- should "be held as a Style object" do
15
- assert_kind_of Paperclip::Style, @style
16
- end
17
-
18
- should "get processors from the attachment definition" do
19
- assert_equal [:thumbnail], @style.processors
20
- end
21
-
22
- should "have the right geometry" do
23
- assert_equal "100x100#", @style.geometry
24
- end
25
-
26
- should "be whiny if the attachment is" do
27
- assert @style.whiny?
28
- end
29
-
30
- should "respond to hash notation" do
31
- assert_equal [:thumbnail], @style[:processors]
32
- assert_equal "100x100#", @style[:geometry]
33
- end
34
- end
35
-
36
- context "A style rule with properties supplied as procs" do
37
- setup do
38
- @attachment = attachment :path => ":basename.:extension",
39
- :whiny_thumbnails => true,
40
- :processors => lambda {|a| [:test]},
41
- :styles => {
42
- :foo => lambda{|a| "300x300#"},
43
- :bar => {
44
- :geometry => lambda{|a| "300x300#"},
45
- :convert_options => lambda{|a| "-do_stuff"},
46
- :source_file_options => lambda{|a| "-do_extra_stuff"}
47
- }
48
- }
49
- end
50
-
51
- should "call procs when they are needed" do
52
- assert_equal "300x300#", @attachment.styles[:foo].geometry
53
- assert_equal "300x300#", @attachment.styles[:bar].geometry
54
- assert_equal [:test], @attachment.styles[:foo].processors
55
- assert_equal [:test], @attachment.styles[:bar].processors
56
- assert_equal "-do_stuff", @attachment.styles[:bar].convert_options
57
- assert_equal "-do_extra_stuff", @attachment.styles[:bar].source_file_options
58
- end
59
- end
60
-
61
- context "An attachment with style rules in various forms" do
62
- setup do
63
- styles = {}
64
- styles[:aslist] = ["100x100", :png]
65
- styles[:ashash] = {:geometry => "100x100", :format => :png}
66
- styles[:asstring] = "100x100"
67
- @attachment = attachment :path => ":basename.:extension",
68
- :styles => styles
69
- end
70
- should "have the right number of styles" do
71
- assert_kind_of Hash, @attachment.styles
72
- assert_equal 3, @attachment.styles.size
73
- end
74
-
75
- should "have styles as Style objects" do
76
- [:aslist, :ashash, :aslist].each do |s|
77
- assert_kind_of Paperclip::Style, @attachment.styles[s]
78
- end
79
- end
80
-
81
- should "have the right geometries" do
82
- [:aslist, :ashash, :aslist].each do |s|
83
- assert_equal @attachment.styles[s].geometry, "100x100"
84
- end
85
- end
86
-
87
- should "have the right formats" do
88
- assert_equal @attachment.styles[:aslist].format, :png
89
- assert_equal @attachment.styles[:ashash].format, :png
90
- assert_nil @attachment.styles[:asstring].format
91
- end
92
-
93
- should "retain order" do
94
- assert_equal [:aslist, :ashash, :asstring], @attachment.styles.keys
95
- end
96
- end
97
-
98
- context "An attachment with :convert_options" do
99
- should "not have called extra_options_for(:thumb/:large) on initialization" do
100
- @attachment = attachment :path => ":basename.:extension",
101
- :styles => {:thumb => "100x100", :large => "400x400"},
102
- :convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"}
103
- @attachment.expects(:extra_options_for).never
104
- @style = @attachment.styles[:thumb]
105
- end
106
-
107
- should "call extra_options_for(:thumb/:large) when convert options are requested" do
108
- @attachment = attachment :path => ":basename.:extension",
109
- :styles => {:thumb => "100x100", :large => "400x400"},
110
- :convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"}
111
- @style = @attachment.styles[:thumb]
112
- @file = StringIO.new("...")
113
- @file.stubs(:original_filename).returns("file.jpg")
114
-
115
- @attachment.expects(:extra_options_for).with(:thumb)
116
- @attachment.styles[:thumb].convert_options
117
- end
118
- end
119
-
120
- context "An attachment with :source_file_options" do
121
- should "not have called extra_source_file_options_for(:thumb/:large) on initialization" do
122
- @attachment = attachment :path => ":basename.:extension",
123
- :styles => {:thumb => "100x100", :large => "400x400"},
124
- :source_file_options => {:all => "-density 400", :thumb => "-depth 8"}
125
- @attachment.expects(:extra_source_file_options_for).never
126
- @style = @attachment.styles[:thumb]
127
- end
128
-
129
- should "call extra_options_for(:thumb/:large) when convert options are requested" do
130
- @attachment = attachment :path => ":basename.:extension",
131
- :styles => {:thumb => "100x100", :large => "400x400"},
132
- :source_file_options => {:all => "-density 400", :thumb => "-depth 8"}
133
- @style = @attachment.styles[:thumb]
134
- @file = StringIO.new("...")
135
- @file.stubs(:original_filename).returns("file.jpg")
136
-
137
- @attachment.expects(:extra_source_file_options_for).with(:thumb)
138
- @attachment.styles[:thumb].source_file_options
139
- end
140
- end
141
-
142
- context "A style rule with its own :processors" do
143
- setup do
144
- @attachment = attachment :path => ":basename.:extension",
145
- :styles => {
146
- :foo => {
147
- :geometry => "100x100#",
148
- :format => :png,
149
- :processors => [:test]
150
- }
151
- },
152
- :processors => [:thumbnail]
153
- @style = @attachment.styles[:foo]
154
- end
155
-
156
- should "not get processors from the attachment" do
157
- @attachment.expects(:processors).never
158
- assert_not_equal [:thumbnail], @style.processors
159
- end
160
-
161
- should "report its own processors" do
162
- assert_equal [:test], @style.processors
163
- end
164
-
165
- end
166
-
167
- context "A style rule with :processors supplied as procs" do
168
- setup do
169
- @attachment = attachment :path => ":basename.:extension",
170
- :styles => {
171
- :foo => {
172
- :geometry => "100x100#",
173
- :format => :png,
174
- :processors => lambda{|a| [:test]}
175
- }
176
- },
177
- :processors => [:thumbnail]
178
- end
179
-
180
- should "defer processing of procs until they are needed" do
181
- assert_kind_of Proc, @attachment.styles[:foo].instance_variable_get("@processors")
182
- end
183
-
184
- should "call procs when they are needed" do
185
- assert_equal [:test], @attachment.styles[:foo].processors
186
- end
187
- end
188
-
189
- context "An attachment with :convert_options and :source_file_options in :styles" do
190
- setup do
191
- @attachment = attachment :path => ":basename.:extension",
192
- :styles => {
193
- :thumb => "100x100",
194
- :large => {:geometry => "400x400",
195
- :convert_options => "-do_stuff",
196
- :source_file_options => "-do_extra_stuff"
197
- }
198
- }
199
- @file = StringIO.new("...")
200
- @file.stubs(:original_filename).returns("file.jpg")
201
- end
202
-
203
- should "have empty options for :thumb style" do
204
- assert_equal "", @attachment.styles[:thumb].processor_options[:convert_options]
205
- assert_equal "", @attachment.styles[:thumb].processor_options[:source_file_options]
206
- end
207
-
208
- should "have the right options for :large style" do
209
- assert_equal "-do_stuff", @attachment.styles[:large].processor_options[:convert_options]
210
- assert_equal "-do_extra_stuff", @attachment.styles[:large].processor_options[:source_file_options]
211
- end
212
- end
213
- end
@@ -1,2 +0,0 @@
1
- class MockModel
2
- end
@@ -1,13 +0,0 @@
1
- require './test/helper'
2
-
3
- class Paperclip::TempfileFactoryTest < Test::Unit::TestCase
4
- should "be able to generate a tempfile with the right name" do
5
- file = subject.generate("omg.png")
6
- end
7
- should "be able to generate a tempfile with the right name with a tilde at the beginning" do
8
- file = subject.generate("~omg.png")
9
- end
10
- should "be able to generate a tempfile with the right name with a tilde at the end" do
11
- file = subject.generate("omg.png~")
12
- end
13
- end
@@ -1,187 +0,0 @@
1
- # encoding: utf-8
2
- require './test/helper'
3
- require 'paperclip/url_generator'
4
-
5
- class UrlGeneratorTest < Test::Unit::TestCase
6
- should "use the given interpolator" do
7
- expected = "the expected result"
8
- mock_attachment = MockAttachment.new
9
- mock_interpolator = MockInterpolator.new(:result => expected)
10
-
11
- url_generator = Paperclip::UrlGenerator.new(mock_attachment,
12
- { :interpolator => mock_interpolator })
13
- result = url_generator.for(:style_name, {})
14
-
15
- assert_equal expected, result
16
- assert mock_interpolator.has_interpolated_attachment?(mock_attachment)
17
- assert mock_interpolator.has_interpolated_style_name?(:style_name)
18
- end
19
-
20
- should "use the default URL when no file is assigned" do
21
- mock_attachment = MockAttachment.new
22
- mock_interpolator = MockInterpolator.new
23
- default_url = "the default url"
24
- options = { :interpolator => mock_interpolator, :default_url => default_url}
25
-
26
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
27
- url_generator.for(:style_name, {})
28
-
29
- assert mock_interpolator.has_interpolated_pattern?(default_url),
30
- "expected the interpolator to be passed #{default_url.inspect} but it wasn't"
31
- end
32
-
33
- should "execute the default URL lambda when no file is assigned" do
34
- mock_attachment = MockAttachment.new
35
- mock_interpolator = MockInterpolator.new
36
- default_url = lambda {|attachment| "the #{attachment.class.name} default url" }
37
- options = { :interpolator => mock_interpolator, :default_url => default_url}
38
-
39
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
40
- url_generator.for(:style_name, {})
41
-
42
- assert mock_interpolator.has_interpolated_pattern?("the MockAttachment default url"),
43
- %{expected the interpolator to be passed "the MockAttachment default url", but it wasn't}
44
- end
45
-
46
- should "execute the method named by the symbol as the default URL when no file is assigned" do
47
- mock_model = MockModel.new
48
- mock_attachment = MockAttachment.new(:model => mock_model)
49
- mock_interpolator = MockInterpolator.new
50
- default_url = :to_s
51
- options = { :interpolator => mock_interpolator, :default_url => default_url}
52
-
53
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
54
- url_generator.for(:style_name, {})
55
-
56
- assert mock_interpolator.has_interpolated_pattern?(mock_model.to_s),
57
- %{expected the interpolator to be passed #{mock_model.to_s}, but it wasn't}
58
- end
59
-
60
- should "URL-escape spaces if asked to" do
61
- expected = "the expected result"
62
- mock_attachment = MockAttachment.new
63
- mock_interpolator = MockInterpolator.new(:result => expected)
64
- options = { :interpolator => mock_interpolator }
65
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
66
-
67
- result = url_generator.for(:style_name, {:escape => true})
68
-
69
- assert_equal "the%20expected%20result", result
70
- end
71
-
72
- should "escape the result of the interpolator using a method on the object, if asked to escape" do
73
- expected = Class.new do
74
- def escape
75
- "the escaped result"
76
- end
77
- end.new
78
- mock_attachment = MockAttachment.new
79
- mock_interpolator = MockInterpolator.new(:result => expected)
80
- options = { :interpolator => mock_interpolator }
81
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
82
-
83
- result = url_generator.for(:style_name, {:escape => true})
84
-
85
- assert_equal "the escaped result", result
86
- end
87
-
88
- should "leave spaces unescaped as asked to" do
89
- expected = "the expected result"
90
- mock_attachment = MockAttachment.new
91
- mock_interpolator = MockInterpolator.new(:result => expected)
92
- options = { :interpolator => mock_interpolator }
93
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
94
-
95
- result = url_generator.for(:style_name, {:escape => false})
96
-
97
- assert_equal "the expected result", result
98
- end
99
-
100
- should "default to leaving spaces unescaped" do
101
- expected = "the expected result"
102
- mock_attachment = MockAttachment.new
103
- mock_interpolator = MockInterpolator.new(:result => expected)
104
- options = { :interpolator => mock_interpolator }
105
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
106
-
107
- result = url_generator.for(:style_name, {})
108
-
109
- assert_equal "the expected result", result
110
- end
111
-
112
- should "produce URLs without the updated_at value when the object does not respond to updated_at" do
113
- expected = "the expected result"
114
- mock_interpolator = MockInterpolator.new(:result => expected)
115
- mock_attachment = MockAttachment.new(:responds_to_updated_at => false)
116
- options = { :interpolator => mock_interpolator }
117
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
118
-
119
- result = url_generator.for(:style_name, {:timestamp => true})
120
-
121
- assert_equal expected, result
122
- end
123
-
124
- should "produce URLs without the updated_at value when the updated_at value is nil" do
125
- expected = "the expected result"
126
- mock_interpolator = MockInterpolator.new(:result => expected)
127
- mock_attachment = MockAttachment.new(:responds_to_updated_at => true, :updated_at => nil)
128
- options = { :interpolator => mock_interpolator }
129
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
130
-
131
- result = url_generator.for(:style_name, {:timestamp => true})
132
-
133
- assert_equal expected, result
134
- end
135
-
136
- should "produce URLs with the updated_at when it exists" do
137
- expected = "the expected result"
138
- updated_at = 1231231234
139
- mock_interpolator = MockInterpolator.new(:result => expected)
140
- mock_attachment = MockAttachment.new(:updated_at => updated_at)
141
- options = { :interpolator => mock_interpolator }
142
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
143
-
144
- result = url_generator.for(:style_name, {:timestamp => true})
145
-
146
- assert_equal "#{expected}?#{updated_at}", result
147
- end
148
-
149
- should "produce URLs with the updated_at when it exists, separated with a & if a ? follow by = already exists" do
150
- expected = "the?expected=result"
151
- updated_at = 1231231234
152
- mock_interpolator = MockInterpolator.new(:result => expected)
153
- mock_attachment = MockAttachment.new(:updated_at => updated_at)
154
- options = { :interpolator => mock_interpolator }
155
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
156
-
157
- result = url_generator.for(:style_name, {:timestamp => true})
158
-
159
- assert_equal "#{expected}&#{updated_at}", result
160
- end
161
-
162
- should "produce URLs without the updated_at when told to do as much" do
163
- expected = "the expected result"
164
- updated_at = 1231231234
165
- mock_interpolator = MockInterpolator.new(:result => expected)
166
- mock_attachment = MockAttachment.new(:updated_at => updated_at)
167
- options = { :interpolator => mock_interpolator }
168
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
169
-
170
- result = url_generator.for(:style_name, {:timestamp => false})
171
-
172
- assert_equal expected, result
173
- end
174
-
175
- should "produce the correct URL when the instance has a file name" do
176
- expected = "the expected result"
177
- mock_attachment = MockAttachment.new(:original_filename => 'exists')
178
- mock_interpolator = MockInterpolator.new
179
- options = { :interpolator => mock_interpolator, :url => expected}
180
-
181
- url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
182
- url_generator.for(:style_name, {})
183
-
184
- assert mock_interpolator.has_interpolated_pattern?(expected),
185
- "expected the interpolator to be passed #{expected.inspect} but it wasn't"
186
- end
187
- end