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
@@ -1,16 +1,16 @@
|
|
1
1
|
module Attached
|
2
2
|
module Storage
|
3
3
|
class Base
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
|
6
6
|
# Helper for parsing credentials from a hash, file, or string.
|
7
7
|
#
|
8
8
|
# Usage:
|
9
9
|
#
|
10
|
-
# parse({...})
|
10
|
+
# parse({...})
|
11
11
|
# parse(File.open(...))
|
12
12
|
# Parse("...")
|
13
|
-
|
13
|
+
|
14
14
|
def parse(credentials)
|
15
15
|
case credentials
|
16
16
|
when Hash then credentials
|
@@ -19,21 +19,21 @@ module Attached
|
|
19
19
|
else raise ArgumentError.new("credentials must be a hash, file, or string")
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
23
|
-
|
22
|
+
|
23
|
+
|
24
24
|
# Helper for determining options from a file
|
25
25
|
#
|
26
26
|
# Usage:
|
27
27
|
#
|
28
|
-
# options("/images/1.jpg")
|
28
|
+
# options("/images/1.jpg")
|
29
29
|
# options("/images/1.png")
|
30
30
|
# options("/videos/1.mpg")
|
31
31
|
# options("/videos/1.mov")
|
32
|
-
|
32
|
+
|
33
33
|
def options(path)
|
34
34
|
options = {}
|
35
35
|
type = File.extname(path)
|
36
|
-
|
36
|
+
|
37
37
|
case type
|
38
38
|
when /tiff/ then options[:content_type] = "image/tiff"
|
39
39
|
when /tif/ then options[:content_type] = "image/tiff"
|
@@ -59,66 +59,66 @@ module Attached
|
|
59
59
|
when /txt/ then options[:content_type] = "text/plain"
|
60
60
|
when /csv/ then options[:content_type] = "text/csv"
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
return options
|
64
64
|
end
|
65
|
-
|
66
|
-
|
65
|
+
|
66
|
+
|
67
67
|
# Create a new file system storage interface supporting save and destroy operations.
|
68
68
|
#
|
69
69
|
# Usage:
|
70
70
|
#
|
71
71
|
# Base.new()
|
72
|
-
|
72
|
+
|
73
73
|
def initialize(credentials = nil)
|
74
74
|
raise NotImplementedError.new
|
75
75
|
end
|
76
|
-
|
77
|
-
|
76
|
+
|
77
|
+
|
78
78
|
# Access the host for a storage service or return null if local.
|
79
79
|
#
|
80
80
|
# Usage:
|
81
81
|
#
|
82
82
|
# storage.host
|
83
|
-
|
83
|
+
|
84
84
|
def host()
|
85
85
|
raise NotImplementedError.new
|
86
86
|
end
|
87
|
-
|
88
|
-
|
87
|
+
|
88
|
+
|
89
89
|
# Save a file to a given path (abstract).
|
90
90
|
#
|
91
91
|
# Parameters:
|
92
92
|
#
|
93
93
|
# * file - The file to save.
|
94
94
|
# * path - The path to save.
|
95
|
-
|
95
|
+
|
96
96
|
def save(file, path)
|
97
97
|
raise NotImplementedError.new
|
98
98
|
end
|
99
|
-
|
100
|
-
|
99
|
+
|
100
|
+
|
101
101
|
# Retrieve a file from a given path.
|
102
102
|
#
|
103
103
|
# Parameters:
|
104
104
|
#
|
105
105
|
# * path - The path to retrieve.
|
106
|
-
|
106
|
+
|
107
107
|
def retrieve(path)
|
108
108
|
raise NotImplementedError.new
|
109
109
|
end
|
110
|
-
|
111
|
-
|
110
|
+
|
111
|
+
|
112
112
|
# Destroy a file at a given path (abstract).
|
113
113
|
#
|
114
114
|
# Parameters:
|
115
115
|
#
|
116
116
|
# * path - The path to destroy.
|
117
|
-
|
117
|
+
|
118
118
|
def destroy(path)
|
119
119
|
raise NotImplementedError.new
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|
@@ -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 Google < 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::Google.new()
|
27
|
+
# Attached::Storage::Google.new("google.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 'google' for storage" unless @bucket
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
# Access the host (e.g. https://attached.commondatastorage.googleapis.com/) for a storage service.
|
43
|
+
#
|
44
|
+
# Usage:
|
45
|
+
#
|
46
|
+
# storage.host
|
47
|
+
|
48
|
+
def host()
|
49
|
+
"https://#{self.bucket}.commondatastorage.googleapis.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
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
111
|
+
|
112
|
+
|
113
|
+
private
|
114
|
+
|
115
|
+
|
116
|
+
def connection
|
117
|
+
@connection ||= Fog::Storage.new(
|
118
|
+
:google_storage_secret_access_key => self.secret_access_key,
|
119
119
|
:google_storage_access_key_id => self.access_key_id,
|
120
120
|
:provider => 'Google'
|
121
121
|
)
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
127
127
|
end
|
@@ -1,48 +1,48 @@
|
|
1
1
|
require 'attached/storage/base'
|
2
2
|
|
3
3
|
module Attached
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
4
|
+
module Storage
|
5
|
+
class Local < Base
|
6
|
+
|
7
|
+
|
8
|
+
attr_reader :mode
|
9
|
+
|
10
|
+
|
11
|
+
# Create a new interface supporting save and destroy operations.
|
12
|
+
#
|
13
|
+
# Usage:
|
14
|
+
#
|
15
|
+
# Attached::Storage::Local.new()
|
16
|
+
|
17
|
+
def initialize()
|
18
|
+
@mode = 0644
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
# Access the host (e.g. /system/) for a storage service.
|
23
|
+
#
|
24
|
+
# Usage:
|
25
|
+
#
|
26
|
+
# storage.host
|
27
|
+
|
28
|
+
def host()
|
29
|
+
"/system/"
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
33
|
# Save a file to a given path.
|
34
34
|
#
|
35
35
|
# Parameters:
|
36
36
|
#
|
37
37
|
# * file - The file to save.
|
38
38
|
# * path - The path to save.
|
39
|
-
|
39
|
+
|
40
40
|
def save(file, path)
|
41
41
|
path = "#{Rails.root}/public/system/#{path}"
|
42
42
|
dirname, basename = File.split(path)
|
43
|
-
|
43
|
+
|
44
44
|
return if file.path == path
|
45
|
-
|
45
|
+
|
46
46
|
begin
|
47
47
|
FileUtils.mkdir_p(dirname)
|
48
48
|
FileUtils.cp(file.path, path)
|
@@ -50,38 +50,38 @@ module Attached
|
|
50
50
|
rescue Errno::ENOENT
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
54
|
-
|
53
|
+
|
54
|
+
|
55
55
|
# Retrieve a file from a given path.
|
56
56
|
#
|
57
57
|
# Parameters:
|
58
58
|
#
|
59
59
|
# * path - The path to retrieve.
|
60
|
-
|
60
|
+
|
61
61
|
def retrieve(path)
|
62
62
|
path = "#{Rails.root}/public/system/#{path}"
|
63
|
-
|
63
|
+
|
64
64
|
File.open(path)
|
65
65
|
end
|
66
|
-
|
67
|
-
|
66
|
+
|
67
|
+
|
68
68
|
# Destroy a file at a given path.
|
69
69
|
#
|
70
70
|
# Parameters:
|
71
71
|
#
|
72
72
|
# * path - The path to destroy.
|
73
|
-
|
73
|
+
|
74
74
|
def destroy(path)
|
75
75
|
path = "#{Rails.root}/public/system/#{path}"
|
76
76
|
dirname, basename = File.split(path)
|
77
|
-
|
77
|
+
|
78
78
|
begin
|
79
79
|
FileUtils.rm(path)
|
80
80
|
rescue Errno::ENOENT
|
81
81
|
end
|
82
82
|
end
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
83
|
+
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
87
|
end
|