ruby-oembed 0.14.1 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.rdoc +13 -1
  4. data/lib/oembed.rb +1 -0
  5. data/lib/oembed/provider.rb +54 -5
  6. data/lib/oembed/providers.rb +39 -300
  7. data/lib/oembed/providers/aggregators/embedly_urls.yml +167 -6
  8. data/lib/oembed/providers/builtin_providers.rb +292 -0
  9. data/lib/oembed/providers/facebook_post.rb +27 -17
  10. data/lib/oembed/providers/facebook_video.rb +22 -10
  11. data/lib/oembed/providers/instagram.rb +37 -20
  12. data/lib/oembed/providers/tik_tok.rb +11 -0
  13. data/lib/oembed/version.rb +2 -2
  14. data/spec/cassettes/OEmbed_Provider.yml +117 -16
  15. data/spec/cassettes/OEmbed_Providers_CodePen.yml +177 -0
  16. data/spec/cassettes/OEmbed_Providers_FacebookPost.yml +539 -0
  17. data/spec/cassettes/OEmbed_Providers_FacebookVideo.yml +267 -0
  18. data/spec/cassettes/OEmbed_Providers_Instagram.yml +1473 -0
  19. data/spec/cassettes/OEmbed_Providers_Slideshare.yml +420 -834
  20. data/spec/cassettes/OEmbed_Providers_TikTok.yml +293 -0
  21. data/spec/cassettes/OEmbed_Providers_Twitter.yml +84 -357
  22. data/spec/cassettes/OEmbed_Providers_Youtube.yml +188 -26
  23. data/spec/provider_spec.rb +315 -138
  24. data/spec/providers/code_pen_spec.rb +21 -0
  25. data/spec/providers/facebook_post_spec.rb +54 -0
  26. data/spec/providers/facebook_video_spec.rb +48 -0
  27. data/spec/providers/instagram_spec.rb +48 -0
  28. data/spec/providers/slideshare_spec.rb +2 -9
  29. data/spec/providers/tik_tok_spec.rb +26 -0
  30. data/spec/providers/twitter_spec.rb +3 -10
  31. data/spec/providers/youtube_spec.rb +3 -9
  32. data/spec/providers_spec.rb +151 -16
  33. data/spec/response_spec.rb +2 -2
  34. data/spec/spec_helper.rb +19 -1
  35. data/spec/support/shared_examples_for_providers.rb +32 -20
  36. metadata +25 -5
  37. data/spec/providers/facebook_spec.rb +0 -50
@@ -36,14 +36,14 @@ describe OEmbed::Response do
36
36
  }
37
37
 
38
38
  let(:qik) {
39
- qik = OEmbed::Provider.new("http://qik.com/api/oembed.{format}", :xml)
39
+ qik = OEmbed::Provider.new("http://qik.com/api/oembed.{format}", format: :xml)
40
40
  qik << "http://qik.com/video/*"
41
41
  qik << "http://qik.com/*"
42
42
  qik
43
43
  }
44
44
 
45
45
  let(:viddler) {
46
- viddler = OEmbed::Provider.new("http://lab.viddler.com/services/oembed/", :json)
46
+ viddler = OEmbed::Provider.new("http://lab.viddler.com/services/oembed/", format: :json)
47
47
  viddler << "http://*.viddler.com/*"
48
48
  viddler
49
49
  }
@@ -1,16 +1,27 @@
1
1
  require 'rubygems'
2
2
 
3
3
  require 'vcr'
4
- VCR.config do |c|
4
+ VCR.configure do |c|
5
5
  c.default_cassette_options = { :record => :new_episodes }
6
6
  c.cassette_library_dir = 'spec/cassettes'
7
7
  c.hook_into :webmock
8
+ # Try to prevent a real-world Facebook token from being recorded by VCR
9
+ if ENV['OEMBED_FACEBOOK_TOKEN'] && !ENV['OEMBED_FACEBOOK_TOKEN'].to_s.empty?
10
+ c.filter_sensitive_data('A_FAKE_TOKEN_FOR_TESTS') { ENV['OEMBED_FACEBOOK_TOKEN'] }
11
+ c.filter_sensitive_data('A_FAKE_TOKEN_FOR_TESTS') { ::CGI.escape(ENV['OEMBED_FACEBOOK_TOKEN']) }
12
+ else
13
+ # If the developer doesn't have an OEMBED_FACEBOOK_TOKEN set
14
+ # use a fake one that will match data in the vcr cassettes.
15
+ ENV['OEMBED_FACEBOOK_TOKEN'] = 'A_FAKE_TOKEN_FOR_TESTS'
16
+ end
8
17
  end
9
18
 
10
19
  require 'webmock/rspec'
11
20
  require 'coveralls'
12
21
  Coveralls.wear!
13
22
 
23
+ require 'support/shared_examples_for_providers'
24
+
14
25
  require File.dirname(__FILE__) + '/../lib/oembed'
15
26
 
