attached 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (369) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +6 -5
  3. data/Rakefile +0 -3
  4. data/lib/attached.rb +23 -151
  5. data/lib/attached/attachment.rb +8 -60
  6. data/lib/attached/attatcher.rb +165 -0
  7. data/lib/attached/definition.rb +16 -0
  8. data/lib/attached/job.rb +0 -1
  9. data/lib/attached/processor.rb +2 -6
  10. data/lib/attached/processor/audio.rb +0 -19
  11. data/lib/attached/processor/base.rb +0 -5
  12. data/lib/attached/processor/error.rb +1 -1
  13. data/lib/attached/processor/image.rb +0 -31
  14. data/lib/attached/railtie.rb +4 -1
  15. data/lib/attached/storage.rb +5 -9
  16. data/lib/attached/storage/aws.rb +6 -17
  17. data/lib/attached/storage/base.rb +1 -10
  18. data/lib/attached/storage/error.rb +1 -1
  19. data/lib/attached/storage/fog.rb +2 -26
  20. data/lib/attached/storage/google.rb +5 -18
  21. data/lib/attached/storage/local.rb +1 -13
  22. data/lib/attached/storage/rackspace.rb +7 -18
  23. data/lib/attached/version.rb +1 -1
  24. data/test/dummy/app/controllers/application_controller.rb +1 -1
  25. data/test/dummy/app/models/audio.rb +7 -7
  26. data/test/dummy/app/models/image.rb +8 -8
  27. data/test/dummy/app/views/audios/_form.html.haml +5 -5
  28. data/test/dummy/app/views/audios/edit.html.haml +1 -1
  29. data/test/dummy/app/views/audios/index.html.haml +8 -8
  30. data/test/dummy/app/views/audios/new.html.haml +1 -1
  31. data/test/dummy/app/views/audios/show.html.haml +2 -2
  32. data/test/dummy/app/views/images/_form.html.haml +5 -5
  33. data/test/dummy/app/views/images/edit.html.haml +1 -1
  34. data/test/dummy/app/views/images/index.html.haml +8 -8
  35. data/test/dummy/app/views/images/new.html.haml +1 -1
  36. data/test/dummy/app/views/images/show.html.haml +3 -3
  37. data/test/dummy/app/views/layouts/application.html.haml +2 -2
  38. data/test/dummy/app/views/main/index.html.haml +2 -2
  39. data/test/dummy/app/views/shared/_error.html.haml +1 -1
  40. data/test/dummy/config/aws.yml +0 -2
  41. data/test/dummy/config/initializers/other.rb +2 -2
  42. data/test/dummy/config/routes.rb +1 -1
  43. data/test/dummy/db/schema.rb +7 -7
  44. data/test/dummy/db/test.sqlite3 +0 -0
  45. data/test/dummy/log/test.log +5487 -0
  46. data/test/dummy/public/system/audios/files/full/053225f9-c6d3-4472-8228-2cc701fc1a41.aac +0 -0
  47. data/test/dummy/public/system/audios/files/full/0b55eae0-52a0-4af0-a24e-2de3fcabfbf4.aac +0 -0
  48. data/test/dummy/public/system/audios/files/full/16a35230-6ae5-47e4-9e09-2ecdbd31cd58.aac +0 -0
  49. data/test/dummy/public/system/audios/files/full/344825e7-6315-47b6-986b-c731a6d08cd5.aac +0 -0
  50. data/test/dummy/public/system/audios/files/full/398e2cc8-f19d-4250-a528-a1fe146a35b3.aac +0 -0
  51. data/test/dummy/public/system/audios/files/full/4036c6ad-3ec2-4714-b453-357b0e708f3c.aac +0 -0
  52. data/test/dummy/public/system/audios/files/full/41c23f05-15fe-46fe-b6e4-0f3d95c4f3ab.aac +0 -0
  53. data/test/dummy/public/system/audios/files/full/41d57894-31d9-4b68-81a5-008e804b66a0.aac +0 -0
  54. data/test/dummy/public/system/audios/files/full/4c81067f-15e4-4152-a2c4-92b0f29e05f3.aac +0 -0
  55. data/test/dummy/public/system/audios/files/full/560a41f2-83cd-4734-a741-5da103917a9b.aac +0 -0
  56. data/test/dummy/public/system/audios/files/full/6569067f-276a-4a15-8376-57709201b209.aac +0 -0
  57. data/test/dummy/public/system/audios/files/full/68a0b6a2-d41a-4b09-970d-397860563669.aac +0 -0
  58. data/test/dummy/public/system/audios/files/full/6f91f04a-4894-4b16-87b6-ccfc686ba659.aac +0 -0
  59. data/test/dummy/public/system/audios/files/full/7aad29c4-7736-4492-9455-1a6ff333d807.aac +0 -0
  60. data/test/dummy/public/system/audios/files/full/7f4b261e-c56a-41cb-a0e0-ad7888116642.aac +0 -0
  61. data/test/dummy/public/system/audios/files/full/828531f1-a38d-4406-b147-1a01cff06a67.aac +0 -0
  62. data/test/dummy/public/system/audios/files/full/86bf96b6-e784-40e0-9edd-a47eb09059a0.aac +0 -0
  63. data/test/dummy/public/system/audios/files/full/90a9e337-b07b-441d-9c49-0090a7e6b9c0.aac +0 -0
  64. data/test/dummy/public/system/audios/files/full/90fc1944-196e-4a47-945e-4344ef62eb8c.aac +0 -0
  65. data/test/dummy/public/system/audios/files/full/975ce729-487c-4e6d-bce5-9523dbfa952c.aac +0 -0
  66. data/test/dummy/public/system/audios/files/full/9a096e89-4ce2-4ad9-9ff6-503f7200a8c8.aac +0 -0
  67. data/test/dummy/public/system/audios/files/full/9a186341-4c3b-4b30-b605-f234eb371d4c.aac +0 -0
  68. data/test/dummy/public/system/audios/files/full/a9034b45-c9c6-4387-b611-ef0c64c641e6.aac +0 -0
  69. data/test/dummy/public/system/audios/files/full/a96d0f64-2c94-4378-980e-d12e3492d412.aac +0 -0
  70. data/test/dummy/public/system/audios/files/full/b24e5454-f642-43f0-8107-4c92dfe3f770.aac +0 -0
  71. data/test/dummy/public/system/audios/files/full/c0c22ae4-a660-4ebd-8640-d1c82246911f.aac +0 -0
  72. data/test/dummy/public/system/audios/files/full/cd9bcb87-f6f1-4a63-8989-433f71e44803.aac +0 -0
  73. data/test/dummy/public/system/audios/files/full/cfda40b9-14ce-4cd1-b843-604a2e5fd37a.aac +0 -0
  74. data/test/dummy/public/system/audios/files/full/d6421e75-ec3b-4c68-8f50-0365b131505a.aac +0 -0
  75. data/test/dummy/public/system/audios/files/full/d7a777c2-ce13-4dc3-a401-ac81b469734f.aac +0 -0
  76. data/test/dummy/public/system/audios/files/full/d97113db-5a93-4cdb-a022-74292de1e40b.aac +0 -0
  77. data/test/dummy/public/system/audios/files/full/de5a8bbe-292b-49b8-8fdd-b84dc78be9dc.aac +0 -0
  78. data/test/dummy/public/system/audios/files/full/e0847f0e-90f9-4950-9b87-e2809768dd5a.aac +0 -0
  79. data/test/dummy/public/system/audios/files/full/e318d820-8e5c-49fd-af55-1b1617c94e51.aac +0 -0
  80. data/test/dummy/public/system/audios/files/full/e6eb96eb-8688-49ab-8188-3b0c3586e5db.aac +0 -0
  81. data/test/dummy/public/system/audios/files/full/e8b653fe-9f0a-458e-a4f1-f2a3c43b57b0.aac +0 -0
  82. data/test/dummy/public/system/audios/files/full/e90ebfbd-b590-4fe9-9cd5-b13b9ba7bb04.aac +0 -0
  83. data/test/dummy/public/system/audios/files/full/f2663b76-efdf-4522-8a15-31bb94b92c5f.aac +0 -0
  84. data/test/dummy/public/system/audios/files/full/fb02d110-db44-4c45-951d-69d471af9990.aac +0 -0
  85. data/test/dummy/public/system/audios/files/large/053225f9-c6d3-4472-8228-2cc701fc1a41.aac +0 -0
  86. data/test/dummy/public/system/audios/files/large/0b55eae0-52a0-4af0-a24e-2de3fcabfbf4.aac +0 -0
  87. data/test/dummy/public/system/audios/files/large/16a35230-6ae5-47e4-9e09-2ecdbd31cd58.aac +0 -0
  88. data/test/dummy/public/system/audios/files/large/344825e7-6315-47b6-986b-c731a6d08cd5.aac +0 -0
  89. data/test/dummy/public/system/audios/files/large/398e2cc8-f19d-4250-a528-a1fe146a35b3.aac +0 -0
  90. data/test/dummy/public/system/audios/files/large/4036c6ad-3ec2-4714-b453-357b0e708f3c.aac +0 -0
  91. data/test/dummy/public/system/audios/files/large/41c23f05-15fe-46fe-b6e4-0f3d95c4f3ab.aac +0 -0
  92. data/test/dummy/public/system/audios/files/large/41d57894-31d9-4b68-81a5-008e804b66a0.aac +0 -0
  93. data/test/dummy/public/system/audios/files/large/4c81067f-15e4-4152-a2c4-92b0f29e05f3.aac +0 -0
  94. data/test/dummy/public/system/audios/files/large/560a41f2-83cd-4734-a741-5da103917a9b.aac +0 -0
  95. data/test/dummy/public/system/audios/files/large/6569067f-276a-4a15-8376-57709201b209.aac +0 -0
  96. data/test/dummy/public/system/audios/files/large/68a0b6a2-d41a-4b09-970d-397860563669.aac +0 -0
  97. data/test/dummy/public/system/audios/files/large/6f91f04a-4894-4b16-87b6-ccfc686ba659.aac +0 -0
  98. data/test/dummy/public/system/audios/files/large/7aad29c4-7736-4492-9455-1a6ff333d807.aac +0 -0
  99. data/test/dummy/public/system/audios/files/large/7f4b261e-c56a-41cb-a0e0-ad7888116642.aac +0 -0
  100. data/test/dummy/public/system/audios/files/large/828531f1-a38d-4406-b147-1a01cff06a67.aac +0 -0
  101. data/test/dummy/public/system/audios/files/large/86bf96b6-e784-40e0-9edd-a47eb09059a0.aac +0 -0
  102. data/test/dummy/public/system/audios/files/large/90a9e337-b07b-441d-9c49-0090a7e6b9c0.aac +0 -0
  103. data/test/dummy/public/system/audios/files/large/90fc1944-196e-4a47-945e-4344ef62eb8c.aac +0 -0
  104. data/test/dummy/public/system/audios/files/large/975ce729-487c-4e6d-bce5-9523dbfa952c.aac +0 -0
  105. data/test/dummy/public/system/audios/files/large/9a096e89-4ce2-4ad9-9ff6-503f7200a8c8.aac +0 -0
  106. data/test/dummy/public/system/audios/files/large/9a186341-4c3b-4b30-b605-f234eb371d4c.aac +0 -0
  107. data/test/dummy/public/system/audios/files/large/a9034b45-c9c6-4387-b611-ef0c64c641e6.aac +0 -0
  108. data/test/dummy/public/system/audios/files/large/a96d0f64-2c94-4378-980e-d12e3492d412.aac +0 -0
  109. data/test/dummy/public/system/audios/files/large/b24e5454-f642-43f0-8107-4c92dfe3f770.aac +0 -0
  110. data/test/dummy/public/system/audios/files/large/c0c22ae4-a660-4ebd-8640-d1c82246911f.aac +0 -0
  111. data/test/dummy/public/system/audios/files/large/cd9bcb87-f6f1-4a63-8989-433f71e44803.aac +0 -0
  112. data/test/dummy/public/system/audios/files/large/cfda40b9-14ce-4cd1-b843-604a2e5fd37a.aac +0 -0
  113. data/test/dummy/public/system/audios/files/large/d6421e75-ec3b-4c68-8f50-0365b131505a.aac +0 -0
  114. data/test/dummy/public/system/audios/files/large/d7a777c2-ce13-4dc3-a401-ac81b469734f.aac +0 -0
  115. data/test/dummy/public/system/audios/files/large/d97113db-5a93-4cdb-a022-74292de1e40b.aac +0 -0
  116. data/test/dummy/public/system/audios/files/large/de5a8bbe-292b-49b8-8fdd-b84dc78be9dc.aac +0 -0
  117. data/test/dummy/public/system/audios/files/large/e0847f0e-90f9-4950-9b87-e2809768dd5a.aac +0 -0
  118. data/test/dummy/public/system/audios/files/large/e318d820-8e5c-49fd-af55-1b1617c94e51.aac +0 -0
  119. data/test/dummy/public/system/audios/files/large/e6eb96eb-8688-49ab-8188-3b0c3586e5db.aac +0 -0
  120. data/test/dummy/public/system/audios/files/large/e8b653fe-9f0a-458e-a4f1-f2a3c43b57b0.aac +0 -0
  121. data/test/dummy/public/system/audios/files/large/e90ebfbd-b590-4fe9-9cd5-b13b9ba7bb04.aac +0 -0
  122. data/test/dummy/public/system/audios/files/large/f2663b76-efdf-4522-8a15-31bb94b92c5f.aac +0 -0
  123. data/test/dummy/public/system/audios/files/large/fb02d110-db44-4c45-951d-69d471af9990.aac +0 -0
  124. data/test/dummy/public/system/audios/files/original/053225f9-c6d3-4472-8228-2cc701fc1a41.wav +0 -0
  125. data/test/dummy/public/system/audios/files/original/0b55eae0-52a0-4af0-a24e-2de3fcabfbf4.wav +0 -0
  126. data/test/dummy/public/system/audios/files/original/16a35230-6ae5-47e4-9e09-2ecdbd31cd58.wav +0 -0
  127. data/test/dummy/public/system/audios/files/original/344825e7-6315-47b6-986b-c731a6d08cd5.wav +0 -0
  128. data/test/dummy/public/system/audios/files/original/398e2cc8-f19d-4250-a528-a1fe146a35b3.wav +0 -0
  129. data/test/dummy/public/system/audios/files/original/4036c6ad-3ec2-4714-b453-357b0e708f3c.wav +0 -0
  130. data/test/dummy/public/system/audios/files/original/41c23f05-15fe-46fe-b6e4-0f3d95c4f3ab.wav +0 -0
  131. data/test/dummy/public/system/audios/files/original/41d57894-31d9-4b68-81a5-008e804b66a0.wav +0 -0
  132. data/test/dummy/public/system/audios/files/original/4c81067f-15e4-4152-a2c4-92b0f29e05f3.wav +0 -0
  133. data/test/dummy/public/system/audios/files/original/560a41f2-83cd-4734-a741-5da103917a9b.wav +0 -0
  134. data/test/dummy/public/system/audios/files/original/6569067f-276a-4a15-8376-57709201b209.wav +0 -0
  135. data/test/dummy/public/system/audios/files/original/68a0b6a2-d41a-4b09-970d-397860563669.wav +0 -0
  136. data/test/dummy/public/system/audios/files/original/6f91f04a-4894-4b16-87b6-ccfc686ba659.wav +0 -0
  137. data/test/dummy/public/system/audios/files/original/7aad29c4-7736-4492-9455-1a6ff333d807.wav +0 -0
  138. data/test/dummy/public/system/audios/files/original/7f4b261e-c56a-41cb-a0e0-ad7888116642.wav +0 -0
  139. data/test/dummy/public/system/audios/files/original/828531f1-a38d-4406-b147-1a01cff06a67.wav +0 -0
  140. data/test/dummy/public/system/audios/files/original/86bf96b6-e784-40e0-9edd-a47eb09059a0.wav +0 -0
  141. data/test/dummy/public/system/audios/files/original/90a9e337-b07b-441d-9c49-0090a7e6b9c0.wav +0 -0
  142. data/test/dummy/public/system/audios/files/original/975ce729-487c-4e6d-bce5-9523dbfa952c.wav +0 -0
  143. data/test/dummy/public/system/audios/files/original/9a096e89-4ce2-4ad9-9ff6-503f7200a8c8.wav +0 -0
  144. data/test/dummy/public/system/audios/files/original/9a186341-4c3b-4b30-b605-f234eb371d4c.wav +0 -0
  145. data/test/dummy/public/system/audios/files/original/b24e5454-f642-43f0-8107-4c92dfe3f770.wav +0 -0
  146. data/test/dummy/public/system/audios/files/original/cfda40b9-14ce-4cd1-b843-604a2e5fd37a.wav +0 -0
  147. data/test/dummy/public/system/audios/files/original/e318d820-8e5c-49fd-af55-1b1617c94e51.wav +0 -0
  148. data/test/dummy/public/system/audios/files/original/e6eb96eb-8688-49ab-8188-3b0c3586e5db.wav +0 -0
  149. data/test/dummy/public/system/audios/files/original/f2663b76-efdf-4522-8a15-31bb94b92c5f.wav +0 -0
  150. data/test/dummy/public/system/audios/files/original/fb02d110-db44-4c45-951d-69d471af9990.wav +0 -0
  151. data/test/dummy/public/system/audios/files/small/053225f9-c6d3-4472-8228-2cc701fc1a41.aac +0 -0
  152. data/test/dummy/public/system/audios/files/small/0b55eae0-52a0-4af0-a24e-2de3fcabfbf4.aac +0 -0
  153. data/test/dummy/public/system/audios/files/small/398e2cc8-f19d-4250-a528-a1fe146a35b3.aac +0 -0
  154. data/test/dummy/public/system/audios/files/small/4036c6ad-3ec2-4714-b453-357b0e708f3c.aac +0 -0
  155. data/test/dummy/public/system/audios/files/small/41c23f05-15fe-46fe-b6e4-0f3d95c4f3ab.aac +0 -0
  156. data/test/dummy/public/system/audios/files/small/41d57894-31d9-4b68-81a5-008e804b66a0.aac +0 -0
  157. data/test/dummy/public/system/audios/files/small/4c81067f-15e4-4152-a2c4-92b0f29e05f3.aac +0 -0
  158. data/test/dummy/public/system/audios/files/small/6569067f-276a-4a15-8376-57709201b209.aac +0 -0
  159. data/test/dummy/public/system/audios/files/small/68a0b6a2-d41a-4b09-970d-397860563669.aac +0 -0
  160. data/test/dummy/public/system/audios/files/small/6f91f04a-4894-4b16-87b6-ccfc686ba659.aac +0 -0
  161. data/test/dummy/public/system/audios/files/small/7f4b261e-c56a-41cb-a0e0-ad7888116642.aac +0 -0
  162. data/test/dummy/public/system/audios/files/small/86bf96b6-e784-40e0-9edd-a47eb09059a0.aac +0 -0
  163. data/test/dummy/public/system/audios/files/small/90a9e337-b07b-441d-9c49-0090a7e6b9c0.aac +0 -0
  164. data/test/dummy/public/system/audios/files/small/975ce729-487c-4e6d-bce5-9523dbfa952c.aac +0 -0
  165. data/test/dummy/public/system/audios/files/small/9a096e89-4ce2-4ad9-9ff6-503f7200a8c8.aac +0 -0
  166. data/test/dummy/public/system/audios/files/small/9a186341-4c3b-4b30-b605-f234eb371d4c.aac +0 -0
  167. data/test/dummy/public/system/audios/files/small/b24e5454-f642-43f0-8107-4c92dfe3f770.aac +0 -0
  168. data/test/dummy/public/system/audios/files/small/cfda40b9-14ce-4cd1-b843-604a2e5fd37a.aac +0 -0
  169. data/test/dummy/public/system/audios/files/small/e318d820-8e5c-49fd-af55-1b1617c94e51.aac +0 -0
  170. data/test/dummy/public/system/audios/files/small/e6eb96eb-8688-49ab-8188-3b0c3586e5db.aac +0 -0
  171. data/test/dummy/public/system/audios/files/small/f2663b76-efdf-4522-8a15-31bb94b92c5f.aac +0 -0
  172. data/test/dummy/public/system/audios/files/small/fb02d110-db44-4c45-951d-69d471af9990.aac +0 -0
  173. data/test/dummy/public/system/images/files/full/04a05143-2ea9-4ee0-bca3-64f436bac3d2.jpg +0 -0
  174. data/test/dummy/public/system/images/files/full/187e58dd-d90c-4000-8118-c46da7f1f71f.jpg +0 -0
  175. data/test/dummy/public/system/images/files/full/1fd5231d-04d1-4691-bceb-871810ac982b.jpg +0 -0
  176. data/test/dummy/public/system/images/files/full/25d98e6f-6419-4bb9-990c-cc5113f8606d.jpg +0 -0
  177. data/test/dummy/public/system/images/files/full/3401af18-b401-404f-9bd7-58424fe33e26.jpg +0 -0
  178. data/test/dummy/public/system/images/files/full/38bcfbac-5b70-4510-a0dd-9296fc22ed0e.jpg +0 -0
  179. data/test/dummy/public/system/images/files/full/49f59ee9-98cf-4991-8c96-aebef8f34a21.jpg +0 -0
  180. data/test/dummy/public/system/images/files/full/520dcbea-ce4a-474b-8e42-3b6c947181b3.jpg +0 -0
  181. data/test/dummy/public/system/images/files/full/5dea55cb-4d09-453c-b9fa-a6783c2b82e6.jpg +0 -0
  182. data/test/dummy/public/system/images/files/full/5dfc0dc2-909f-4525-9d5a-d04dc9e9f9ac.jpg +0 -0
  183. data/test/dummy/public/system/images/files/full/6cb55f24-12c1-4019-aa1d-d7d379ffb4b3.jpg +0 -0
  184. data/test/dummy/public/system/images/files/full/71e117d2-a77a-4daf-a0cc-39c629727b57.jpg +0 -0
  185. data/test/dummy/public/system/images/files/full/7426b7d6-2950-4064-8bcd-f7d081fbbd27.jpg +0 -0
  186. data/test/dummy/public/system/images/files/full/88286a62-ef1b-4532-82f4-7a9e72e32f2a.jpg +0 -0
  187. data/test/dummy/public/system/images/files/full/8daf45e0-c8c2-4768-9536-53b8dc269c14.jpg +0 -0
  188. data/test/dummy/public/system/images/files/full/970ec9d8-052c-4c7c-b1eb-a163004dcb35.jpg +0 -0
  189. data/test/dummy/public/system/images/files/full/9a74af84-4e37-451d-abff-84499ca198db.jpg +0 -0
  190. data/test/dummy/public/system/images/files/full/b784910f-bc64-4bbb-bc4f-77cc5b9faf7e.jpg +0 -0
  191. data/test/dummy/public/system/images/files/full/c8ec0593-49f5-44c5-957e-ce61a15678c9.jpg +0 -0
  192. data/test/dummy/public/system/images/files/full/ef58124a-9bd6-4da7-9dcb-a4dfe83e7cc1.jpg +0 -0
  193. data/test/dummy/public/system/images/files/full/f905a6f3-1626-4a3b-89dd-53f1c1a88379.jpg +0 -0
  194. data/test/dummy/public/system/images/files/full/fbe00e7d-98d7-4f89-86db-09918fedb9c5.jpg +0 -0
  195. data/test/dummy/public/system/images/files/large/04a05143-2ea9-4ee0-bca3-64f436bac3d2.jpg +0 -0
  196. data/test/dummy/public/system/images/files/large/187e58dd-d90c-4000-8118-c46da7f1f71f.jpg +0 -0
  197. data/test/dummy/public/system/images/files/large/1fd5231d-04d1-4691-bceb-871810ac982b.jpg +0 -0
  198. data/test/dummy/public/system/images/files/large/25d98e6f-6419-4bb9-990c-cc5113f8606d.jpg +0 -0
  199. data/test/dummy/public/system/images/files/large/3401af18-b401-404f-9bd7-58424fe33e26.jpg +0 -0
  200. data/test/dummy/public/system/images/files/large/38bcfbac-5b70-4510-a0dd-9296fc22ed0e.jpg +0 -0
  201. data/test/dummy/public/system/images/files/large/49f59ee9-98cf-4991-8c96-aebef8f34a21.jpg +0 -0
  202. data/test/dummy/public/system/images/files/large/520dcbea-ce4a-474b-8e42-3b6c947181b3.jpg +0 -0
  203. data/test/dummy/public/system/images/files/large/5dea55cb-4d09-453c-b9fa-a6783c2b82e6.jpg +0 -0
  204. data/test/dummy/public/system/images/files/large/5dfc0dc2-909f-4525-9d5a-d04dc9e9f9ac.jpg +0 -0
  205. data/test/dummy/public/system/images/files/large/6cb55f24-12c1-4019-aa1d-d7d379ffb4b3.jpg +0 -0
  206. data/test/dummy/public/system/images/files/large/71e117d2-a77a-4daf-a0cc-39c629727b57.jpg +0 -0
  207. data/test/dummy/public/system/images/files/large/7426b7d6-2950-4064-8bcd-f7d081fbbd27.jpg +0 -0
  208. data/test/dummy/public/system/images/files/large/88286a62-ef1b-4532-82f4-7a9e72e32f2a.jpg +0 -0
  209. data/test/dummy/public/system/images/files/large/8daf45e0-c8c2-4768-9536-53b8dc269c14.jpg +0 -0
  210. data/test/dummy/public/system/images/files/large/970ec9d8-052c-4c7c-b1eb-a163004dcb35.jpg +0 -0
  211. data/test/dummy/public/system/images/files/large/9a74af84-4e37-451d-abff-84499ca198db.jpg +0 -0
  212. data/test/dummy/public/system/images/files/large/b784910f-bc64-4bbb-bc4f-77cc5b9faf7e.jpg +0 -0
  213. data/test/dummy/public/system/images/files/large/c8ec0593-49f5-44c5-957e-ce61a15678c9.jpg +0 -0
  214. data/test/dummy/public/system/images/files/large/ef58124a-9bd6-4da7-9dcb-a4dfe83e7cc1.jpg +0 -0
  215. data/test/dummy/public/system/images/files/large/f905a6f3-1626-4a3b-89dd-53f1c1a88379.jpg +0 -0
  216. data/test/dummy/public/system/images/files/large/fbe00e7d-98d7-4f89-86db-09918fedb9c5.jpg +0 -0
  217. data/test/dummy/public/system/images/files/original/04a05143-2ea9-4ee0-bca3-64f436bac3d2.png +0 -0
  218. data/test/dummy/public/system/images/files/original/187e58dd-d90c-4000-8118-c46da7f1f71f.png +0 -0
  219. data/test/dummy/public/system/images/files/original/1fd5231d-04d1-4691-bceb-871810ac982b.png +0 -0
  220. data/test/dummy/public/system/images/files/original/25d98e6f-6419-4bb9-990c-cc5113f8606d.png +0 -0
  221. data/test/dummy/public/system/images/files/original/3401af18-b401-404f-9bd7-58424fe33e26.png +0 -0
  222. data/test/dummy/public/system/images/files/original/38bcfbac-5b70-4510-a0dd-9296fc22ed0e.png +0 -0
  223. data/test/dummy/public/system/images/files/original/49f59ee9-98cf-4991-8c96-aebef8f34a21.png +0 -0
  224. data/test/dummy/public/system/images/files/original/520dcbea-ce4a-474b-8e42-3b6c947181b3.png +0 -0
  225. data/test/dummy/public/system/images/files/original/5dea55cb-4d09-453c-b9fa-a6783c2b82e6.png +0 -0
  226. data/test/dummy/public/system/images/files/original/5dfc0dc2-909f-4525-9d5a-d04dc9e9f9ac.png +0 -0
  227. data/test/dummy/public/system/images/files/original/6cb55f24-12c1-4019-aa1d-d7d379ffb4b3.png +0 -0
  228. data/test/dummy/public/system/images/files/original/71e117d2-a77a-4daf-a0cc-39c629727b57.png +0 -0
  229. data/test/dummy/public/system/images/files/original/7426b7d6-2950-4064-8bcd-f7d081fbbd27.png +0 -0
  230. data/test/dummy/public/system/images/files/original/88286a62-ef1b-4532-82f4-7a9e72e32f2a.png +0 -0
  231. data/test/dummy/public/system/images/files/original/8daf45e0-c8c2-4768-9536-53b8dc269c14.png +0 -0
  232. data/test/dummy/public/system/images/files/original/970ec9d8-052c-4c7c-b1eb-a163004dcb35.png +0 -0
  233. data/test/dummy/public/system/images/files/original/9a74af84-4e37-451d-abff-84499ca198db.png +0 -0
  234. data/test/dummy/public/system/images/files/original/b784910f-bc64-4bbb-bc4f-77cc5b9faf7e.png +0 -0
  235. data/test/dummy/public/system/images/files/original/c8ec0593-49f5-44c5-957e-ce61a15678c9.png +0 -0
  236. data/test/dummy/public/system/images/files/original/ef58124a-9bd6-4da7-9dcb-a4dfe83e7cc1.png +0 -0
  237. data/test/dummy/public/system/images/files/original/f905a6f3-1626-4a3b-89dd-53f1c1a88379.png +0 -0
  238. data/test/dummy/public/system/images/files/original/fbe00e7d-98d7-4f89-86db-09918fedb9c5.png +0 -0
  239. data/test/dummy/public/system/images/files/small/04a05143-2ea9-4ee0-bca3-64f436bac3d2.jpg +0 -0
  240. data/test/dummy/public/system/images/files/small/187e58dd-d90c-4000-8118-c46da7f1f71f.jpg +0 -0
  241. data/test/dummy/public/system/images/files/small/1fd5231d-04d1-4691-bceb-871810ac982b.jpg +0 -0
  242. data/test/dummy/public/system/images/files/small/25d98e6f-6419-4bb9-990c-cc5113f8606d.jpg +0 -0
  243. data/test/dummy/public/system/images/files/small/3401af18-b401-404f-9bd7-58424fe33e26.jpg +0 -0
  244. data/test/dummy/public/system/images/files/small/38bcfbac-5b70-4510-a0dd-9296fc22ed0e.jpg +0 -0
  245. data/test/dummy/public/system/images/files/small/49f59ee9-98cf-4991-8c96-aebef8f34a21.jpg +0 -0
  246. data/test/dummy/public/system/images/files/small/520dcbea-ce4a-474b-8e42-3b6c947181b3.jpg +0 -0
  247. data/test/dummy/public/system/images/files/small/5dea55cb-4d09-453c-b9fa-a6783c2b82e6.jpg +0 -0
  248. data/test/dummy/public/system/images/files/small/5dfc0dc2-909f-4525-9d5a-d04dc9e9f9ac.jpg +0 -0
  249. data/test/dummy/public/system/images/files/small/6cb55f24-12c1-4019-aa1d-d7d379ffb4b3.jpg +0 -0
  250. data/test/dummy/public/system/images/files/small/71e117d2-a77a-4daf-a0cc-39c629727b57.jpg +0 -0
  251. data/test/dummy/public/system/images/files/small/7426b7d6-2950-4064-8bcd-f7d081fbbd27.jpg +0 -0
  252. data/test/dummy/public/system/images/files/small/88286a62-ef1b-4532-82f4-7a9e72e32f2a.jpg +0 -0
  253. data/test/dummy/public/system/images/files/small/8daf45e0-c8c2-4768-9536-53b8dc269c14.jpg +0 -0
  254. data/test/dummy/public/system/images/files/small/970ec9d8-052c-4c7c-b1eb-a163004dcb35.jpg +0 -0
  255. data/test/dummy/public/system/images/files/small/9a74af84-4e37-451d-abff-84499ca198db.jpg +0 -0
  256. data/test/dummy/public/system/images/files/small/b784910f-bc64-4bbb-bc4f-77cc5b9faf7e.jpg +0 -0
  257. data/test/dummy/public/system/images/files/small/c8ec0593-49f5-44c5-957e-ce61a15678c9.jpg +0 -0
  258. data/test/dummy/public/system/images/files/small/ef58124a-9bd6-4da7-9dcb-a4dfe83e7cc1.jpg +0 -0
  259. data/test/dummy/public/system/images/files/small/f905a6f3-1626-4a3b-89dd-53f1c1a88379.jpg +0 -0
  260. data/test/dummy/public/system/images/files/small/fbe00e7d-98d7-4f89-86db-09918fedb9c5.jpg +0 -0
  261. data/test/dummy/public/system/images/files/thumb/04a05143-2ea9-4ee0-bca3-64f436bac3d2.jpg +0 -0
  262. data/test/dummy/public/system/images/files/thumb/187e58dd-d90c-4000-8118-c46da7f1f71f.jpg +0 -0
  263. data/test/dummy/public/system/images/files/thumb/1fd5231d-04d1-4691-bceb-871810ac982b.jpg +0 -0
  264. data/test/dummy/public/system/images/files/thumb/25d98e6f-6419-4bb9-990c-cc5113f8606d.jpg +0 -0
  265. data/test/dummy/public/system/images/files/thumb/3401af18-b401-404f-9bd7-58424fe33e26.jpg +0 -0
  266. data/test/dummy/public/system/images/files/thumb/38bcfbac-5b70-4510-a0dd-9296fc22ed0e.jpg +0 -0
  267. data/test/dummy/public/system/images/files/thumb/49f59ee9-98cf-4991-8c96-aebef8f34a21.jpg +0 -0
  268. data/test/dummy/public/system/images/files/thumb/520dcbea-ce4a-474b-8e42-3b6c947181b3.jpg +0 -0
  269. data/test/dummy/public/system/images/files/thumb/5dea55cb-4d09-453c-b9fa-a6783c2b82e6.jpg +0 -0
  270. data/test/dummy/public/system/images/files/thumb/5dfc0dc2-909f-4525-9d5a-d04dc9e9f9ac.jpg +0 -0
  271. data/test/dummy/public/system/images/files/thumb/6cb55f24-12c1-4019-aa1d-d7d379ffb4b3.jpg +0 -0
  272. data/test/dummy/public/system/images/files/thumb/71e117d2-a77a-4daf-a0cc-39c629727b57.jpg +0 -0
  273. data/test/dummy/public/system/images/files/thumb/7426b7d6-2950-4064-8bcd-f7d081fbbd27.jpg +0 -0
  274. data/test/dummy/public/system/images/files/thumb/88286a62-ef1b-4532-82f4-7a9e72e32f2a.jpg +0 -0
  275. data/test/dummy/public/system/images/files/thumb/8daf45e0-c8c2-4768-9536-53b8dc269c14.jpg +0 -0
  276. data/test/dummy/public/system/images/files/thumb/970ec9d8-052c-4c7c-b1eb-a163004dcb35.jpg +0 -0
  277. data/test/dummy/public/system/images/files/thumb/9a74af84-4e37-451d-abff-84499ca198db.jpg +0 -0
  278. data/test/dummy/public/system/images/files/thumb/b784910f-bc64-4bbb-bc4f-77cc5b9faf7e.jpg +0 -0
  279. data/test/dummy/public/system/images/files/thumb/c8ec0593-49f5-44c5-957e-ce61a15678c9.jpg +0 -0
  280. data/test/dummy/public/system/images/files/thumb/ef58124a-9bd6-4da7-9dcb-a4dfe83e7cc1.jpg +0 -0
  281. data/test/dummy/public/system/images/files/thumb/f905a6f3-1626-4a3b-89dd-53f1c1a88379.jpg +0 -0
  282. data/test/dummy/public/system/images/files/thumb/fbe00e7d-98d7-4f89-86db-09918fedb9c5.jpg +0 -0
  283. data/test/dummy/test/controllers/audios_controller_test.rb +5 -5
  284. data/test/dummy/test/controllers/images_controller_test.rb +5 -5
  285. data/test/dummy/test/models/audio_test.rb +5 -5
  286. data/test/dummy/test/models/image_test.rb +5 -5
  287. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_alerts.scssc +0 -0
  288. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_background-variant.scssc +0 -0
  289. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_border-radius.scssc +0 -0
  290. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_buttons.scssc +0 -0
  291. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_center-block.scssc +0 -0
  292. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_clearfix.scssc +0 -0
  293. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_forms.scssc +0 -0
  294. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_gradients.scssc +0 -0
  295. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_grid-framework.scssc +0 -0
  296. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_grid.scssc +0 -0
  297. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_hide-text.scssc +0 -0
  298. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_image.scssc +0 -0
  299. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_labels.scssc +0 -0
  300. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_list-group.scssc +0 -0
  301. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_nav-divider.scssc +0 -0
  302. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_nav-vertical-align.scssc +0 -0
  303. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_opacity.scssc +0 -0
  304. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_pagination.scssc +0 -0
  305. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_panels.scssc +0 -0
  306. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_progress-bar.scssc +0 -0
  307. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_reset-filter.scssc +0 -0
  308. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_resize.scssc +0 -0
  309. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_responsive-visibility.scssc +0 -0
  310. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_size.scssc +0 -0
  311. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_tab-focus.scssc +0 -0
  312. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_table-row.scssc +0 -0
  313. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_text-emphasis.scssc +0 -0
  314. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_text-overflow.scssc +0 -0
  315. data/test/dummy/tmp/cache/assets/test/sass/11e4b32482f2a6837bf1eb6d86d3ed3fb479ba9c/_vendor-prefixes.scssc +0 -0
  316. data/test/dummy/tmp/cache/assets/test/sass/4064a56df5bbb01ee76e4d304234a109a364de14/bootstrap.scssc +0 -0
  317. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_alerts.scssc +0 -0
  318. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_badges.scssc +0 -0
  319. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_breadcrumbs.scssc +0 -0
  320. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_button-groups.scssc +0 -0
  321. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_buttons.scssc +0 -0
  322. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_carousel.scssc +0 -0
  323. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_close.scssc +0 -0
  324. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_code.scssc +0 -0
  325. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_component-animations.scssc +0 -0
  326. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_dropdowns.scssc +0 -0
  327. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_forms.scssc +0 -0
  328. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_glyphicons.scssc +0 -0
  329. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_grid.scssc +0 -0
  330. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_input-groups.scssc +0 -0
  331. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_jumbotron.scssc +0 -0
  332. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_labels.scssc +0 -0
  333. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_list-group.scssc +0 -0
  334. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_media.scssc +0 -0
  335. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_mixins.scssc +0 -0
  336. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_modals.scssc +0 -0
  337. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_navbar.scssc +0 -0
  338. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_navs.scssc +0 -0
  339. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_normalize.scssc +0 -0
  340. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_pager.scssc +0 -0
  341. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_pagination.scssc +0 -0
  342. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_panels.scssc +0 -0
  343. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_popovers.scssc +0 -0
  344. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_print.scssc +0 -0
  345. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_progress-bars.scssc +0 -0
  346. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_responsive-embed.scssc +0 -0
  347. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_responsive-utilities.scssc +0 -0
  348. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_scaffolding.scssc +0 -0
  349. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_tables.scssc +0 -0
  350. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_thumbnails.scssc +0 -0
  351. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_tooltip.scssc +0 -0
  352. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_type.scssc +0 -0
  353. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_utilities.scssc +0 -0
  354. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_variables.scssc +0 -0
  355. data/test/dummy/tmp/cache/assets/test/sass/e934b98bab29972344df0ce895ad77edec08210c/_wells.scssc +0 -0
  356. data/test/dummy/tmp/cache/assets/test/sprockets/0d3881005b0646df783d5c24683d34f5 +0 -0
  357. data/test/dummy/tmp/cache/assets/test/sprockets/16d61d604995abc9503196afa7ee8a1a +0 -0
  358. data/test/dummy/tmp/cache/assets/test/sprockets/1a6846f0a837ae2524e2f9ec89e6ef43 +0 -0
  359. data/test/dummy/tmp/cache/assets/test/sprockets/2013f4301be82fc1e4c20d363d5f595a +0 -0
  360. data/test/dummy/tmp/cache/assets/test/sprockets/416ba8d8c55d6f42571b681274e22d5d +0 -0
  361. data/test/dummy/tmp/cache/assets/test/sprockets/50c1885539f61359c48af74fcae1df31 +0 -0
  362. data/test/dummy/tmp/cache/assets/test/sprockets/6c3e053393afe303432ca73f1b41490b +0 -0
  363. data/test/dummy/tmp/cache/assets/test/sprockets/86e145a39f85cceeaffdff91ebb61449 +0 -0
  364. data/test/dummy/tmp/cache/assets/test/sprockets/c5880aca76ccbb51f9388362e8afc1e6 +0 -0
  365. data/test/dummy/tmp/cache/assets/test/sprockets/e69b39cad15408a142ce4b079f08d5c7 +0 -0
  366. data/test/dummy/tmp/cache/assets/test/sprockets/ea90d3d29d22654f1c3309fdcadb2703 +0 -0
  367. data/test/dummy/tmp/cache/assets/test/sprockets/fe2a206a96f1e0b21d535fa35ddd5f59 +0 -0
  368. data/test/test_helper.rb +4 -0
  369. metadata +550 -2
