paperclip 3.4.0 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +17 -0
  3. data/.github/issue_template.md +3 -0
  4. data/.gitignore +0 -6
  5. data/.hound.yml +1055 -0
  6. data/.rubocop.yml +1 -0
  7. data/.travis.yml +19 -12
  8. data/Appraisals +4 -11
  9. data/CONTRIBUTING.md +29 -13
  10. data/Gemfile +13 -4
  11. data/LICENSE +1 -3
  12. data/MIGRATING-ES.md +317 -0
  13. data/MIGRATING.md +375 -0
  14. data/NEWS +390 -71
  15. data/README.md +607 -152
  16. data/RELEASING.md +17 -0
  17. data/Rakefile +6 -8
  18. data/UPGRADING +12 -9
  19. data/features/basic_integration.feature +34 -21
  20. data/features/migration.feature +0 -24
  21. data/features/rake_tasks.feature +2 -3
  22. data/features/step_definitions/attachment_steps.rb +44 -36
  23. data/features/step_definitions/html_steps.rb +2 -2
  24. data/features/step_definitions/rails_steps.rb +125 -26
  25. data/features/step_definitions/s3_steps.rb +3 -3
  26. data/features/step_definitions/web_steps.rb +1 -103
  27. data/features/support/env.rb +3 -2
  28. data/features/support/fakeweb.rb +4 -1
  29. data/features/support/file_helpers.rb +12 -2
  30. data/features/support/fixtures/gemfile.txt +1 -1
  31. data/features/support/paths.rb +1 -1
  32. data/features/support/rails.rb +4 -11
  33. data/gemfiles/4.2.gemfile +17 -0
  34. data/gemfiles/5.0.gemfile +17 -0
  35. data/lib/generators/paperclip/paperclip_generator.rb +9 -3
  36. data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +2 -2
  37. data/lib/paperclip/attachment.rb +215 -82
  38. data/lib/paperclip/attachment_registry.rb +60 -0
  39. data/lib/paperclip/callbacks.rb +13 -1
  40. data/lib/paperclip/content_type_detector.rb +48 -24
  41. data/lib/paperclip/errors.rb +8 -1
  42. data/lib/paperclip/file_command_content_type_detector.rb +6 -8
  43. data/lib/paperclip/filename_cleaner.rb +15 -0
  44. data/lib/paperclip/geometry_detector_factory.rb +12 -5
  45. data/lib/paperclip/geometry_parser_factory.rb +1 -1
  46. data/lib/paperclip/glue.rb +1 -2
  47. data/lib/paperclip/has_attached_file.rb +115 -0
  48. data/lib/paperclip/helpers.rb +15 -20
  49. data/lib/paperclip/interpolations/plural_cache.rb +18 -0
  50. data/lib/paperclip/interpolations.rb +36 -14
  51. data/lib/paperclip/io_adapters/abstract_adapter.rb +42 -5
  52. data/lib/paperclip/io_adapters/attachment_adapter.rb +20 -9
  53. data/lib/paperclip/io_adapters/data_uri_adapter.rb +22 -0
  54. data/lib/paperclip/io_adapters/empty_string_adapter.rb +19 -0
  55. data/lib/paperclip/io_adapters/file_adapter.rb +13 -7
  56. data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +16 -0
  57. data/lib/paperclip/io_adapters/identity_adapter.rb +12 -6
  58. data/lib/paperclip/io_adapters/nil_adapter.rb +8 -5
  59. data/lib/paperclip/io_adapters/registry.rb +6 -2
  60. data/lib/paperclip/io_adapters/stringio_adapter.rb +15 -16
  61. data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +11 -7
  62. data/lib/paperclip/io_adapters/uri_adapter.rb +43 -19
  63. data/lib/paperclip/locales/en.yml +1 -0
  64. data/lib/paperclip/logger.rb +1 -1
  65. data/lib/paperclip/matchers/have_attached_file_matcher.rb +3 -6
  66. data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +4 -4
  67. data/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +7 -2
  68. data/lib/paperclip/matchers/validate_attachment_size_matcher.rb +2 -1
  69. data/lib/paperclip/matchers.rb +1 -1
  70. data/lib/paperclip/media_type_spoof_detector.rb +93 -0
  71. data/lib/paperclip/missing_attachment_styles.rb +11 -16
  72. data/lib/paperclip/processor.rb +15 -43
  73. data/lib/paperclip/processor_helpers.rb +50 -0
  74. data/lib/paperclip/rails_environment.rb +25 -0
  75. data/lib/paperclip/schema.rb +10 -8
  76. data/lib/paperclip/storage/filesystem.rb +20 -5
  77. data/lib/paperclip/storage/fog.rb +49 -23
  78. data/lib/paperclip/storage/s3.rb +153 -82
  79. data/lib/paperclip/style.rb +8 -3
  80. data/lib/paperclip/tempfile_factory.rb +6 -4
  81. data/lib/paperclip/thumbnail.rb +35 -19
  82. data/lib/paperclip/url_generator.rb +26 -14
  83. data/lib/paperclip/validators/attachment_content_type_validator.rb +15 -2
  84. data/lib/paperclip/validators/attachment_file_name_validator.rb +80 -0
  85. data/lib/paperclip/validators/attachment_file_type_ignorance_validator.rb +29 -0
  86. data/lib/paperclip/validators/attachment_presence_validator.rb +12 -8
  87. data/lib/paperclip/validators/attachment_size_validator.rb +17 -10
  88. data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +31 -0
  89. data/lib/paperclip/validators.rb +31 -3
  90. data/lib/paperclip/version.rb +3 -1
  91. data/lib/paperclip.rb +41 -55
  92. data/lib/tasks/paperclip.rake +56 -9
  93. data/paperclip.gemspec +18 -17
  94. data/shoulda_macros/paperclip.rb +13 -3
  95. data/spec/paperclip/attachment_definitions_spec.rb +13 -0
  96. data/spec/paperclip/attachment_processing_spec.rb +79 -0
  97. data/spec/paperclip/attachment_registry_spec.rb +158 -0
  98. data/{test/attachment_test.rb → spec/paperclip/attachment_spec.rb} +597 -389
  99. data/spec/paperclip/content_type_detector_spec.rb +48 -0
  100. data/spec/paperclip/file_command_content_type_detector_spec.rb +40 -0
  101. data/spec/paperclip/filename_cleaner_spec.rb +13 -0
  102. data/spec/paperclip/geometry_detector_spec.rb +39 -0
  103. data/{test/geometry_parser_test.rb → spec/paperclip/geometry_parser_spec.rb} +27 -27
  104. data/{test/geometry_test.rb → spec/paperclip/geometry_spec.rb} +50 -52
  105. data/spec/paperclip/glue_spec.rb +44 -0
  106. data/spec/paperclip/has_attached_file_spec.rb +158 -0
  107. data/{test/integration_test.rb → spec/paperclip/integration_spec.rb} +179 -199
  108. data/{test/interpolations_test.rb → spec/paperclip/interpolations_spec.rb} +79 -46
  109. data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +160 -0
  110. data/{test/io_adapters/attachment_adapter_test.rb → spec/paperclip/io_adapters/attachment_adapter_spec.rb} +54 -25
  111. data/spec/paperclip/io_adapters/data_uri_adapter_spec.rb +89 -0
  112. data/spec/paperclip/io_adapters/empty_string_adapter_spec.rb +17 -0
  113. data/spec/paperclip/io_adapters/file_adapter_spec.rb +131 -0
  114. data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +138 -0
  115. data/spec/paperclip/io_adapters/identity_adapter_spec.rb +8 -0
  116. data/{test/io_adapters/nil_adapter_test.rb → spec/paperclip/io_adapters/nil_adapter_spec.rb} +7 -7
  117. data/{test/io_adapters/registry_test.rb → spec/paperclip/io_adapters/registry_spec.rb} +12 -9
  118. data/spec/paperclip/io_adapters/stringio_adapter_spec.rb +64 -0
  119. data/spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb +146 -0
  120. data/spec/paperclip/io_adapters/uri_adapter_spec.rb +220 -0
  121. data/spec/paperclip/matchers/have_attached_file_matcher_spec.rb +19 -0
  122. data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +109 -0
  123. data/spec/paperclip/matchers/validate_attachment_presence_matcher_spec.rb +69 -0
  124. data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +88 -0
  125. data/spec/paperclip/media_type_spoof_detector_spec.rb +120 -0
  126. data/spec/paperclip/meta_class_spec.rb +30 -0
  127. data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +84 -0
  128. data/spec/paperclip/paperclip_spec.rb +192 -0
  129. data/spec/paperclip/plural_cache_spec.rb +37 -0
  130. data/spec/paperclip/processor_helpers_spec.rb +57 -0
  131. data/{test/processor_test.rb → spec/paperclip/processor_spec.rb} +7 -7
  132. data/spec/paperclip/rails_environment_spec.rb +33 -0
  133. data/spec/paperclip/rake_spec.rb +103 -0
  134. data/spec/paperclip/schema_spec.rb +248 -0
  135. data/{test/storage/filesystem_test.rb → spec/paperclip/storage/filesystem_spec.rb} +18 -18
  136. data/spec/paperclip/storage/fog_spec.rb +566 -0
  137. data/spec/paperclip/storage/s3_live_spec.rb +188 -0
  138. data/spec/paperclip/storage/s3_spec.rb +1693 -0
  139. data/spec/paperclip/style_spec.rb +254 -0
  140. data/spec/paperclip/tempfile_factory_spec.rb +33 -0
  141. data/spec/paperclip/tempfile_spec.rb +35 -0
  142. data/{test/thumbnail_test.rb → spec/paperclip/thumbnail_spec.rb} +186 -141
  143. data/spec/paperclip/url_generator_spec.rb +221 -0
  144. data/spec/paperclip/validators/attachment_content_type_validator_spec.rb +322 -0
  145. data/spec/paperclip/validators/attachment_file_name_validator_spec.rb +160 -0
  146. data/{test/validators/attachment_presence_validator_test.rb → spec/paperclip/validators/attachment_presence_validator_spec.rb} +20 -20
  147. data/{test/validators/attachment_size_validator_test.rb → spec/paperclip/validators/attachment_size_validator_spec.rb} +87 -59
  148. data/spec/paperclip/validators/media_type_spoof_detection_validator_spec.rb +52 -0
  149. data/spec/paperclip/validators_spec.rb +164 -0
  150. data/spec/spec_helper.rb +46 -0
  151. data/spec/support/assertions.rb +82 -0
  152. data/spec/support/fake_model.rb +25 -0
  153. data/spec/support/fake_rails.rb +12 -0
  154. data/spec/support/fixtures/empty.html +1 -0
  155. data/spec/support/fixtures/empty.xlsx +0 -0
  156. data/spec/support/fixtures/spaced file.jpg +0 -0
  157. data/spec/support/matchers/accept.rb +5 -0
  158. data/spec/support/matchers/exist.rb +5 -0
  159. data/spec/support/matchers/have_column.rb +23 -0
  160. data/{test → spec}/support/mock_attachment.rb +2 -0
  161. data/{test → spec}/support/mock_url_generator_builder.rb +2 -2
  162. data/spec/support/model_reconstruction.rb +68 -0
  163. data/spec/support/reporting.rb +11 -0
  164. data/spec/support/test_data.rb +13 -0
  165. data/spec/support/version_helper.rb +9 -0
  166. metadata +395 -346
  167. data/Gemfile.lock +0 -200
  168. data/RUNNING_TESTS.md +0 -4
  169. data/cucumber/paperclip_steps.rb +0 -6
  170. data/gemfiles/3.0.gemfile +0 -11
  171. data/gemfiles/3.1.gemfile +0 -11
  172. data/gemfiles/3.2.gemfile +0 -11
  173. data/lib/paperclip/attachment_options.rb +0 -9
  174. data/lib/paperclip/instance_methods.rb +0 -35
  175. data/test/attachment_options_test.rb +0 -27
  176. data/test/attachment_processing_test.rb +0 -29
  177. data/test/content_type_detector_test.rb +0 -40
  178. data/test/file_command_content_type_detector_test.rb +0 -25
  179. data/test/generator_test.rb +0 -80
  180. data/test/geometry_detector_test.rb +0 -24
  181. data/test/helper.rb +0 -199
  182. data/test/io_adapters/abstract_adapter_test.rb +0 -50
  183. data/test/io_adapters/file_adapter_test.rb +0 -100
  184. data/test/io_adapters/identity_adapter_test.rb +0 -8
  185. data/test/io_adapters/stringio_adapter_test.rb +0 -51
  186. data/test/io_adapters/uploaded_file_adapter_test.rb +0 -123
  187. data/test/io_adapters/uri_adapter_test.rb +0 -86
  188. data/test/matchers/have_attached_file_matcher_test.rb +0 -24
  189. data/test/matchers/validate_attachment_content_type_matcher_test.rb +0 -110
  190. data/test/matchers/validate_attachment_presence_matcher_test.rb +0 -47
  191. data/test/matchers/validate_attachment_size_matcher_test.rb +0 -86
  192. data/test/meta_class_test.rb +0 -32
  193. data/test/paperclip_missing_attachment_styles_test.rb +0 -94
  194. data/test/paperclip_test.rb +0 -259
  195. data/test/schema_test.rb +0 -200
  196. data/test/storage/fog_test.rb +0 -453
  197. data/test/storage/s3_live_test.rb +0 -179
  198. data/test/storage/s3_test.rb +0 -1236
  199. data/test/style_test.rb +0 -213
  200. data/test/support/mock_model.rb +0 -2
  201. data/test/tempfile_factory_test.rb +0 -13
  202. data/test/url_generator_test.rb +0 -187
  203. data/test/validators/attachment_content_type_validator_test.rb +0 -292
  204. data/test/validators_test.rb +0 -25
  205. /data/{test → spec}/database.yml +0 -0
  206. /data/{test → spec/support}/fixtures/12k.png +0 -0
  207. /data/{test → spec/support}/fixtures/50x50.png +0 -0
  208. /data/{test → spec/support}/fixtures/5k.png +0 -0
  209. /data/{test → spec/support}/fixtures/animated +0 -0
  210. /data/{test → spec/support}/fixtures/animated.gif +0 -0
  211. /data/{test → spec/support}/fixtures/animated.unknown +0 -0
  212. /data/{test → spec/support}/fixtures/bad.png +0 -0
  213. /data/{test → spec/support}/fixtures/fog.yml +0 -0
  214. /data/{test → spec/support}/fixtures/rotated.jpg +0 -0
  215. /data/{test → spec/support}/fixtures/s3.yml +0 -0
  216. /data/{test → spec/support}/fixtures/spaced file.png +0 -0
  217. /data/{test → spec/support}/fixtures/text.txt +0 -0
  218. /data/{test → spec/support}/fixtures/twopage.pdf +0 -0
  219. /data/{test → spec/support}/fixtures/uppercase.PNG +0 -0
  220. /data/{test → spec}/support/mock_interpolator.rb +0 -0
