attached 0.5.2 → 0.5.3

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 (224) hide show
  1. data/LICENSE +1 -1
  2. data/README.rdoc +1 -1
  3. data/lib/attached.rb +82 -82
  4. data/lib/attached/attachment.rb +114 -114
  5. data/lib/attached/job.rb +6 -6
  6. data/lib/attached/processor.rb +9 -9
  7. data/lib/attached/processor/audio.rb +29 -29
  8. data/lib/attached/processor/base.rb +14 -14
  9. data/lib/attached/processor/image.rb +34 -34
  10. data/lib/attached/railtie.rb +2 -2
  11. data/lib/attached/storage.rb +8 -8
  12. data/lib/attached/storage/aws.rb +69 -69
  13. data/lib/attached/storage/base.rb +26 -26
  14. data/lib/attached/storage/google.rb +71 -71
  15. data/lib/attached/storage/local.rb +44 -44
  16. data/lib/attached/storage/rackspace.rb +68 -68
  17. data/lib/attached/version.rb +1 -1
  18. data/test/dummy/app/assets/javascripts/application.js +2 -1
  19. data/test/dummy/app/assets/javascripts/{audios.js → main.js.coffee} +0 -0
  20. data/test/dummy/app/assets/stylesheets/application.css +3 -10
  21. data/test/dummy/app/assets/stylesheets/main.css.scss +6 -0
  22. data/test/dummy/app/views/audios/_form.html.haml +17 -0
  23. data/test/dummy/app/views/audios/edit.html.haml +5 -0
  24. data/test/dummy/app/views/audios/index.html.haml +20 -0
  25. data/test/dummy/app/views/audios/new.html.haml +5 -0
  26. data/test/dummy/app/views/audios/show.html.haml +13 -0
  27. data/test/dummy/app/views/images/_form.html.haml +17 -0
  28. data/test/dummy/app/views/images/edit.html.haml +5 -0
  29. data/test/dummy/app/views/images/index.html.haml +20 -0
  30. data/test/dummy/app/views/images/new.html.haml +5 -0
  31. data/test/dummy/app/views/images/show.html.haml +13 -0
  32. data/test/dummy/app/views/layouts/application.html.haml +17 -0
  33. data/test/dummy/app/views/main/index.html.haml +8 -0
  34. data/test/dummy/app/views/shared/_error.html.haml +4 -0
  35. data/test/dummy/db/development.sqlite3 +0 -0
  36. data/test/dummy/db/test.sqlite3 +0 -0
  37. data/test/dummy/log/development.log +37 -0
  38. data/test/dummy/log/test.log +390 -1166
  39. data/test/dummy/public/system/audios/files/full/{07a3f586-805d-4c68-be01-7ba4d787aa9e.aac → 151d9dff-7259-41a3-9fc3-988a3099fe22.aac} +0 -0
  40. data/test/dummy/public/system/audios/files/full/{1a5d65b6-3d7f-45e3-8fc8-9221f3bca127.aac → 2b5e47b9-b441-4c49-a98f-5bf89f19848e.aac} +0 -0
  41. data/test/dummy/public/system/audios/files/full/{3729319f-299b-47e2-bd7e-d73d38b5cf8f.aac → 33203ced-129f-454c-870a-dc87a2809859.aac} +0 -0
  42. data/test/dummy/public/system/audios/files/full/{41e88b81-2804-4316-86e8-252adad0eaa3.aac → c03bdf7c-ce26-4a31-9c23-d947b2986fa7.aac} +0 -0
  43. data/test/dummy/public/system/audios/files/large/{07a3f586-805d-4c68-be01-7ba4d787aa9e.aac → 151d9dff-7259-41a3-9fc3-988a3099fe22.aac} +0 -0
  44. data/test/dummy/public/system/audios/files/large/{1a5d65b6-3d7f-45e3-8fc8-9221f3bca127.aac → 2b5e47b9-b441-4c49-a98f-5bf89f19848e.aac} +0 -0
  45. data/test/dummy/public/system/audios/files/large/{3729319f-299b-47e2-bd7e-d73d38b5cf8f.aac → 33203ced-129f-454c-870a-dc87a2809859.aac} +0 -0
  46. data/test/dummy/public/system/audios/files/large/{41e88b81-2804-4316-86e8-252adad0eaa3.aac → c03bdf7c-ce26-4a31-9c23-d947b2986fa7.aac} +0 -0
  47. data/test/dummy/public/system/audios/files/original/{07a3f586-805d-4c68-be01-7ba4d787aa9e.wav → 151d9dff-7259-41a3-9fc3-988a3099fe22.wav} +0 -0
  48. data/test/dummy/public/system/audios/files/original/{1a5d65b6-3d7f-45e3-8fc8-9221f3bca127.wav → 2b5e47b9-b441-4c49-a98f-5bf89f19848e.wav} +0 -0
  49. data/test/dummy/public/system/audios/files/original/{3729319f-299b-47e2-bd7e-d73d38b5cf8f.wav → 33203ced-129f-454c-870a-dc87a2809859.wav} +0 -0
  50. data/test/dummy/public/system/audios/files/original/{41e88b81-2804-4316-86e8-252adad0eaa3.wav → c03bdf7c-ce26-4a31-9c23-d947b2986fa7.wav} +0 -0
  51. data/test/dummy/public/system/audios/files/small/{07a3f586-805d-4c68-be01-7ba4d787aa9e.aac → 151d9dff-7259-41a3-9fc3-988a3099fe22.aac} +0 -0
  52. data/test/dummy/public/system/audios/files/small/{1a5d65b6-3d7f-45e3-8fc8-9221f3bca127.aac → 2b5e47b9-b441-4c49-a98f-5bf89f19848e.aac} +0 -0
  53. data/test/dummy/public/system/audios/files/small/{3729319f-299b-47e2-bd7e-d73d38b5cf8f.aac → 33203ced-129f-454c-870a-dc87a2809859.aac} +0 -0
  54. data/test/dummy/public/system/audios/files/small/{41e88b81-2804-4316-86e8-252adad0eaa3.aac → c03bdf7c-ce26-4a31-9c23-d947b2986fa7.aac} +0 -0
  55. data/test/dummy/public/system/images/files/full/15f09efb-0d03-44b3-a372-5ae156e8898e.jpg +0 -0
  56. data/test/dummy/public/system/images/files/full/7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.jpg +0 -0
  57. data/test/dummy/public/system/images/files/full/84b585ce-9430-4761-8fb1-d94302eb33bd.jpg +0 -0
  58. data/test/dummy/public/system/images/files/full/b8e19d15-db0f-42e7-9372-5f563486928a.jpg +0 -0
  59. data/test/dummy/public/system/images/files/full/baa48120-b3b9-4d2a-830a-e6ebc4db7802.jpg +0 -0
  60. data/test/dummy/public/system/images/files/full/caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.jpg +0 -0
  61. data/test/dummy/public/system/images/files/large/15f09efb-0d03-44b3-a372-5ae156e8898e.jpg +0 -0
  62. data/test/dummy/public/system/images/files/large/7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.jpg +0 -0
  63. data/test/dummy/public/system/images/files/large/84b585ce-9430-4761-8fb1-d94302eb33bd.jpg +0 -0
  64. data/test/dummy/public/system/images/files/large/b8e19d15-db0f-42e7-9372-5f563486928a.jpg +0 -0
  65. data/test/dummy/public/system/images/files/large/baa48120-b3b9-4d2a-830a-e6ebc4db7802.jpg +0 -0
  66. data/test/dummy/public/system/images/files/large/caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.jpg +0 -0
  67. data/test/dummy/public/system/images/files/original/{0850c86c-78a8-4319-8852-bed744b792e6.png → 15f09efb-0d03-44b3-a372-5ae156e8898e.png} +0 -0
  68. data/test/dummy/public/system/images/files/original/{12ace664-b553-45a6-b02b-37e15ac2981b.png → 7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.png} +0 -0
  69. data/test/dummy/public/system/images/files/original/{2ac8ebdb-bc96-49c4-befd-5c96b47646e5.png → 84b585ce-9430-4761-8fb1-d94302eb33bd.png} +0 -0
  70. data/test/dummy/public/system/images/files/original/{3e9c5921-4820-441d-9f90-90b518cd582e.png → b8e19d15-db0f-42e7-9372-5f563486928a.png} +0 -0
  71. data/test/dummy/public/system/images/files/original/{444d0123-908a-4616-83e3-88942a66a075.png → baa48120-b3b9-4d2a-830a-e6ebc4db7802.png} +0 -0
  72. data/test/dummy/public/system/images/files/original/{5af89da1-b1fa-421a-a52e-01607d89fb5d.png → caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.png} +0 -0
  73. data/test/dummy/public/system/images/files/small/15f09efb-0d03-44b3-a372-5ae156e8898e.jpg +0 -0
  74. data/test/dummy/public/system/images/files/small/7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.jpg +0 -0
  75. data/test/dummy/public/system/images/files/small/84b585ce-9430-4761-8fb1-d94302eb33bd.jpg +0 -0
  76. data/test/dummy/public/system/images/files/small/b8e19d15-db0f-42e7-9372-5f563486928a.jpg +0 -0
  77. data/test/dummy/public/system/images/files/small/baa48120-b3b9-4d2a-830a-e6ebc4db7802.jpg +0 -0
  78. data/test/dummy/public/system/images/files/small/caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.jpg +0 -0
  79. data/test/dummy/public/system/images/files/thumb/15f09efb-0d03-44b3-a372-5ae156e8898e.jpg +0 -0
  80. data/test/dummy/public/system/images/files/thumb/7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.jpg +0 -0
  81. data/test/dummy/public/system/images/files/thumb/84b585ce-9430-4761-8fb1-d94302eb33bd.jpg +0 -0
  82. data/test/dummy/public/system/images/files/thumb/b8e19d15-db0f-42e7-9372-5f563486928a.jpg +0 -0
  83. data/test/dummy/public/system/images/files/thumb/baa48120-b3b9-4d2a-830a-e6ebc4db7802.jpg +0 -0
  84. data/test/dummy/public/system/images/files/thumb/caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.jpg +0 -0
  85. metadata +168 -337
  86. data/test/dummy/app/assets/javascripts/images.js +0 -0
  87. data/test/dummy/app/assets/javascripts/main.js +0 -0
  88. data/test/dummy/app/assets/stylesheets/audios.css +0 -0
  89. data/test/dummy/app/assets/stylesheets/images.css +0 -0
  90. data/test/dummy/app/assets/stylesheets/main.css +0 -0
  91. data/test/dummy/app/views/audios/_form.html.erb +0 -27
  92. data/test/dummy/app/views/audios/edit.html.erb +0 -3
  93. data/test/dummy/app/views/audios/index.html.erb +0 -17
  94. data/test/dummy/app/views/audios/new.html.erb +0 -3
  95. data/test/dummy/app/views/audios/show.html.erb +0 -17
  96. data/test/dummy/app/views/images/_form.html.erb +0 -27
  97. data/test/dummy/app/views/images/edit.html.erb +0 -3
  98. data/test/dummy/app/views/images/index.html.erb +0 -17
  99. data/test/dummy/app/views/images/new.html.erb +0 -3
  100. data/test/dummy/app/views/images/show.html.erb +0 -18
  101. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  102. data/test/dummy/app/views/main/index.html.erb +0 -6
  103. data/test/dummy/public/system/audios/files/full/5d262d6b-4789-42f9-b985-1c39c9eca0c0.aac +0 -0
  104. data/test/dummy/public/system/audios/files/full/67645888-cf0b-47db-8202-2df3a1ce594d.aac +0 -0
  105. data/test/dummy/public/system/audios/files/full/6cecb6b5-46cd-47a5-bf8a-10849e30f1f6.aac +0 -0
  106. data/test/dummy/public/system/audios/files/full/8d116bcb-2605-429e-9edc-b1a91fa66d0a.aac +0 -0
  107. data/test/dummy/public/system/audios/files/full/9b084b16-eb46-4730-ad80-c5d7d8ef92d2.aac +0 -0
  108. data/test/dummy/public/system/audios/files/full/9dddf071-ac43-4232-9a9d-fb5d26862bd1.aac +0 -0
  109. data/test/dummy/public/system/audios/files/full/a6880c5f-d130-469f-9c30-d8aa1b9f7b71.aac +0 -0
  110. data/test/dummy/public/system/audios/files/full/a79a531d-5de4-4aa3-9c04-275cf6307d13.aac +0 -0
  111. data/test/dummy/public/system/audios/files/full/c6768282-9787-45dc-a39f-37d23b83f8f2.aac +0 -0
  112. data/test/dummy/public/system/audios/files/full/e8389286-fda2-4614-906f-bd646383333a.aac +0 -0
  113. data/test/dummy/public/system/audios/files/full/ee0041b9-6482-4d4f-96cc-1a6e28c93570.aac +0 -0
  114. data/test/dummy/public/system/audios/files/full/ffb3df30-8dbf-4938-abde-21cdfced70d1.aac +0 -0
  115. data/test/dummy/public/system/audios/files/large/5d262d6b-4789-42f9-b985-1c39c9eca0c0.aac +0 -0
  116. data/test/dummy/public/system/audios/files/large/67645888-cf0b-47db-8202-2df3a1ce594d.aac +0 -0
  117. data/test/dummy/public/system/audios/files/large/6cecb6b5-46cd-47a5-bf8a-10849e30f1f6.aac +0 -0
  118. data/test/dummy/public/system/audios/files/large/8d116bcb-2605-429e-9edc-b1a91fa66d0a.aac +0 -0
  119. data/test/dummy/public/system/audios/files/large/9b084b16-eb46-4730-ad80-c5d7d8ef92d2.aac +0 -0
  120. data/test/dummy/public/system/audios/files/large/9dddf071-ac43-4232-9a9d-fb5d26862bd1.aac +0 -0
  121. data/test/dummy/public/system/audios/files/large/a6880c5f-d130-469f-9c30-d8aa1b9f7b71.aac +0 -0
  122. data/test/dummy/public/system/audios/files/large/a79a531d-5de4-4aa3-9c04-275cf6307d13.aac +0 -0
  123. data/test/dummy/public/system/audios/files/large/c6768282-9787-45dc-a39f-37d23b83f8f2.aac +0 -0
  124. data/test/dummy/public/system/audios/files/large/e8389286-fda2-4614-906f-bd646383333a.aac +0 -0
  125. data/test/dummy/public/system/audios/files/large/ee0041b9-6482-4d4f-96cc-1a6e28c93570.aac +0 -0
  126. data/test/dummy/public/system/audios/files/large/ffb3df30-8dbf-4938-abde-21cdfced70d1.aac +0 -0
  127. data/test/dummy/public/system/audios/files/original/5d262d6b-4789-42f9-b985-1c39c9eca0c0.wav +0 -0
  128. data/test/dummy/public/system/audios/files/original/67645888-cf0b-47db-8202-2df3a1ce594d.wav +0 -0
  129. data/test/dummy/public/system/audios/files/original/6cecb6b5-46cd-47a5-bf8a-10849e30f1f6.wav +0 -0
  130. data/test/dummy/public/system/audios/files/original/8d116bcb-2605-429e-9edc-b1a91fa66d0a.wav +0 -0
  131. data/test/dummy/public/system/audios/files/original/9b084b16-eb46-4730-ad80-c5d7d8ef92d2.wav +0 -0
  132. data/test/dummy/public/system/audios/files/original/9dddf071-ac43-4232-9a9d-fb5d26862bd1.wav +0 -0
  133. data/test/dummy/public/system/audios/files/original/a6880c5f-d130-469f-9c30-d8aa1b9f7b71.wav +0 -0
  134. data/test/dummy/public/system/audios/files/original/a79a531d-5de4-4aa3-9c04-275cf6307d13.wav +0 -0
  135. data/test/dummy/public/system/audios/files/original/c6768282-9787-45dc-a39f-37d23b83f8f2.wav +0 -0
  136. data/test/dummy/public/system/audios/files/original/e8389286-fda2-4614-906f-bd646383333a.wav +0 -0
  137. data/test/dummy/public/system/audios/files/original/ee0041b9-6482-4d4f-96cc-1a6e28c93570.wav +0 -0
  138. data/test/dummy/public/system/audios/files/original/ffb3df30-8dbf-4938-abde-21cdfced70d1.wav +0 -0
  139. data/test/dummy/public/system/audios/files/small/5d262d6b-4789-42f9-b985-1c39c9eca0c0.aac +0 -0
  140. data/test/dummy/public/system/audios/files/small/67645888-cf0b-47db-8202-2df3a1ce594d.aac +0 -0
  141. data/test/dummy/public/system/audios/files/small/6cecb6b5-46cd-47a5-bf8a-10849e30f1f6.aac +0 -0
  142. data/test/dummy/public/system/audios/files/small/8d116bcb-2605-429e-9edc-b1a91fa66d0a.aac +0 -0
  143. data/test/dummy/public/system/audios/files/small/9b084b16-eb46-4730-ad80-c5d7d8ef92d2.aac +0 -0
  144. data/test/dummy/public/system/audios/files/small/9dddf071-ac43-4232-9a9d-fb5d26862bd1.aac +0 -0
  145. data/test/dummy/public/system/audios/files/small/a6880c5f-d130-469f-9c30-d8aa1b9f7b71.aac +0 -0
  146. data/test/dummy/public/system/audios/files/small/a79a531d-5de4-4aa3-9c04-275cf6307d13.aac +0 -0
  147. data/test/dummy/public/system/audios/files/small/c6768282-9787-45dc-a39f-37d23b83f8f2.aac +0 -0
  148. data/test/dummy/public/system/audios/files/small/e8389286-fda2-4614-906f-bd646383333a.aac +0 -0
  149. data/test/dummy/public/system/audios/files/small/ee0041b9-6482-4d4f-96cc-1a6e28c93570.aac +0 -0
  150. data/test/dummy/public/system/audios/files/small/ffb3df30-8dbf-4938-abde-21cdfced70d1.aac +0 -0
  151. data/test/dummy/public/system/images/files/full/0850c86c-78a8-4319-8852-bed744b792e6.jpg +0 -0
  152. data/test/dummy/public/system/images/files/full/12ace664-b553-45a6-b02b-37e15ac2981b.jpg +0 -0
  153. data/test/dummy/public/system/images/files/full/2ac8ebdb-bc96-49c4-befd-5c96b47646e5.jpg +0 -0
  154. data/test/dummy/public/system/images/files/full/3e9c5921-4820-441d-9f90-90b518cd582e.jpg +0 -0
  155. data/test/dummy/public/system/images/files/full/444d0123-908a-4616-83e3-88942a66a075.jpg +0 -0
  156. data/test/dummy/public/system/images/files/full/5af89da1-b1fa-421a-a52e-01607d89fb5d.jpg +0 -0
  157. data/test/dummy/public/system/images/files/full/8628fbe3-bd09-4713-babe-e38c1492788e.jpg +0 -0
  158. data/test/dummy/public/system/images/files/full/a0158251-8d9c-42fb-a854-e56b915713df.jpg +0 -0
  159. data/test/dummy/public/system/images/files/full/b7318aed-63ee-43a2-9365-755bcc2815df.jpg +0 -0
  160. data/test/dummy/public/system/images/files/full/c292008f-764f-4f8a-8df1-82c63d87a653.jpg +0 -0
  161. data/test/dummy/public/system/images/files/full/cd5745af-c9c5-4ea4-9fca-711fb58c4604.jpg +0 -0
  162. data/test/dummy/public/system/images/files/full/d39266e6-2426-4888-9f12-031ade4f872e.jpg +0 -0
  163. data/test/dummy/public/system/images/files/full/e9e4c240-1426-4951-a600-c5a07c30d80d.jpg +0 -0
  164. data/test/dummy/public/system/images/files/full/ee1f8491-6e52-410f-9d62-bd544715d066.jpg +0 -0
  165. data/test/dummy/public/system/images/files/full/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.jpg +0 -0
  166. data/test/dummy/public/system/images/files/full/ffc3f5fd-ff40-4a77-8e08-0517e519f857.jpg +0 -0
  167. data/test/dummy/public/system/images/files/large/0850c86c-78a8-4319-8852-bed744b792e6.jpg +0 -0
  168. data/test/dummy/public/system/images/files/large/12ace664-b553-45a6-b02b-37e15ac2981b.jpg +0 -0
  169. data/test/dummy/public/system/images/files/large/2ac8ebdb-bc96-49c4-befd-5c96b47646e5.jpg +0 -0
  170. data/test/dummy/public/system/images/files/large/3e9c5921-4820-441d-9f90-90b518cd582e.jpg +0 -0
  171. data/test/dummy/public/system/images/files/large/444d0123-908a-4616-83e3-88942a66a075.jpg +0 -0
  172. data/test/dummy/public/system/images/files/large/5af89da1-b1fa-421a-a52e-01607d89fb5d.jpg +0 -0
  173. data/test/dummy/public/system/images/files/large/8628fbe3-bd09-4713-babe-e38c1492788e.jpg +0 -0
  174. data/test/dummy/public/system/images/files/large/a0158251-8d9c-42fb-a854-e56b915713df.jpg +0 -0
  175. data/test/dummy/public/system/images/files/large/b7318aed-63ee-43a2-9365-755bcc2815df.jpg +0 -0
  176. data/test/dummy/public/system/images/files/large/c292008f-764f-4f8a-8df1-82c63d87a653.jpg +0 -0
  177. data/test/dummy/public/system/images/files/large/cd5745af-c9c5-4ea4-9fca-711fb58c4604.jpg +0 -0
  178. data/test/dummy/public/system/images/files/large/d39266e6-2426-4888-9f12-031ade4f872e.jpg +0 -0
  179. data/test/dummy/public/system/images/files/large/e9e4c240-1426-4951-a600-c5a07c30d80d.jpg +0 -0
  180. data/test/dummy/public/system/images/files/large/ee1f8491-6e52-410f-9d62-bd544715d066.jpg +0 -0
  181. data/test/dummy/public/system/images/files/large/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.jpg +0 -0
  182. data/test/dummy/public/system/images/files/large/ffc3f5fd-ff40-4a77-8e08-0517e519f857.jpg +0 -0
  183. data/test/dummy/public/system/images/files/original/8628fbe3-bd09-4713-babe-e38c1492788e.png +0 -0
  184. data/test/dummy/public/system/images/files/original/a0158251-8d9c-42fb-a854-e56b915713df.png +0 -0
  185. data/test/dummy/public/system/images/files/original/b7318aed-63ee-43a2-9365-755bcc2815df.png +0 -0
  186. data/test/dummy/public/system/images/files/original/c292008f-764f-4f8a-8df1-82c63d87a653.png +0 -0
  187. data/test/dummy/public/system/images/files/original/cd5745af-c9c5-4ea4-9fca-711fb58c4604.png +0 -0
  188. data/test/dummy/public/system/images/files/original/d39266e6-2426-4888-9f12-031ade4f872e.png +0 -0
  189. data/test/dummy/public/system/images/files/original/e9e4c240-1426-4951-a600-c5a07c30d80d.png +0 -0
  190. data/test/dummy/public/system/images/files/original/ee1f8491-6e52-410f-9d62-bd544715d066.png +0 -0
  191. data/test/dummy/public/system/images/files/original/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.png +0 -0
  192. data/test/dummy/public/system/images/files/original/ffc3f5fd-ff40-4a77-8e08-0517e519f857.png +0 -0
  193. data/test/dummy/public/system/images/files/small/0850c86c-78a8-4319-8852-bed744b792e6.jpg +0 -0
  194. data/test/dummy/public/system/images/files/small/12ace664-b553-45a6-b02b-37e15ac2981b.jpg +0 -0
  195. data/test/dummy/public/system/images/files/small/2ac8ebdb-bc96-49c4-befd-5c96b47646e5.jpg +0 -0
  196. data/test/dummy/public/system/images/files/small/3e9c5921-4820-441d-9f90-90b518cd582e.jpg +0 -0
  197. data/test/dummy/public/system/images/files/small/444d0123-908a-4616-83e3-88942a66a075.jpg +0 -0
  198. data/test/dummy/public/system/images/files/small/5af89da1-b1fa-421a-a52e-01607d89fb5d.jpg +0 -0
  199. data/test/dummy/public/system/images/files/small/8628fbe3-bd09-4713-babe-e38c1492788e.jpg +0 -0
  200. data/test/dummy/public/system/images/files/small/a0158251-8d9c-42fb-a854-e56b915713df.jpg +0 -0
  201. data/test/dummy/public/system/images/files/small/b7318aed-63ee-43a2-9365-755bcc2815df.jpg +0 -0
  202. data/test/dummy/public/system/images/files/small/c292008f-764f-4f8a-8df1-82c63d87a653.jpg +0 -0
  203. data/test/dummy/public/system/images/files/small/cd5745af-c9c5-4ea4-9fca-711fb58c4604.jpg +0 -0
  204. data/test/dummy/public/system/images/files/small/d39266e6-2426-4888-9f12-031ade4f872e.jpg +0 -0
  205. data/test/dummy/public/system/images/files/small/e9e4c240-1426-4951-a600-c5a07c30d80d.jpg +0 -0
  206. data/test/dummy/public/system/images/files/small/ee1f8491-6e52-410f-9d62-bd544715d066.jpg +0 -0
  207. data/test/dummy/public/system/images/files/small/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.jpg +0 -0
  208. data/test/dummy/public/system/images/files/small/ffc3f5fd-ff40-4a77-8e08-0517e519f857.jpg +0 -0
  209. data/test/dummy/public/system/images/files/thumb/0850c86c-78a8-4319-8852-bed744b792e6.jpg +0 -0
  210. data/test/dummy/public/system/images/files/thumb/12ace664-b553-45a6-b02b-37e15ac2981b.jpg +0 -0
  211. data/test/dummy/public/system/images/files/thumb/2ac8ebdb-bc96-49c4-befd-5c96b47646e5.jpg +0 -0
  212. data/test/dummy/public/system/images/files/thumb/3e9c5921-4820-441d-9f90-90b518cd582e.jpg +0 -0
  213. data/test/dummy/public/system/images/files/thumb/444d0123-908a-4616-83e3-88942a66a075.jpg +0 -0
  214. data/test/dummy/public/system/images/files/thumb/5af89da1-b1fa-421a-a52e-01607d89fb5d.jpg +0 -0
  215. data/test/dummy/public/system/images/files/thumb/8628fbe3-bd09-4713-babe-e38c1492788e.jpg +0 -0
  216. data/test/dummy/public/system/images/files/thumb/a0158251-8d9c-42fb-a854-e56b915713df.jpg +0 -0
  217. data/test/dummy/public/system/images/files/thumb/b7318aed-63ee-43a2-9365-755bcc2815df.jpg +0 -0
  218. data/test/dummy/public/system/images/files/thumb/c292008f-764f-4f8a-8df1-82c63d87a653.jpg +0 -0
  219. data/test/dummy/public/system/images/files/thumb/cd5745af-c9c5-4ea4-9fca-711fb58c4604.jpg +0 -0
  220. data/test/dummy/public/system/images/files/thumb/d39266e6-2426-4888-9f12-031ade4f872e.jpg +0 -0
  221. data/test/dummy/public/system/images/files/thumb/e9e4c240-1426-4951-a600-c5a07c30d80d.jpg +0 -0
  222. data/test/dummy/public/system/images/files/thumb/ee1f8491-6e52-410f-9d62-bd544715d066.jpg +0 -0
  223. data/test/dummy/public/system/images/files/thumb/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.jpg +0 -0
  224. data/test/dummy/public/system/images/files/thumb/ffc3f5fd-ff40-4a77-8e08-0517e519f857.jpg +0 -0