@@ -0,0 +1,165 @@
1
+ module Attached
2
+
3
+ class Attatcher
4
+
5
+ attr_reader :klass
6
+ attr_reader :name
7
+ attr_reader :options
8
+
9
+ def initialize(klass, name, options = {})
10
+ @klass = klass
11
+ @name = name
12
+ @options = options
13
+ end
14
+
15
+ def self.define(klass, name, options = {})
16
+ new(klass, name, options).define
17
+ end
18
+
19
+ # Define the model methods required to run.
20
+ #
21
+ # Usage:
22
+ #
23
+ # attacher.define
24
+
25
+ def define
26
+ saving
27
+ destroying
28
+ getters
29
+ setters
30
+ query
31
+ url
32
+ validations
33
+ flusher
34
+ end
35
+
36
+ # Define the saving callbacks.
37
+ #
38
+ # Usage:
39
+ #
40
+ # attacher.saving
41
+
42
+ def saving
43
+ name = @name
44
+ @klass.send(:before_save) do
45
+ logger.info "[attached] saving #{name}"
46
+ send(name).save
47
+ end
48
+ end
49
+
50
+ # Define the destroying callbacks.
51
+ #
52
+ # Usage:
53
+ #
54
+ # attacher.destroying
55
+
56
+ def destroying
57
+ name = @name
58
+ @klass.send(:before_destroy) do
59
+ logger.info "[attached] destroying #{name}"
60
+ send(name).destroy
61
+ end
62
+ end
63
+
64
+ # Define the getter.
65
+ #
66
+ # Usage:
67
+ #
68
+ # attacher.getters
69
+
70
+ def getters
71
+ name = @name
72
+ options = @options
73
+ @klass.send(:define_method, name) do
74
+ ivar = :"@_attachment_#{name}"
75
+ attachment = instance_variable_get(ivar)
76
+
77
+ if attachment.nil?
78
+ attachment = Attachment.new(name, self, options)
79
+ instance_variable_set(ivar, attachment)
80
+ end
81
+
82
+ return attachment
83
+ end
84
+ end
85
+
86
+ # Define the setter.
87
+ #
88
+ # Usage:
89
+ #
90
+ # attacher.setters
91
+
92
+ def setters
93
+ name = @name
94
+ @klass.send(:define_method, "#{name}=") do |file|
95
+ send(name).assign(file)
96
+ end
97
+ end
98
+
99
+ # Define the query.
100
+ #
101
+ # Usage:
102
+ #
103
+ # attacher.getters
104
+
105
+ def query
106
+ name = @name
107
+ @klass.send(:define_method, "#{name}?") do
108
+ send(name).attached?
109
+ end
110
+ end
111
+
112
+ # Define the URL.
113
+ #
114
+ # Usage:
115
+ #
116
+ # attacher.getters
117
+
118
+ def url
119
+ name = @name
120
+ @klass.send(:define_method, "#{name}_url=") do |url|
121
+ send(name).url = url
122
+ end
123
+ end
124
+
125
+ # Forward validations.
126
+ #
127
+ # Usage:
128
+ #
129
+ # attacher.validations
130
+
131
+ def validations
132
+ name = @name
133
+ @klass.send(:validates_each, name) do |record, attr, value|
134
+ record.send(name).errors.each do |error|
135
+ record.errors.add(name, error)
136
+ end
137
+ end
138
+ end
139
+
140
+ # Flush validations.
141
+ #
142
+ # Usage:
143
+ #
144
+ # attacher.flusher
145
+
146
+ def flusher
147
+ name = @name
148
+ [:before_validation,:after_validation].each do |operation|
149
+ @klass.send(operation) do
150
+
151
+ %w(size extension identifier).each do |attribute|
152
+ if errors.include?(:"#{name}_#{attribute}")
153
+ errors[:"#{name}_#{attribute}"].each do |message|
154
+ errors.add(name, message)
155
+ end
156
+ errors[:"#{name}_#{attribute}"].clear
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+
163
+ end
164
+
165
+ end
@@ -0,0 +1,16 @@
1
+ module Attached
2
+
3
+ module Definition
4
+
5
+ def attachment(*args)
6
+ options = args.extract_options!
7
+ args.each do |name|
8
+ column("#{name}_identifier", :string, options)
9
+ column("#{name}_extension", :string, options)
10
+ column("#{name}_size", :integer, options)
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -1,7 +1,6 @@
1
1
  module Attached
