active_public_resources 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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,91 @@
1
+ # To run this spec from the command line, use
2
+ # $ rspec --tag live_api
3
+
4
+ require 'spec_helper'
5
+
6
+ describe APR::Client, :live_api => true do
7
+
8
+ let(:client) { APR::Client.new(config_data) }
9
+ let(:criteria) { APR::RequestCriteria.new({ :query => "learn" }) }
10
+
11
+ describe "Vimeo" do
12
+ it "performs initial and subsequent requests" do
13
+ results = nil
14
+
15
+ results = client.perform_request(:vimeo, criteria)
16
+ next_criteria = results.next_criteria
17
+ next_criteria.page.should eq(2)
18
+ next_criteria.per_page.should eq(25)
19
+ results.total_items.should > 25
20
+ results.items.length.should eq(25)
21
+
22
+ next_results = client.perform_request(:vimeo, results.next_criteria)
23
+ next_results.next_criteria.page.should eq(3)
24
+ next_results.items.first.id.should_not eq(results.items.first.id)
25
+ end
26
+ end
27
+
28
+ describe "Youtube" do
29
+ it "performs initial and subsequent requests" do
30
+ results = nil
31
+
32
+ results = client.perform_request(:youtube, criteria)
33
+ next_criteria = results.next_criteria
34
+ next_criteria.page.should eq(2)
35
+ next_criteria.per_page.should eq(25)
36
+ results.total_items.should > 25
37
+ results.items.length.should eq(25)
38
+
39
+ next_results = client.perform_request(:youtube, results.next_criteria)
40
+ next_results.next_criteria.page.should eq(3)
41
+ next_results.items.first.id.should_not eq(results.items.first.id)
42
+ end
43
+ end
44
+
45
+ describe "Schooltube" do
46
+ it "performs initial and subsequent requests" do
47
+ results = nil
48
+
49
+ results = client.perform_request(:schooltube, criteria)
50
+ next_criteria = results.next_criteria
51
+ next_criteria.page.should eq(2)
52
+ next_criteria.per_page.should eq(25)
53
+ results.items.length.should eq(25)
54
+
55
+ next_results = client.perform_request(:schooltube, results.next_criteria)
56
+ next_results.next_criteria.page.should eq(3)
57
+ next_results.items.first.id.should_not eq(results.items.first.id)
58
+ end
59
+ end
60
+
61
+ describe "Khan Academy" do
62
+ it "performs initial and subsequent requests" do
63
+ results = nil
64
+
65
+ root_folder = client.perform_request(:khan_academy, criteria)
66
+ root_folder.items.length.should eq(14)
67
+
68
+ sub_folder = root_folder.items.first
69
+ rc_2 = APR::RequestCriteria.new({ folder: sub_folder.id });
70
+ results_2 = client.perform_request(:khan_academy, rc_2)
71
+ results_2.items.length.should eq(30)
72
+ results_2.items.map(&:kind).uniq.should eq(['video'])
73
+ end
74
+ end
75
+
76
+ describe "Quizlet" do
77
+ it "performs initial and subsequent requests" do
78
+ results = nil
79
+
80
+ results = client.perform_request(:quizlet, criteria)
81
+ next_criteria = results.next_criteria
82
+ next_criteria.page.should eq(2)
83
+ next_criteria.per_page.should eq(25)
84
+ results.items.length.should eq(25)
85
+
86
+ next_results = client.perform_request(:quizlet, results.next_criteria)
87
+ next_results.next_criteria.page.should eq(3)
88
+ next_results.items.first.id.should_not eq(results.items.first.id)
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe APR::RequestCriteria do
4
+
5
+ let(:criteria) { APR::RequestCriteria.new }
6
+
7
+ it "should set attrs as values on initialize" do
8
+ @request_criteria = APR::RequestCriteria.new({
9
+ :query => "education",
10
+ :page => 3,
11
+ :per_page => 15,
12
+ :sort => APR::RequestCriteria::SORT_RELEVANCE,
13
+ :content_filter => APR::RequestCriteria::CONTENT_FILTER_NONE
14
+ })
15
+ @request_criteria.query.should eq("education")
16
+ @request_criteria.page.should eq(3)
17
+ @request_criteria.per_page.should eq(15)
18
+ @request_criteria.sort.should eq(APR::RequestCriteria::SORT_RELEVANCE)
19
+ @request_criteria.content_filter.should eq(APR::RequestCriteria::CONTENT_FILTER_NONE)
20
+ end
21
+
22
+ describe "#validate_options" do
23
+ it "should raise error when options are not present" do
24
+ expect {
25
+ criteria.validate_presence!([:query])
26
+ }.to raise_error(ArgumentError)
27
+ end
28
+
29
+ it "should not raise error when options are present" do
30
+ criteria.query = "education"
31
+ expect {
32
+ criteria.validate_presence!([:query])
33
+ }.to_not raise_error
34
+ end
35
+ end
36
+
37
+ it "should validate sort" do
38
+ expect {
39
+ criteria.sort = "whatever"
40
+ }.to raise_error(ArgumentError, "is invalid. Must be in [relevance, recent, popular]")
41
+
42
+ expect { criteria.sort = APR::RequestCriteria::SORT_RELEVANCE }.to_not raise_error
43
+ end
44
+
45
+ it "should validate sort" do
46
+ expect {
47
+ criteria.content_filter = "whatever"
48
+ }.to raise_error(ArgumentError, "is invalid. Must be in [none, strict]")
49
+
50
+ expect { criteria.content_filter = APR::RequestCriteria::CONTENT_FILTER_NONE }.to_not raise_error
51
+ end
52
+
53
+ end
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift File.expand_path('../../lib', __FILE__)
3
+
4
+ begin
5
+ require 'rubygems'
6
+ require 'bundler'
7
+ Bundler.setup
8
+ rescue LoadError => e
9
+ puts "Error loading bundler (#{e.message}): \"gem install bundler\" for bundler support."
10
+ end
11
+
12
+ require 'active_public_resources'
13
+ require 'vcr'
14
+ require 'pry'
15
+
16
+ def config_data
17
+ yaml_path = File.join(ActivePublicResources.root, 'active_public_resources_config.yml')
18
+ unless File.exist? yaml_path
19
+ yaml_path = File.join(ActivePublicResources.root, 'active_public_resources_config.yml.example')
20
+ end
21
+ config = YAML::load(File.read(yaml_path))
22
+ ActivePublicResources.symbolize_keys(config)
23
+ end
24
+
25
+ VCR.configure do |c|
26
+ c.cassette_library_dir = File.join(ActivePublicResources.root, "spec", "vcr")
27
+ config_data.each do |driver_name, options|
28
+ (options || {}).each do |k,v|
29
+ c.filter_sensitive_data("#{driver_name.upcase}_#{k.upcase}") { v }
30
+ end
31
+ end
32
+ c.allow_http_connections_when_no_cassette = true
33
+ c.hook_into :webmock
34
+ end
35
+
36
+ RSpec.configure do |config|
37
+ config.filter_run_excluding :live_api => true
38
+ config.treat_symbols_as_metadata_keys_with_true_values = true
39
+ config.around(:each, :vcr) do |example|
40
+ name = example.metadata[:full_description].split(/\s+/, 2).join("/").underscore.gsub(/[^\w\/]+/, "_")
41
+ options = {}
42
+ options[:record] = example.metadata[:record] if example.metadata[:record].present?
43
+ options[:match_requests_on] = example.metadata[:match_requests_on] if example.metadata[:match_requests_on].present?
44
+ VCR.use_cassette(name, options) { example.call }
45
+ end
46
+ end