@@ -1,9 +1,9 @@
1
1
  module Attached
2
-
2
+
3
3
  class Job
4
-
4
+
5
5
  @queue = :attached
6
-
6
+
7
7
  def self.perform(klass, id, method)
8
8
  object = eval(klass).find(id)
9
9
  attachment = object.send(name)
@@ -11,14 +11,14 @@ module Attached
11
11
  attachment.status = 'active'
12
12
  object.save
13
13
  end
14
-
14
+
15
15
  def self.enqueue(attachment)
16
16
  klass = attachment.instance.class.name
17
17
  id = attachment.instance.id
18
18
  method = attachment.name
19
19
  attachment.status = 'processing'
20
20
  end
21
-
21
+
22
22
  end
23
-
23
+
24
24
  end
@@ -4,8 +4,8 @@ require 'attached/processor/image'
4
4
 
5
5
  module Attached
6
6
  module Processor
7
-
8
-
7
+
8
+
9
9
  # Create a storage object given a medium and credentials.
10
10
  #
11
11
  # Usage:
@@ -13,20 +13,20 @@ module Attached
13
13
  # Attached::Processor.processor(:audio)
14
14
  # Attached::Processor.processor(:image)
15
15
  # Attached::Processor.processor(Attached::Processor::Custom.new)