data/Gemfile.lock DELETED
@@ -1,200 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- paperclip (3.4.0)
5
- activemodel (>= 3.0.0)
6
- activerecord (>= 3.0.0)
7
- activesupport (>= 3.0.0)
8
- cocaine (~> 0.4.0)
9
- mime-types
10
-
11
- GEM
12
- remote: http://rubygems.org/
13
- specs:
14
- actionmailer (3.2.6)
15
- actionpack (= 3.2.6)
16
- mail (~> 2.4.4)
17
- actionpack (3.2.6)
18
- activemodel (= 3.2.6)
19
- activesupport (= 3.2.6)
20
- builder (~> 3.0.0)
21
- erubis (~> 2.7.0)
22
- journey (~> 1.0.1)
23
- rack (~> 1.4.0)
24
- rack-cache (~> 1.2)
25
- rack-test (~> 0.6.1)
26
- sprockets (~> 2.1.3)
27
- activemodel (3.2.6)
28
- activesupport (= 3.2.6)
29
- builder (~> 3.0.0)
30
- activerecord (3.2.6)
31
- activemodel (= 3.2.6)
32
- activesupport (= 3.2.6)
33
- arel (~> 3.0.2)
34
- tzinfo (~> 0.3.29)
35
- activesupport (3.2.6)
36
- i18n (~> 0.6)
37
- multi_json (~> 1.0)
38
- addressable (2.2.8)
39
- appraisal (0.4.1)
40
- bundler
41
- rake
42
- arel (3.0.2)
43
- aruba (0.4.11)
44
- childprocess (>= 0.2.3)
45
- cucumber (>= 1.1.1)
46
- ffi (>= 1.0.11)
47
- rspec (>= 2.7.0)
48
- aws-sdk (1.5.4)
49
- httparty (~> 0.7)
50
- json (~> 1.4)
51
- nokogiri (>= 1.4.4)
52
- uuidtools (~> 2.1)
53
- bourne (1.1.2)
54
- mocha (= 0.10.5)
55
- builder (3.0.4)
56
- capybara (1.1.2)
57
- mime-types (>= 1.16)
58
- nokogiri (>= 1.3.3)
59
- rack (>= 1.0.0)
60
- rack-test (>= 0.5.4)
61
- selenium-webdriver (~> 2.0)
62
- xpath (~> 0.1.4)
63
- childprocess (0.3.2)
64
- ffi (~> 1.0.6)
65
- cocaine (0.4.2)
66
- coderay (1.0.6)
67
- cucumber (1.2.1)
68
- builder (>= 2.1.2)
69
- diff-lcs (>= 1.1.3)
70
- gherkin (~> 2.11.0)
71
- json (>= 1.4.6)
72
- diff-lcs (1.1.3)
73
- erubis (2.7.0)
74
- excon (0.16.7)
75
- fakeweb (1.3.0)
76
- ffi (1.0.11)
77
- fog (1.6.0)
78
- builder
79
- excon (~> 0.14)
80
- formatador (~> 0.2.0)
81
- mime-types
82
- multi_json (~> 1.0)
83
- net-scp (~> 1.0.4)
84
- net-ssh (>= 2.1.3)
85
- nokogiri (~> 1.5.0)
86
- ruby-hmac
87
- formatador (0.2.3)
88
- gherkin (2.11.0)
89
- json (>= 1.4.6)
90
- hike (1.2.1)
91
- httparty (0.8.3)
92
- multi_json (~> 1.0)
93
- multi_xml
94
- i18n (0.6.0)
95
- journey (1.0.4)
96
- json (1.7.3)
97
- launchy (2.1.0)
98
- addressable (~> 2.2.6)
99
- libwebsocket (0.1.3)
100
- addressable
101
- mail (2.4.4)
102
- i18n (>= 0.4.0)
103
- mime-types (~> 1.16)
104
- treetop (~> 1.4.8)
105
- metaclass (0.0.1)
106
- method_source (0.7.1)
107
- mime-types (1.19)
108
- mocha (0.10.5)
109
- metaclass (~> 0.0.1)
110
- multi_json (1.3.6)
111
- multi_xml (0.5.1)
112
- net-scp (1.0.4)
113
- net-ssh (>= 1.99.1)
114
- net-ssh (2.6.1)
115
- nokogiri (1.5.5)
116
- polyglot (0.3.3)
117
- pry (0.9.9.6)
118
- coderay (~> 1.0.5)
119
- method_source (~> 0.7.1)
120
- slop (>= 2.4.4, < 3)
121
- rack (1.4.1)
122
- rack-cache (1.2)
123
- rack (>= 0.4)
124
- rack-ssl (1.3.2)
125
- rack
126
- rack-test (0.6.1)
127
- rack (>= 1.0)
128
- railties (3.2.6)
129
- actionpack (= 3.2.6)
130
- activesupport (= 3.2.6)
131
- rack-ssl (~> 1.3.2)
132
- rake (>= 0.8.7)
133
- rdoc (~> 3.4)
134
- thor (>= 0.14.6, < 2.0)
135
- rake (0.9.2.2)
136
- rdoc (3.12)
137
- json (~> 1.4)
138
- rspec (2.10.0)
139
- rspec-core (~> 2.10.0)
140
- rspec-expectations (~> 2.10.0)
141
- rspec-mocks (~> 2.10.0)
142
- rspec-core (2.10.1)
143
- rspec-expectations (2.10.0)
144
- diff-lcs (~> 1.1.3)
145
- rspec-mocks (2.10.1)
146
- ruby-hmac (0.4.0)
147
- rubyzip (0.9.8)
148
- selenium-webdriver (2.22.2)
149
- childprocess (>= 0.2.5)
150
- ffi (~> 1.0)
151
- libwebsocket (~> 0.1.3)
152
- multi_json (~> 1.0)
153
- rubyzip
154
- shoulda (3.0.1)
155
- shoulda-context (~> 1.0.0)
156
- shoulda-matchers (~> 1.0.0)
157
- shoulda-context (1.0.0)
158
- shoulda-matchers (1.0.0)
159
- slop (2.4.4)
160
- sprockets (2.1.3)
161
- hike (~> 1.2)
162
- rack (~> 1.0)
163
- tilt (~> 1.1, != 1.3.0)
164
- sqlite3 (1.3.6)
165
- thor (0.15.4)
166
- tilt (1.3.3)
167
- treetop (1.4.10)
168
- polyglot
169
- polyglot (>= 0.3.1)
170
- tzinfo (0.3.35)
171
- uuidtools (2.1.2)
172
- xpath (0.1.4)
173
- nokogiri (~> 1.3)
174
-
175
- PLATFORMS
176
- ruby
177
-
178
- DEPENDENCIES
179
- actionmailer
180
- activerecord-jdbcsqlite3-adapter
181
- appraisal
182
- aruba
183
- aws-sdk (>= 1.2.0)
184
- bourne
185
- bundler
186
- capybara
187
- cocaine (~> 0.2)
188
- cucumber (~> 1.2.1)
189
- fakeweb
190
- fog (>= 1.4.0, < 1.7.0)
191
- jruby-openssl
192
- launchy
193
- mocha
194
- nokogiri
195
- paperclip!
196
- pry
197
- railties
198
- rake
199
- shoulda
200
- sqlite3
data/RUNNING_TESTS.md DELETED
@@ -1,4 +0,0 @@
1
- Running Tests
2
- =============
3
-
4
- Please see `CONTRIBUTING.md` in "Running Tests" section for more information.
@@ -1,6 +0,0 @@
1
- When /^I attach an? "([^\"]*)" "([^\"]*)" file to an? "([^\"]*)" on S3$/ do |attachment, extension, model|
2
- stub_paperclip_s3(model, attachment, extension)
3
- attach_file attachment,
4
- "features/support/paperclip/#{model.gsub(" ", "_").underscore}/#{attachment}.#{extension}"
5
- end
6
-
data/gemfiles/3.0.gemfile DELETED
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "jruby-openssl", :platform=>:jruby
6
- gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
7
- gem "sqlite3", :platform=>:ruby
8
- gem "rails", "~> 3.0.15"
9
- gem "paperclip", :path=>"../"
10
-
11
- gemspec :path=>"../"
data/gemfiles/3.1.gemfile DELETED
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "jruby-openssl", :platform=>:jruby
6
- gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
7
- gem "sqlite3", :platform=>:ruby
8
- gem "rails", "~> 3.1.6"
9
- gem "paperclip", :path=>"../"
10
-
11
- gemspec :path=>"../"
data/gemfiles/3.2.gemfile DELETED
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "http://rubygems.org"
4
-
5
- gem "jruby-openssl", :platform=>:jruby
6
- gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
7
- gem "sqlite3", :platform=>:ruby
8
- gem "rails", "~> 3.2.6"
9
- gem "paperclip", :path=>"../"
10
-
11
- gemspec :path=>"../"
@@ -1,9 +0,0 @@
1
- module Paperclip
2
- class AttachmentOptions < Hash
3
- def initialize(options)
4
- options.each do |k, v|
5
- self.[]=(k, v)
6
- end
7
- end
8
- end
9
- end
@@ -1,35 +0,0 @@
1
- module Paperclip
2
- module InstanceMethods #:nodoc:
3
- def attachment_for name
4
- @_paperclip_attachments ||= {}
5
- @_paperclip_attachments[name] ||= Attachment.new(name, self, attachment_definitions[name])
6
- end
7
-
8
- def each_attachment
9
- self.attachment_definitions.each do |name, definition|
10
- yield(name, attachment_for(name))
11
- end
12
- end
13
-
14
- def save_attached_files
15
- Paperclip.log("Saving attachments.")
16
- each_attachment do |name, attachment|
17
- attachment.send(:save)
18
- end
19
- end
20
-
21
- def destroy_attached_files
22
- Paperclip.log("Deleting attachments.")
23
- each_attachment do |name, attachment|
24
- attachment.send(:flush_deletes)
25
- end
26
- end
27
-
28
- def prepare_for_destroy
29
- Paperclip.log("Scheduling attachments for deletion.")
30
- each_attachment do |name, attachment|
31
- attachment.send(:queue_all_for_delete)
32
- end
33
- end
34
- end
35
- end
@@ -1,27 +0,0 @@
1
- require './test/helper'
2
-
3
- class AttachmentOptionsTest < Test::Unit::TestCase
4
- should "be a Hash" do
5
- assert_kind_of Hash, Paperclip::AttachmentOptions.new({})
6
- end
7
-
8
- should "respond to []" do
9
- assert Paperclip::AttachmentOptions.new({}).respond_to?(:[])
10
- end
11
-
12
- should "deliver the specified options through []" do
13
- intended_options = {:specific_key => "specific value"}
14
- attachment_options = Paperclip::AttachmentOptions.new(intended_options)
15
- assert_equal "specific value", attachment_options[:specific_key]
16
- end
17
-
18
- should "respond to []=" do
19
- assert Paperclip::AttachmentOptions.new({}).respond_to?(:[]=)
20
- end
21
-
22
- should "remember options set with []=" do
23
- attachment_options = Paperclip::AttachmentOptions.new({})
24
- attachment_options[:foo] = "bar"
25
- assert_equal "bar", attachment_options[:foo]
26
- end
27
- end
@@ -1,29 +0,0 @@
1
- # encoding: utf-8
2
- require './test/helper'
3
- require 'paperclip/attachment'
4
-
5
- class AttachmentProcessingTest < Test::Unit::TestCase
6
- def setup
7
- rebuild_model
8
- end
9
-
10
- should 'process attachments given a valid assignment' do
11
- file = File.new(fixture_file("5k.png"))
12
- Dummy.validates_attachment_content_type :avatar, :content_type => "image/png"
13
- instance = Dummy.new
14
- attachment = instance.avatar
15
- attachment.expects(:post_process)
16
-
17
- attachment.assign(file)
18
- end
19
-
20
- should 'not process attachments if the assignment does not pass validation' do
21
- file = File.new(fixture_file("5k.png"))
22
- Dummy.validates_attachment_content_type :avatar, :content_type => "image/tiff"
23
- instance = Dummy.new
24
- attachment = instance.avatar
25
- attachment.expects(:post_process).never
26
-
27
- attachment.assign(file)
28
- end
29
- end
@@ -1,40 +0,0 @@
1
- require './test/helper'
2
-
3
- class ContentTypeDetectorTest < Test::Unit::TestCase
4
- context 'given a name' do
5
- should 'return a content type based on that name' do
6
- @filename = "/path/to/something.jpg"
7
- assert_equal "image/jpeg", Paperclip::ContentTypeDetector.new(@filename).detect
8
- end
9
-
10
- should 'return a content type based on the content of the file' do
11
- tempfile = Tempfile.new("something")
12
- tempfile.write("This is a file.")
13
- tempfile.rewind
14
-
15
- assert_equal "text/plain", Paperclip::ContentTypeDetector.new(tempfile.path).detect
16
- end
17
-
18
- should 'return an empty content type if the file is empty' do
19
- tempfile = Tempfile.new("something")
20
- tempfile.rewind
21
-
22
- assert_equal "inode/x-empty", Paperclip::ContentTypeDetector.new(tempfile.path).detect
23
- end
24
-
25
- should 'return a sensible default if no filename is supplied' do
26
- assert_equal "application/octet-stream", Paperclip::ContentTypeDetector.new('').detect
27
- end
28
-
29
- should 'return a sensible default if something goes wrong' do
30
- @filename = "/path/to/something"
31
- assert_equal "application/octet-stream", Paperclip::ContentTypeDetector.new(@filename).detect
32
- end
33
-
34
- should 'return a sensible default when the file command is missing' do
35
- Paperclip.stubs(:run).raises(Cocaine::CommandLineError.new)
36
- @filename = "/path/to/something"
37
- assert_equal "application/octet-stream", Paperclip::ContentTypeDetector.new(@filename).detect
38
- end
39
- end
40
- end
@@ -1,25 +0,0 @@
1
- require './test/helper'
2
-
3
- class FileCommandContentTypeDetectorTest < Test::Unit::TestCase
4
- should 'return a content type based on the content of the file' do
5
- tempfile = Tempfile.new("something")
6
- tempfile.write("This is a file.")
7
- tempfile.rewind
8
-
9
- assert_equal "text/plain", Paperclip::FileCommandContentTypeDetector.new(tempfile.path).detect
10
- end
11
-
12
- should 'return a sensible default when the file command is missing' do
13
- Paperclip.stubs(:run).raises(Cocaine::CommandLineError.new)
14
- @filename = "/path/to/something"
15
- assert_equal "application/octet-stream",
16
- Paperclip::FileCommandContentTypeDetector.new(@filename).detect
17
- end
18
-
19
- should 'return a sensible default on the odd chance that run returns nil' do
20
- Paperclip.stubs(:run).returns(nil)
21
- assert_equal "application/octet-stream",
22
- Paperclip::FileCommandContentTypeDetector.new("windows").detect
23
- end
24
- end
25
-
@@ -1,80 +0,0 @@
1
- require './test/helper'
2
- require 'rails/generators'
3
- require 'generators/paperclip/paperclip_generator'
4
-
5
- class GeneratorTest < Rails::Generators::TestCase
6
- tests PaperclipGenerator
7
- destination File.expand_path("../tmp", File.dirname(__FILE__))
8
- setup :prepare_destination
9
-
10
- context 'running migration' do
11
- context 'with single attachment name' do
12
- setup do
13
- run_generator %w(user avatar)
14
- end
15
-
16
- should 'create a correct migration file' do
17
- assert_migration 'db/migrate/add_attachment_avatar_to_users.rb' do |migration|
18
- assert_match /class AddAttachmentAvatarToUsers/, migration
19
-
20
- assert_class_method :up, migration do |up|
21
- expected = <<-migration
22
- change_table :users do |t|
23
- t.attachment :avatar
24
- end
25
- migration
26
-
27
- assert_equal expected.squish, up.squish
28
- end
29
-
30
- assert_class_method :down, migration do |down|
31
- expected = <<-migration
32
- drop_attached_file :users, :avatar
33
- migration
34
-
35
- assert_equal expected.squish, down.squish
36
- end
37
- end
38
- end
39
- end
40
-
41
- context 'with multiple attachment names' do
42
- setup do
43
- run_generator %w(user avatar photo)
44
- end
45
-
46
- should 'create a correct migration file' do
47
- assert_migration 'db/migrate/add_attachment_avatar_photo_to_users.rb' do |migration|
48
- assert_match /class AddAttachmentAvatarPhotoToUsers/, migration
49
-
50
- assert_class_method :up, migration do |up|
51
- expected = <<-migration
52
- change_table :users do |t|
53
- t.attachment :avatar
54
- t.attachment :photo
55
- end
56
- migration
57
-
58
- assert_equal expected.squish, up.squish
59
- end
60
-
61
- assert_class_method :down, migration do |down|
62
- expected = <<-migration
63
- drop_attached_file :users, :avatar
64
- drop_attached_file :users, :photo
65
- migration
66
-
67
- assert_equal expected.squish, down.squish
68
- end
69
- end
70
- end
71
- end
72
-
73
- context 'without required arguments' do
74
- should 'not create the migration' do
75
- silence_stream(STDERR) { run_generator %w() }
76
- assert_no_migration 'db/migrate/add_attachment_avatar_to_users.rb'
77
- end
78
- end
79
- end
80
- end
@@ -1,24 +0,0 @@
1
- require './test/helper'
2
-
3
- class GeometryDetectorTest < Test::Unit::TestCase
4
- should 'identify an image and extract its dimensions' do
5
- Paperclip::GeometryParser.stubs(:new).with("434x66,").returns(stub(:make => :correct))
6
- file = fixture_file("5k.png")
7
- factory = Paperclip::GeometryDetector.new(file)
8
-
9
- output = factory.make
10
-
11
- assert_equal :correct, output
12
- end
13
-
14
- should 'identify an image and extract its dimensions and orientation' do
15
- Paperclip::GeometryParser.stubs(:new).with("300x200,6").returns(stub(:make => :correct))
16
- file = fixture_file("rotated.jpg")
17
- factory = Paperclip::GeometryDetector.new(file)
18
-
19
- output = factory.make
20
-
21
- assert_equal :correct, output
22
- end
23
- end
24
-