2
2
 
3
3
  class Job
4
-
5
4
  @queue = :attached
6
5
 
7
6
  def self.perform(klass, id, method)
@@ -3,8 +3,8 @@ require 'attached/processor/audio'
3
3
  require 'attached/processor/image'
4
4
 
5
5
  module Attached
6
- module Processor
7
6
 
7
+ module Processor
8
8
 
9
9
  # Create a storage object given a medium and credentials.
10
10
  #
@@ -15,18 +15,14 @@ module Attached
15
15
  # Attached::Processor.processor(Attached::Processor::Custom.new)
16
16
 
17
17
  def self.processor(processor)
18
-
19
18
  return processor if processor.is_a? Attached::Processor::Base
20
-
21
19
  case processor
22
20
  when :audio then return Attached::Processor::Audio
23
21
  when :image then return Attached::Processor::Image
24
22
  end
25
-
26
23
  raise "undefined processor '#{processor}'"
27
-
28
24
  end
29
25
 
30
-
31
26
  end
27
+
32
28
  end
@@ -5,13 +5,11 @@ module Attached
5
5
  module Processor
6
6
  class Audio < Base
7
7
 
8
-
9
8
  attr_reader :path
10
9
  attr_reader :extension
11
10
  attr_reader :preset
12
11
  attr_reader :attachment