16
-
16
+
17
17
  def self.processor(processor)
18
-
18
+
19
19
  return processor if processor.is_a? Attached::Processor::Base
20
-
20
+
21
21
  case processor
22
22
  when :audio then return Attached::Processor::Audio
23
23
  when :image then return Attached::Processor::Image
24
24
  end
25
-
25
+
26
26
  raise "undefined processor '#{processor}'"
27
-
27
+
28
28
  end
29
-
30
-
29
+
30
+
31
31
  end
32
32
  end
@@ -4,79 +4,79 @@ require 'attached/processor/error'
4
4
  module Attached
5
5
  module Processor
6
6
  class Audio < Base
7
-
8
-
7
+
8
+
9
9
  attr_reader :path
10
10
  attr_reader :extension
11
11
  attr_reader :preset
12
12
  attr_reader :attachment
13
-
14
-
13
+
14
+
15
15
  # Create a processor.
16
16
  #
17
17
  # Parameters:
18
- #
18
+ #
19
19
  # * file - The file to be processed.
20
20
  # * options - The options to be applied to the processing.
21
21
  # * attachment - The attachment the processor is being run for.
22
-
22
+
23
23
  def initialize(file, options = {}, attachment = nil)
24
24
  super
25
-
25
+
26
26
  @path = self.file.path
