another_uploader 0.0.1

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.
Files changed (178) hide show
  1. data/MIT-LICENSE +21 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/images/another_uploader/doc.gif +0 -0
  5. data/app/assets/images/another_uploader/mp3.gif +0 -0
  6. data/app/assets/images/another_uploader/none.gif +0 -0
  7. data/app/assets/images/another_uploader/pdf.gif +0 -0
  8. data/app/assets/images/another_uploader/spreadsheet.gif +0 -0
  9. data/app/assets/images/another_uploader/text.gif +0 -0
  10. data/app/assets/javascripts/another_uploader/index.js +5 -0
  11. data/app/assets/javascripts/uploads.js +2 -0
  12. data/app/assets/stylesheets/another_uploader/index.css +5 -0
  13. data/app/assets/stylesheets/uploads.css +4 -0
  14. data/app/controllers/uploads_controller.rb +7 -0
  15. data/app/helpers/uploads_helper.rb +2 -0
  16. data/app/models/upload.rb +145 -0
  17. data/app/views/uploads/destroy.html.erb +2 -0
  18. data/app/views/uploads/uploadify.html.erb +2 -0
  19. data/config/routes.rb +6 -0
  20. data/db/migrate/20121115043827_create_uploads.rb +31 -0
  21. data/lib/another_uploader.rb +14 -0
  22. data/lib/another_uploader/configuration.rb +36 -0
  23. data/lib/another_uploader/engine.rb +4 -0
  24. data/lib/another_uploader/icons.rb +23 -0
  25. data/lib/another_uploader/image_processing.rb +29 -0
  26. data/lib/another_uploader/mime_type_getters.rb +17 -0
  27. data/lib/another_uploader/mime_type_groups.rb +17 -0
  28. data/lib/another_uploader/transliteration.rb +22 -0
  29. data/lib/another_uploader/version.rb +3 -0
  30. data/lib/tasks/another_uploader_tasks.rake +4 -0
  31. data/test/another_uploader_test.rb +7 -0
  32. data/test/dummy/README.rdoc +261 -0
  33. data/test/dummy/Rakefile +7 -0
  34. data/test/dummy/app/assets/javascripts/application.js +17 -0
  35. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  36. data/test/dummy/app/controllers/application_controller.rb +6 -0
  37. data/test/dummy/app/controllers/main_controller.rb +4 -0
  38. data/test/dummy/app/helpers/application_helper.rb +2 -0
  39. data/test/dummy/app/models/user.rb +6 -0
  40. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  41. data/test/dummy/app/views/main/index.html.erb +2 -0
  42. data/test/dummy/config.ru +4 -0
  43. data/test/dummy/config/application.rb +59 -0
  44. data/test/dummy/config/boot.rb +10 -0
  45. data/test/dummy/config/database.yml +25 -0
  46. data/test/dummy/config/environment.rb +5 -0
  47. data/test/dummy/config/environments/development.rb +37 -0
  48. data/test/dummy/config/environments/production.rb +67 -0
  49. data/test/dummy/config/environments/test.rb +37 -0
  50. data/test/dummy/config/initializers/another_uploader.rb +10 -0
  51. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  52. data/test/dummy/config/initializers/inflections.rb +15 -0
  53. data/test/dummy/config/initializers/mime_types.rb +5 -0
  54. data/test/dummy/config/initializers/secret_token.rb +7 -0
  55. data/test/dummy/config/initializers/session_store.rb +8 -0
  56. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  57. data/test/dummy/config/locales/en.yml +5 -0
  58. data/test/dummy/config/routes.rb +61 -0
  59. data/test/dummy/config/s3.yml +10 -0
  60. data/test/dummy/config/s3.yml.example +21 -0
  61. data/test/dummy/db/development.sqlite3 +0 -0
  62. data/test/dummy/db/migrate/20121115045546_create_users.easy_rails_authentication_engine.rb +12 -0
  63. data/test/dummy/db/migrate/20121115045547_create_password_recoveries.easy_rails_authentication_engine.rb +13 -0
  64. data/test/dummy/db/migrate/20121115045630_create_uploads.another_uploader_engine.rb +32 -0
  65. data/test/dummy/db/schema.rb +63 -0
  66. data/test/dummy/db/test.sqlite3 +0 -0
  67. data/test/dummy/log/development.log +53979 -0
  68. data/test/dummy/log/test.log +139363 -0
  69. data/test/dummy/public/404.html +26 -0
  70. data/test/dummy/public/422.html +26 -0
  71. data/test/dummy/public/500.html +25 -0
  72. data/test/dummy/public/favicon.ico +0 -0
  73. data/test/dummy/script/rails +6 -0
  74. data/test/dummy/test/functional/main_controller_test.rb +9 -0
  75. data/test/dummy/tmp/cache/assets/C1D/CB0/sprockets%2F1368a6c195444308f76a970b1127660b +0 -0
  76. data/test/dummy/tmp/cache/assets/C56/660/sprockets%2F9606c93013df9ec75112d323643686a9 +0 -0
  77. data/test/dummy/tmp/cache/assets/C64/2A0/sprockets%2F779fa4794d76f3083f442743352e247c +0 -0
  78. data/test/dummy/tmp/cache/assets/C80/910/sprockets%2F1da2794871f7097ea5246354ae85300b +0 -0
  79. data/test/dummy/tmp/cache/assets/C82/240/sprockets%2F625dc2916f00654e5351b054afc95678 +0 -0
  80. data/test/dummy/tmp/cache/assets/C9F/DD0/sprockets%2F1801bd89c75539c636659918883e8dea +0 -0
  81. data/test/dummy/tmp/cache/assets/CA9/ED0/sprockets%2F845117661057731bd942dc61ddda24f3 +0 -0
  82. data/test/dummy/tmp/cache/assets/CB1/030/sprockets%2F330d8361296be2294bcf4e8282473ab7 +0 -0
  83. data/test/dummy/tmp/cache/assets/CBD/D80/sprockets%2F65641a234ede6ff88b006594b1869b29 +0 -0
  84. data/test/dummy/tmp/cache/assets/CC1/4E0/sprockets%2F53d9bd83335f4bb9561087645769c5da +0 -0
  85. data/test/dummy/tmp/cache/assets/CD6/C50/sprockets%2Fd30f21629ea47cf66530fa0e347272b4 +0 -0
  86. data/test/dummy/tmp/cache/assets/CD7/B40/sprockets%2F21b71f8ea0f566175a551816b6f530cb +0 -0
  87. data/test/dummy/tmp/cache/assets/CD7/EE0/sprockets%2Fd677061accd85058216607c208b7a2bf +0 -0
  88. data/test/dummy/tmp/cache/assets/CD8/000/sprockets%2F12d162f45ae0036e177e4a67b926a92d +0 -0
  89. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  90. data/test/dummy/tmp/cache/assets/CD9/990/sprockets%2Fba64ae414cc39805ce695e2c40162807 +0 -0
  91. data/test/dummy/tmp/cache/assets/CDA/700/sprockets%2F2437e594d81db9b2b87b24411630dba8 +0 -0
  92. data/test/dummy/tmp/cache/assets/CE1/340/sprockets%2F0573a62b0251cc18c80949a9c9fe34d7 +0 -0
  93. data/test/dummy/tmp/cache/assets/CE1/C30/sprockets%2F6a2c53cf042c621806c77ada86288c77 +0 -0
  94. data/test/dummy/tmp/cache/assets/CE6/1A0/sprockets%2F41ce96883326a6a9313b408cdf80df74 +0 -0
  95. data/test/dummy/tmp/cache/assets/CE7/F50/sprockets%2F5118ca4d54388e2cc84e90c95f36048a +0 -0
  96. data/test/dummy/tmp/cache/assets/CED/B00/sprockets%2Fbde328b963290de060b7677fd155695e +0 -0
  97. data/test/dummy/tmp/cache/assets/CF2/4B0/sprockets%2Fb95901745337c00037e00a7f0cacaa3c +0 -0
  98. data/test/dummy/tmp/cache/assets/CF9/960/sprockets%2F69590f47d597a9ec070b6c0bc28e9876 +0 -0
  99. data/test/dummy/tmp/cache/assets/CFE/EE0/sprockets%2F1100a030f19d781dc98eb066ab6075ec +0 -0
  100. data/test/dummy/tmp/cache/assets/D00/D30/sprockets%2F08dc27f9a9ed399356a91d4069889c5d +0 -0
  101. data/test/dummy/tmp/cache/assets/D0A/760/sprockets%2F28d26ec78714eaf45198b0abab175117 +0 -0
  102. data/test/dummy/tmp/cache/assets/D0E/E90/sprockets%2Fa982198515b54c1f58f8aae30830f0ea +0 -0
  103. data/test/dummy/tmp/cache/assets/D12/7E0/sprockets%2F35c1a2211d6547b7c7ffa5ed813d7938 +0 -0
  104. data/test/dummy/tmp/cache/assets/D18/610/sprockets%2F66cc7f1b171e5729d4279bac1676de53 +0 -0
  105. data/test/dummy/tmp/cache/assets/D1A/AC0/sprockets%2F045847ba35c0701c01fa0b0ecf73d11a +0 -0
  106. data/test/dummy/tmp/cache/assets/D1B/810/sprockets%2F76112c598c956c07c4f4e91f6ee3ba80 +0 -0
  107. data/test/dummy/tmp/cache/assets/D1E/580/sprockets%2F5f965913df7a03e307dfd9326f9b06b7 +0 -0
  108. data/test/dummy/tmp/cache/assets/D21/CE0/sprockets%2F85c75ccf1618c6e9214374fa80ff6a78 +0 -0
  109. data/test/dummy/tmp/cache/assets/D23/8A0/sprockets%2F6175cb8fa517f52908739e3b478ef4bd +0 -0
  110. data/test/dummy/tmp/cache/assets/D24/DF0/sprockets%2F205e10fc11b2c5ed047b48e7d13ca262 +0 -0
  111. data/test/dummy/tmp/cache/assets/D25/860/sprockets%2Ff8260dc5f64465554e619b1e8d8e5fb7 +0 -0
  112. data/test/dummy/tmp/cache/assets/D27/BB0/sprockets%2F1ce3f0373575afde958376fec61658e8 +0 -0
  113. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  114. data/test/dummy/tmp/cache/assets/D35/000/sprockets%2F26017814dcf3891ad5be86ec7005a0ae +0 -0
  115. data/test/dummy/tmp/cache/assets/D38/250/sprockets%2F80644f3f31455068a51deebec0aa7a86 +0 -0
  116. data/test/dummy/tmp/cache/assets/D41/DF0/sprockets%2F86004b9b60de26aa7d87a1ff8b828f21 +0 -0
  117. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  118. data/test/dummy/tmp/cache/assets/D4F/1A0/sprockets%2F7901d59d8f722a5ebfff972429bb2d45 +0 -0
  119. data/test/dummy/tmp/cache/assets/D4F/4A0/sprockets%2F4fcb3c5126d2489feb99578dfa0c8507 +0 -0
  120. data/test/dummy/tmp/cache/assets/D52/E40/sprockets%2F04b1950fad18f3bcf64d30120da8b40b +0 -0
  121. data/test/dummy/tmp/cache/assets/D52/FD0/sprockets%2F19d7b68fb60b78d7519fc64d3c9a05f6 +0 -0
  122. data/test/dummy/tmp/cache/assets/D59/F30/sprockets%2F9dff7df99c759433823d4030cea998ac +0 -0
  123. data/test/dummy/tmp/cache/assets/D5A/850/sprockets%2F4015515d4be88de02aa43ff1b0abb594 +0 -0
  124. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  125. data/test/dummy/tmp/cache/assets/D5C/030/sprockets%2F85440ce896b9da860fd37bb1e58f978e +0 -0
  126. data/test/dummy/tmp/cache/assets/D65/DA0/sprockets%2Fd0515dae6856f8da160c5d3050aa8b8e +0 -0
  127. data/test/dummy/tmp/cache/assets/D68/CD0/sprockets%2F9d829309524cfa22a0bdddf62c817d2a +0 -0
  128. data/test/dummy/tmp/cache/assets/D6B/A10/sprockets%2Fe2054cdbee145cdb51eb971863f54c80 +0 -0
  129. data/test/dummy/tmp/cache/assets/D6C/4B0/sprockets%2F543f257da84ce9914a414c3ffc1ad5a5 +0 -0
  130. data/test/dummy/tmp/cache/assets/D6C/AC0/sprockets%2Ffc095dd6183c1fcdf793351aa0b9057c +0 -0
  131. data/test/dummy/tmp/cache/assets/D71/520/sprockets%2Fc8e0327abdc946f27d2a91311ddd868e +0 -0
  132. data/test/dummy/tmp/cache/assets/D72/B90/sprockets%2Fc267891912fff9a3fa22ae346ba4f82b +0 -0
  133. data/test/dummy/tmp/cache/assets/D7C/E70/sprockets%2F9cae95be6892da1bf96c244c0d58069c +0 -0
  134. data/test/dummy/tmp/cache/assets/D7D/750/sprockets%2F8755c9ddd1217ce9ab854a429c4f7e3d +0 -0
  135. data/test/dummy/tmp/cache/assets/D91/D00/sprockets%2Fc1e1b10c6a5879ae7a2a875b0dbd357a +0 -0
  136. data/test/dummy/tmp/cache/assets/D95/0C0/sprockets%2Ffce9642718191a3112260ccbc8cafefc +0 -0
  137. data/test/dummy/tmp/cache/assets/D9A/DE0/sprockets%2Fcd78fb20bde75dba85a0c62b4838542c +0 -0
  138. data/test/dummy/tmp/cache/assets/DBB/440/sprockets%2Fe68195d6a29fe5fd90ded7559fccb429 +0 -0
  139. data/test/dummy/tmp/cache/assets/DBB/A30/sprockets%2Fe70dc841dca9ceee2e413a1661ed0b03 +0 -0
  140. data/test/dummy/tmp/cache/assets/DBF/3A0/sprockets%2F3c82ed0abb7057c1e728ac0f2ca41df9 +0 -0
  141. data/test/dummy/tmp/cache/assets/DC0/490/sprockets%2F5e0aebe091b8cea050c89d4ea19e080b +0 -0
  142. data/test/dummy/tmp/cache/assets/DC9/380/sprockets%2F2aaba93d71e5b9e178b0ce2df59eb603 +0 -0
  143. data/test/dummy/tmp/cache/assets/DCC/450/sprockets%2Fb3392d6eaf0e4cc318e19b6beb59b33f +0 -0
  144. data/test/dummy/tmp/cache/assets/DD0/2F0/sprockets%2F2cb2d409afda49a014f5bfef65f75c67 +0 -0
  145. data/test/dummy/tmp/cache/assets/DD9/030/sprockets%2F22d64f8febf6fc918b3a9ff6ad40441f +0 -0
  146. data/test/dummy/tmp/cache/assets/DDA/760/sprockets%2F31d55e4ecf03fbd5d71d5d7fd6d6d586 +0 -0
  147. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  148. data/test/dummy/tmp/cache/assets/DDC/630/sprockets%2Fd23e663fbbe6dfdb81e7a5d86d87b507 +0 -0
  149. data/test/dummy/tmp/cache/assets/DEA/760/sprockets%2Fcf1c5cfb9b1239a5b3dee52a3dd5001e +0 -0
  150. data/test/dummy/tmp/cache/assets/DED/500/sprockets%2F6b8b0740ec26f31fe0bcaa5ecd1e75a4 +0 -0
  151. data/test/dummy/tmp/cache/assets/DF1/B80/sprockets%2Fae7705cefbeb7308c73ba3a7a42c6a1f +0 -0
  152. data/test/dummy/tmp/cache/assets/DF6/DE0/sprockets%2Fd4eb25c8857c4c413cacaf6e7a0ccd26 +0 -0
  153. data/test/dummy/tmp/cache/assets/DF8/1A0/sprockets%2F0f9b45b1ca394c1aedc6febec735820f +0 -0
  154. data/test/dummy/tmp/cache/assets/DFE/980/sprockets%2F3493099ba61bb24ebec3f59cddf08ead +0 -0
  155. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  156. data/test/dummy/tmp/cache/assets/E29/000/sprockets%2F6d13db8fbbd48dbce7392e43ac0ecb46 +0 -0
  157. data/test/dummy/tmp/cache/assets/E31/930/sprockets%2Ff68b89fd7200b23eccd9b1ba9afff3d3 +0 -0
  158. data/test/dummy/tmp/cache/assets/E79/780/sprockets%2Fd7e2d10be0ca0abfe06ecab1d3868dfd +0 -0
  159. data/test/fixtures/files/1000Hz-5sec.mp3 +0 -0
  160. data/test/fixtures/files/lorem-ipsum +7 -0
  161. data/test/fixtures/files/lorem-ipsum.jpg +0 -0
  162. data/test/fixtures/files/lorem-ipsum.ods +0 -0
  163. data/test/fixtures/files/lorem-ipsum.odt +0 -0
  164. data/test/fixtures/files/lorem-ipsum.pdf +0 -0
  165. data/test/fixtures/files/lorem-ipsum.txt +7 -0
  166. data/test/fixtures/users.yml +10 -0
  167. data/test/functional/uploads_controller_test.rb +14 -0
  168. data/test/integration/navigation_test.rb +10 -0
  169. data/test/test_helper.rb +52 -0
  170. data/test/unit/file_storage_test.rb +157 -0
  171. data/test/unit/helpers/uploads_helper_test.rb +4 -0
  172. data/test/unit/icon_and_thumb_test.rb +36 -0
  173. data/test/unit/mime_types_test.rb +74 -0
  174. data/test/unit/name_test.rb +51 -0
  175. data/test/unit/scope_test.rb +162 -0
  176. data/test/unit/upload_test.rb +7 -0
  177. data/test/upload_test_helper.rb +52 -0
  178. metadata +486 -0
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class UploadsHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1,36 @@
1
+ require 'upload_test_helper'
2
+
3
+ class IconAndThumbTest < UploadTestHelper
4
+ def for_each_non_image_file_when_uploaded &block
5
+ NON_IMAGE_FILES.each { |file|
6
+ when_i_upload_a file
7
+ @upload.save!
8
+ yield file
9
+ }
10
+ end
11
+
12
+ def given_an_uploaded_image
13
+ when_i_upload_a IMAGE
14
+ @upload.save!
15
+ end
16
+
17
+ test "can get icon for image" do
18
+ given_an_uploaded_image
19
+ assert_equal @upload.file.url(:icon), @upload.icon
20
+ end
21
+ test "can get icon for other files" do
22
+ for_each_non_image_file_when_uploaded { |file|
23
+ assert_match /^another_uploader\/.{3,}\.gif$/, @upload.icon
24
+ assert Rails.application.assets.find_asset(@upload.icon), Rails.application.config.assets.paths.inspect
25
+ }
26
+ end
27
+ test "can get thumb for image" do
28
+ given_an_uploaded_image
29
+ assert_equal @upload.file.url(:thumb), @upload.thumb
30
+ end
31
+ test "thumb is nil for non-image" do
32
+ for_each_non_image_file_when_uploaded { |file|
33
+ assert_nil @upload.thumb
34
+ }
35
+ end
36
+ end
@@ -0,0 +1,74 @@
1
+ require 'upload_test_helper'
2
+
3
+ class MimeTypesTest < UploadTestHelper
4
+ test "image knows its type" do
5
+ when_i_upload_a IMAGE
6
+ assert @upload.is_image?
7
+
8
+ assert !@upload.is_pdf?
9
+ assert !@upload.is_word?
10
+ assert !@upload.is_mp3?
11
+ assert !@upload.is_excel?
12
+ assert !@upload.is_text?
13
+ end
14
+ test "pdf knows its type" do
15
+ when_i_upload_a PDF
16
+ assert @upload.is_pdf?
17
+
18
+ assert !@upload.is_image?
19
+ assert !@upload.is_word?
20
+ assert !@upload.is_mp3?
21
+ assert !@upload.is_excel?
22
+ assert !@upload.is_text?
23
+ end
24
+ test "doc knows its type" do
25
+ when_i_upload_a DOC
26
+ assert @upload.is_word?
27
+
28
+ assert !@upload.is_image?
29
+ assert !@upload.is_pdf?
30
+ assert !@upload.is_mp3?
31
+ assert !@upload.is_excel?
32
+ assert !@upload.is_text?
33
+ end
34
+ test "mp3 knows its type" do
35
+ when_i_upload_a MP3
36
+ assert @upload.is_mp3?
37
+
38
+ assert !@upload.is_image?
39
+ assert !@upload.is_pdf?
40
+ assert !@upload.is_word?
41
+ assert !@upload.is_excel?
42
+ assert !@upload.is_text?
43
+ end
44
+ test "spreadsheet knows its type" do
45
+ when_i_upload_a SPREADSHEET
46
+ assert @upload.is_excel?
47
+
48
+ assert !@upload.is_image?
49
+ assert !@upload.is_pdf?
50
+ assert !@upload.is_word?
51
+ assert !@upload.is_mp3?
52
+ assert !@upload.is_text?
53
+ end
54
+ test "text file knows its type" do
55
+ when_i_upload_a TEXT
56
+ assert @upload.is_text?
57
+
58
+ assert !@upload.is_image?
59
+ assert !@upload.is_pdf?
60
+ assert !@upload.is_word?
61
+ assert !@upload.is_mp3?
62
+ assert !@upload.is_excel?
63
+ end
64
+ test "raw file knows it has no type" do
65
+ when_i_upload_a NONE
66
+
67
+ assert !@upload.is_image?
68
+ assert !@upload.is_pdf?
69
+ assert !@upload.is_word?
70
+ assert !@upload.is_mp3?
71
+ assert !@upload.is_excel?
72
+ assert !@upload.is_text?
73
+ end
74
+ end
@@ -0,0 +1,51 @@
1
+ require 'upload_test_helper'
2
+
3
+ class NameTest < UploadTestHelper
4
+ PDF_WITH_HASH = /^lorem-ipsum-[a-f0-9]{8}\.pdf$/
5
+
6
+ def when_i_upload_files_with_matching_names
7
+ (1..2).each {
8
+ @upload = Upload.new
9
+ when_i_upload_a PDF
10
+ @upload.save!
11
+ }
12
+ end
13
+
14
+ test "file_name is used as name" do
15
+ when_i_upload_a PDF
16
+ assert_equal PDF[:name], @upload.name
17
+ assert_equal PDF[:name], @upload.file_name
18
+ end
19
+
20
+ test "files with matching names use random hashes to distinguish file names" do
21
+ when_i_upload_files_with_matching_names
22
+ uploads = Upload.all
23
+ assert_equal 2, uploads.size
24
+
25
+ file_names = uploads.collect { |u| u.file_name }
26
+ assert file_names.include?(PDF[:name])
27
+ file_names.delete(PDF[:name])
28
+ assert_match PDF_WITH_HASH, file_names[0], file_names[0]
29
+
30
+ names = uploads.collect { |u| u.name }
31
+ assert_equal [PDF[:name], PDF[:name]], names, names
32
+ end
33
+
34
+ test "file_name reused when sending to remote" do
35
+ given_s3_is_deferred
36
+ config.keep_local_file = true
37
+
38
+ when_i_upload_a PDF
39
+ @upload.save!
40
+ @upload.send_to_remote
41
+ assert_equal PDF[:name], @upload.local_file_name
42
+ assert_equal PDF[:name], @upload.remote_file_name
43
+
44
+ @upload = Upload.new
45
+ when_i_upload_a PDF
46
+ @upload.save!
47
+ @upload.send_to_remote
48
+ assert_match PDF_WITH_HASH, @upload.local_file_name
49
+ assert_equal @upload.local_file_name, @upload.remote_file_name
50
+ end
51
+ end
@@ -0,0 +1,162 @@
1
+ require 'upload_test_helper'
2
+
3
+ class ScopeTest < UploadTestHelper
4
+ include FileUtils
5
+ setup do
6
+ each_of_10_files { |file|
7
+ cp("#{fixture_path}/files/#{TEXT[:name]}", file)
8
+ }
9
+ end
10
+
11
+ teardown do
12
+ each_of_10_files { |file|
13
+ rm file
14
+ }
15
+ end
16
+
17
+ def upload_another file, is_public=true
18
+ upload = Upload.new
19
+ upload.name = File.basename(file)
20
+ upload.is_public = is_public
21
+ upload.file = Rack::Test::UploadedFile.new(file)
22
+ upload.save!
23
+ end
24
+
25
+ def each_of_10_files &block
26
+ ['first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth'].each { |name|
27
+ path = "#{Dir::tmpdir}/#{name}_#{TEXT[:name]}"
28
+ yield path
29
+ }
30
+ end
31
+
32
+ def when_i_upload_10_files
33
+ pub = false
34
+ each_of_10_files { |file|
35
+ pub = !pub
36
+ upload_another file, pub
37
+ }
38
+ end
39
+
40
+ def when_i_upload_all_file_types
41
+ ALL_FILES.each { |file|
42
+ @upload = Upload.new
43
+ when_i_upload_a file
44
+ @upload.save!
45
+ }
46
+ end
47
+
48
+ def assert_correct_files_retrieved
49
+ assert_equal @expected.size, @actual.size
50
+ @expected_names ||= @expected.collect { |f| f[:name] }
51
+ @actual.each { |f|
52
+ assert @expected_names.include?(f.file_name), "Expected #{f.file_name} to be in the list: #{@expected_names.inspect}"
53
+ }
54
+ end
55
+
56
+ test "newest" do
57
+ when_i_upload_10_files
58
+ newest = Upload.newest.limit(5)
59
+ assert_equal "tenth_#{TEXT[:name]}", newest[0].file_name
60
+ assert_equal "ninth_#{TEXT[:name]}", newest[1].file_name
61
+ assert_equal "eighth_#{TEXT[:name]}", newest[2].file_name
62
+ assert_equal "seventh_#{TEXT[:name]}", newest[3].file_name
63
+ assert_equal "sixth_#{TEXT[:name]}", newest[4].file_name
64
+ end
65
+
66
+ test "alphabetical" do
67
+ when_i_upload_10_files
68
+ alphabetical = Upload.by_filename.limit(5)
69
+ assert_equal "eighth_#{TEXT[:name]}", alphabetical[0].file_name
70
+ assert_equal "fifth_#{TEXT[:name]}", alphabetical[1].file_name
71
+ assert_equal "first_#{TEXT[:name]}", alphabetical[2].file_name
72
+ assert_equal "fourth_#{TEXT[:name]}", alphabetical[3].file_name
73
+ assert_equal "ninth_#{TEXT[:name]}", alphabetical[4].file_name
74
+ end
75
+
76
+ test "is public" do
77
+ @expected = @expected_names = [:first, :third, :fifth, :seventh, :ninth].collect { |ord| "#{ord}_#{TEXT[:name]}"}
78
+ when_i_upload_10_files
79
+ @actual = Upload.is_public
80
+ assert_correct_files_retrieved
81
+ end
82
+
83
+ test "images" do
84
+ @expected = [IMAGE]
85
+ when_i_upload_all_file_types
86
+ @actual = Upload.images
87
+ assert_correct_files_retrieved
88
+ end
89
+
90
+ test "files" do
91
+ @expected = NON_IMAGE_FILES
92
+ when_i_upload_all_file_types
93
+ @actual = Upload.files
94
+ assert_correct_files_retrieved
95
+ end
96
+
97
+ test "documents" do
98
+ @expected = [PDF, DOC, SPREADSHEET]
99
+ when_i_upload_all_file_types
100
+ @actual = Upload.documents
101
+ assert_correct_files_retrieved
102
+ end
103
+
104
+ test "recent" do
105
+ first_group = ['first', 'third', 'fourth', 'seventh', 'eighth', 'ninth']
106
+ second_group = ['second', 'fifth', 'sixth', 'tenth']
107
+ @expected = @expected_names = second_group.collect { |ord| "#{ord}_#{TEXT[:name]}"}
108
+
109
+ first_group.each { |name|
110
+ path = "#{Dir::tmpdir}/#{name}_#{TEXT[:name]}"
111
+ upload_another path
112
+ }
113
+ sleep 3
114
+ second_group.each { |name|
115
+ path = "#{Dir::tmpdir}/#{name}_#{TEXT[:name]}"
116
+ upload_another path
117
+ }
118
+
119
+ @actual = Upload.recent(Time.now - 3.seconds)
120
+ assert_correct_files_retrieved
121
+ end
122
+
123
+ test "created_by" do
124
+ @plain = users(:plain)
125
+ @admin = users(:admin)
126
+
127
+ @upload = Upload.new
128
+ @upload.creator = @plain
129
+ when_i_upload_a IMAGE
130
+ @upload.save!
131
+ @upload = Upload.new
132
+ @upload.creator = @admin
133
+ when_i_upload_a PDF
134
+ @upload.save!
135
+ @upload = Upload.new
136
+ @upload.creator = @admin
137
+ when_i_upload_a DOC
138
+ @upload.save!
139
+
140
+ @expected = [IMAGE]
141
+ @actual = Upload.created_by(@plain.id)
142
+ assert_correct_files_retrieved
143
+
144
+ @expected_names = nil
145
+ @expected = [PDF, DOC]
146
+ @actual = Upload.created_by(@admin.id)
147
+ assert_correct_files_retrieved
148
+ end
149
+
150
+ test "pending_s3_migrations" do
151
+ others = [IMAGE, SPREADSHEET, TEXT, NONE]
152
+ @expected = [PDF, DOC, MP3]
153
+ given_s3_is_deferred
154
+ when_i_upload_all_file_types
155
+ others.each { |file|
156
+ Upload.find_by_name(file[:name]).send_to_remote
157
+ }
158
+
159
+ @actual = Upload.pending_s3_migrations
160
+ assert_correct_files_retrieved
161
+ end
162
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class UploadTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ class UploadTestHelper < ActiveSupport::TestCase
4
+ include ActionDispatch::TestProcess
5
+
6
+ IMAGE = { name: 'lorem-ipsum.jpg', type: 'image/jpeg', size: 54640, fingerprint: "c7620915083b8aefa8780bda998eaa20" }
7
+ PDF = { name: 'lorem-ipsum.pdf', type: 'application/pdf', size: 41241, fingerprint: "261fbfc6fd78b35df6cfebb40f63ac64" }
8
+ DOC = { name: 'lorem-ipsum.odt', type: 'application/vnd.oasis.opendocument.text', size: 14759, fingerprint: "77c548ba9ed255e649bfa1103c2bcf06" }
9
+ MP3 = { name: '1000Hz-5sec.mp3', type: 'audio/mpeg', size: 30440, fingerprint: "424d82cf66903c16ccdf17caab51113f" }
10
+ SPREADSHEET = { name: 'lorem-ipsum.ods', type: 'application/vnd.oasis.opendocument.spreadsheet', size: 11089, fingerprint: "b7c8e4c229268fdb633a3d08e26e9079" }
11
+ TEXT = { name: 'lorem-ipsum.txt', type: 'text/plain', size: 2816, fingerprint: "1ce9b5516c33e853fa1ef05730d57c7d" }
12
+ NONE = { name: 'lorem-ipsum', type: '', size: 2816, fingerprint: "1ce9b5516c33e853fa1ef05730d57c7d" }
13
+ NON_IMAGE_FILES = [PDF, DOC, MP3, SPREADSHEET, TEXT, NONE]
14
+ ALL_FILES = [IMAGE, PDF, DOC, MP3, SPREADSHEET, TEXT, NONE]
15
+
16
+ setup do
17
+ @upload = Upload.new
18
+ end
19
+
20
+ teardown do
21
+ Upload.destroy_all
22
+ end
23
+
24
+ def fixture_file type
25
+ fixture_file_upload("/files/#{type[:name]}")
26
+ end
27
+
28
+ def file_at name, type
29
+ fixture_file_upload("/files/#{name}", type)
30
+ end
31
+
32
+ def when_i_upload_a file
33
+ @upload.file = file_at(file[:name], file[:type])
34
+ assert !@upload.file.exists?
35
+ end
36
+
37
+ def given_s3_is_immediate
38
+ config.enable_s3 = true
39
+ config.s3_no_wait = true
40
+ config.keep_local_file = false
41
+ end
42
+
43
+ def given_s3_is_deferred
44
+ config.enable_s3 = true
45
+ config.s3_no_wait = false
46
+ config.keep_local_file = false
47
+ end
48
+
49
+ def given_s3_is_disabled
50
+ config.enable_s3 = false
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,486 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: another_uploader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Isaac Betesh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.2'
30
+ - !ruby/object:Gem::Dependency
31
+ name: paperclip
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '3.3'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '3.3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: aws-sdk
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.7'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.7'
62
+ - !ruby/object:Gem::Dependency
63
+ name: flash_cookie_session
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '1.1'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '1.1'
78
+ - !ruby/object:Gem::Dependency
79
+ name: uploadify-rails
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '3.1'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '3.1'
94
+ - !ruby/object:Gem::Dependency
95
+ name: best_in_place
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '2.0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '2.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: sqlite3
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: ! '= AnotherUploader
127
+
128
+
129
+ This project rocks and uses MIT-LICENSE.'
130
+ email:
131
+ - iybetesh@gmail.com
132
+ executables: []
133
+ extensions: []
134
+ extra_rdoc_files: []
135
+ files:
136
+ - app/assets/images/another_uploader/spreadsheet.gif
137
+ - app/assets/images/another_uploader/none.gif
138
+ - app/assets/images/another_uploader/pdf.gif
139
+ - app/assets/images/another_uploader/text.gif
140
+ - app/assets/images/another_uploader/doc.gif
141
+ - app/assets/images/another_uploader/mp3.gif
142
+ - app/assets/stylesheets/another_uploader/index.css
143
+ - app/assets/stylesheets/uploads.css
144
+ - app/assets/javascripts/another_uploader/index.js
145
+ - app/assets/javascripts/uploads.js
146
+ - app/views/uploads/destroy.html.erb
147
+ - app/views/uploads/uploadify.html.erb
148
+ - app/models/upload.rb
149
+ - app/controllers/uploads_controller.rb
150
+ - app/helpers/uploads_helper.rb
151
+ - config/routes.rb
152
+ - db/migrate/20121115043827_create_uploads.rb
153
+ - lib/tasks/another_uploader_tasks.rake
154
+ - lib/another_uploader/mime_type_getters.rb
155
+ - lib/another_uploader/version.rb
156
+ - lib/another_uploader/mime_type_groups.rb
157
+ - lib/another_uploader/image_processing.rb
158
+ - lib/another_uploader/engine.rb
159
+ - lib/another_uploader/icons.rb
160
+ - lib/another_uploader/configuration.rb
161
+ - lib/another_uploader/transliteration.rb
162
+ - lib/another_uploader.rb
163
+ - MIT-LICENSE
164
+ - Rakefile
165
+ - README.rdoc
166
+ - test/test_helper.rb
167
+ - test/another_uploader_test.rb
168
+ - test/integration/navigation_test.rb
169
+ - test/dummy/public/422.html
170
+ - test/dummy/public/favicon.ico
171
+ - test/dummy/public/500.html
172
+ - test/dummy/public/404.html
173
+ - test/dummy/log/test.log
174
+ - test/dummy/log/development.log
175
+ - test/dummy/db/migrate/20121115045630_create_uploads.another_uploader_engine.rb
176
+ - test/dummy/db/migrate/20121115045547_create_password_recoveries.easy_rails_authentication_engine.rb
177
+ - test/dummy/db/migrate/20121115045546_create_users.easy_rails_authentication_engine.rb
178
+ - test/dummy/db/test.sqlite3
179
+ - test/dummy/db/development.sqlite3
180
+ - test/dummy/db/schema.rb
181
+ - test/dummy/README.rdoc
182
+ - test/dummy/Rakefile
183
+ - test/dummy/script/rails
184
+ - test/dummy/app/assets/stylesheets/application.css
185
+ - test/dummy/app/assets/javascripts/application.js
186
+ - test/dummy/app/views/layouts/application.html.erb
187
+ - test/dummy/app/views/main/index.html.erb
188
+ - test/dummy/app/models/user.rb
189
+ - test/dummy/app/controllers/application_controller.rb
190
+ - test/dummy/app/controllers/main_controller.rb
191
+ - test/dummy/app/helpers/application_helper.rb
192
+ - test/dummy/tmp/cache/assets/D21/CE0/sprockets%2F85c75ccf1618c6e9214374fa80ff6a78
193
+ - test/dummy/tmp/cache/assets/CE7/F50/sprockets%2F5118ca4d54388e2cc84e90c95f36048a
194
+ - test/dummy/tmp/cache/assets/D95/0C0/sprockets%2Ffce9642718191a3112260ccbc8cafefc
195
+ - test/dummy/tmp/cache/assets/D9A/DE0/sprockets%2Fcd78fb20bde75dba85a0c62b4838542c
196
+ - test/dummy/tmp/cache/assets/D1B/810/sprockets%2F76112c598c956c07c4f4e91f6ee3ba80
197
+ - test/dummy/tmp/cache/assets/CED/B00/sprockets%2Fbde328b963290de060b7677fd155695e
198
+ - test/dummy/tmp/cache/assets/DBB/440/sprockets%2Fe68195d6a29fe5fd90ded7559fccb429
199
+ - test/dummy/tmp/cache/assets/DBB/A30/sprockets%2Fe70dc841dca9ceee2e413a1661ed0b03
200
+ - test/dummy/tmp/cache/assets/CD9/990/sprockets%2Fba64ae414cc39805ce695e2c40162807
201
+ - test/dummy/tmp/cache/assets/C1D/CB0/sprockets%2F1368a6c195444308f76a970b1127660b
202
+ - test/dummy/tmp/cache/assets/E31/930/sprockets%2Ff68b89fd7200b23eccd9b1ba9afff3d3
203
+ - test/dummy/tmp/cache/assets/DF1/B80/sprockets%2Fae7705cefbeb7308c73ba3a7a42c6a1f
204
+ - test/dummy/tmp/cache/assets/D0E/E90/sprockets%2Fa982198515b54c1f58f8aae30830f0ea
205
+ - test/dummy/tmp/cache/assets/D12/7E0/sprockets%2F35c1a2211d6547b7c7ffa5ed813d7938
206
+ - test/dummy/tmp/cache/assets/DC0/490/sprockets%2F5e0aebe091b8cea050c89d4ea19e080b
207
+ - test/dummy/tmp/cache/assets/DCC/450/sprockets%2Fb3392d6eaf0e4cc318e19b6beb59b33f
208
+ - test/dummy/tmp/cache/assets/CC1/4E0/sprockets%2F53d9bd83335f4bb9561087645769c5da
209
+ - test/dummy/tmp/cache/assets/DF6/DE0/sprockets%2Fd4eb25c8857c4c413cacaf6e7a0ccd26
210
+ - test/dummy/tmp/cache/assets/CD7/B40/sprockets%2F21b71f8ea0f566175a551816b6f530cb
211
+ - test/dummy/tmp/cache/assets/CD7/EE0/sprockets%2Fd677061accd85058216607c208b7a2bf
212
+ - test/dummy/tmp/cache/assets/D7C/E70/sprockets%2F9cae95be6892da1bf96c244c0d58069c
213
+ - test/dummy/tmp/cache/assets/CE6/1A0/sprockets%2F41ce96883326a6a9313b408cdf80df74
214
+ - test/dummy/tmp/cache/assets/DDA/760/sprockets%2F31d55e4ecf03fbd5d71d5d7fd6d6d586
215
+ - test/dummy/tmp/cache/assets/D5C/030/sprockets%2F85440ce896b9da860fd37bb1e58f978e
216
+ - test/dummy/tmp/cache/assets/DBF/3A0/sprockets%2F3c82ed0abb7057c1e728ac0f2ca41df9
217
+ - test/dummy/tmp/cache/assets/D6B/A10/sprockets%2Fe2054cdbee145cdb51eb971863f54c80
218
+ - test/dummy/tmp/cache/assets/D25/860/sprockets%2Ff8260dc5f64465554e619b1e8d8e5fb7
219
+ - test/dummy/tmp/cache/assets/D65/DA0/sprockets%2Fd0515dae6856f8da160c5d3050aa8b8e
220
+ - test/dummy/tmp/cache/assets/D7D/750/sprockets%2F8755c9ddd1217ce9ab854a429c4f7e3d
221
+ - test/dummy/tmp/cache/assets/CB1/030/sprockets%2F330d8361296be2294bcf4e8282473ab7
222
+ - test/dummy/tmp/cache/assets/DD0/2F0/sprockets%2F2cb2d409afda49a014f5bfef65f75c67
223
+ - test/dummy/tmp/cache/assets/D41/DF0/sprockets%2F86004b9b60de26aa7d87a1ff8b828f21
224
+ - test/dummy/tmp/cache/assets/CE1/C30/sprockets%2F6a2c53cf042c621806c77ada86288c77
225
+ - test/dummy/tmp/cache/assets/CE1/340/sprockets%2F0573a62b0251cc18c80949a9c9fe34d7
226
+ - test/dummy/tmp/cache/assets/D71/520/sprockets%2Fc8e0327abdc946f27d2a91311ddd868e
227
+ - test/dummy/tmp/cache/assets/C82/240/sprockets%2F625dc2916f00654e5351b054afc95678
228
+ - test/dummy/tmp/cache/assets/D4F/1A0/sprockets%2F7901d59d8f722a5ebfff972429bb2d45
229
+ - test/dummy/tmp/cache/assets/D4F/4A0/sprockets%2F4fcb3c5126d2489feb99578dfa0c8507
230
+ - test/dummy/tmp/cache/assets/D6C/4B0/sprockets%2F543f257da84ce9914a414c3ffc1ad5a5
231
+ - test/dummy/tmp/cache/assets/D6C/AC0/sprockets%2Ffc095dd6183c1fcdf793351aa0b9057c
232
+ - test/dummy/tmp/cache/assets/CA9/ED0/sprockets%2F845117661057731bd942dc61ddda24f3
233
+ - test/dummy/tmp/cache/assets/D18/610/sprockets%2F66cc7f1b171e5729d4279bac1676de53
234
+ - test/dummy/tmp/cache/assets/DC9/380/sprockets%2F2aaba93d71e5b9e178b0ce2df59eb603
235
+ - test/dummy/tmp/cache/assets/CF2/4B0/sprockets%2Fb95901745337c00037e00a7f0cacaa3c
236
+ - test/dummy/tmp/cache/assets/D35/000/sprockets%2F26017814dcf3891ad5be86ec7005a0ae
237
+ - test/dummy/tmp/cache/assets/D1E/580/sprockets%2F5f965913df7a03e307dfd9326f9b06b7
238
+ - test/dummy/tmp/cache/assets/D24/DF0/sprockets%2F205e10fc11b2c5ed047b48e7d13ca262
239
+ - test/dummy/tmp/cache/assets/D38/250/sprockets%2F80644f3f31455068a51deebec0aa7a86
240
+ - test/dummy/tmp/cache/assets/D72/B90/sprockets%2Fc267891912fff9a3fa22ae346ba4f82b
241
+ - test/dummy/tmp/cache/assets/D23/8A0/sprockets%2F6175cb8fa517f52908739e3b478ef4bd
242
+ - test/dummy/tmp/cache/assets/E29/000/sprockets%2F6d13db8fbbd48dbce7392e43ac0ecb46
243
+ - test/dummy/tmp/cache/assets/C56/660/sprockets%2F9606c93013df9ec75112d323643686a9
244
+ - test/dummy/tmp/cache/assets/D91/D00/sprockets%2Fc1e1b10c6a5879ae7a2a875b0dbd357a
245
+ - test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
246
+ - test/dummy/tmp/cache/assets/D27/BB0/sprockets%2F1ce3f0373575afde958376fec61658e8
247
+ - test/dummy/tmp/cache/assets/D59/F30/sprockets%2F9dff7df99c759433823d4030cea998ac
248
+ - test/dummy/tmp/cache/assets/D0A/760/sprockets%2F28d26ec78714eaf45198b0abab175117
249
+ - test/dummy/tmp/cache/assets/CFE/EE0/sprockets%2F1100a030f19d781dc98eb066ab6075ec
250
+ - test/dummy/tmp/cache/assets/C64/2A0/sprockets%2F779fa4794d76f3083f442743352e247c
251
+ - test/dummy/tmp/cache/assets/CD6/C50/sprockets%2Fd30f21629ea47cf66530fa0e347272b4
252
+ - test/dummy/tmp/cache/assets/DF8/1A0/sprockets%2F0f9b45b1ca394c1aedc6febec735820f
253
+ - test/dummy/tmp/cache/assets/CBD/D80/sprockets%2F65641a234ede6ff88b006594b1869b29
254
+ - test/dummy/tmp/cache/assets/C80/910/sprockets%2F1da2794871f7097ea5246354ae85300b
255
+ - test/dummy/tmp/cache/assets/C9F/DD0/sprockets%2F1801bd89c75539c636659918883e8dea
256
+ - test/dummy/tmp/cache/assets/D00/D30/sprockets%2F08dc27f9a9ed399356a91d4069889c5d
257
+ - test/dummy/tmp/cache/assets/CDA/700/sprockets%2F2437e594d81db9b2b87b24411630dba8
258
+ - test/dummy/tmp/cache/assets/D68/CD0/sprockets%2F9d829309524cfa22a0bdddf62c817d2a
259
+ - test/dummy/tmp/cache/assets/D52/E40/sprockets%2F04b1950fad18f3bcf64d30120da8b40b
260
+ - test/dummy/tmp/cache/assets/D52/FD0/sprockets%2F19d7b68fb60b78d7519fc64d3c9a05f6
261
+ - test/dummy/tmp/cache/assets/DD9/030/sprockets%2F22d64f8febf6fc918b3a9ff6ad40441f
262
+ - test/dummy/tmp/cache/assets/DDC/630/sprockets%2Fd23e663fbbe6dfdb81e7a5d86d87b507
263
+ - test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
264
+ - test/dummy/tmp/cache/assets/DED/500/sprockets%2F6b8b0740ec26f31fe0bcaa5ecd1e75a4
265
+ - test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
266
+ - test/dummy/tmp/cache/assets/E79/780/sprockets%2Fd7e2d10be0ca0abfe06ecab1d3868dfd
267
+ - test/dummy/tmp/cache/assets/DFE/980/sprockets%2F3493099ba61bb24ebec3f59cddf08ead
268
+ - test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
269
+ - test/dummy/tmp/cache/assets/D5A/850/sprockets%2F4015515d4be88de02aa43ff1b0abb594
270
+ - test/dummy/tmp/cache/assets/D1A/AC0/sprockets%2F045847ba35c0701c01fa0b0ecf73d11a
271
+ - test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
272
+ - test/dummy/tmp/cache/assets/CF9/960/sprockets%2F69590f47d597a9ec070b6c0bc28e9876
273
+ - test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
274
+ - test/dummy/tmp/cache/assets/CD8/000/sprockets%2F12d162f45ae0036e177e4a67b926a92d
275
+ - test/dummy/tmp/cache/assets/DEA/760/sprockets%2Fcf1c5cfb9b1239a5b3dee52a3dd5001e
276
+ - test/dummy/config.ru
277
+ - test/dummy/test/functional/main_controller_test.rb
278
+ - test/dummy/config/initializers/mime_types.rb
279
+ - test/dummy/config/initializers/another_uploader.rb
280
+ - test/dummy/config/initializers/inflections.rb
281
+ - test/dummy/config/initializers/wrap_parameters.rb
282
+ - test/dummy/config/initializers/backtrace_silencers.rb
283
+ - test/dummy/config/initializers/secret_token.rb
284
+ - test/dummy/config/initializers/session_store.rb
285
+ - test/dummy/config/s3.yml
286
+ - test/dummy/config/database.yml
287
+ - test/dummy/config/environments/production.rb
288
+ - test/dummy/config/environments/test.rb
289
+ - test/dummy/config/environments/development.rb
290
+ - test/dummy/config/routes.rb
291
+ - test/dummy/config/locales/en.yml
292
+ - test/dummy/config/application.rb
293
+ - test/dummy/config/environment.rb
294
+ - test/dummy/config/s3.yml.example
295
+ - test/dummy/config/boot.rb
296
+ - test/fixtures/files/lorem-ipsum.odt
297
+ - test/fixtures/files/1000Hz-5sec.mp3
298
+ - test/fixtures/files/lorem-ipsum.txt
299
+ - test/fixtures/files/lorem-ipsum.ods
300
+ - test/fixtures/files/lorem-ipsum.pdf
301
+ - test/fixtures/files/lorem-ipsum.jpg
302
+ - test/fixtures/files/lorem-ipsum
303
+ - test/fixtures/users.yml
304
+ - test/upload_test_helper.rb
305
+ - test/unit/name_test.rb
306
+ - test/unit/file_storage_test.rb
307
+ - test/unit/scope_test.rb
308
+ - test/unit/mime_types_test.rb
309
+ - test/unit/upload_test.rb
310
+ - test/unit/helpers/uploads_helper_test.rb
311
+ - test/unit/icon_and_thumb_test.rb
312
+ - test/functional/uploads_controller_test.rb
313
+ homepage: http://www.github.com/betesh/another_uploader
314
+ licenses: []
315
+ post_install_message:
316
+ rdoc_options: []
317
+ require_paths:
318
+ - lib
319
+ required_ruby_version: !ruby/object:Gem::Requirement
320
+ none: false
321
+ requirements:
322
+ - - ! '>='
323
+ - !ruby/object:Gem::Version
324
+ version: '0'
325
+ required_rubygems_version: !ruby/object:Gem::Requirement
326
+ none: false
327
+ requirements:
328
+ - - ! '>='
329
+ - !ruby/object:Gem::Version
330
+ version: '0'
331
+ requirements: []
332
+ rubyforge_project:
333
+ rubygems_version: 1.8.24
334
+ signing_key:
335
+ specification_version: 3
336
+ summary: Upload files to your Rails App with little effort. A newer, cleaner approach
337
+ based on http://github.com/jbasdf/uploader. Don't work with legacy code if you
338
+ don't have to.
339
+ test_files:
340
+ - test/test_helper.rb
341
+ - test/another_uploader_test.rb
342
+ - test/integration/navigation_test.rb
343
+ - test/dummy/public/422.html
344
+ - test/dummy/public/favicon.ico
345
+ - test/dummy/public/500.html
346
+ - test/dummy/public/404.html
347
+ - test/dummy/log/test.log
348
+ - test/dummy/log/development.log
349
+ - test/dummy/db/migrate/20121115045630_create_uploads.another_uploader_engine.rb
350
+ - test/dummy/db/migrate/20121115045547_create_password_recoveries.easy_rails_authentication_engine.rb
351
+ - test/dummy/db/migrate/20121115045546_create_users.easy_rails_authentication_engine.rb
352
+ - test/dummy/db/test.sqlite3
353
+ - test/dummy/db/development.sqlite3
354
+ - test/dummy/db/schema.rb
355
+ - test/dummy/README.rdoc
356
+ - test/dummy/Rakefile
357
+ - test/dummy/script/rails
358
+ - test/dummy/app/assets/stylesheets/application.css
359
+ - test/dummy/app/assets/javascripts/application.js
360
+ - test/dummy/app/views/layouts/application.html.erb
361
+ - test/dummy/app/views/main/index.html.erb
362
+ - test/dummy/app/models/user.rb
363
+ - test/dummy/app/controllers/application_controller.rb
364
+ - test/dummy/app/controllers/main_controller.rb
365
+ - test/dummy/app/helpers/application_helper.rb
366
+ - test/dummy/tmp/cache/assets/D21/CE0/sprockets%2F85c75ccf1618c6e9214374fa80ff6a78
367
+ - test/dummy/tmp/cache/assets/CE7/F50/sprockets%2F5118ca4d54388e2cc84e90c95f36048a
368
+ - test/dummy/tmp/cache/assets/D95/0C0/sprockets%2Ffce9642718191a3112260ccbc8cafefc
369
+ - test/dummy/tmp/cache/assets/D9A/DE0/sprockets%2Fcd78fb20bde75dba85a0c62b4838542c
370
+ - test/dummy/tmp/cache/assets/D1B/810/sprockets%2F76112c598c956c07c4f4e91f6ee3ba80
371
+ - test/dummy/tmp/cache/assets/CED/B00/sprockets%2Fbde328b963290de060b7677fd155695e
372
+ - test/dummy/tmp/cache/assets/DBB/440/sprockets%2Fe68195d6a29fe5fd90ded7559fccb429
373
+ - test/dummy/tmp/cache/assets/DBB/A30/sprockets%2Fe70dc841dca9ceee2e413a1661ed0b03
374
+ - test/dummy/tmp/cache/assets/CD9/990/sprockets%2Fba64ae414cc39805ce695e2c40162807
375
+ - test/dummy/tmp/cache/assets/C1D/CB0/sprockets%2F1368a6c195444308f76a970b1127660b
376
+ - test/dummy/tmp/cache/assets/E31/930/sprockets%2Ff68b89fd7200b23eccd9b1ba9afff3d3
377
+ - test/dummy/tmp/cache/assets/DF1/B80/sprockets%2Fae7705cefbeb7308c73ba3a7a42c6a1f
378
+ - test/dummy/tmp/cache/assets/D0E/E90/sprockets%2Fa982198515b54c1f58f8aae30830f0ea
379
+ - test/dummy/tmp/cache/assets/D12/7E0/sprockets%2F35c1a2211d6547b7c7ffa5ed813d7938
380
+ - test/dummy/tmp/cache/assets/DC0/490/sprockets%2F5e0aebe091b8cea050c89d4ea19e080b
381
+ - test/dummy/tmp/cache/assets/DCC/450/sprockets%2Fb3392d6eaf0e4cc318e19b6beb59b33f
382
+ - test/dummy/tmp/cache/assets/CC1/4E0/sprockets%2F53d9bd83335f4bb9561087645769c5da
383
+ - test/dummy/tmp/cache/assets/DF6/DE0/sprockets%2Fd4eb25c8857c4c413cacaf6e7a0ccd26
384
+ - test/dummy/tmp/cache/assets/CD7/B40/sprockets%2F21b71f8ea0f566175a551816b6f530cb
385
+ - test/dummy/tmp/cache/assets/CD7/EE0/sprockets%2Fd677061accd85058216607c208b7a2bf
386
+ - test/dummy/tmp/cache/assets/D7C/E70/sprockets%2F9cae95be6892da1bf96c244c0d58069c
387
+ - test/dummy/tmp/cache/assets/CE6/1A0/sprockets%2F41ce96883326a6a9313b408cdf80df74
388
+ - test/dummy/tmp/cache/assets/DDA/760/sprockets%2F31d55e4ecf03fbd5d71d5d7fd6d6d586
389
+ - test/dummy/tmp/cache/assets/D5C/030/sprockets%2F85440ce896b9da860fd37bb1e58f978e
390
+ - test/dummy/tmp/cache/assets/DBF/3A0/sprockets%2F3c82ed0abb7057c1e728ac0f2ca41df9
391
+ - test/dummy/tmp/cache/assets/D6B/A10/sprockets%2Fe2054cdbee145cdb51eb971863f54c80
392
+ - test/dummy/tmp/cache/assets/D25/860/sprockets%2Ff8260dc5f64465554e619b1e8d8e5fb7
393
+ - test/dummy/tmp/cache/assets/D65/DA0/sprockets%2Fd0515dae6856f8da160c5d3050aa8b8e
394
+ - test/dummy/tmp/cache/assets/D7D/750/sprockets%2F8755c9ddd1217ce9ab854a429c4f7e3d
395
+ - test/dummy/tmp/cache/assets/CB1/030/sprockets%2F330d8361296be2294bcf4e8282473ab7
396
+ - test/dummy/tmp/cache/assets/DD0/2F0/sprockets%2F2cb2d409afda49a014f5bfef65f75c67
397
+ - test/dummy/tmp/cache/assets/D41/DF0/sprockets%2F86004b9b60de26aa7d87a1ff8b828f21
398
+ - test/dummy/tmp/cache/assets/CE1/C30/sprockets%2F6a2c53cf042c621806c77ada86288c77
399
+ - test/dummy/tmp/cache/assets/CE1/340/sprockets%2F0573a62b0251cc18c80949a9c9fe34d7
400
+ - test/dummy/tmp/cache/assets/D71/520/sprockets%2Fc8e0327abdc946f27d2a91311ddd868e
401
+ - test/dummy/tmp/cache/assets/C82/240/sprockets%2F625dc2916f00654e5351b054afc95678
402
+ - test/dummy/tmp/cache/assets/D4F/1A0/sprockets%2F7901d59d8f722a5ebfff972429bb2d45
403
+ - test/dummy/tmp/cache/assets/D4F/4A0/sprockets%2F4fcb3c5126d2489feb99578dfa0c8507
404
+ - test/dummy/tmp/cache/assets/D6C/4B0/sprockets%2F543f257da84ce9914a414c3ffc1ad5a5
405
+ - test/dummy/tmp/cache/assets/D6C/AC0/sprockets%2Ffc095dd6183c1fcdf793351aa0b9057c
406
+ - test/dummy/tmp/cache/assets/CA9/ED0/sprockets%2F845117661057731bd942dc61ddda24f3
407
+ - test/dummy/tmp/cache/assets/D18/610/sprockets%2F66cc7f1b171e5729d4279bac1676de53
408
+ - test/dummy/tmp/cache/assets/DC9/380/sprockets%2F2aaba93d71e5b9e178b0ce2df59eb603
409
+ - test/dummy/tmp/cache/assets/CF2/4B0/sprockets%2Fb95901745337c00037e00a7f0cacaa3c
410
+ - test/dummy/tmp/cache/assets/D35/000/sprockets%2F26017814dcf3891ad5be86ec7005a0ae
411
+ - test/dummy/tmp/cache/assets/D1E/580/sprockets%2F5f965913df7a03e307dfd9326f9b06b7
412
+ - test/dummy/tmp/cache/assets/D24/DF0/sprockets%2F205e10fc11b2c5ed047b48e7d13ca262
413
+ - test/dummy/tmp/cache/assets/D38/250/sprockets%2F80644f3f31455068a51deebec0aa7a86
414
+ - test/dummy/tmp/cache/assets/D72/B90/sprockets%2Fc267891912fff9a3fa22ae346ba4f82b
415
+ - test/dummy/tmp/cache/assets/D23/8A0/sprockets%2F6175cb8fa517f52908739e3b478ef4bd
416
+ - test/dummy/tmp/cache/assets/E29/000/sprockets%2F6d13db8fbbd48dbce7392e43ac0ecb46
417
+ - test/dummy/tmp/cache/assets/C56/660/sprockets%2F9606c93013df9ec75112d323643686a9
418
+ - test/dummy/tmp/cache/assets/D91/D00/sprockets%2Fc1e1b10c6a5879ae7a2a875b0dbd357a
419
+ - test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655
420
+ - test/dummy/tmp/cache/assets/D27/BB0/sprockets%2F1ce3f0373575afde958376fec61658e8
421
+ - test/dummy/tmp/cache/assets/D59/F30/sprockets%2F9dff7df99c759433823d4030cea998ac
422
+ - test/dummy/tmp/cache/assets/D0A/760/sprockets%2F28d26ec78714eaf45198b0abab175117
423
+ - test/dummy/tmp/cache/assets/CFE/EE0/sprockets%2F1100a030f19d781dc98eb066ab6075ec
424
+ - test/dummy/tmp/cache/assets/C64/2A0/sprockets%2F779fa4794d76f3083f442743352e247c
425
+ - test/dummy/tmp/cache/assets/CD6/C50/sprockets%2Fd30f21629ea47cf66530fa0e347272b4
426
+ - test/dummy/tmp/cache/assets/DF8/1A0/sprockets%2F0f9b45b1ca394c1aedc6febec735820f
427
+ - test/dummy/tmp/cache/assets/CBD/D80/sprockets%2F65641a234ede6ff88b006594b1869b29
428
+ - test/dummy/tmp/cache/assets/C80/910/sprockets%2F1da2794871f7097ea5246354ae85300b
429
+ - test/dummy/tmp/cache/assets/C9F/DD0/sprockets%2F1801bd89c75539c636659918883e8dea
430
+ - test/dummy/tmp/cache/assets/D00/D30/sprockets%2F08dc27f9a9ed399356a91d4069889c5d
431
+ - test/dummy/tmp/cache/assets/CDA/700/sprockets%2F2437e594d81db9b2b87b24411630dba8
432
+ - test/dummy/tmp/cache/assets/D68/CD0/sprockets%2F9d829309524cfa22a0bdddf62c817d2a
433
+ - test/dummy/tmp/cache/assets/D52/E40/sprockets%2F04b1950fad18f3bcf64d30120da8b40b
434
+ - test/dummy/tmp/cache/assets/D52/FD0/sprockets%2F19d7b68fb60b78d7519fc64d3c9a05f6
435
+ - test/dummy/tmp/cache/assets/DD9/030/sprockets%2F22d64f8febf6fc918b3a9ff6ad40441f
436
+ - test/dummy/tmp/cache/assets/DDC/630/sprockets%2Fd23e663fbbe6dfdb81e7a5d86d87b507
437
+ - test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994
438
+ - test/dummy/tmp/cache/assets/DED/500/sprockets%2F6b8b0740ec26f31fe0bcaa5ecd1e75a4
439
+ - test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705
440
+ - test/dummy/tmp/cache/assets/E79/780/sprockets%2Fd7e2d10be0ca0abfe06ecab1d3868dfd
441
+ - test/dummy/tmp/cache/assets/DFE/980/sprockets%2F3493099ba61bb24ebec3f59cddf08ead
442
+ - test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6
443
+ - test/dummy/tmp/cache/assets/D5A/850/sprockets%2F4015515d4be88de02aa43ff1b0abb594
444
+ - test/dummy/tmp/cache/assets/D1A/AC0/sprockets%2F045847ba35c0701c01fa0b0ecf73d11a
445
+ - test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af
446
+ - test/dummy/tmp/cache/assets/CF9/960/sprockets%2F69590f47d597a9ec070b6c0bc28e9876
447
+ - test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953
448
+ - test/dummy/tmp/cache/assets/CD8/000/sprockets%2F12d162f45ae0036e177e4a67b926a92d
449
+ - test/dummy/tmp/cache/assets/DEA/760/sprockets%2Fcf1c5cfb9b1239a5b3dee52a3dd5001e
450
+ - test/dummy/config.ru
451
+ - test/dummy/test/functional/main_controller_test.rb
452
+ - test/dummy/config/initializers/mime_types.rb
453
+ - test/dummy/config/initializers/another_uploader.rb
454
+ - test/dummy/config/initializers/inflections.rb
455
+ - test/dummy/config/initializers/wrap_parameters.rb
456
+ - test/dummy/config/initializers/backtrace_silencers.rb
457
+ - test/dummy/config/initializers/secret_token.rb
458
+ - test/dummy/config/initializers/session_store.rb
459
+ - test/dummy/config/s3.yml
460
+ - test/dummy/config/database.yml
461
+ - test/dummy/config/environments/production.rb
462
+ - test/dummy/config/environments/test.rb
463
+ - test/dummy/config/environments/development.rb
464
+ - test/dummy/config/routes.rb
465
+ - test/dummy/config/locales/en.yml
466
+ - test/dummy/config/application.rb
467
+ - test/dummy/config/environment.rb
468
+ - test/dummy/config/s3.yml.example
469
+ - test/dummy/config/boot.rb
470
+ - test/fixtures/files/lorem-ipsum.odt
471
+ - test/fixtures/files/1000Hz-5sec.mp3
472
+ - test/fixtures/files/lorem-ipsum.txt
473
+ - test/fixtures/files/lorem-ipsum.ods
474
+ - test/fixtures/files/lorem-ipsum.pdf
475
+ - test/fixtures/files/lorem-ipsum.jpg
476
+ - test/fixtures/files/lorem-ipsum
477
+ - test/fixtures/users.yml
478
+ - test/upload_test_helper.rb
479
+ - test/unit/name_test.rb
480
+ - test/unit/file_storage_test.rb
481
+ - test/unit/scope_test.rb
482
+ - test/unit/mime_types_test.rb
483
+ - test/unit/upload_test.rb
484
+ - test/unit/helpers/uploads_helper_test.rb
485
+ - test/unit/icon_and_thumb_test.rb
486
+ - test/functional/uploads_controller_test.rb