13
12
 
14
-
15
13
  # Create a processor.
16
14
  #
17
15
  # Parameters:
@@ -22,23 +20,18 @@ module Attached
22
20
 
23
21
  def initialize(file, options = {}, attachment = nil)
24
22
  super
25
-
26
23
  @path = self.file.path
27
-
28
24
  @preset = options[:preset]
29
25
  @extension = options[:extension]
30
-
31
26
  @extension ||= self.attachment.extension
32
27
  end
33
28
 
34
-
35
29
  # Redirect output path.
36
30
 
37
31
  def redirect
38
32
  ">/dev/null 2>&1" if File.exist?("/dev/null")
39
33
  end
40
34
 
41
-
42
35
  # Helper function for calling processors.
43
36
  #
44
37
  # Usage:
@@ -46,35 +39,23 @@ module Attached
46
39
  # self.process
47
40
 
48
41
  def process
49
-
50
42
  result = Tempfile.new(["", self.extension])
51
43
  result.binmode
52
-
53
44
  begin
54
-
55
45
  parameters = []
56
-
57
46
  parameters << "--preset #{self.preset}" if self.preset
58
-
59
47
  parameters << self.path
60
48
  parameters << result.path
61
-
62
49
  parameters = parameters.join(" ").squeeze(" ")