27
-
27
+
28
28
  @preset = options[:preset]
29
29
  @extension = options[:extension]
30
-
30
+
31
31
  @extension ||= self.attachment.extension
32
32
  end
33
-
34
-
33
+
34
+
35
35
  # Redirect output path.
36
-
36
+
37
37
  def redirect
38
38
  ">/dev/null 2>&1" if File.exist?("/dev/null")
39
39
  end
40
-
41
-
40
+
41
+
42
42
  # Helper function for calling processors.
43
43
  #
44
44
  # Usage:
45
45
  #
46
46
  # self.process
47
-
47
+
48
48
  def process
49
-
49
+
50
50
  result = Tempfile.new(["", self.extension])
51
51
  result.binmode
52
-
52
+
53
53
  begin
54
-
54
+
55
55
  parameters = []
56
-
56
+
57
57
  parameters << "--preset #{self.preset}" if self.preset
58
-
58
+
59
59
  parameters << self.path
60
60
  parameters << result.path
61
-
61
+
62
62
  parameters = parameters.join(" ").squeeze(" ")
63
-
63
+
64
64
  `lame #{parameters} #{redirect}`
65
-
65
+
66
66
  raise Errno::ENOENT if $?.exitstatus == 127
67
-
68
- rescue Errno::ENOENT
67
+
68
+ rescue Errno::ENOENT
69
69
  raise "command 'lame' not found: ensure LAME is installed"
