active_public_resources 0.0.2

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 (66) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +24 -0
  6. data/Guardfile +9 -0
  7. data/LICENSE.txt +18 -0
  8. data/README.md +326 -0
  9. data/Rakefile +7 -0
  10. data/active_public_resources.gemspec +27 -0
  11. data/active_public_resources_config.yml.example +10 -0
  12. data/lib/active_public_resources/base_response_type.rb +11 -0
  13. data/lib/active_public_resources/base_return_type.rb +17 -0
  14. data/lib/active_public_resources/client.rb +22 -0
  15. data/lib/active_public_resources/driver.rb +21 -0
  16. data/lib/active_public_resources/driver_response.rb +15 -0
  17. data/lib/active_public_resources/drivers/khan_academy.rb +143 -0
  18. data/lib/active_public_resources/drivers/quizlet.rb +92 -0
  19. data/lib/active_public_resources/drivers/schooltube.rb +99 -0
  20. data/lib/active_public_resources/drivers/vimeo.rb +181 -0
  21. data/lib/active_public_resources/drivers/youtube.rb +113 -0
  22. data/lib/active_public_resources/request_criteria.rb +51 -0
  23. data/lib/active_public_resources/response_types/exercise.rb +11 -0
  24. data/lib/active_public_resources/response_types/folder.rb +18 -0
  25. data/lib/active_public_resources/response_types/image.rb +11 -0
  26. data/lib/active_public_resources/response_types/quiz.rb +11 -0
  27. data/lib/active_public_resources/response_types/video.rb +12 -0
  28. data/lib/active_public_resources/return_types/file.rb +11 -0
  29. data/lib/active_public_resources/return_types/iframe.rb +11 -0
  30. data/lib/active_public_resources/return_types/image_url.rb +11 -0
  31. data/lib/active_public_resources/return_types/oembed.rb +11 -0
  32. data/lib/active_public_resources/return_types/url.rb +11 -0
  33. data/lib/active_public_resources/version.rb +3 -0
  34. data/lib/active_public_resources.rb +55 -0
  35. data/spec/lib/active_public_resources/client_spec.rb +75 -0
  36. data/spec/lib/active_public_resources/driver_spec.rb +48 -0
  37. data/spec/lib/active_public_resources/drivers/khan_academy_spec.rb +106 -0
  38. data/spec/lib/active_public_resources/drivers/quizlet_spec.rb +50 -0
  39. data/spec/lib/active_public_resources/drivers/schooltube_spec.rb +50 -0
  40. data/spec/lib/active_public_resources/drivers/vimeo_spec.rb +71 -0
  41. data/spec/lib/active_public_resources/drivers/youtube_spec.rb +52 -0
  42. data/spec/lib/active_public_resources/live_client_spec.rb +91 -0
  43. data/spec/lib/active_public_resources/request_criteria_spec.rb +53 -0
  44. data/spec/spec_helper.rb +46 -0
  45. data/spec/vcr/active_public_resources/client/khan_academy_should_traverse_folders.yml +1039 -0
  46. data/spec/vcr/active_public_resources/client/quizlet_should_perform_request.yml +70 -0
  47. data/spec/vcr/active_public_resources/client/shooltube_should_perform_request.yml +815 -0
  48. data/spec/vcr/active_public_resources/client/vimeo_should_perform_request.yml +70 -0
  49. data/spec/vcr/active_public_resources/client/youtube_should_perform_request.yml +212 -0
  50. data/spec/vcr/active_public_resources/drivers/khan_academy_driver_perform_request/should_get_folder_cs/programming.yml +117 -0
  51. data/spec/vcr/active_public_resources/drivers/khan_academy_driver_perform_request/should_get_folder_cs.yml +72 -0
  52. data/spec/vcr/active_public_resources/drivers/khan_academy_driver_perform_request/should_get_folder_science/mcat/society_and_culture/social_structures.yml +578 -0
  53. data/spec/vcr/active_public_resources/drivers/khan_academy_driver_perform_request/should_get_root_folders.yml +122 -0
  54. data/spec/vcr/active_public_resources/drivers/khan_academy_perform_request/should_get_folder_cs/programming.yml +120 -0
  55. data/spec/vcr/active_public_resources/drivers/khan_academy_perform_request/should_get_folder_cs.yml +73 -0
  56. data/spec/vcr/active_public_resources/drivers/khan_academy_perform_request/should_get_folder_science/mcat/society_and_culture/social_structures.yml +577 -0
  57. data/spec/vcr/active_public_resources/drivers/khan_academy_perform_request/should_get_root_folders.yml +119 -0
  58. data/spec/vcr/active_public_resources/drivers/quizlet_driver_perform_request/should_perform_request.yml +75 -0
  59. data/spec/vcr/active_public_resources/drivers/quizlet_perform_request/should_perform_request.yml +72 -0
  60. data/spec/vcr/active_public_resources/drivers/schooltube_driver_perform_request/should_perform_request.yml +815 -0
  61. data/spec/vcr/active_public_resources/drivers/schooltube_perform_request/should_perform_request.yml +810 -0
  62. data/spec/vcr/active_public_resources/drivers/vimeo_driver_perform_request/should_perform_request.yml +279 -0
  63. data/spec/vcr/active_public_resources/drivers/vimeo_perform_request/should_perform_request.yml +70 -0
  64. data/spec/vcr/active_public_resources/drivers/youtube_driver_perform_request/should_perform_request.yml +212 -0
  65. data/spec/vcr/active_public_resources/drivers/youtube_perform_request/should_perform_request.yml +209 -0
  66. metadata +182 -0