63
-
64
50
  `lame #{parameters} #{redirect}`
65
-
66
51
  raise Errno::ENOENT if $?.exitstatus == 127
67
-
68
52
  rescue Errno::ENOENT
69
53
  raise "command 'lame' not found: ensure LAME is installed"
70
54
  end
71
-
72
55
  unless $?.exitstatus == 0
73
56
  raise Attached::Processor::Error, "must be an audio file"
74
57
  end
75
-
76
58
  return result
77
-
78
59
  end
79
60
 
80
61
  end
@@ -2,12 +2,10 @@ module Attached
2
2
  module Processor
3
3
  class Base
4
4
 
5
-
6
5
  attr_accessor :file
7
6
  attr_accessor :options
8
7
  attr_accessor :attachment
9
8
 
10
-
11
9
  # Create and run a processor.
12
10
  #
13
11
  # Parameters:
@@ -20,7 +18,6 @@ module Attached
20
18
  new(file, options, attachment).process
21
19
  end
22
20
 
23
-
24
21
  # Create a processor.
25
22
  #
26
23
  # Parameters:
@@ -35,14 +32,12 @@ module Attached
35
32
  @attachment = attachment
36
33
  end
37
34
 
38
-
39
35
  # Run the processor.
40
36
 
41
37
  def process