70
70
  end
71
-
71
+
72
72
  unless $?.exitstatus == 0
73
73
  raise Attached::Processor::Error, "must be an audio file"
74
74
  end
75
-
75
+
76
76
  return result
77
-
77
+
78
78
  end
79
-
79
+
80
80
  end
81
81
  end
82
82
  end
@@ -1,17 +1,17 @@
1
1
  module Attached
2
2
  module Processor
3
3
  class Base
4
-
5
-
4
+
5
+
6
6
  attr_accessor :file
7
7
  attr_accessor :options
8
8
  attr_accessor :attachment
9
-
10
-
9
+
10
+
11
11
  # Create and run a processor.
12
12
  #
13
13
  # Parameters:
14
- #
14
+ #
15
15
  # * file - The file to be processed.
16
16
  # * options - The options to be applied to the processing.
17
17
  # * attachment - The attachment the processor is being run for.
@@ -19,12 +19,12 @@ module Attached
19
19
  def self.process(file, options = {}, attachment = nil)
20
20
  new(file, options, attachment).process
21
21
  end
22
-
23
-
22
+
23
+
24
24
  # Create a processor.
25
25
  #
26
26
  # Parameters:
27
- #
27
+ #
28
28
  # * file - The file to be processed.
29
29
  # * options - The options to be applied to the processing.
