attached 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.rdoc +1 -1
- data/lib/attached.rb +82 -82
- data/lib/attached/attachment.rb +114 -114
- data/lib/attached/job.rb +6 -6
- data/lib/attached/processor.rb +9 -9
- data/lib/attached/processor/audio.rb +29 -29
- data/lib/attached/processor/base.rb +14 -14
- data/lib/attached/processor/image.rb +34 -34
- data/lib/attached/railtie.rb +2 -2
- data/lib/attached/storage.rb +8 -8
- data/lib/attached/storage/aws.rb +69 -69
- data/lib/attached/storage/base.rb +26 -26
- data/lib/attached/storage/google.rb +71 -71
- data/lib/attached/storage/local.rb +44 -44
- data/lib/attached/storage/rackspace.rb +68 -68
- data/lib/attached/version.rb +1 -1
- data/test/dummy/app/assets/javascripts/application.js +2 -1
- data/test/dummy/app/assets/javascripts/{audios.js → main.js.coffee} +0 -0
- data/test/dummy/app/assets/stylesheets/application.css +3 -10
- data/test/dummy/app/assets/stylesheets/main.css.scss +6 -0
- data/test/dummy/app/views/audios/_form.html.haml +17 -0
- data/test/dummy/app/views/audios/edit.html.haml +5 -0
- data/test/dummy/app/views/audios/index.html.haml +20 -0
- data/test/dummy/app/views/audios/new.html.haml +5 -0
- data/test/dummy/app/views/audios/show.html.haml +13 -0
- data/test/dummy/app/views/images/_form.html.haml +17 -0
- data/test/dummy/app/views/images/edit.html.haml +5 -0
- data/test/dummy/app/views/images/index.html.haml +20 -0
- data/test/dummy/app/views/images/new.html.haml +5 -0
- data/test/dummy/app/views/images/show.html.haml +13 -0
- data/test/dummy/app/views/layouts/application.html.haml +17 -0
- data/test/dummy/app/views/main/index.html.haml +8 -0
- data/test/dummy/app/views/shared/_error.html.haml +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +37 -0
- data/test/dummy/log/test.log +390 -1166
- data/test/dummy/public/system/audios/files/full/{07a3f586-805d-4c68-be01-7ba4d787aa9e.aac → 151d9dff-7259-41a3-9fc3-988a3099fe22.aac} +0 -0
- data/test/dummy/public/system/audios/files/full/{1a5d65b6-3d7f-45e3-8fc8-9221f3bca127.aac → 2b5e47b9-b441-4c49-a98f-5bf89f19848e.aac} +0 -0
- data/test/dummy/public/system/audios/files/full/{3729319f-299b-47e2-bd7e-d73d38b5cf8f.aac → 33203ced-129f-454c-870a-dc87a2809859.aac} +0 -0
- data/test/dummy/public/system/audios/files/full/{41e88b81-2804-4316-86e8-252adad0eaa3.aac → c03bdf7c-ce26-4a31-9c23-d947b2986fa7.aac} +0 -0
- data/test/dummy/public/system/audios/files/large/{07a3f586-805d-4c68-be01-7ba4d787aa9e.aac → 151d9dff-7259-41a3-9fc3-988a3099fe22.aac} +0 -0
- data/test/dummy/public/system/audios/files/large/{1a5d65b6-3d7f-45e3-8fc8-9221f3bca127.aac → 2b5e47b9-b441-4c49-a98f-5bf89f19848e.aac} +0 -0
- data/test/dummy/public/system/audios/files/large/{3729319f-299b-47e2-bd7e-d73d38b5cf8f.aac → 33203ced-129f-454c-870a-dc87a2809859.aac} +0 -0
- data/test/dummy/public/system/audios/files/large/{41e88b81-2804-4316-86e8-252adad0eaa3.aac → c03bdf7c-ce26-4a31-9c23-d947b2986fa7.aac} +0 -0
- data/test/dummy/public/system/audios/files/original/{07a3f586-805d-4c68-be01-7ba4d787aa9e.wav → 151d9dff-7259-41a3-9fc3-988a3099fe22.wav} +0 -0
- data/test/dummy/public/system/audios/files/original/{1a5d65b6-3d7f-45e3-8fc8-9221f3bca127.wav → 2b5e47b9-b441-4c49-a98f-5bf89f19848e.wav} +0 -0
- data/test/dummy/public/system/audios/files/original/{3729319f-299b-47e2-bd7e-d73d38b5cf8f.wav → 33203ced-129f-454c-870a-dc87a2809859.wav} +0 -0
- data/test/dummy/public/system/audios/files/original/{41e88b81-2804-4316-86e8-252adad0eaa3.wav → c03bdf7c-ce26-4a31-9c23-d947b2986fa7.wav} +0 -0
- data/test/dummy/public/system/audios/files/small/{07a3f586-805d-4c68-be01-7ba4d787aa9e.aac → 151d9dff-7259-41a3-9fc3-988a3099fe22.aac} +0 -0
- data/test/dummy/public/system/audios/files/small/{1a5d65b6-3d7f-45e3-8fc8-9221f3bca127.aac → 2b5e47b9-b441-4c49-a98f-5bf89f19848e.aac} +0 -0
- data/test/dummy/public/system/audios/files/small/{3729319f-299b-47e2-bd7e-d73d38b5cf8f.aac → 33203ced-129f-454c-870a-dc87a2809859.aac} +0 -0
- data/test/dummy/public/system/audios/files/small/{41e88b81-2804-4316-86e8-252adad0eaa3.aac → c03bdf7c-ce26-4a31-9c23-d947b2986fa7.aac} +0 -0
- data/test/dummy/public/system/images/files/full/15f09efb-0d03-44b3-a372-5ae156e8898e.jpg +0 -0
- data/test/dummy/public/system/images/files/full/7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.jpg +0 -0
- data/test/dummy/public/system/images/files/full/84b585ce-9430-4761-8fb1-d94302eb33bd.jpg +0 -0
- data/test/dummy/public/system/images/files/full/b8e19d15-db0f-42e7-9372-5f563486928a.jpg +0 -0
- data/test/dummy/public/system/images/files/full/baa48120-b3b9-4d2a-830a-e6ebc4db7802.jpg +0 -0
- data/test/dummy/public/system/images/files/full/caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.jpg +0 -0
- data/test/dummy/public/system/images/files/large/15f09efb-0d03-44b3-a372-5ae156e8898e.jpg +0 -0
- data/test/dummy/public/system/images/files/large/7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.jpg +0 -0
- data/test/dummy/public/system/images/files/large/84b585ce-9430-4761-8fb1-d94302eb33bd.jpg +0 -0
- data/test/dummy/public/system/images/files/large/b8e19d15-db0f-42e7-9372-5f563486928a.jpg +0 -0
- data/test/dummy/public/system/images/files/large/baa48120-b3b9-4d2a-830a-e6ebc4db7802.jpg +0 -0
- data/test/dummy/public/system/images/files/large/caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.jpg +0 -0
- data/test/dummy/public/system/images/files/original/{0850c86c-78a8-4319-8852-bed744b792e6.png → 15f09efb-0d03-44b3-a372-5ae156e8898e.png} +0 -0
- data/test/dummy/public/system/images/files/original/{12ace664-b553-45a6-b02b-37e15ac2981b.png → 7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.png} +0 -0
- data/test/dummy/public/system/images/files/original/{2ac8ebdb-bc96-49c4-befd-5c96b47646e5.png → 84b585ce-9430-4761-8fb1-d94302eb33bd.png} +0 -0
- data/test/dummy/public/system/images/files/original/{3e9c5921-4820-441d-9f90-90b518cd582e.png → b8e19d15-db0f-42e7-9372-5f563486928a.png} +0 -0
- data/test/dummy/public/system/images/files/original/{444d0123-908a-4616-83e3-88942a66a075.png → baa48120-b3b9-4d2a-830a-e6ebc4db7802.png} +0 -0
- data/test/dummy/public/system/images/files/original/{5af89da1-b1fa-421a-a52e-01607d89fb5d.png → caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.png} +0 -0
- data/test/dummy/public/system/images/files/small/15f09efb-0d03-44b3-a372-5ae156e8898e.jpg +0 -0
- data/test/dummy/public/system/images/files/small/7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.jpg +0 -0
- data/test/dummy/public/system/images/files/small/84b585ce-9430-4761-8fb1-d94302eb33bd.jpg +0 -0
- data/test/dummy/public/system/images/files/small/b8e19d15-db0f-42e7-9372-5f563486928a.jpg +0 -0
- data/test/dummy/public/system/images/files/small/baa48120-b3b9-4d2a-830a-e6ebc4db7802.jpg +0 -0
- data/test/dummy/public/system/images/files/small/caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/15f09efb-0d03-44b3-a372-5ae156e8898e.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/7a1dbda7-f7f7-4b13-a7ae-be38c43f76a3.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/84b585ce-9430-4761-8fb1-d94302eb33bd.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/b8e19d15-db0f-42e7-9372-5f563486928a.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/baa48120-b3b9-4d2a-830a-e6ebc4db7802.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/caac47c3-f3c8-4ca9-a682-d79e8c1b5b29.jpg +0 -0
- metadata +168 -337
- data/test/dummy/app/assets/javascripts/images.js +0 -0
- data/test/dummy/app/assets/javascripts/main.js +0 -0
- data/test/dummy/app/assets/stylesheets/audios.css +0 -0
- data/test/dummy/app/assets/stylesheets/images.css +0 -0
- data/test/dummy/app/assets/stylesheets/main.css +0 -0
- data/test/dummy/app/views/audios/_form.html.erb +0 -27
- data/test/dummy/app/views/audios/edit.html.erb +0 -3
- data/test/dummy/app/views/audios/index.html.erb +0 -17
- data/test/dummy/app/views/audios/new.html.erb +0 -3
- data/test/dummy/app/views/audios/show.html.erb +0 -17
- data/test/dummy/app/views/images/_form.html.erb +0 -27
- data/test/dummy/app/views/images/edit.html.erb +0 -3
- data/test/dummy/app/views/images/index.html.erb +0 -17
- data/test/dummy/app/views/images/new.html.erb +0 -3
- data/test/dummy/app/views/images/show.html.erb +0 -18
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/app/views/main/index.html.erb +0 -6
- data/test/dummy/public/system/audios/files/full/5d262d6b-4789-42f9-b985-1c39c9eca0c0.aac +0 -0
- data/test/dummy/public/system/audios/files/full/67645888-cf0b-47db-8202-2df3a1ce594d.aac +0 -0
- data/test/dummy/public/system/audios/files/full/6cecb6b5-46cd-47a5-bf8a-10849e30f1f6.aac +0 -0
- data/test/dummy/public/system/audios/files/full/8d116bcb-2605-429e-9edc-b1a91fa66d0a.aac +0 -0
- data/test/dummy/public/system/audios/files/full/9b084b16-eb46-4730-ad80-c5d7d8ef92d2.aac +0 -0
- data/test/dummy/public/system/audios/files/full/9dddf071-ac43-4232-9a9d-fb5d26862bd1.aac +0 -0
- data/test/dummy/public/system/audios/files/full/a6880c5f-d130-469f-9c30-d8aa1b9f7b71.aac +0 -0
- data/test/dummy/public/system/audios/files/full/a79a531d-5de4-4aa3-9c04-275cf6307d13.aac +0 -0
- data/test/dummy/public/system/audios/files/full/c6768282-9787-45dc-a39f-37d23b83f8f2.aac +0 -0
- data/test/dummy/public/system/audios/files/full/e8389286-fda2-4614-906f-bd646383333a.aac +0 -0
- data/test/dummy/public/system/audios/files/full/ee0041b9-6482-4d4f-96cc-1a6e28c93570.aac +0 -0
- data/test/dummy/public/system/audios/files/full/ffb3df30-8dbf-4938-abde-21cdfced70d1.aac +0 -0
- data/test/dummy/public/system/audios/files/large/5d262d6b-4789-42f9-b985-1c39c9eca0c0.aac +0 -0
- data/test/dummy/public/system/audios/files/large/67645888-cf0b-47db-8202-2df3a1ce594d.aac +0 -0
- data/test/dummy/public/system/audios/files/large/6cecb6b5-46cd-47a5-bf8a-10849e30f1f6.aac +0 -0
- data/test/dummy/public/system/audios/files/large/8d116bcb-2605-429e-9edc-b1a91fa66d0a.aac +0 -0
- data/test/dummy/public/system/audios/files/large/9b084b16-eb46-4730-ad80-c5d7d8ef92d2.aac +0 -0
- data/test/dummy/public/system/audios/files/large/9dddf071-ac43-4232-9a9d-fb5d26862bd1.aac +0 -0
- data/test/dummy/public/system/audios/files/large/a6880c5f-d130-469f-9c30-d8aa1b9f7b71.aac +0 -0
- data/test/dummy/public/system/audios/files/large/a79a531d-5de4-4aa3-9c04-275cf6307d13.aac +0 -0
- data/test/dummy/public/system/audios/files/large/c6768282-9787-45dc-a39f-37d23b83f8f2.aac +0 -0
- data/test/dummy/public/system/audios/files/large/e8389286-fda2-4614-906f-bd646383333a.aac +0 -0
- data/test/dummy/public/system/audios/files/large/ee0041b9-6482-4d4f-96cc-1a6e28c93570.aac +0 -0
- data/test/dummy/public/system/audios/files/large/ffb3df30-8dbf-4938-abde-21cdfced70d1.aac +0 -0
- data/test/dummy/public/system/audios/files/original/5d262d6b-4789-42f9-b985-1c39c9eca0c0.wav +0 -0
- data/test/dummy/public/system/audios/files/original/67645888-cf0b-47db-8202-2df3a1ce594d.wav +0 -0
- data/test/dummy/public/system/audios/files/original/6cecb6b5-46cd-47a5-bf8a-10849e30f1f6.wav +0 -0
- data/test/dummy/public/system/audios/files/original/8d116bcb-2605-429e-9edc-b1a91fa66d0a.wav +0 -0
- data/test/dummy/public/system/audios/files/original/9b084b16-eb46-4730-ad80-c5d7d8ef92d2.wav +0 -0
- data/test/dummy/public/system/audios/files/original/9dddf071-ac43-4232-9a9d-fb5d26862bd1.wav +0 -0
- data/test/dummy/public/system/audios/files/original/a6880c5f-d130-469f-9c30-d8aa1b9f7b71.wav +0 -0
- data/test/dummy/public/system/audios/files/original/a79a531d-5de4-4aa3-9c04-275cf6307d13.wav +0 -0
- data/test/dummy/public/system/audios/files/original/c6768282-9787-45dc-a39f-37d23b83f8f2.wav +0 -0
- data/test/dummy/public/system/audios/files/original/e8389286-fda2-4614-906f-bd646383333a.wav +0 -0
- data/test/dummy/public/system/audios/files/original/ee0041b9-6482-4d4f-96cc-1a6e28c93570.wav +0 -0
- data/test/dummy/public/system/audios/files/original/ffb3df30-8dbf-4938-abde-21cdfced70d1.wav +0 -0
- data/test/dummy/public/system/audios/files/small/5d262d6b-4789-42f9-b985-1c39c9eca0c0.aac +0 -0
- data/test/dummy/public/system/audios/files/small/67645888-cf0b-47db-8202-2df3a1ce594d.aac +0 -0
- data/test/dummy/public/system/audios/files/small/6cecb6b5-46cd-47a5-bf8a-10849e30f1f6.aac +0 -0
- data/test/dummy/public/system/audios/files/small/8d116bcb-2605-429e-9edc-b1a91fa66d0a.aac +0 -0
- data/test/dummy/public/system/audios/files/small/9b084b16-eb46-4730-ad80-c5d7d8ef92d2.aac +0 -0
- data/test/dummy/public/system/audios/files/small/9dddf071-ac43-4232-9a9d-fb5d26862bd1.aac +0 -0
- data/test/dummy/public/system/audios/files/small/a6880c5f-d130-469f-9c30-d8aa1b9f7b71.aac +0 -0
- data/test/dummy/public/system/audios/files/small/a79a531d-5de4-4aa3-9c04-275cf6307d13.aac +0 -0
- data/test/dummy/public/system/audios/files/small/c6768282-9787-45dc-a39f-37d23b83f8f2.aac +0 -0
- data/test/dummy/public/system/audios/files/small/e8389286-fda2-4614-906f-bd646383333a.aac +0 -0
- data/test/dummy/public/system/audios/files/small/ee0041b9-6482-4d4f-96cc-1a6e28c93570.aac +0 -0
- data/test/dummy/public/system/audios/files/small/ffb3df30-8dbf-4938-abde-21cdfced70d1.aac +0 -0
- data/test/dummy/public/system/images/files/full/0850c86c-78a8-4319-8852-bed744b792e6.jpg +0 -0
- data/test/dummy/public/system/images/files/full/12ace664-b553-45a6-b02b-37e15ac2981b.jpg +0 -0
- data/test/dummy/public/system/images/files/full/2ac8ebdb-bc96-49c4-befd-5c96b47646e5.jpg +0 -0
- data/test/dummy/public/system/images/files/full/3e9c5921-4820-441d-9f90-90b518cd582e.jpg +0 -0
- data/test/dummy/public/system/images/files/full/444d0123-908a-4616-83e3-88942a66a075.jpg +0 -0
- data/test/dummy/public/system/images/files/full/5af89da1-b1fa-421a-a52e-01607d89fb5d.jpg +0 -0
- data/test/dummy/public/system/images/files/full/8628fbe3-bd09-4713-babe-e38c1492788e.jpg +0 -0
- data/test/dummy/public/system/images/files/full/a0158251-8d9c-42fb-a854-e56b915713df.jpg +0 -0
- data/test/dummy/public/system/images/files/full/b7318aed-63ee-43a2-9365-755bcc2815df.jpg +0 -0
- data/test/dummy/public/system/images/files/full/c292008f-764f-4f8a-8df1-82c63d87a653.jpg +0 -0
- data/test/dummy/public/system/images/files/full/cd5745af-c9c5-4ea4-9fca-711fb58c4604.jpg +0 -0
- data/test/dummy/public/system/images/files/full/d39266e6-2426-4888-9f12-031ade4f872e.jpg +0 -0
- data/test/dummy/public/system/images/files/full/e9e4c240-1426-4951-a600-c5a07c30d80d.jpg +0 -0
- data/test/dummy/public/system/images/files/full/ee1f8491-6e52-410f-9d62-bd544715d066.jpg +0 -0
- data/test/dummy/public/system/images/files/full/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.jpg +0 -0
- data/test/dummy/public/system/images/files/full/ffc3f5fd-ff40-4a77-8e08-0517e519f857.jpg +0 -0
- data/test/dummy/public/system/images/files/large/0850c86c-78a8-4319-8852-bed744b792e6.jpg +0 -0
- data/test/dummy/public/system/images/files/large/12ace664-b553-45a6-b02b-37e15ac2981b.jpg +0 -0
- data/test/dummy/public/system/images/files/large/2ac8ebdb-bc96-49c4-befd-5c96b47646e5.jpg +0 -0
- data/test/dummy/public/system/images/files/large/3e9c5921-4820-441d-9f90-90b518cd582e.jpg +0 -0
- data/test/dummy/public/system/images/files/large/444d0123-908a-4616-83e3-88942a66a075.jpg +0 -0
- data/test/dummy/public/system/images/files/large/5af89da1-b1fa-421a-a52e-01607d89fb5d.jpg +0 -0
- data/test/dummy/public/system/images/files/large/8628fbe3-bd09-4713-babe-e38c1492788e.jpg +0 -0
- data/test/dummy/public/system/images/files/large/a0158251-8d9c-42fb-a854-e56b915713df.jpg +0 -0
- data/test/dummy/public/system/images/files/large/b7318aed-63ee-43a2-9365-755bcc2815df.jpg +0 -0
- data/test/dummy/public/system/images/files/large/c292008f-764f-4f8a-8df1-82c63d87a653.jpg +0 -0
- data/test/dummy/public/system/images/files/large/cd5745af-c9c5-4ea4-9fca-711fb58c4604.jpg +0 -0
- data/test/dummy/public/system/images/files/large/d39266e6-2426-4888-9f12-031ade4f872e.jpg +0 -0
- data/test/dummy/public/system/images/files/large/e9e4c240-1426-4951-a600-c5a07c30d80d.jpg +0 -0
- data/test/dummy/public/system/images/files/large/ee1f8491-6e52-410f-9d62-bd544715d066.jpg +0 -0
- data/test/dummy/public/system/images/files/large/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.jpg +0 -0
- data/test/dummy/public/system/images/files/large/ffc3f5fd-ff40-4a77-8e08-0517e519f857.jpg +0 -0
- data/test/dummy/public/system/images/files/original/8628fbe3-bd09-4713-babe-e38c1492788e.png +0 -0
- data/test/dummy/public/system/images/files/original/a0158251-8d9c-42fb-a854-e56b915713df.png +0 -0
- data/test/dummy/public/system/images/files/original/b7318aed-63ee-43a2-9365-755bcc2815df.png +0 -0
- data/test/dummy/public/system/images/files/original/c292008f-764f-4f8a-8df1-82c63d87a653.png +0 -0
- data/test/dummy/public/system/images/files/original/cd5745af-c9c5-4ea4-9fca-711fb58c4604.png +0 -0
- data/test/dummy/public/system/images/files/original/d39266e6-2426-4888-9f12-031ade4f872e.png +0 -0
- data/test/dummy/public/system/images/files/original/e9e4c240-1426-4951-a600-c5a07c30d80d.png +0 -0
- data/test/dummy/public/system/images/files/original/ee1f8491-6e52-410f-9d62-bd544715d066.png +0 -0
- data/test/dummy/public/system/images/files/original/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.png +0 -0
- data/test/dummy/public/system/images/files/original/ffc3f5fd-ff40-4a77-8e08-0517e519f857.png +0 -0
- data/test/dummy/public/system/images/files/small/0850c86c-78a8-4319-8852-bed744b792e6.jpg +0 -0
- data/test/dummy/public/system/images/files/small/12ace664-b553-45a6-b02b-37e15ac2981b.jpg +0 -0
- data/test/dummy/public/system/images/files/small/2ac8ebdb-bc96-49c4-befd-5c96b47646e5.jpg +0 -0
- data/test/dummy/public/system/images/files/small/3e9c5921-4820-441d-9f90-90b518cd582e.jpg +0 -0
- data/test/dummy/public/system/images/files/small/444d0123-908a-4616-83e3-88942a66a075.jpg +0 -0
- data/test/dummy/public/system/images/files/small/5af89da1-b1fa-421a-a52e-01607d89fb5d.jpg +0 -0
- data/test/dummy/public/system/images/files/small/8628fbe3-bd09-4713-babe-e38c1492788e.jpg +0 -0
- data/test/dummy/public/system/images/files/small/a0158251-8d9c-42fb-a854-e56b915713df.jpg +0 -0
- data/test/dummy/public/system/images/files/small/b7318aed-63ee-43a2-9365-755bcc2815df.jpg +0 -0
- data/test/dummy/public/system/images/files/small/c292008f-764f-4f8a-8df1-82c63d87a653.jpg +0 -0
- data/test/dummy/public/system/images/files/small/cd5745af-c9c5-4ea4-9fca-711fb58c4604.jpg +0 -0
- data/test/dummy/public/system/images/files/small/d39266e6-2426-4888-9f12-031ade4f872e.jpg +0 -0
- data/test/dummy/public/system/images/files/small/e9e4c240-1426-4951-a600-c5a07c30d80d.jpg +0 -0
- data/test/dummy/public/system/images/files/small/ee1f8491-6e52-410f-9d62-bd544715d066.jpg +0 -0
- data/test/dummy/public/system/images/files/small/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.jpg +0 -0
- data/test/dummy/public/system/images/files/small/ffc3f5fd-ff40-4a77-8e08-0517e519f857.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/0850c86c-78a8-4319-8852-bed744b792e6.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/12ace664-b553-45a6-b02b-37e15ac2981b.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/2ac8ebdb-bc96-49c4-befd-5c96b47646e5.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/3e9c5921-4820-441d-9f90-90b518cd582e.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/444d0123-908a-4616-83e3-88942a66a075.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/5af89da1-b1fa-421a-a52e-01607d89fb5d.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/8628fbe3-bd09-4713-babe-e38c1492788e.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/a0158251-8d9c-42fb-a854-e56b915713df.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/b7318aed-63ee-43a2-9365-755bcc2815df.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/c292008f-764f-4f8a-8df1-82c63d87a653.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/cd5745af-c9c5-4ea4-9fca-711fb58c4604.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/d39266e6-2426-4888-9f12-031ade4f872e.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/e9e4c240-1426-4951-a600-c5a07c30d80d.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/ee1f8491-6e52-410f-9d62-bd544715d066.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/f7ccd0c4-6d8d-4d26-afe7-ab62a448baf9.jpg +0 -0
- data/test/dummy/public/system/images/files/thumb/ffc3f5fd-ff40-4a77-8e08-0517e519f857.jpg +0 -0
data/lib/attached/job.rb
CHANGED
@@ -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
|
data/lib/attached/processor.rb
CHANGED
@@ -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
|
data/lib/attached/railtie.rb
CHANGED
@@ -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
|
data/lib/attached/storage.rb
CHANGED
@@ -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
|
data/lib/attached/storage/aws.rb
CHANGED
@@ -8,120 +8,120 @@ end
|
|
8
8
|
|
9
9
|
|
10
10
|
module Attached
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
117
|
-
|
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
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
127
127
|
end
|