16
27
  RSpec.configure do |config|
@@ -18,6 +29,13 @@ RSpec.configure do |config|
18
29
  config.tty = true
19
30
  config.color = true
20
31
  config.example_status_persistence_file_path = '.rspec-status'
32
+ config.filter_run_including :focus => true unless ENV['RUN_ALL_TESTS']
33
+ config.run_all_when_everything_filtered = true
34
+ end
35
+
36
+ def use_custom_vcr_casette(casette_name)
37
+ before(:all) { VCR.insert_cassette(casette_name) }
38
+ after(:all) { VCR.eject_cassette }
21
39
  end
22
40
 
23
41
  module OEmbedSpecHelper
@@ -1,37 +1,49 @@
1
1
  RSpec.shared_examples "an OEmbed::Providers instance" do |expected_valid_urls, expected_invalid_urls|
2
+ subject { provider }
3
+
2
4
  expected_valid_urls.each do |valid_url|
3
5
  context "given the valid URL #{valid_url}" do
4
- describe ".include?" do
5
- it "should be true" do
6
- expect(provider_class.include?(valid_url)).to be_truthy
7
- end
8
- end
6
+ it { should include(valid_url) }
9
7
 
10
8
  describe ".get" do
11
- it "should return a response" do
12
- response = nil
13
- expect {
14
- response = provider_class.get(valid_url)
15
- }.to_not raise_error
16
- expect(response).to be_a(OEmbed::Response)
17
- end
9
+ subject { provider.get(valid_url) }
10
+
11
+ it { should be_a(OEmbed::Response) }
18
12
  end
19
13
  end
20
14
  end
21
15
 
22
16
  expected_invalid_urls.each do |invalid_url|
23
17
  context "given the invalid URL #{invalid_url}" do
24
- describe ".include?" do
25
- it "should be false" do
26
- expect(provider_class.include?(invalid_url)).to be_falsey
18
+ it { should_not include(invalid_url) }
19
+
20
+ describe ".get" do
21
+ subject { provider.get(invalid_url) }
22
+
23
+ it "should raise an OEmbed::NotFound error" do
24
+ expect { subject }.to raise_error(OEmbed::NotFound)
27
25
  end
28
26
  end
27
+ end
28
+ end
29
29
 
30
- describe ".get" do
31
- it "should not find a response" do
32
- expect {
33
- provider_class.get(invalid_url)
34
- }.to raise_error(OEmbed::NotFound)
30
+ describe "OEmbed::Providers.register(provider)" do
31
+ before(:each) { OEmbed::Providers.register(provider) }
32
+ after(:each) { OEmbed::Providers.unregister_all }
33
+
34
+ describe('.get') do
35
+ expected_valid_urls.each do |valid_url|
36
+ context "given the valid URL #{valid_url}" do
37
+ subject { OEmbed::Providers.get(valid_url) }
38
+ it { should be_a(OEmbed::Response) }
39
+ end
40
+ end
41
+ expected_invalid_urls.each do |invalid_url|
42
+ context "given the invalid URL #{invalid_url}" do
43
+ let(:url) { invalid_url }
44
+ it "should raise an OEmbed::NotFound error" do
45
+ expect { expect(OEmbed::Providers.get(url)) }.to raise_error(OEmbed::NotFound)
46
+ end
35
47
  end
36
48
  end
37
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-oembed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Magnus Holm
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2020-12-28 00:00:00.000000000 Z
14
+ date: 2021-01-01 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: xml-simple
@@ -82,9 +82,11 @@ files:
82
82
  - lib/oembed/providers/aggregators/embedly_urls.yml
83
83
  - lib/oembed/providers/aggregators/noembed_urls.yml
84
84
  - lib/oembed/providers/aggregators/oohembed_urls.yml
85
+ - lib/oembed/providers/builtin_providers.rb
85
86
  - lib/oembed/providers/facebook_post.rb
86
87
  - lib/oembed/providers/facebook_video.rb
87
88
  - lib/oembed/providers/instagram.rb
89
+ - lib/oembed/providers/tik_tok.rb
88
90
  - lib/oembed/response.rb
89
91
  - lib/oembed/response/link.rb
90
92
  - lib/oembed/response/photo.rb
@@ -96,7 +98,12 @@ files:
96
98
  - ruby-oembed.gemspec
97
99
  - spec/cassettes/OEmbed_Provider.yml
98
100
  - spec/cassettes/OEmbed_ProviderDiscovery.yml
101
+ - spec/cassettes/OEmbed_Providers_CodePen.yml
102
+ - spec/cassettes/OEmbed_Providers_FacebookPost.yml
103
+ - spec/cassettes/OEmbed_Providers_FacebookVideo.yml
104
+ - spec/cassettes/OEmbed_Providers_Instagram.yml
99
105
  - spec/cassettes/OEmbed_Providers_Slideshare.yml
106
+ - spec/cassettes/OEmbed_Providers_TikTok.yml
100
107
  - spec/cassettes/OEmbed_Providers_Twitter.yml