30
30
  # * attachment - The attachment the processor is being run for.
@@ -34,15 +34,15 @@ module Attached
34
34
  @options = options
35
35
  @attachment = attachment
36
36
  end
37
-
38
-
39
- # Run the processor.
37
+
38
+
39
+ # Run the processor.
40
40
 
41
41
  def process
42
- raise NotImplementedError.new
42
+ raise NotImplementedError.new
43
43
  end
44
-
45
-
44
+
45
+
46
46
  end
47
47
  end
48
48
  end
@@ -4,40 +4,40 @@ require 'attached/processor/error'
4
4
  module Attached
5
5
  module Processor
6
6
  class Image < Base
7
-
8
-
7
+
8
+
9
9
  attr_reader :path
10
10
  attr_reader :extension
11
-
11
+
12
12
  attr_reader :width
13
13
  attr_reader :height
14
14
  attr_reader :quality
15
15
  attr_reader :operation
16
-
16
+
17
17
 
18
18
  # Create a processor.
19
19
  #
20
20
  # Parameters:
21
- #
21
+ #
22
22
  # * file - The file to be processed.
23
23
  # * options - The options to be applied to the processing.
24
24
  # * attachment - The attachment the processor is being run for.
25
-
25
+
26
26
  def initialize(file, options = {}, attachment = nil)