42
38
  raise NotImplementedError.new
43
39
  end
44
40
 
45
-
46
41
  end
47
42
  end
48
43
  end
@@ -3,4 +3,4 @@ module Attached
3
3
  class Error < StandardError
4
4
  end
5
5
  end
6
- end
6
+ end
@@ -1,20 +1,16 @@
1
1
  require 'attached/processor/base'
2
2
  require 'attached/processor/error'
3
-
4
3
  module Attached
5
4
  module Processor
6
5
  class Image < Base
7
6
 
8
-
9
7
  attr_reader :path
10
8
  attr_reader :extension
11
-
12
9
  attr_reader :width
13
10
  attr_reader :height
14
11
  attr_reader :quality
15
12
  attr_reader :operation
16
13
 
17
-
18
14
  # Create a processor.
19
15
  #
20
16
  # Parameters:
@@ -22,60 +18,43 @@ module Attached
22
18
  # * file - The file to be processed.
23
19
  # * options - The options to be applied to the processing.
24
20
  # * attachment - The attachment the processor is being run for.
25
-
26
21
  def initialize(file, options = {}, attachment = nil)
27
22
  super
28
-
29
23
  @path = self.file.path
30
-
31
24
  @size = options[:size]
32
25
  @quality = options[:quality]
33
26
  @extension = options[:extension]
