asset_host_core 2.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.markdown +138 -0
  3. data/Rakefile +11 -0
  4. data/app/assets/images/asset_host_core/alert-overlay.png +0 -0
  5. data/app/assets/images/asset_host_core/arrow-left.gif +0 -0
  6. data/app/assets/images/asset_host_core/arrow-right.gif +0 -0
  7. data/app/assets/images/asset_host_core/fallback-img-rect.png +0 -0
  8. data/app/assets/images/asset_host_core/videoplayer-play.png +0 -0
  9. data/app/assets/images/asset_host_core/x.png +0 -0
  10. data/app/assets/javascripts/asset_host_core/admin/assets.js.coffee +221 -0
  11. data/app/assets/javascripts/asset_host_core/application.js +20 -0
  12. data/app/assets/javascripts/asset_host_core/assetadmin.js.coffee +56 -0
  13. data/app/assets/javascripts/asset_host_core/assethost.js.coffee.erb +17 -0
  14. data/app/assets/javascripts/asset_host_core/browserui.js.coffee +139 -0
  15. data/app/assets/javascripts/asset_host_core/chooserui.js.coffee +381 -0
  16. data/app/assets/javascripts/asset_host_core/client.js.coffee +29 -0
  17. data/app/assets/javascripts/asset_host_core/clients/BrightcoveVideo.js.coffee +64 -0
  18. data/app/assets/javascripts/asset_host_core/clients/templates/brightcove_embed.jst.eco +18 -0
  19. data/app/assets/javascripts/asset_host_core/clients/templates/vimeo_embed.jst.eco +1 -0
  20. data/app/assets/javascripts/asset_host_core/clients/templates/youtube_embed.jst.eco +1 -0
  21. data/app/assets/javascripts/asset_host_core/clients/vimeo_video.js.coffee +21 -0
  22. data/app/assets/javascripts/asset_host_core/clients/youtube_video.js.coffee +21 -0
  23. data/app/assets/javascripts/asset_host_core/cmsplugin.js.coffee +235 -0
  24. data/app/assets/javascripts/asset_host_core/models.js.coffee +586 -0
  25. data/app/assets/javascripts/asset_host_core/railsCMS.js.coffee +141 -0
  26. data/app/assets/javascripts/asset_host_core/slideshow.js.coffee +428 -0
  27. data/app/assets/javascripts/asset_host_core/templates/after_upload_button.jst.eco +3 -0
  28. data/app/assets/javascripts/asset_host_core/templates/asset_drop_asset.jst.eco +4 -0
  29. data/app/assets/javascripts/asset_host_core/templates/asset_modal.jst.eco +13 -0
  30. data/app/assets/javascripts/asset_host_core/templates/asset_preview.jst.eco +35 -0
  31. data/app/assets/javascripts/asset_host_core/templates/asset_search.jst.eco +2 -0
  32. data/app/assets/javascripts/asset_host_core/templates/browser_asset.jst.eco +1 -0
  33. data/app/assets/javascripts/asset_host_core/templates/browser_asset_tip.jst.eco +3 -0
  34. data/app/assets/javascripts/asset_host_core/templates/edit_modal.jst.eco +40 -0
  35. data/app/assets/javascripts/asset_host_core/templates/import_help.jst.eco +59 -0
  36. data/app/assets/javascripts/asset_host_core/templates/pagination_link.jst.eco +1 -0
  37. data/app/assets/javascripts/asset_host_core/templates/pagination_links.jst.eco +13 -0
  38. data/app/assets/javascripts/asset_host_core/templates/queued_file.jst.eco +11 -0
  39. data/app/assets/javascripts/asset_host_core/templates/save_and_close_view.jst.eco +4 -0
  40. data/app/assets/javascripts/asset_host_core/templates/upload_all_button.jst.eco +4 -0
  41. data/app/assets/javascripts/asset_host_core/templates/url_input.jst.eco +8 -0
  42. data/app/assets/stylesheets/asset_host_core/application.css.scss +384 -0
  43. data/app/assets/stylesheets/asset_host_core/jquery-ui.css +105 -0
  44. data/app/assets/stylesheets/asset_host_core/public.css.scss +204 -0
  45. data/app/assets/stylesheets/asset_host_core/slidetest.css.scss +93 -0
  46. data/app/controllers/asset_host_core/admin/api_users_controller.rb +72 -0
  47. data/app/controllers/asset_host_core/admin/assets_controller.rb +140 -0
  48. data/app/controllers/asset_host_core/admin/base_controller.rb +36 -0
  49. data/app/controllers/asset_host_core/admin/home_controller.rb +13 -0
  50. data/app/controllers/asset_host_core/admin/outputs_controller.rb +55 -0
  51. data/app/controllers/asset_host_core/api/assets_controller.rb +110 -0
  52. data/app/controllers/asset_host_core/api/base_controller.rb +43 -0
  53. data/app/controllers/asset_host_core/api/outputs_controller.rb +33 -0
  54. data/app/controllers/asset_host_core/application_controller.rb +43 -0
  55. data/app/controllers/asset_host_core/public_controller.rb +104 -0
  56. data/app/models/asset_host_core/api_user.rb +44 -0
  57. data/app/models/asset_host_core/api_user_permission.rb +6 -0
  58. data/app/models/asset_host_core/asset.rb +265 -0
  59. data/app/models/asset_host_core/asset_output.rb +69 -0
  60. data/app/models/asset_host_core/brightcove_video.rb +20 -0
  61. data/app/models/asset_host_core/output.rb +52 -0
  62. data/app/models/asset_host_core/permission.rb +19 -0
  63. data/app/models/asset_host_core/video.rb +8 -0
  64. data/app/models/asset_host_core/vimeo_video.rb +17 -0
  65. data/app/models/asset_host_core/youtube_video.rb +17 -0
  66. data/app/views/asset_host_core/admin/api_users/_form_fields.html.erb +5 -0
  67. data/app/views/asset_host_core/admin/api_users/edit.html.erb +26 -0
  68. data/app/views/asset_host_core/admin/api_users/index.html.erb +31 -0
  69. data/app/views/asset_host_core/admin/api_users/new.html.erb +17 -0
  70. data/app/views/asset_host_core/admin/api_users/show.html.erb +23 -0
  71. data/app/views/asset_host_core/admin/assets/index.html.erb +19 -0
  72. data/app/views/asset_host_core/admin/assets/metadata.html.erb +24 -0
  73. data/app/views/asset_host_core/admin/assets/show.html.erb +86 -0
  74. data/app/views/asset_host_core/admin/home/chooser.html.erb +49 -0
  75. data/app/views/asset_host_core/admin/outputs/_form_fields.html.erb +5 -0
  76. data/app/views/asset_host_core/admin/outputs/edit.html.erb +26 -0
  77. data/app/views/asset_host_core/admin/outputs/index.html.erb +27 -0
  78. data/app/views/asset_host_core/admin/outputs/new.html.erb +13 -0
  79. data/app/views/asset_host_core/admin/outputs/show.html.erb +17 -0
  80. data/app/views/asset_host_core/shared/_footerjs.html.erb +3 -0
  81. data/app/views/asset_host_core/shared/_navbar.html.erb +28 -0
  82. data/app/views/kaminari/_first_page.html.erb +3 -0
  83. data/app/views/kaminari/_gap.html.erb +3 -0
  84. data/app/views/kaminari/_last_page.html.erb +3 -0
  85. data/app/views/kaminari/_next_page.html.erb +3 -0
  86. data/app/views/kaminari/_page.html.erb +3 -0
  87. data/app/views/kaminari/_paginator.html.erb +17 -0
  88. data/app/views/kaminari/_prev_page.html.erb +3 -0
  89. data/app/views/layouts/asset_host_core/application.html.erb +54 -0
  90. data/app/views/layouts/asset_host_core/full_width.html.erb +32 -0
  91. data/app/views/layouts/asset_host_core/minimal.html.erb +45 -0
  92. data/config/initializers/simple_form.rb +142 -0
  93. data/config/initializers/simple_form_bootstrap.rb +45 -0
  94. data/config/locales/simple_form.en.yml +26 -0
  95. data/config/routes.rb +49 -0
  96. data/lib/asset_host_core.rb +38 -0
  97. data/lib/asset_host_core/config.rb +39 -0
  98. data/lib/asset_host_core/engine.rb +94 -0
  99. data/lib/asset_host_core/loaders.rb +34 -0
  100. data/lib/asset_host_core/loaders/asset_host.rb +30 -0
  101. data/lib/asset_host_core/loaders/base.rb +22 -0
  102. data/lib/asset_host_core/loaders/brightcove.rb +67 -0
  103. data/lib/asset_host_core/loaders/flickr.rb +114 -0
  104. data/lib/asset_host_core/loaders/url.rb +59 -0
  105. data/lib/asset_host_core/loaders/vimeo.rb +76 -0
  106. data/lib/asset_host_core/loaders/youtube.rb +90 -0
  107. data/lib/asset_host_core/model_methods.rb +61 -0
  108. data/lib/asset_host_core/paperclip.rb +4 -0
  109. data/lib/asset_host_core/paperclip/asset_thumbnail.rb +92 -0
  110. data/lib/asset_host_core/paperclip/attachment.rb +206 -0
  111. data/lib/asset_host_core/paperclip/trimmer.rb +33 -0
  112. data/lib/asset_host_core/resque_job.rb +13 -0
  113. data/lib/asset_host_core/version.rb +3 -0
  114. data/lib/tasks/asset_host_core_tasks.rake +4 -0
  115. data/spec/controllers/admin/api_users_controller_spec.rb +21 -0
  116. data/spec/controllers/admin/assets_controller_spec.rb +59 -0
  117. data/spec/controllers/admin/home_controller_spec.rb +4 -0
  118. data/spec/controllers/admin/outputs_controller_spec.rb +4 -0
  119. data/spec/controllers/api/assets_controller_spec.rb +133 -0
  120. data/spec/controllers/api/outputs_controller_spec.rb +51 -0
  121. data/spec/controllers/public_controller_spec.rb +4 -0
  122. data/spec/factories.rb +39 -0
  123. data/spec/features/api_users_spec.rb +78 -0
  124. data/spec/fixtures/api/brightcove/video.json +137 -0
  125. data/spec/fixtures/api/flickr/photos_getInfo.json +78 -0
  126. data/spec/fixtures/api/flickr/photos_getSizes.json +82 -0
  127. data/spec/fixtures/api/flickr/photos_licenses_getInfo.json +52 -0
  128. data/spec/fixtures/api/vimeo/video.json +28 -0
  129. data/spec/fixtures/api/youtube/discovery.json +5190 -0
  130. data/spec/fixtures/api/youtube/video.json +44 -0
  131. data/spec/fixtures/images/chipmunk.jpg +0 -0
  132. data/spec/fixtures/images/dude.jpg +0 -0
  133. data/spec/fixtures/images/ernie.jpg +0 -0
  134. data/spec/fixtures/images/fry.png +0 -0
  135. data/spec/fixtures/images/hat.jpg +0 -0
  136. data/spec/fixtures/images/spongebob.png +0 -0
  137. data/spec/fixtures/images/stars.jpg +0 -0
  138. data/spec/internal/app/controllers/application_controller.rb +16 -0
  139. data/spec/internal/app/controllers/sessions_controller.rb +24 -0
  140. data/spec/internal/app/models/user.rb +10 -0
  141. data/spec/internal/app/views/sessions/new.html.erb +14 -0
  142. data/spec/internal/config/database.yml +3 -0
  143. data/spec/internal/config/initializers/assethost_config.rb +57 -0
  144. data/spec/internal/config/routes.rb +7 -0
  145. data/spec/internal/db/combustion_test.sqlite +0 -0
  146. data/spec/internal/db/schema.rb +106 -0
  147. data/spec/internal/log/test.log +14769 -0
  148. data/spec/internal/public/favicon.ico +0 -0
  149. data/spec/internal/public/images/1_27f7745237849975ca90591c1fba5934_original. +0 -0
  150. data/spec/internal/public/images/1_7d33319deca787d5bb3f62ff06563ad2_original. +0 -0
  151. data/spec/internal/public/images/1_b6d48c8b1286104ce76649731e09645f_original. +0 -0
  152. data/spec/internal/public/images/1_b6d48c8b1286104ce76649731e09645f_original.jpg +0 -0
  153. data/spec/internal/public/images/1_b6d48c8b1286104ce76649731e09645f_original.txt +0 -0
  154. data/spec/internal/public/images/1_e179cbd27e07cb55042d0db36cdac095_original. +0 -0
  155. data/spec/internal/public/images/1_e669edd3dfd74be66fc38416e82e3a37_original. +0 -0
  156. data/spec/lib/asset_host_core/loaders/asset_host_spec.rb +33 -0
  157. data/spec/lib/asset_host_core/loaders/brightcove_spec.rb +51 -0
  158. data/spec/lib/asset_host_core/loaders/flickr_spec.rb +72 -0
  159. data/spec/lib/asset_host_core/loaders/url_spec.rb +42 -0
  160. data/spec/lib/asset_host_core/loaders/vimeo_spec.rb +51 -0
  161. data/spec/lib/asset_host_core/loaders/youtube_spec.rb +73 -0
  162. data/spec/lib/asset_host_core/loaders_spec.rb +4 -0
  163. data/spec/lib/asset_host_core/model_methods_spec.rb +4 -0
  164. data/spec/lib/asset_host_core/paperclip/asset_thumbnail_spec.rb +4 -0
  165. data/spec/lib/asset_host_core/paperclip/attachment_spec.rb +4 -0
  166. data/spec/lib/asset_host_core/resque_job_spec.rb +4 -0
  167. data/spec/lib/asset_host_core_spec.rb +4 -0
  168. data/spec/models/api_user_spec.rb +58 -0
  169. data/spec/models/asset_output_spec.rb +4 -0
  170. data/spec/models/asset_spec.rb +4 -0
  171. data/spec/models/output_spec.rb +4 -0
  172. data/spec/models/permission_spec.rb +4 -0
  173. data/spec/spec_helper.rb +30 -0
  174. data/spec/support/fixture_loader.rb +9 -0
  175. data/spec/support/param_helper.rb +14 -0
  176. data/spec/support/permission_matcher.rb +17 -0
  177. data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  178. data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  179. data/vendor/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
  180. data/vendor/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  181. data/vendor/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  182. data/vendor/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  183. data/vendor/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  184. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  185. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  186. data/vendor/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
  187. data/vendor/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
  188. data/vendor/assets/images/jquery-ui/ui-icons_ef8c08_256x240.png +0 -0
  189. data/vendor/assets/images/jquery-ui/ui-icons_ffd27a_256x240.png +0 -0
  190. data/vendor/assets/images/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
  191. data/vendor/assets/javascripts/backbone.js +1158 -0
  192. data/vendor/assets/javascripts/backbone.modelbinding.js +475 -0
  193. data/vendor/assets/javascripts/exif.js +695 -0
  194. data/vendor/assets/javascripts/jquery-ui.js +5614 -0
  195. data/vendor/assets/javascripts/simplemodal.js +698 -0
  196. data/vendor/assets/javascripts/spin.jquery.js +81 -0
  197. data/vendor/assets/javascripts/spin.min.js +1 -0
  198. data/vendor/assets/javascripts/underscore.min.js +1 -0
  199. metadata +658 -0