27
27
  super
28
-
28
+
29
29
  @path = self.file.path
30
-
30
+
31
31
  @size = options[:size]
32
32
  @quality = options[:quality]
33
33
  @extension = options[:extension]
34
-
34
+
35
35
  @width, @height, @operation = @size.match(/(\d*)x?(\d*)(.*)/)[1..3] if @size
36
-
36
+
37
37
  @width ||= options[:width]
38
38
  @height ||= options[:height]
39
39
  @operation ||= options[:operation]
40
-
40
+
41
41
  if @operation
42
42
  case @operation.intern
43
43
  when :decrease then @operation = '>'
@@ -45,39 +45,39 @@ module Attached
45
45
  when :default then @operation = '#'
46
46
  end
47
47
  end
48
-
48
+
49
49
  @operation ||= '#'
50
50
  @extension ||= self.attachment.extension
51
-
51
+
52
52
  @width = Integer(self.width) if self.width
53
53
  @height = Integer(self.height) if self.height
54
54
  end
55
-
56
-
55
+
56
+
57
57
  # Redirect output path.
58
-
58
+
59
59
  def redirect
60
60
  ">/dev/null 2>&1" if File.exist?("/dev/null")
61
61
  end
62
-
63
-
62
+
63
+
64
64
  # Helper function for calling processors.
65
65
  #
66
66
  # Usage:
67
67
  #
68
68
  # self.process
69
-
69
+
70
70
  def process
71
-
71
+
72
72
  result = Tempfile.new(["", self.extension])
73
73
  result.binmode
74
-
74
+
75
75
  begin
76
-
76
+
77
77
  parameters = []
78
-
78
+
79
79
  parameters << self.path
80
-
80
+
81
81
  if width and height
82
82
  case operation
83
83
  when '#' then parameters << "-resize #{width}x#{height}^ -gravity center -extent #{width}x#{height}"
@@ -86,29 +86,29 @@ module Attached
86
86
  else parameters << "-resize #{width}x#{height}"
87
87
  end
88
88
  end
89
-
89
+
90
90
  parameters << "-quality #{quality}" if quality
91
-
91
+
92
92
  parameters << result.path
93
-
93
+
94
94
  parameters = parameters.join(" ").squeeze(" ")
95
-
95
+
96
96
  `convert #{parameters} #{redirect}`
97
-
97
+
98
98
  raise Errno::ENOENT if $?.exitstatus == 127
99
-
99
+
100
100
  rescue Errno::ENOENT
101
101
  raise "command 'convert' not found: ensure ImageMagick is installed"
102
102
  end
103
-
103
+
104
104
  unless $?.exitstatus == 0
105
105
  raise Attached::Processor::Error, "must be an image file"
106
106
  end
107
-
107
+
108
108
  return result
109
-
109
+
110
110
  end
111
-
111
+
112
112
  end
113
113
  end
114
114
  end
@@ -3,11 +3,11 @@ require 'rails'
3
3
 
4
4
  module Attached
5
5
  class Railtie < Rails::Railtie
6
-
6
+
7
7
  rake_tasks do
8
8
  load 'tasks/attached.rake'
9
9
  end
10
-
10
+
11
11
  initializer 'attached.initialize' do
12
12
  ActiveSupport.on_load(:active_record) do
13
13
  ActiveRecord::Base.send :include, Attached
@@ -6,8 +6,8 @@ require 'attached/storage/local'
6
6
 
7
7
  module Attached
8
8
  module Storage
9
-
10
-
9
+
10
+
11
11
  # Create a storage object given a medium and credentials.
12
12
  #
13
13
  # Usage:
@@ -17,11 +17,11 @@ module Attached
17
17
  # Attached::Storage.storage(:google, "#{Rails.root}/config/google.yml" )
18
18
  # Attached::Storage.storage(:rackspace, "#{Rails.root}/config/rackspace.yml")
19
19
  # Attached::Storage.storage(Attached::Storage::Custom.new)
20
-
20
+
21
21
  def self.storage(storage, credentials)