101
108
  - spec/cassettes/OEmbed_Providers_Youtube.yml
102
109
  - spec/formatter/ducktype_backend_spec.rb
@@ -109,8 +116,12 @@ files:
109
116
  - spec/formatter_spec.rb
110
117
  - spec/provider_discovery_spec.rb
111
118
  - spec/provider_spec.rb
112
- - spec/providers/facebook_spec.rb
119
+ - spec/providers/code_pen_spec.rb
120
+ - spec/providers/facebook_post_spec.rb
121
+ - spec/providers/facebook_video_spec.rb
122
+ - spec/providers/instagram_spec.rb
113
123
  - spec/providers/slideshare_spec.rb
124
+ - spec/providers/tik_tok_spec.rb
114
125
  - spec/providers/twitter_spec.rb
115
126
  - spec/providers/youtube_spec.rb
116
127
  - spec/providers_spec.rb
@@ -127,7 +138,7 @@ rdoc_options:
127
138
  - "--main"
128
139
  - README.rdoc
129
140
  - "--title"
130
- - ruby-oembed-0.14.1
141
+ - ruby-oembed-0.15.0
131
142
  - "--inline-source"
132
143
  - "--exclude"
133
144
  - tasks
@@ -152,7 +163,12 @@ summary: oEmbed for Ruby
152
163
  test_files:
153
164
  - spec/cassettes/OEmbed_Provider.yml
154
165
  - spec/cassettes/OEmbed_ProviderDiscovery.yml
166
+ - spec/cassettes/OEmbed_Providers_CodePen.yml
167
+ - spec/cassettes/OEmbed_Providers_FacebookPost.yml
168
+ - spec/cassettes/OEmbed_Providers_FacebookVideo.yml
169
+ - spec/cassettes/OEmbed_Providers_Instagram.yml
155
170
  - spec/cassettes/OEmbed_Providers_Slideshare.yml
171
+ - spec/cassettes/OEmbed_Providers_TikTok.yml
156
172
  - spec/cassettes/OEmbed_Providers_Twitter.yml
157
173
  - spec/cassettes/OEmbed_Providers_Youtube.yml
158
174
  - spec/formatter/ducktype_backend_spec.rb
@@ -165,8 +181,12 @@ test_files:
165
181
  - spec/formatter_spec.rb
166
182
  - spec/provider_discovery_spec.rb
167
183
  - spec/provider_spec.rb
168
- - spec/providers/facebook_spec.rb
184
+ - spec/providers/code_pen_spec.rb
185
+ - spec/providers/facebook_post_spec.rb
186
+ - spec/providers/facebook_video_spec.rb
187
+ - spec/providers/instagram_spec.rb
169
188
  - spec/providers/slideshare_spec.rb
189
+ - spec/providers/tik_tok_spec.rb
170
190
  - spec/providers/twitter_spec.rb
171
191
  - spec/providers/youtube_spec.rb
172
192
  - spec/providers_spec.rb
@@ -1,50 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '../spec_helper')
2
-
3
- describe 'Facebook providers' do
4
- let(:access_token) { 'my-fake-access-token' }
5
-
6
- describe 'FacebookPost provider' do
7
- let(:provider) { OEmbed::Providers::FacebookPost.new(access_token: access_token) }
8
- let(:embed_url) { 'https://www.facebook.com/exampleuser/posts/1234567890' }
9
-
10
- it 'sets the endpoint URL' do
11
- expect(provider.endpoint).to(
12
- eq("https://graph.facebook.com/v8.0/oembed_post?access_token=#{access_token}")
13
- )
14
- end
15
-
16
- it 'recognizes embed URLs' do
17
- expect(provider).to include(embed_url)
18
- end
19
- end
20
-
21
- describe 'FacebookVideo provider' do
22
- let(:provider) { OEmbed::Providers::FacebookVideo.new(access_token: access_token) }
23
- let(:embed_url) { 'https://www.facebook.com/exampleuser/videos/1234567890' }
24
-
25
- it 'sets the endpoint URL' do
26
- expect(provider.endpoint).to(
27
- eq("https://graph.facebook.com/v8.0/oembed_video?access_token=#{access_token}")
28
- )
29
- end
30
-
31
- it 'recognizes embed URLs' do
32
- expect(provider).to include(embed_url)
33
- end
34
- end
35
-
36
- describe 'Instagram provider' do
37
- let(:provider) { OEmbed::Providers::Instagram.new(access_token: access_token) }
38
- let(:embed_url) { 'https://www.instagram.com/p/r4nd0m1mg/' }
39
-
40
- it 'sets the endpoint URL' do
41
- expect(provider.endpoint).to(
42
- eq("https://graph.facebook.com/v8.0/instagram_oembed?access_token=#{access_token}")
43
- )
44
- end
45
-
46
- it 'recognizes embed URLs' do
47
- expect(provider).to include(embed_url)
48
- end
49
- end
50
- end