File without changes
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::Loaders::AssetHost do
4
+ describe '::build_from_url' do
5
+ it "can load from an api url" do
6
+ assethost_root = "#{Rails.application.config.assethost.server}#{AssetHostCore::Engine.mounted_path}"
7
+
8
+ asset = create :asset
9
+ loader = AssetHostCore::Loaders::AssetHost.build_from_url("#{assethost_root}/api/assets/#{asset.id}")
10
+ loader.should_not eq nil
11
+ end
12
+
13
+ it "can load from asset's actual URL" do
14
+ asset = create :asset, url: "http://a.scpr.org/i/b0d21881d4563e38bacbf068d27afc04/59661-small.jpg"
15
+ loader = AssetHostCore::Loaders::AssetHost.build_from_url(asset.url)
16
+ loader.should_not eq nil
17
+ end
18
+
19
+ it "returns nil if the URL doesn't match" do
20
+ loader = AssetHostCore::Loaders::AssetHost.build_from_url("http://nope.com")
21
+ loader.should eq nil
22
+ end
23
+ end
24
+
25
+
26
+ describe '#load' do
27
+ it "just finds the asset from the database and returns it" do
28
+ asset = create :asset, url: "http://a.scpr.org/i/b0d21881d4563e38bacbf068d27afc04/59661-small.jpg"
29
+ loader = AssetHostCore::Loaders::AssetHost.new(id: asset.id, url: asset.url)
30
+ loader.load.should eq asset
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::Loaders::Brightcove do
4
+ describe '::build_from_url' do
5
+ it 'matches a brightcove key' do
6
+ AssetHostCore::Loaders::Brightcove.build_from_url('brightcove:2396253845001').should be_a AssetHostCore::Loaders::Brightcove
7
+ end
8
+
9
+ it 'returns nil for invalid url' do
10
+ AssetHostCore::Loaders::Brightcove.build_from_url('nope.com/nope').should eq nil
11
+ end
12
+ end
13
+
14
+ describe '#load' do
15
+ before :each do
16
+ FakeWeb.register_uri(:get, %r{api\.brightcove\.com},
17
+ content_type: "application/json", body: load_api_response('brightcove/video.json'))
18
+
19
+ FakeWeb.register_uri(:get, %r{brightcove\.vo\.llnwd\.net},
20
+ content_type: "image/jpeg", body: load_image('stars.jpg'))
21
+
22
+ @loader = AssetHostCore::Loaders::Brightcove.build_from_url('brightcove:2396253845001')
23
+ @asset = @loader.load
24
+ end
25
+
26
+ it 'creates a new asset' do
27
+ @asset.should be_a AssetHostCore::Asset
28
+ @asset.persisted?.should eq true
29
+ end
30
+
31
+ it 'sets the native to be a vimeo video' do
32
+ @asset.native.should be_a AssetHostCore::BrightcoveVideo
33
+ end
34
+
35
+ it 'sets the owner' do
36
+ @asset.owner.should match /KPCC/
37
+ end
38
+
39
+ it 'sets the title' do
40
+ @asset.title.should match /NEXT/
41
+ end
42
+
43
+ it 'sets the caption' do
44
+ @asset.caption.should match /Dark Matter/
45
+ end
46
+
47
+ it 'sets the image' do
48
+ @asset.image.should be_a Paperclip::Attachment
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::Loaders::Flickr do
4
+ describe '::build_from_url' do
5
+ it 'matches flickr urls and returns a new loader' do
6
+ loader = AssetHostCore::Loaders::Flickr.build_from_url("http://www.flickr.com/photos/kpcc/123")
7
+ loader.should be_a AssetHostCore::Loaders::Flickr
8
+ loader.id.should eq "123"
9
+
10
+ loader = AssetHostCore::Loaders::Flickr.build_from_url("http://staticflickr.com/999/456_abc")
11
+ loader.should be_a AssetHostCore::Loaders::Flickr
12
+ loader.id.should eq "456"
13
+ end
14
+
15
+ it "returns nil if the URL doesn't match" do
16
+ loader = AssetHostCore::Loaders::Flickr.build_from_url("http://nope.nope/nope")
17
+ loader.should eq nil
18
+ end
19
+
20
+ it 'returns nil if flickr key is not set' do
21
+ AssetHostCore.config.stub(:flickr_api_key) { nil }
22
+ loader = AssetHostCore::Loaders::Flickr.build_from_url("http://staticflickr.com/999/456_abc")
23
+
24
+ loader.should eq nil
25
+ end
26
+ end
27
+
28
+
29
+ describe '#load' do
30
+ context 'flickr success' do
31
+ before :each do
32
+ FakeWeb.register_uri(:get, %r{flickr\.photos\.getInfo},
33
+ content_type: "application/json", body: load_api_response('flickr/photos_getInfo.json'))
34
+
35
+ FakeWeb.register_uri(:get, %r{flickr\.photos\.getSizes},
36
+ content_type: "application/json", body: load_api_response('flickr/photos_getSizes.json'))
37
+
38
+ FakeWeb.register_uri(:get, %r{flickr\.photos\.licenses\.getInfo},
39
+ content_type: "application/json", body: load_api_response('flickr/photos_licenses_getInfo.json'))
40
+
41
+ FakeWeb.register_uri(:get, %r{staticflickr},
42
+ content_type: "image/jpeg", body: load_image('hat.jpg'))
43
+ end
44
+
45
+
46
+ it 'gets the image information from flickr' do
47
+ loader = AssetHostCore::Loaders::Flickr.new(url: "http://staticflickr.com/999/456_abc", id: "456")
48
+ asset = loader.load
49
+
50
+ asset.title.should eq "John's Wayne cowboy hat"
51
+ asset.caption.should eq "This is a cowboy hat."
52
+ asset.owner.should eq "AudioVision"
53
+ end
54
+
55
+ it "uses the last size as the source image" do
56
+ loader = AssetHostCore::Loaders::Flickr.new(url: "http://staticflickr.com/999/456_abc", id: "456")
57
+ loader.should_receive(:image_file).with("http://farm7.staticflickr.com/6112/6238340909_234e5623a1_o.jpg")
58
+ loader.load
59
+ end
60
+ end
61
+
62
+ context 'flickr failure' do
63
+ it "returns nil if photo isn't present" do
64
+ FakeWeb.register_uri(:get, %r{flickr\.photos\.getInfo},
65
+ content_type: "application/json", body: {}.to_json)
66
+
67
+ loader = AssetHostCore::Loaders::Flickr.new(url: "http://static.flickr.com/999/456_abc", id: "456")
68
+ loader.load.should eq nil
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::Loaders::URL do
4
+ describe '::build_from_url' do
5
+ it 'returns a loader if the URL is an image' do
6
+ FakeWeb.register_uri(:get, %r{imgur\.com},
7
+ body: "raw image", content_type: "image/jpeg")
8
+
9
+ loader = AssetHostCore::Loaders::URL.build_from_url("http://imgur.com/a/whatever.jpg")
10
+ loader.should_not eq nil
11
+ end
12
+
13
+ it "returns nil if the URL is not an image" do
14
+ FakeWeb.register_uri(:get, %r{news\.com},
15
+ body: "Not an image!", content_type: "text/html")
16
+
17
+ loader = AssetHostCore::Loaders::URL.build_from_url("http://news.com/whatever.html")
18
+ loader.should eq nil
19
+ end
20
+ end
21
+
22
+ describe '#load' do
23
+ before :each do
24
+ FakeWeb.register_uri(:get, %r{imgur\.com},
25
+ body: load_image('fry.png'), content_type: "image/png")
26
+ end
27
+
28
+ it 'creates and returns an asset' do
29
+ loader = AssetHostCore::Loaders::URL.build_from_url('http://imgur.com/a/whatever.jpg')
30
+ asset = loader.load
31
+ asset.persisted?.should eq true
32
+ asset.image.file?.should eq true
33
+ end
34
+
35
+ it "sets the filename correctly" do
36
+ loader = AssetHostCore::Loaders::URL.build_from_url('http://imgur.com/a/whatever.jpg')
37
+ asset = loader.load
38
+
39
+ asset.title.should eq "whatever.jpg"
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::Loaders::Vimeo do
4
+ describe '::build_from_url' do
5
+ it 'matches a vimeo url' do
6
+ AssetHostCore::Loaders::Vimeo.build_from_url('http://vimeo.com/29695463').should be_a AssetHostCore::Loaders::Vimeo
7
+ end
8
+
9
+ it 'returns nil for invalid url' do
10
+ AssetHostCore::Loaders::Vimeo.build_from_url('nope.com/nope').should eq nil
11
+ end
12
+ end
13
+
14
+ describe '#load' do
15
+ before :each do
16
+ FakeWeb.register_uri(:get, %r{vimeo\.com/api},
17
+ content_type: "application/json", body: load_api_response('vimeo/video.json'))
18
+
19
+ FakeWeb.register_uri(:get, %r{b\.vimeocdn\.com},
20
+ content_type: "image/jpeg", body: load_image('dude.jpg'))
21
+
22
+ @loader = AssetHostCore::Loaders::Vimeo.build_from_url('http://vimeo.com/29695463')
23
+ @asset = @loader.load
24
+ end
25
+
26
+ it 'creates a new asset' do
27
+ @asset.should be_a AssetHostCore::Asset
28
+ @asset.persisted?.should eq true
29
+ end
30
+
31
+ it 'sets the native to be a vimeo video' do
32
+ @asset.native.should be_a AssetHostCore::VimeoVideo
33
+ end
34
+
35
+ it 'sets the owner' do
36
+ @asset.owner.should match /KPCC/
37
+ end
38
+
39
+ it 'sets the title' do
40
+ @asset.title.should match /Lebowski/
41
+ end
42
+
43
+ it 'sets the caption' do
44
+ @asset.caption.should match /Living Lebowski, Dude/
45
+ end
46
+
47
+ it 'sets the image' do
48
+ @asset.image.should be_a Paperclip::Attachment
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::Loaders::YouTube do
4
+ describe '::build_from_url' do
5
+ it 'matches a youtube URL' do
6
+ loader = AssetHostCore::Loaders::YouTube.build_from_url('http://www.youtube.com/watch?v=y8Kyi0WNg40')
7
+ loader.should be_a AssetHostCore::Loaders::YouTube
8
+ end
9
+
10
+ it 'does not match other stuff' do
11
+ loader = AssetHostCore::Loaders::YouTube.build_from_url('nope.com/nope')
12
+ loader.should eq nil
13
+ end
14
+ end
15
+
16
+ describe '#load' do
17
+ before :each do
18
+ FakeWeb.register_uri(:get, %r{googleapis\.com/discovery},
19
+ content_type: "application/json", body: load_api_response('youtube/discovery.json'))
20
+
21
+ FakeWeb.register_uri(:get, %r{googleapis\.com/youtube},
22
+ content_type: "application/json", body: load_api_response('youtube/video.json'))
23
+
24
+ FakeWeb.register_uri(:get, %r{i\.ytimg\.com},
25
+ content_type: "image/jpeg", body: load_image('chipmunk.jpg'))
26
+
27
+ @loader = AssetHostCore::Loaders::YouTube.build_from_url('http://www.youtube.com/watch?v=y8Kyi0WNg40?ah-noTrim')
28
+ end
29
+
30
+ it 'creates a new asset' do
31
+ asset = @loader.load
32
+ asset.should be_a AssetHostCore::Asset
33
+ asset.persisted?.should eq true
34
+ end
35
+
36
+ it 'sets the native to be a youtube video' do
37
+ asset = @loader.load
38
+ asset.native.should be_a AssetHostCore::YoutubeVideo
39
+ end
40
+
41
+ it 'sets the owner' do
42
+ asset = @loader.load
43
+ asset.owner.should match /cregets/
44
+ end
45
+
46
+ it 'sets the title' do
47
+ asset = @loader.load
48
+ asset.title.should eq "Dramatic Chipmunk"
49
+ end
50
+
51
+ it 'sets the caption' do
52
+ asset = @loader.load
53
+ asset.caption.should match /best 5 second clip/
54
+ end
55
+
56
+ it 'sets the image' do
57
+ asset = @loader.load
58
+ asset.image.should be_a Paperclip::Attachment
59
+ end
60
+
61
+ it 'trims letterboxing by default' do
62
+ loader = AssetHostCore::Loaders::YouTube.build_from_url('http://www.youtube.com/watch?v=y8Kyi0WNg40')
63
+ Paperclip::Trimmer.should_receive(:make).and_return(load_image('chipmunk.jpg'))
64
+ loader.load
65
+ end
66
+
67
+ it 'does not trim if requested' do
68
+ no_trim_loader = AssetHostCore::Loaders::YouTube.build_from_url('http://www.youtube.com/watch?v=y8Kyi0WNg40?ah-noTrim')
69
+ Paperclip::Trimmer.should_not_receive(:make)
70
+ no_trim_loader.load
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::Loaders do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::ModelMethods do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe Paperclip::AssetThumbnail do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe Paperclip::Attachment do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::ResqueJob do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore do
4
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::ApiUser do
4
+ describe '::authenticate' do
5
+ it "finds the user by auth token" do
6
+ user = create :api_user, auth_token: "12345"
7
+
8
+ AssetHostCore::ApiUser.authenticate("12345").should eq user
9
+ end
10
+
11
+ it 'does not allow inactive users' do
12
+ user = create :api_user, auth_token: "12345", is_active: false
13
+ AssetHostCore::ApiUser.authenticate("12345").should be_false
14
+ end
15
+
16
+ it 'updates the last_authenticated column' do
17
+ user = create :api_user, auth_token: "12345"
18
+ AssetHostCore::ApiUser.authenticate("12345")
19
+ user.reload.last_authenticated.should be > 1.minute.ago
20
+ end
21
+ end
22
+
23
+ describe "auth token generation" do
24
+ let(:api_user) { build :api_user }
25
+ subject { api_user }
26
+
27
+ context 'before save' do
28
+ its(:auth_token) { should be_blank }
29
+ end
30
+
31
+ context 'on create' do
32
+ before { subject.save! }
33
+ its(:auth_token) { should be_present }
34
+ end
35
+ end
36
+
37
+
38
+ describe '#may?' do
39
+ let(:api_user) { create :api_user }
40
+
41
+ context "when the user has the permission" do
42
+ subject { api_user }
43
+
44
+ before :each do
45
+ api_user.permissions.create(
46
+ :ability => "read",
47
+ :resource => "AssetHostCore::Asset"
48
+ )
49
+ end
50
+
51
+ it { should be_allowed_to :read, "AssetHostCore::Asset" }
52
+ end
53
+
54
+ context "when the user does not have the permission" do
55
+ it { should_not be_allowed_to :read, "AssetHostCore::Asset" }
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::AssetOutput do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe AssetHostCore::Asset do
4
+ end