22
-
22
+
23
23
  return storage if storage.is_a? Attached::Storage::Base
24
-
24
+
25
25
  case storage
26
26
  when :aws then return Attached::Storage::AWS.new credentials
27
27
  when :google then return Attached::Storage::Google.new credentials
@@ -29,9 +29,9 @@ module Attached
29
29
  when :local then return Attached::Storage::Local.new
30
30
  else raise "undefined storage '#{storage}'"
31
31
  end
32
-
32
+
33
33
  end
34
-
35
-
34
+
35
+
36
36
  end
37
37
  end
@@ -8,120 +8,120 @@ end
8
8
 
9
9
 
10
10
  module Attached
11
- module Storage
12
- class AWS < Base
13
-
14
-
15
- attr_reader :permissions
16
-
17
- attr_reader :bucket
18
- attr_reader :access_key_id
19
- attr_reader :secret_access_key
20
-
21
-
22
- # Create a new interface supporting save and destroy operations.
23
- #
24
- # Usage:
25
- #
26
- # Attached::Storage::AWS.new()
27
- # Attached::Storage::AWS.new("aws.yml")
28
-
29
- def initialize(credentials)
30
- credentials = parse(credentials)
31
-
32
- @permissions = { :public => true }
33
-
34
- @bucket = credentials[:bucket] || credentials['bucket']
35
- @access_key_id = credentials[:access_key_id] || credentials['access_key_id']
36
- @secret_access_key = credentials[:secret_access_key] || credentials['secret_access_key']
37
-
38
- raise "'bucket' must be specified if using 'aws' for storage" unless @bucket
39
- end
40
-
41
-
42
- # Access the host (e.g. bucket.s3.amazonaws.com) for a storage service.
43
- #
44
- # Usage:
45
- #
46
- # storage.host
47
-
48
- def host()
49
- "https://#{self.bucket}.s3.amazonaws.com/"
50
- end
51
-
52
-
11
+ module Storage
12
+ class AWS < Base
13
+
14
+
15
+ attr_reader :permissions
16
+
17
+ attr_reader :bucket
18
+ attr_reader :access_key_id
19
+ attr_reader :secret_access_key
20
+
21
+
22
+ # Create a new interface supporting save and destroy operations.
23
+ #
24
+ # Usage:
25
+ #
26
+ # Attached::Storage::AWS.new()
27
+ # Attached::Storage::AWS.new("aws.yml")
28
+
29
+ def initialize(credentials)
30
+ credentials = parse(credentials)
31
+
32
+ @permissions = { :public => true }
33
+
34
+ @bucket = credentials[:bucket] || credentials['bucket']
35
+ @access_key_id = credentials[:access_key_id] || credentials['access_key_id']
36
+ @secret_access_key = credentials[:secret_access_key] || credentials['secret_access_key']
37
+
38
+ raise "'bucket' must be specified if using 'aws' for storage" unless @bucket
39
+ end
40
+
41
+
42
+ # Access the host (e.g. bucket.s3.amazonaws.com) for a storage service.
43
+ #
44
+ # Usage:
45
+ #
46
+ # storage.host
47
+
48
+ def host()
49
+ "https://#{self.bucket}.s3.amazonaws.com/"
50
+ end
51
+
52
+
53
53
  # Save a file to a given path.
54
54
  #
55
55
  # Parameters:
56
56
  #
57
57
  # * file - The file to save.
58
58
  # * path - The path to save.
59
-
59
+
60
60
  def save(file, path)
61
61
  file = File.open(file.path)
62
-
62
+
63
63
  directory = connection.directories.get(self.bucket)
64
64
  directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
65
-
65
+
66
66
  directory.files.create(self.options(path).merge(self.permissions.merge(:key => path, :body => file)))
67
-
67
+
68
68
  file.close
69
69
  end
70
-
71
-
70
+
71
+
72
72
  # Retrieve a file from a given path.
73
73
  #
74
74
  # Parameters:
75
75
  #
76
76
  # * path - The path to retrieve.
77
-
77
+
78
78
  def retrieve(path)
79
79
  directory = connection.directories.get(self.bucket)
80
80
  directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
81
-
81
+
82
82
  file = directory.files.get(path)
83
-
83
+
84
84
  body = file.body
85
-
85
+
86
86
  extname = File.extname(path)
87
87
  basename = File.basename(path, extname)
88
-
88
+
89
89
  file = Tempfile.new([basename, extname])
90
90
  file.binmode
91
91
  file.write(body)
92
92
  file.rewind
93
-
93
+
94
94
  file
95
95
  end
96
-
97
-
96
+
97
+
98
98
  # Destroy a file at a given path.
99
99
  #
100
100
  # Parameters:
101
101
  #
102
102
  # * path - The path to destroy.
103
-
103
+
104
104
  def destroy(path)
105
105
  directory = connection.directories.get(self.bucket)
106
106
  directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
107
-
107
+
108
108
  file = directory.files.get(path)
109
109
  file.destroy if file
110
110
  end
111
-
112
-
113
- private
114
111
 
115
-
116
- def connection
117
- @connection ||= Fog::Storage.new(
112
+
113
+ private
114
+
115
+
116
+ def connection
117
+ @connection ||= Fog::Storage.new(
118
118
  :aws_secret_access_key => self.secret_access_key,
119
119
  :aws_access_key_id => self.access_key_id,
120
120
  :provider => 'AWS'
121
121
  )
122
- end
123
-
124
-
125
- end
126
- end
122
+ end
123
+
124
+
125
+ end
126
+ end
127
127
  end