ruby-oembed 0.14.1 → 0.15.0

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 (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