@@ -0,0 +1,18 @@
1
+ module ActivePublicResources
2
+ module ResponseTypes
3
+ class Folder < BaseResponseType
4
+ attr_accessor :parent_id, :videos, :exercises, :images
5
+
6
+ def initialize
7
+ super
8
+ @videos = []
9
+ @exercises = []
10
+ @images = []
11
+ end
12
+
13
+ def kind
14
+ 'folder'
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ module ActivePublicResources
2
+ module ResponseTypes
3
+ class Image < BaseResponseType
4
+ attr_accessor :url, :width, :height
5
+
6
+ def kind
7
+ 'image'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ActivePublicResources
2
+ module ResponseTypes
3
+ class Quiz < BaseResponseType
4
+ attr_accessor :url, :term_count, :created_date, :has_images, :subjects
5
+
6
+ def kind
7
+ 'quiz'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module ActivePublicResources
2
+ module ResponseTypes
3
+ class Video < BaseResponseType
4
+ attr_accessor :thumbnail_url, :url, :duration, :width, :height, :username,
5
+ :num_views, :num_likes, :num_comments, :created_date
6
+
7
+ def kind
8
+ 'video'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ module ActivePublicResources
2
+ module ReturnTypes
3
+ class File < BaseReturnType
4
+ attr_accessor :text, :content_type
5
+
6
+ def return_type
7
+ 'file'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ActivePublicResources
2
+ module ReturnTypes
3
+ class Iframe < BaseReturnType
4
+ attr_accessor :title, :width, :height
5
+
6
+ def return_type
7
+ 'iframe'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ActivePublicResources
2
+ module ReturnTypes
3
+ class ImageUrl < BaseReturnType
4
+ attr_accessor :text, :width, :height
5
+
6
+ def return_type
7
+ 'image_url'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ActivePublicResources
2
+ module ReturnTypes
3
+ class Oembed < BaseReturnType
4
+ attr_accessor :endpoint
5
+
6
+ def return_type
7
+ 'oembed'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ActivePublicResources
2
+ module ReturnTypes
3
+ class Url < BaseReturnType
4
+ attr_accessor :text, :title, :target
5
+
6
+ def return_type
7
+ 'url'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module ActivePublicResources
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,55 @@
1
+ require "active_support"
2
+ require "active_support/core_ext/object/blank"
3
+ require "active_support/core_ext/string/inflections"
4
+ require "active_public_resources/version"
5
+ require "active_public_resources/client"
6
+ require "active_public_resources/request_criteria"
7
+
8
+ # Drivers
9
+ require "active_public_resources/driver"
10
+ require "active_public_resources/driver_response"
11
+ require "active_public_resources/drivers/vimeo"
12
+ require "active_public_resources/drivers/youtube"
13
+ require "active_public_resources/drivers/schooltube"
14
+ require "active_public_resources/drivers/khan_academy"
15
+ require "active_public_resources/drivers/quizlet"
16
+
17
+ # Return Types
18
+ require "active_public_resources/base_return_type"
19
+ require "active_public_resources/return_types/file"
20
+ require "active_public_resources/return_types/iframe"
21
+ require "active_public_resources/return_types/image_url"
22
+ require "active_public_resources/return_types/oembed"
23
+ require "active_public_resources/return_types/url"
24
+
25
+ # Response Types
26
+ require "active_public_resources/base_response_type"
27
+ require "active_public_resources/response_types/video"
28
+ require "active_public_resources/response_types/image"
29
+ require "active_public_resources/response_types/exercise"
30
+ require "active_public_resources/response_types/folder"
31
+ require "active_public_resources/response_types/quiz"
32
+
33
+ module ActivePublicResources
34
+ def self.root
35
+ File.expand_path '../..', __FILE__
36
+ end
37
+
38
+ def self.symbolize_keys(hash)
39
+ hash.inject({}){|result, (key, value)|
40
+ new_key = case key
41
+ when String then key.to_sym
42
+ else key
43
+ end
44
+ new_value = case value
45
+ when Hash then symbolize_keys(value)
46
+ when Array then value.map{ |v| v.is_a?(Hash) ? symbolize_keys(v) : v }
47
+ else value
48
+ end
49
+ result[new_key] = new_value
50
+ result
51
+ }
52
+ end
53
+ end
54
+
55
+ APR = ActivePublicResources
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe APR::Client do
4
+
5
+ let(:client) { APR::Client.new(config_data) }
6
+ let(:criteria) { APR::RequestCriteria.new({ :query => "education" }) }
7
+
8
+ describe ".initialize" do
9
+ it "requires valid config as initialize params" do
10
+ expect {
11
+ APR::Client.new
12
+ }.to raise_error(ArgumentError, "key/value pair must be provided")
13
+ end
14
+
15
+ it "with valid config" do
16
+ client.initialized_drivers.should include :vimeo
17
+ end
18
+ end
19
+
20
+ describe "vimeo" do
21
+ it "should perform request", :vcr, :record => :none do
22
+ results = client.perform_request(:vimeo, criteria)
23
+ next_criteria = results.next_criteria
24
+ next_criteria.page.should eq(2)
25
+ next_criteria.per_page.should eq(25)
26
+ results.total_items.should eq(141538)
27
+ results.items.length.should eq(25)
28
+ end
29
+ end
30
+
31
+ describe "youtube" do
32
+ it "should perform request", :vcr, :record => :none do
33
+ results = client.perform_request(:youtube, criteria)
34
+ next_criteria = results.next_criteria
35
+ next_criteria.page.should eq(2)
36
+ next_criteria.per_page.should eq(25)
37
+ results.total_items.should eq(1000000)
38
+ results.items.length.should eq(25)
39
+ end
40
+ end
41
+
42
+ describe "shooltube" do
43
+ it "should perform request", :vcr, :record => :none do
44
+ results = client.perform_request(:schooltube, criteria)
45
+ next_criteria = results.next_criteria
46
+ next_criteria.page.should eq(2)
47
+ next_criteria.per_page.should eq(25)
48
+ results.items.length.should eq(25)
49
+ end
50
+ end
51
+
52
+ describe "khan_academy" do
53
+ it "should traverse folders", :vcr, :record => :none do
54
+ results = client.perform_request(:khan_academy, criteria)
55
+ results.items.length.should eq(14)
56
+
57
+ folder = results.items.first
58
+ rc_2 = APR::RequestCriteria.new({ folder: folder.id });
59
+ results_2 = client.perform_request(:khan_academy, rc_2)
60
+ results_2.items.length.should eq(30)
61
+ results_2.items.map(&:kind).uniq.should eq(['video'])
62
+ end
63
+ end
64
+
65
+ describe "quizlet" do
66
+ it "should perform request", :vcr, :record => :none do
67
+ results = client.perform_request(:quizlet, criteria)
68
+ next_criteria = results.next_criteria
69
+ next_criteria.page.should eq(2)
70
+ next_criteria.per_page.should eq(25)
71
+ results.items.length.should eq(25)
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe APR::Drivers::Driver do
4
+
5
+ it "should raises NotImplementedError" do
6
+ class APR::Drivers::Foo < APR::Drivers::Driver
7
+ end
8
+ [:perform_request].each do |mthd|
9
+ expect {
10
+ APR::Drivers::Foo.new.send(mthd)
11
+ }.to raise_error(NotImplementedError)
12
+ end
13
+ end
14
+
15
+ it "should not raise error when methods are overridden" do
16
+ class APR::Drivers::Foo < APR::Drivers::Driver
17
+ def perform_request(*args); end
18
+ end
19
+ [:perform_request].each do |mthd|
20
+ expect {
21
+ APR::Drivers::Foo.new.send(mthd)
22
+ }.not_to raise_error
23
+ end
24
+ end
25
+
26
+ describe "#validate_options" do
27
+ before :each do
28
+ class APR::Drivers::Foo < APR::Drivers::Driver
29
+ def initialize(opts={})
30
+ validate_options(opts, [:a, :b, :c])
31
+ end
32
+ end
33
+ end
34
+
35
+ it "should raise error when options are not valid" do
36
+ expect {
37
+ APR::Drivers::Foo.new
38
+ }.to raise_error(ArgumentError)
39
+ end
40
+
41
+ it "should not raise error when options are valid" do
42
+ expect {
43
+ APR::Drivers::Foo.new({ a: 'x', b: 'y', c: 'z' })
44
+ }.not_to raise_error
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+ describe APR::Drivers::KhanAcademy do
4
+
5
+ let(:driver) { APR::Drivers::KhanAcademy.new }
6
+
7
+ describe "#perform_request" do
8
+ it "should get root folders", :vcr, :record => :none do
9
+ search_criteria = APR::RequestCriteria.new
10
+ results = driver.perform_request(search_criteria)
11
+ results.total_items.should eq(14)
12
+ results.items.length.should eq(14)
13
+ results.next_criteria.should be_nil
14
+
15
+ folder = results.items.first
16
+ folder.id.should eq("new-and-noteworthy")
17
+ folder.title.should eq("New and noteworthy")
18
+ folder.parent_id.should be_nil
19
+ end
20
+
21
+ it "should get folder: cs", :vcr, :record => :none do
22
+ search_criteria = APR::RequestCriteria.new(
23
+ { folder: "cs" }
24
+ )
25
+ results = driver.perform_request(search_criteria)
26
+ results.total_items.should eq(1)
27
+ results.items.length.should eq(1)
28
+ results.next_criteria.should be_nil
29
+
30
+ folder = results.items.first
31
+ folder.id.should eq("programming")
32
+ folder.title.should eq("Drawing and animation")
33
+ folder.parent_id.should eq("root")
34
+ end
35
+
36
+ it "should get folder: cs/programming", :vcr, :record => :none do
37
+ search_criteria = APR::RequestCriteria.new(
38
+ { folder: "programming" }
39
+ )
40
+ results = driver.perform_request(search_criteria)
41
+ results.total_items.should eq(12)
42
+ results.items.length.should eq(12)
43
+ results.next_criteria.should be_nil
44
+
45
+ folder = results.items.first
46
+ folder.id.should eq("intro-to-programming")
47
+ folder.title.should eq("Intro to programming")
48
+ folder.parent_id.should eq("cs")
49
+ end
50
+
51
+ it "should get folder: science/mcat/society-and-culture/social-structures", :vcr, :record => :none do
52
+ search_criteria = APR::RequestCriteria.new(
53
+ { folder: "social-structures" }
54
+ )
55
+ results = driver.perform_request(search_criteria)
56
+ results.total_items.should eq(8)
57
+ results.items.length.should eq(8)
58
+ results.next_criteria.should be_nil
59
+
60
+ videos = results.items.find_all { |item| item.kind == "video" }
61
+ videos.length.should be(6)
62
+ video = videos.first
63
+ video.kind.should eq("video")
64
+ video.title.should eq("Institutions")
65
+ video.description.should match /Institutions are structures of society/
66
+ video.thumbnail_url.should eq("https://img.youtube.com/vi/9KR1bad76qg/hqdefault.jpg")
67
+ video.url.should eq("http://www.youtube.com/watch?v=9KR1bad76qg&feature=youtube_gdata_player")
68
+ video.duration.should eq(207)
69
+ video.num_views.should eq(0)
70
+ video.num_likes.should eq(0)
71
+ video.num_comments.should eq(0)
72
+ video.created_date.strftime("%Y-%m-%d").should eq("2013-10-10")
73
+ video.username.should eq("Sydney Brown")
74
+
75
+ rt_url = video.return_types[0]
76
+ rt_url.return_type.should eq('url')
77
+ rt_url.url.should eq("http://www.youtube.com/watch?v=9KR1bad76qg&feature=youtube_gdata_player")
78
+ rt_url.title.should eq("Institutions")
79
+
80
+ rt_iframe = video.return_types[1]
81
+ rt_iframe.return_type.should eq('iframe')
82
+ rt_iframe.url.should eq("//www.youtube.com/embed/9KR1bad76qg?feature=oembed")
83
+ rt_url.title.should eq("Institutions")
84
+
85
+ video.width.should eq(640)
86
+ video.height.should eq(360)
87
+
88
+ exercises = results.items.find_all { |item| item.kind == "exercise" }
89
+ exercises.length.should be(2)
90
+ exercise = exercises.first
91
+ exercise.kind.should eq("exercise")
92
+ exercise.id.should eq("exd53ad0de")
93
+ exercise.title.should eq("Social structures - Passage 1")
94
+ exercise.thumbnail_url.should eq("https://ka-exercise-screenshots.s3.amazonaws.com/social-structures---passage-1_256.png")
95
+ exercise.url.should eq("http://www.khanacademy.org/exercise/social-structures---passage-1")
96
+
97
+ ex_rt_url = exercise.return_types[0]
98
+ ex_rt_url.return_type.should eq('url')
99
+ ex_rt_url.url.should eq("http://www.khanacademy.org/exercise/social-structures---passage-1")
100
+ ex_rt_url.title.should eq("Social structures - Passage 1")
101
+
102
+ exercise.return_types
103
+ end
104
+ end
105
+
106
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe APR::Drivers::Quizlet do
4
+
5
+ let(:driver) { APR::Drivers::Quizlet.new(config_data[:quizlet]) }
6
+
7
+ describe ".initialize" do
8
+ it "should throw error when intializing without proper config options" do
9
+ expect {
10
+ APR::Drivers::Quizlet.new
11
+ }.to raise_error(ArgumentError)
12
+ end
13
+ end
14
+
15
+ describe "#perform_request" do
16
+ it "should raise error when perform_request method is called without a query" do
17
+ expect {
18
+ driver.perform_request(APR::RequestCriteria.new)
19
+ }.to raise_error(StandardError, "must include query")
20
+ end
21
+
22
+ it "should perform request", :vcr, :record => :none do
23
+ search_criteria = APR::RequestCriteria.new({:query => "dogs"})
24
+ results = driver.perform_request(search_criteria)
25
+
26
+ next_criteria = results.next_criteria
27
+ next_criteria.page.should eq(2)
28
+ next_criteria.per_page.should eq(25)
29
+ results.items.length.should eq(25)
30
+
31
+ quiz = results.items.first
32
+ quiz.kind.should eq("quiz")
33
+ quiz.title.should eq("Dogs")
34
+ quiz.description.should eq("DOGS, DOGS, DOGS!!!!!!!!")
35
+ quiz.url.should eq("http://quizlet.com/23752218/dogs-flash-cards/")
36
+ quiz.created_date.strftime("%Y-%m-%d").should eq("2013-05-25")
37
+
38
+ quiz.return_types.map(&:url).should eq([
39
+ "http://quizlet.com/23752218/dogs-flash-cards/",
40
+ "https://quizlet.com/23752218/flashcards/embedv2",
41
+ "https://quizlet.com/23752218/learn/embedv2",
42
+ "https://quizlet.com/23752218/scatter/embedv2",
43
+ "https://quizlet.com/23752218/speller/embedv2",
44
+ "https://quizlet.com/23752218/test/embedv2",
45
+ "https://quizlet.com/23752218/spacerace/embedv2"
46
+ ])
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe APR::Drivers::Schooltube do
4
+
5
+ let(:driver) { APR::Drivers::Schooltube.new }
6
+
7
+ describe "#perform_request" do
8
+ it "should raise error when perform_request method is called without a query" do
9
+ expect {
10
+ driver.perform_request(APR::RequestCriteria.new)
11
+ }.to raise_error(StandardError, "must include query")
12
+ end
13
+
14
+ it "should perform request", :vcr, :record => :none do
15
+ search_criteria = APR::RequestCriteria.new({:query => "education"})
16
+ results = driver.perform_request(search_criteria)
17
+ next_criteria = results.next_criteria
18
+ next_criteria.page.should eq(2)
19
+ next_criteria.per_page.should eq(25)
20
+ results.items.length.should eq(25)
21
+
22
+ item = results.items.first
23
+ item.kind.should eq("video")
24
+ item.title.should eq("Fun - Educational School Trips - Call American Tours & Travel")
25
+ item.description.should match /customizing your next student/
26
+ item.thumbnail_url.should eq("http://schooltube-thumbnails.s3.amazonaws.com/c5/c3/dd/df/9c/f6/c5c3dddf-9cf6-c0e5-db1f-898f89c301e2.jpg")
27
+ item.url.should eq("http://bit.ly/pk3Sxs")
28
+ item.duration.should eq(102)
29
+ item.num_views.should eq(3513)
30
+ item.num_likes.should eq(0)
31
+ item.num_comments.should eq(0)
32
+ item.created_date.strftime("%Y-%m-%d").should eq("2009-11-12")
33
+ item.username.should eq("StudentGroupTravel")
34
+
35
+ rt_url = item.return_types[0]
36
+ rt_url.return_type.should eq('url')
37
+ rt_url.url.should eq("http://bit.ly/pk3Sxs")
38
+ rt_url.title.should eq("Fun - Educational School Trips - Call American Tours & Travel")
39
+
40
+ rt_iframe = item.return_types[1]
41
+ rt_iframe.return_type.should eq('iframe')
42
+ rt_iframe.url.should eq("//www.schooltube.com/embed/60f374fdba394a70b4ad")
43
+ rt_url.title.should eq("Fun - Educational School Trips - Call American Tours & Travel")
44
+
45
+ item.width.should eq(640)
46
+ item.height.should eq(360)
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe APR::Drivers::Vimeo do
4
+
5
+ let(:driver) { APR::Drivers::Vimeo.new(config_data[:vimeo]) }
6
+
7
+ describe ".initialize" do
8
+ it "should throw error when intializing without proper config options" do
9
+ expect {
10
+ APR::Drivers::Vimeo.new
11
+ }.to raise_error(ArgumentError)
12
+ end
13
+
14
+ it "should build a vimeo client on initialize" do
15
+ driver.client.should be_an_instance_of(::Vimeo::Advanced::Video)
16
+ end
17
+ end
18
+
19
+ describe "#perform_request" do
20
+ it "should raise error when perform_request method is called without a query" do
21
+ expect {
22
+ driver.perform_request(APR::RequestCriteria.new)
23
+ }.to raise_error(StandardError, "must include query")
24
+ end
25
+
26
+ it "should raise error when client has not been set" do
27
+ driver.instance_variable_set("@client", nil)
28
+ search_criteria = APR::RequestCriteria.new({:query => "education"})
29
+ expect {
30
+ driver.perform_request(search_criteria)
31
+ }.to raise_error(StandardError, "driver has not been initialized properly")
32
+ end
33
+
34
+ it "should perform request", :vcr, :record => :none do
35
+ search_criteria = APR::RequestCriteria.new({:query => "education"})
36
+ results = driver.perform_request(search_criteria)
37
+ next_criteria = results.next_criteria
38
+ next_criteria.page.should eq(2)
39
+ next_criteria.per_page.should eq(25)
40
+ results.total_items.should eq(145819)
41
+ results.items.length.should eq(25)
42
+
43
+ item = results.items.first
44
+ item.kind.should eq("video")
45
+ item.title.should eq("Kynect 'education'")
46
+ item.description.should match /Character Design/
47
+ item.thumbnail_url.should eq("http://b.vimeocdn.com/ts/440/661/440661028_100.jpg")
48
+ item.url.should eq("http://vimeo.com/67741947")
49
+ item.duration.should eq(30)
50
+ item.num_views.should eq(16593)
51
+ item.num_likes.should eq(911)
52
+ item.num_comments.should eq(39)
53
+ item.created_date.strftime("%Y-%m-%d").should eq("2013-06-05")
54
+ item.username.should eq("Jens & Anna")
55
+
56
+ rt_url = item.return_types[0]
57
+ rt_url.return_type.should eq('url')
58
+ rt_url.url.should eq("http://vimeo.com/67741947")
59
+ rt_url.title.should eq("Kynect 'education'")
60
+
61
+ rt_iframe = item.return_types[1]
62
+ rt_iframe.return_type.should eq('iframe')
63
+ rt_iframe.url.should eq("//player.vimeo.com/video/67741947")
64
+ rt_url.title.should eq("Kynect 'education'")
65
+
66
+ item.width.should eq(640)
67
+ item.height.should eq(360)
68
+ end
69
+ end
70
+
71
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe APR::Drivers::Youtube do
4
+
5
+ let(:driver) { APR::Drivers::Youtube.new }
6
+
7
+ describe "#perform_request" do
8
+ it "should raise error when perform_request method is called without a query" do
9
+ expect {
10
+ driver.perform_request(APR::RequestCriteria.new)
11
+ }.to raise_error(StandardError, "must include query")
12
+ end
13
+
14
+ it "should perform request", :vcr, :record => :none do
15
+ search_criteria = APR::RequestCriteria.new({:query => "education"})
16
+ results = driver.perform_request(search_criteria)
17
+ next_criteria = results.next_criteria
18
+ next_criteria.page.should eq(2)
19
+ next_criteria.per_page.should eq(25)
20
+ results.total_items.should eq(1000000)
21
+ results.items.length.should eq(25)
22
+
23
+ item = results.items.first
24
+ item.kind.should eq("video")
25
+ item.title.should eq("Why I Hate School But Love Education||Spoken Word")
26
+ item.description.should match /The Latest Spoken Word/
27
+ item.thumbnail_url.should eq("https://i.ytimg.com/vi/y_ZmM7zPLyI/default.jpg")
28
+ item.url.should eq("https://www.youtube.com/watch?v=y_ZmM7zPLyI&feature=youtube_gdata_player")
29
+ item.duration.should eq(368)
30
+ item.num_views.should eq(4228173)
31
+ item.num_likes.should eq(101737)
32
+ item.num_comments.should eq(17837)
33
+ item.created_date.strftime("%Y-%m-%d").should eq("2012-12-02")
34
+ item.username.should eq("sulibreezy")
35
+ item.return_types.count.should eq(2)
36
+
37
+ rt_url = item.return_types[0]
38
+ rt_url.return_type.should eq('url')
39
+ rt_url.url.should eq("https://www.youtube.com/watch?v=y_ZmM7zPLyI&feature=youtube_gdata_player")
40
+ rt_url.title.should eq("Why I Hate School But Love Education||Spoken Word")
41
+
42
+ rt_iframe = item.return_types[1]
43
+ rt_iframe.return_type.should eq('iframe')
44
+ rt_iframe.url.should eq("//www.youtube.com/embed/y_ZmM7zPLyI?feature=oembed")
45
+ rt_url.title.should eq("Why I Hate School But Love Education||Spoken Word")
46
+
47
+ item.width.should eq(640)
48
+ item.height.should eq(360)
49
+ end
50
+ end
51
+
52
+ end