34
-
35
27
  @width, @height, @operation = @size.match(/(\d*)x?(\d*)(.*)/)[1..3] if @size
36
-
37
28
  @width ||= options[:width]
38
29
  @height ||= options[:height]
39
30
  @operation ||= options[:operation]
40
-
41
31
  @operation = case @operation
42
32
  when :decrease then '>'
43
33
  when :increase then '<'
44
34
  when :default then '#'
45
35
  else @operation || '#'
46
36
  end
47
-
48
37
  @extension ||= self.attachment.extension
49
-
50
38
  @width = Integer(self.width) if self.width
51
39
  @height = Integer(self.height) if self.height
52
40
  end
53
41
 
54
-
55
42
  # Redirect output path.
56
-
57
43
  def redirect
58
44
  ">/dev/null 2>&1" if File.exist?("/dev/null")
59
45
  end
60
46
 
61
-
62
47
  # Helper function for calling processors.
63
48
  #
64
49
  # Usage:
65
50
  #
66
51
  # self.process
67
-
68
52
  def process
69
-
70
53
  result = Tempfile.new(["", self.extension])
71
54
  result.binmode
72
-
73
55
  begin
74
-
75
56
  parameters = []
76
-
77
57
  parameters << self.path
78
-
79
58
  if width and height
80
59
  parameters << case operation
81
60
  when '#' then "-resize #{width}x#{height}^ -gravity center -extent #{width}x#{height}"
@@ -84,29 +63,19 @@ module Attached
84
63
  else "-resize #{width}x#{height}"
85
64
  end
86
65
  end
87
-
88
66
  parameters << "-quality #{quality}" if quality
89
-
90
67
  parameters << result.path
91
-
92
68
  parameters = parameters.join(" ").squeeze(" ")
93
-
94
69
  `convert #{parameters} #{redirect}`
95
-
96
70
  raise Errno::ENOENT if $?.exitstatus == 127
97
-
98
71
  rescue Errno::ENOENT
99
72
  raise "command 'convert' not found: ensure ImageMagick is installed"
100
73
  end
101
-
102
74
  unless $?.exitstatus == 0
103
75
  raise Attached::Processor::Error, "must be an image file"
104
76
  end
105
-
106
77
  return result
107
-
108
78
  end
109
-
110
79
  end
111
80
  end
112
81
  end