ruby-oembed 0.8.11 → 0.8.12
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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.rdoc +7 -0
- data/lib/oembed/provider.rb +6 -1
- data/lib/oembed/providers/embedly_urls.yml +255 -136
- data/lib/oembed/providers.rb +20 -1
- data/lib/oembed/version.rb +1 -1
- data/spec/formatter/ducktype_backend_spec.rb +31 -31
- data/spec/formatter/json/jsongem_backend_spec.rb +29 -28
- data/spec/formatter/json/yaml_backend_spec.rb +27 -26
- data/spec/formatter/xml/nokogiri_backend_spec.rb +28 -27
- data/spec/formatter/xml/rexml_backend_spec.rb +26 -25
- data/spec/formatter/xml/xmlsimple_backend_spec.rb +28 -27
- data/spec/formatter_spec.rb +11 -9
- data/spec/provider_discovery_spec.rb +37 -37
- metadata +2 -2
    
        data/lib/oembed/providers.rb
    CHANGED
    
    | @@ -136,7 +136,7 @@ module OEmbed | |
| 136 136 | 
             
                #     OEmbed::Providers::Youtube.endpoint += "?iframe=0"
         | 
| 137 137 | 
             
                # * To require https embed code
         | 
| 138 138 | 
             
                #     OEmbed::Providers::Youtube.endpoint += "?scheme=https"
         | 
| 139 | 
            -
                Youtube = OEmbed::Provider.new("http://www.youtube.com/oembed")
         | 
| 139 | 
            +
                Youtube = OEmbed::Provider.new("http://www.youtube.com/oembed?scheme=https")
         | 
| 140 140 | 
             
                Youtube << "http://*.youtube.com/*"
         | 
| 141 141 | 
             
                Youtube << "https://*.youtube.com/*"
         | 
| 142 142 | 
             
                Youtube << "http://*.youtu.be/*"
         | 
| @@ -179,6 +179,19 @@ module OEmbed | |
| 179 179 | 
             
                Vimeo << "https://*.vimeo.com/*"
         | 
| 180 180 | 
             
                add_official_provider(Vimeo)
         | 
| 181 181 |  | 
| 182 | 
            +
                # Provider for twitter.com
         | 
| 183 | 
            +
                # https://dev.twitter.com/rest/reference/get/statuses/oembed
         | 
| 184 | 
            +
                Twitter = OEmbed::Provider.new("https://api.twitter.com/1/statuses/oembed.{format}")
         | 
| 185 | 
            +
                Twitter << "https://*.twitter.com/*/status/*"
         | 
| 186 | 
            +
                add_official_provider(Twitter)
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                # Provider for vine.co
         | 
| 189 | 
            +
                # https://dev.twitter.com/web/vine/oembed
         | 
| 190 | 
            +
                Vine = OEmbed::Provider.new("https://vine.co/oembed.{format}")
         | 
| 191 | 
            +
                Vine << "http://*.vine.co/v/*"
         | 
| 192 | 
            +
                Vine << "https://*.vine.co/v/*"
         | 
| 193 | 
            +
                add_official_provider(Vine)
         | 
| 194 | 
            +
             | 
| 182 195 | 
             
                # Provider for instagram.com
         | 
| 183 196 | 
             
                # http://instagr.am/developer/embedding/
         | 
| 184 197 | 
             
                Instagram = OEmbed::Provider.new("http://api.instagram.com/oembed", :json)
         | 
| @@ -199,6 +212,12 @@ module OEmbed | |
| 199 212 | 
             
                Yfrog << "http://yfrog.com/*"
         | 
| 200 213 | 
             
                add_official_provider(Yfrog)
         | 
| 201 214 |  | 
| 215 | 
            +
                # Provider for imgur.com
         | 
| 216 | 
            +
                Imgur = OEmbed::Provider.new("https://api.imgur.com/oembed.{format}")
         | 
| 217 | 
            +
                Imgur << "https://*.imgur.com/gallery/*"
         | 
| 218 | 
            +
                Imgur << "http://*.imgur.com/gallery/*"
         | 
| 219 | 
            +
                add_official_provider(Imgur)
         | 
| 220 | 
            +
             | 
| 202 221 | 
             
                # provider for mlg-tv
         | 
| 203 222 | 
             
                # http://tv.majorleaguegaming.com/oembed
         | 
| 204 223 | 
             
                MlgTv = OEmbed::Provider.new("http://tv.majorleaguegaming.com/oembed")
         | 
    
        data/lib/oembed/version.rb
    CHANGED
    
    
| @@ -9,7 +9,7 @@ class WorkingDuck | |
| 9 9 | 
             
                end
         | 
| 10 10 | 
             
                def parse_error; RuntimeError; end
         | 
| 11 11 | 
             
              end
         | 
| 12 | 
            -
             | 
| 12 | 
            +
             | 
| 13 13 | 
             
              # A WorkingDuck instance should work as a Backend
         | 
| 14 14 | 
             
              def decode(value)
         | 
| 15 15 | 
             
                self.class.decode(value)
         | 
| @@ -29,33 +29,33 @@ describe "OEmbed::Formatter::JSON::Backends::DuckType" do | |
| 29 29 | 
             
              include OEmbedSpecHelper
         | 
| 30 30 |  | 
| 31 31 | 
             
              it "should work with WorkingDuck Class" do
         | 
| 32 | 
            -
                 | 
| 32 | 
            +
                expect {
         | 
| 33 33 | 
             
                  OEmbed::Formatter::JSON.backend = WorkingDuck
         | 
| 34 | 
            -
                }. | 
| 35 | 
            -
                OEmbed::Formatter::JSON.backend. | 
| 34 | 
            +
                }.not_to raise_error
         | 
| 35 | 
            +
                expect(OEmbed::Formatter::JSON.backend).to be WorkingDuck
         | 
| 36 36 | 
             
              end
         | 
| 37 | 
            -
             | 
| 37 | 
            +
             | 
| 38 38 | 
             
              it "should work with a WorkingDuck instance" do
         | 
| 39 39 | 
             
                instance = WorkingDuck.new
         | 
| 40 | 
            -
                 | 
| 40 | 
            +
                expect {
         | 
| 41 41 | 
             
                  OEmbed::Formatter::JSON.backend = instance
         | 
| 42 | 
            -
                }. | 
| 43 | 
            -
                OEmbed::Formatter::JSON.backend. | 
| 42 | 
            +
                }.to_not raise_error
         | 
| 43 | 
            +
                expect(OEmbed::Formatter::JSON.backend).to be instance
         | 
| 44 44 | 
             
              end
         | 
| 45 | 
            -
             | 
| 45 | 
            +
             | 
| 46 46 | 
             
              it "should fail with FailingDuckDecode Class" do
         | 
| 47 | 
            -
                 | 
| 47 | 
            +
                expect {
         | 
| 48 48 | 
             
                  OEmbed::Formatter::JSON.backend = FailingDuckDecode
         | 
| 49 | 
            -
                }. | 
| 50 | 
            -
                OEmbed::Formatter::JSON.backend. | 
| 49 | 
            +
                }.to raise_error(LoadError)
         | 
| 50 | 
            +
                expect(OEmbed::Formatter::JSON.backend).to_not be(FailingDuckDecode)
         | 
| 51 51 | 
             
              end
         | 
| 52 | 
            -
             | 
| 52 | 
            +
             | 
| 53 53 | 
             
              it "should fail with a FailingDuckDecode instance" do
         | 
| 54 54 | 
             
                instance = FailingDuckDecode.new
         | 
| 55 | 
            -
                 | 
| 55 | 
            +
                expect {
         | 
| 56 56 | 
             
                  OEmbed::Formatter::JSON.backend = instance
         | 
| 57 | 
            -
                }. | 
| 58 | 
            -
                OEmbed::Formatter::JSON.backend. | 
| 57 | 
            +
                }.to raise_error(LoadError)
         | 
| 58 | 
            +
                expect(OEmbed::Formatter::JSON.backend).to_not be(instance)
         | 
| 59 59 | 
             
              end
         | 
| 60 60 | 
             
            end
         | 
| 61 61 |  | 
| @@ -63,32 +63,32 @@ describe "OEmbed::Formatter::XML::Backends::DuckType" do | |
| 63 63 | 
             
              include OEmbedSpecHelper
         | 
| 64 64 |  | 
| 65 65 | 
             
              it "should work with WorkingDuck Class" do
         | 
| 66 | 
            -
                 | 
| 66 | 
            +
                expect {
         | 
| 67 67 | 
             
                  OEmbed::Formatter::XML.backend = WorkingDuck
         | 
| 68 | 
            -
                }. | 
| 69 | 
            -
                OEmbed::Formatter::XML.backend. | 
| 68 | 
            +
                }.to_not raise_error
         | 
| 69 | 
            +
                expect(OEmbed::Formatter::XML.backend).to be(WorkingDuck)
         | 
| 70 70 | 
             
              end
         | 
| 71 | 
            -
             | 
| 71 | 
            +
             | 
| 72 72 | 
             
              it "should work with a WorkingDuck instance" do
         | 
| 73 73 | 
             
                instance = WorkingDuck.new
         | 
| 74 | 
            -
                 | 
| 74 | 
            +
                expect {
         | 
| 75 75 | 
             
                  OEmbed::Formatter::XML.backend = instance
         | 
| 76 | 
            -
                }. | 
| 77 | 
            -
                OEmbed::Formatter::XML.backend. | 
| 76 | 
            +
                }.to_not raise_error
         | 
| 77 | 
            +
                expect(OEmbed::Formatter::XML.backend).to be(instance)
         | 
| 78 78 | 
             
              end
         | 
| 79 | 
            -
             | 
| 79 | 
            +
             | 
| 80 80 | 
             
              it "should fail with FailingDuckDecode Class" do
         | 
| 81 | 
            -
                 | 
| 81 | 
            +
                expect {
         | 
| 82 82 | 
             
                  OEmbed::Formatter::XML.backend = FailingDuckDecode
         | 
| 83 | 
            -
                }. | 
| 84 | 
            -
                OEmbed::Formatter::XML.backend. | 
| 83 | 
            +
                }.to raise_error(LoadError)
         | 
| 84 | 
            +
                expect(OEmbed::Formatter::XML.backend).to_not be(FailingDuckDecode)
         | 
| 85 85 | 
             
              end
         | 
| 86 | 
            -
             | 
| 86 | 
            +
             | 
| 87 87 | 
             
              it "should fail with a FailingDuckDecode instance" do
         | 
| 88 88 | 
             
                instance = FailingDuckDecode.new
         | 
| 89 | 
            -
                 | 
| 89 | 
            +
                expect {
         | 
| 90 90 | 
             
                  OEmbed::Formatter::XML.backend = instance
         | 
| 91 | 
            -
                }. | 
| 92 | 
            -
                OEmbed::Formatter::XML.backend. | 
| 91 | 
            +
                }.to raise_error(LoadError)
         | 
| 92 | 
            +
                expect(OEmbed::Formatter::XML.backend).to_not be(instance)
         | 
| 93 93 | 
             
              end
         | 
| 94 94 | 
             
            end
         | 
| @@ -4,55 +4,56 @@ describe "OEmbed::Formatter::JSON::Backends::JSONGem" do | |
| 4 4 | 
             
              include OEmbedSpecHelper
         | 
| 5 5 |  | 
| 6 6 | 
             
              before(:all) do
         | 
| 7 | 
            -
                 | 
| 7 | 
            +
                expect {
         | 
| 8 8 | 
             
                  OEmbed::Formatter::JSON.backend = 'JSONGem'
         | 
| 9 | 
            -
                }. | 
| 10 | 
            -
             | 
| 9 | 
            +
                }.to raise_error(LoadError)
         | 
| 10 | 
            +
             | 
| 11 11 | 
             
                require 'json'
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                 | 
| 12 | 
            +
             | 
| 13 | 
            +
                expect {
         | 
| 14 14 | 
             
                  OEmbed::Formatter::JSON.backend = 'JSONGem'
         | 
| 15 | 
            -
                }. | 
| 15 | 
            +
                }.to_not raise_error
         | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
| 18 18 | 
             
              it "should support JSON" do
         | 
| 19 | 
            -
                 | 
| 20 | 
            -
             | 
| 19 | 
            +
                expect {
         | 
| 20 | 
            +
                  OEmbed::Formatter.supported?(:json)
         | 
| 21 | 
            +
                }.to_not raise_error
         | 
| 21 22 | 
             
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            +
             | 
| 23 24 | 
             
              it "should be using the JSONGem backend" do
         | 
| 24 | 
            -
                OEmbed::Formatter::JSON.backend. | 
| 25 | 
            +
                expect(OEmbed::Formatter::JSON.backend).to eq(OEmbed::Formatter::JSON::Backends::JSONGem)
         | 
| 25 26 | 
             
              end
         | 
| 26 | 
            -
             | 
| 27 | 
            +
             | 
| 27 28 | 
             
              it "should decode a JSON String" do
         | 
| 28 29 | 
             
                decoded = OEmbed::Formatter.decode(:json, valid_response(:json))
         | 
| 29 30 | 
             
                # We need to compare keys & values separately because we don't expect all
         | 
| 30 31 | 
             
                # non-string values to be recognized correctly.
         | 
| 31 | 
            -
                decoded.keys. | 
| 32 | 
            -
                decoded.values.map{|v|v.to_s}. | 
| 32 | 
            +
                expect(decoded.keys).to eq(valid_response(:object).keys)
         | 
| 33 | 
            +
                expect(decoded.values.map{|v|v.to_s}).to eq(valid_response(:object).values.map{|v|v.to_s})
         | 
| 33 34 | 
             
              end
         | 
| 34 | 
            -
             | 
| 35 | 
            +
             | 
| 35 36 | 
             
              it "should raise an OEmbed::ParseError when decoding an invalid JSON String" do
         | 
| 36 | 
            -
                 | 
| 37 | 
            +
                expect {
         | 
| 37 38 | 
             
                  decode = OEmbed::Formatter.decode(:json, invalid_response('unclosed_container', :json))
         | 
| 38 | 
            -
                }. | 
| 39 | 
            -
                 | 
| 39 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 40 | 
            +
                expect {
         | 
| 40 41 | 
             
                  decode = OEmbed::Formatter.decode(:json, invalid_response('unclosed_tag', :json))
         | 
| 41 | 
            -
                }. | 
| 42 | 
            -
                 | 
| 42 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 43 | 
            +
                expect {
         | 
| 43 44 | 
             
                  decode = OEmbed::Formatter.decode(:json, invalid_response('invalid_syntax', :json))
         | 
| 44 | 
            -
                }. | 
| 45 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 45 46 | 
             
              end
         | 
| 46 | 
            -
             | 
| 47 | 
            +
             | 
| 47 48 | 
             
              it "should raise an OEmbed::ParseError when decoding fails with an unexpected error" do
         | 
| 48 49 | 
             
                error_to_raise = ArgumentError
         | 
| 49 | 
            -
                OEmbed::Formatter::JSON.backend.parse_error. | 
| 50 | 
            -
             | 
| 51 | 
            -
                ::JSON. | 
| 52 | 
            -
                   | 
| 53 | 
            -
             | 
| 54 | 
            -
                 | 
| 50 | 
            +
                expect(OEmbed::Formatter::JSON.backend.parse_error).to_not be_kind_of(error_to_raise)
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                expect(::JSON).to receive(:parse).
         | 
| 53 | 
            +
                  and_throw(error_to_raise.new("unknown error"))
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                expect {
         | 
| 55 56 | 
             
                  decode = OEmbed::Formatter.decode(:json, valid_response(:json))
         | 
| 56 | 
            -
                }. | 
| 57 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 57 58 | 
             
              end
         | 
| 58 59 | 
             
            end
         | 
| @@ -4,51 +4,52 @@ describe "OEmbed::Formatter::JSON::Backends::Yaml" do | |
| 4 4 | 
             
              include OEmbedSpecHelper
         | 
| 5 5 |  | 
| 6 6 | 
             
              before(:all) do
         | 
| 7 | 
            -
                 | 
| 7 | 
            +
                expect {
         | 
| 8 8 | 
             
                  OEmbed::Formatter::JSON.backend = 'Yaml'
         | 
| 9 | 
            -
                }. | 
| 10 | 
            -
             | 
| 11 | 
            -
                (!!defined?(YAML)). | 
| 9 | 
            +
                }.to_not raise_error
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                expect(!!defined?(YAML)).to eq(true)
         | 
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 14 | 
             
              it "should support JSON" do
         | 
| 15 | 
            -
                 | 
| 16 | 
            -
             | 
| 15 | 
            +
                expect {
         | 
| 16 | 
            +
                  OEmbed::Formatter.supported?(:json)
         | 
| 17 | 
            +
                }.to_not raise_error
         | 
| 17 18 | 
             
              end
         | 
| 18 | 
            -
             | 
| 19 | 
            +
             | 
| 19 20 | 
             
              it "should be using the Yaml backend" do
         | 
| 20 | 
            -
                OEmbed::Formatter::JSON.backend. | 
| 21 | 
            +
                expect(OEmbed::Formatter::JSON.backend).to eq(OEmbed::Formatter::JSON::Backends::Yaml)
         | 
| 21 22 | 
             
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            +
             | 
| 23 24 | 
             
              it "should decode a JSON String" do
         | 
| 24 25 | 
             
                decoded = OEmbed::Formatter.decode(:json, valid_response(:json))
         | 
| 25 26 | 
             
                # We need to compare keys & values separately because we don't expect all
         | 
| 26 27 | 
             
                # non-string values to be recognized correctly.
         | 
| 27 | 
            -
                decoded.keys. | 
| 28 | 
            -
                decoded.values.map{|v|v.to_s}. | 
| 28 | 
            +
                expect(decoded.keys).to eq(valid_response(:object).keys)
         | 
| 29 | 
            +
                expect(decoded.values.map{|v|v.to_s}).to eq(valid_response(:object).values.map{|v|v.to_s})
         | 
| 29 30 | 
             
              end
         | 
| 30 | 
            -
             | 
| 31 | 
            +
             | 
| 31 32 | 
             
              it "should raise an OEmbed::ParseError when decoding an invalid JSON String" do
         | 
| 32 | 
            -
                 | 
| 33 | 
            +
                expect {
         | 
| 33 34 | 
             
                  decode = OEmbed::Formatter.decode(:json, invalid_response('unclosed_container', :json))
         | 
| 34 | 
            -
                }. | 
| 35 | 
            -
                 | 
| 35 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 36 | 
            +
                expect {
         | 
| 36 37 | 
             
                  decode = OEmbed::Formatter.decode(:json, invalid_response('unclosed_tag', :json))
         | 
| 37 | 
            -
                }. | 
| 38 | 
            -
                 | 
| 38 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 39 | 
            +
                expect {
         | 
| 39 40 | 
             
                  decode = OEmbed::Formatter.decode(:json, invalid_response('invalid_syntax', :json))
         | 
| 40 | 
            -
                }. | 
| 41 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 41 42 | 
             
              end
         | 
| 42 | 
            -
             | 
| 43 | 
            +
             | 
| 43 44 | 
             
              it "should raise an OEmbed::ParseError when decoding fails with an unexpected error" do
         | 
| 44 45 | 
             
                error_to_raise = ArgumentError
         | 
| 45 | 
            -
                OEmbed::Formatter::JSON.backend.parse_error. | 
| 46 | 
            -
             | 
| 47 | 
            -
                OEmbed::Formatter::JSON.backend. | 
| 48 | 
            -
                   | 
| 49 | 
            -
             | 
| 50 | 
            -
                 | 
| 46 | 
            +
                expect(OEmbed::Formatter::JSON.backend.parse_error).to_not be_kind_of(error_to_raise)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                expect(OEmbed::Formatter::JSON.backend).to receive(:convert_json_to_yaml).
         | 
| 49 | 
            +
                  and_throw(error_to_raise.new("unknown error"))
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                expect {
         | 
| 51 52 | 
             
                  decode = OEmbed::Formatter.decode(:json, valid_response(:json))
         | 
| 52 | 
            -
                }. | 
| 53 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 53 54 | 
             
              end
         | 
| 54 55 | 
             
            end
         | 
| @@ -4,55 +4,56 @@ describe "OEmbed::Formatter::XML::Backends::Nokogiri" do | |
| 4 4 | 
             
              include OEmbedSpecHelper
         | 
| 5 5 |  | 
| 6 6 | 
             
              before(:all) do
         | 
| 7 | 
            -
                 | 
| 7 | 
            +
                expect {
         | 
| 8 8 | 
             
                  OEmbed::Formatter::XML.backend = 'Nokogiri'
         | 
| 9 | 
            -
                }. | 
| 10 | 
            -
             | 
| 9 | 
            +
                }.to raise_error(LoadError)
         | 
| 10 | 
            +
             | 
| 11 11 | 
             
                require 'nokogiri'
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                 | 
| 12 | 
            +
             | 
| 13 | 
            +
                expect {
         | 
| 14 14 | 
             
                  OEmbed::Formatter::XML.backend = 'Nokogiri'
         | 
| 15 | 
            -
                }. | 
| 15 | 
            +
                }.to_not raise_error
         | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
| 18 18 | 
             
              it "should support XML" do
         | 
| 19 | 
            -
                 | 
| 20 | 
            -
             | 
| 19 | 
            +
                expect {
         | 
| 20 | 
            +
                  OEmbed::Formatter.supported?(:xml)
         | 
| 21 | 
            +
                }.to_not raise_error
         | 
| 21 22 | 
             
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            +
             | 
| 23 24 | 
             
              it "should be using the Nokogiri backend" do
         | 
| 24 | 
            -
                OEmbed::Formatter::XML.backend. | 
| 25 | 
            +
                expect(OEmbed::Formatter::XML.backend).to eq(OEmbed::Formatter::XML::Backends::Nokogiri)
         | 
| 25 26 | 
             
              end
         | 
| 26 | 
            -
             | 
| 27 | 
            +
             | 
| 27 28 | 
             
              it "should decode an XML String" do
         | 
| 28 29 | 
             
                decoded = OEmbed::Formatter.decode(:xml, valid_response(:xml))
         | 
| 29 30 | 
             
                # We need to compare keys & values separately because we don't expect all
         | 
| 30 31 | 
             
                # non-string values to be recognized correctly.
         | 
| 31 | 
            -
                decoded.keys. | 
| 32 | 
            -
                decoded.values.map{|v|v.to_s}. | 
| 32 | 
            +
                expect(decoded.keys).to eq(valid_response(:object).keys)
         | 
| 33 | 
            +
                expect(decoded.values.map{|v|v.to_s}).to eq(valid_response(:object).values.map{|v|v.to_s})
         | 
| 33 34 | 
             
              end
         | 
| 34 | 
            -
             | 
| 35 | 
            +
             | 
| 35 36 | 
             
              it "should raise an OEmbed::ParseError when decoding an invalid XML String" do
         | 
| 36 | 
            -
                 | 
| 37 | 
            +
                expect {
         | 
| 37 38 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('unclosed_container', :xml))
         | 
| 38 | 
            -
                }. | 
| 39 | 
            -
                 | 
| 39 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 40 | 
            +
                expect {
         | 
| 40 41 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('unclosed_tag', :xml))
         | 
| 41 | 
            -
                }. | 
| 42 | 
            -
                 | 
| 42 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 43 | 
            +
                expect {
         | 
| 43 44 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('invalid_syntax', :xml))
         | 
| 44 | 
            -
                }. | 
| 45 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 45 46 | 
             
              end
         | 
| 46 | 
            -
             | 
| 47 | 
            +
             | 
| 47 48 | 
             
              it "should raise an OEmbed::ParseError when decoding fails with an unexpected error" do
         | 
| 48 49 | 
             
                error_to_raise = ArgumentError
         | 
| 49 | 
            -
                OEmbed::Formatter::XML.backend.parse_error. | 
| 50 | 
            -
             | 
| 51 | 
            -
                ::Nokogiri::XML::Document. | 
| 50 | 
            +
                expect(OEmbed::Formatter::XML.backend.parse_error).to_not be_kind_of(error_to_raise)
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                expect(::Nokogiri::XML::Document).to receive(:parse).
         | 
| 52 53 | 
             
                  and_raise(error_to_raise.new("unknown error"))
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                 | 
| 54 | 
            +
             | 
| 55 | 
            +
                expect {
         | 
| 55 56 | 
             
                  decode = OEmbed::Formatter.decode(:xml, valid_response(:xml))
         | 
| 56 | 
            -
                }. | 
| 57 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 57 58 | 
             
              end
         | 
| 58 59 | 
             
            end
         | 
| @@ -4,51 +4,52 @@ describe "OEmbed::Formatter::XML::Backends::REXML" do | |
| 4 4 | 
             
              include OEmbedSpecHelper
         | 
| 5 5 |  | 
| 6 6 | 
             
              before(:all) do
         | 
| 7 | 
            -
                 | 
| 7 | 
            +
                expect {
         | 
| 8 8 | 
             
                  OEmbed::Formatter::XML.backend = 'REXML'
         | 
| 9 | 
            -
                }. | 
| 10 | 
            -
             | 
| 11 | 
            -
                (!!defined?(REXML)). | 
| 9 | 
            +
                }.to_not raise_error
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                expect((!!defined?(REXML))).to eq(true)
         | 
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 14 | 
             
              it "should support XML" do
         | 
| 15 | 
            -
                 | 
| 16 | 
            -
             | 
| 15 | 
            +
                expect {
         | 
| 16 | 
            +
                  OEmbed::Formatter.supported?(:xml)
         | 
| 17 | 
            +
                }.to_not raise_error
         | 
| 17 18 | 
             
              end
         | 
| 18 | 
            -
             | 
| 19 | 
            +
             | 
| 19 20 | 
             
              it "should be using the XmlSimple backend" do
         | 
| 20 | 
            -
                OEmbed::Formatter::XML.backend. | 
| 21 | 
            +
                expect(OEmbed::Formatter::XML.backend).to eq(OEmbed::Formatter::XML::Backends::REXML)
         | 
| 21 22 | 
             
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            +
             | 
| 23 24 | 
             
              it "should decode an XML String" do
         | 
| 24 25 | 
             
                decoded = OEmbed::Formatter.decode(:xml, valid_response(:xml))
         | 
| 25 26 | 
             
                # We need to compare keys & values separately because we don't expect all
         | 
| 26 27 | 
             
                # non-string values to be recognized correctly.
         | 
| 27 | 
            -
                decoded.keys. | 
| 28 | 
            -
                decoded.values.map{|v|v.to_s}. | 
| 28 | 
            +
                expect(decoded.keys).to eq(valid_response(:object).keys)
         | 
| 29 | 
            +
                expect(decoded.values.map{|v|v.to_s}).to eq(valid_response(:object).values.map{|v|v.to_s})
         | 
| 29 30 | 
             
              end
         | 
| 30 | 
            -
             | 
| 31 | 
            +
             | 
| 31 32 | 
             
              it "should raise an OEmbed::ParseError when decoding an invalid XML String" do
         | 
| 32 | 
            -
                 | 
| 33 | 
            +
                expect {
         | 
| 33 34 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('unclosed_container', :xml))
         | 
| 34 | 
            -
                }. | 
| 35 | 
            -
                 | 
| 35 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 36 | 
            +
                expect {
         | 
| 36 37 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('unclosed_tag', :xml))
         | 
| 37 | 
            -
                }. | 
| 38 | 
            -
                 | 
| 38 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 39 | 
            +
                expect {
         | 
| 39 40 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('invalid_syntax', :xml))
         | 
| 40 | 
            -
                }. | 
| 41 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 41 42 | 
             
              end
         | 
| 42 | 
            -
             | 
| 43 | 
            +
             | 
| 43 44 | 
             
              it "should raise an OEmbed::ParseError when decoding fails with an unexpected error" do
         | 
| 44 45 | 
             
                error_to_raise = ArgumentError
         | 
| 45 | 
            -
                OEmbed::Formatter::XML.backend.parse_error. | 
| 46 | 
            -
             | 
| 47 | 
            -
                ::REXML::Document. | 
| 46 | 
            +
                expect(OEmbed::Formatter::XML.backend.parse_error).to_not be_kind_of(error_to_raise)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                expect(::REXML::Document).to receive(:new).
         | 
| 48 49 | 
             
                  and_raise(error_to_raise.new("unknown error"))
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                 | 
| 50 | 
            +
             | 
| 51 | 
            +
                expect {
         | 
| 51 52 | 
             
                  decode = OEmbed::Formatter.decode(:xml, valid_response(:xml))
         | 
| 52 | 
            -
                }. | 
| 53 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 53 54 | 
             
              end
         | 
| 54 55 | 
             
            end
         | 
| @@ -4,55 +4,56 @@ describe "OEmbed::Formatter::XML::Backends::XmlSimple" do | |
| 4 4 | 
             
              include OEmbedSpecHelper
         | 
| 5 5 |  | 
| 6 6 | 
             
              before(:all) do
         | 
| 7 | 
            -
                 | 
| 7 | 
            +
                expect {
         | 
| 8 8 | 
             
                  OEmbed::Formatter::XML.backend = 'XmlSimple'
         | 
| 9 | 
            -
                }. | 
| 10 | 
            -
             | 
| 9 | 
            +
                }.to raise_error(LoadError)
         | 
| 10 | 
            +
             | 
| 11 11 | 
             
                require 'xmlsimple'
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                 | 
| 12 | 
            +
             | 
| 13 | 
            +
                expect {
         | 
| 14 14 | 
             
                  OEmbed::Formatter::XML.backend = 'XmlSimple'
         | 
| 15 | 
            -
                }. | 
| 15 | 
            +
                }.to_not raise_error
         | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
| 18 18 | 
             
              it "should support XML" do
         | 
| 19 | 
            -
                 | 
| 20 | 
            -
             | 
| 19 | 
            +
                expect {
         | 
| 20 | 
            +
                  OEmbed::Formatter.supported?(:xml)
         | 
| 21 | 
            +
                }.to_not raise_error
         | 
| 21 22 | 
             
              end
         | 
| 22 | 
            -
             | 
| 23 | 
            +
             | 
| 23 24 | 
             
              it "should be using the XmlSimple backend" do
         | 
| 24 | 
            -
                OEmbed::Formatter::XML.backend. | 
| 25 | 
            +
                expect(OEmbed::Formatter::XML.backend).to eq(OEmbed::Formatter::XML::Backends::XmlSimple)
         | 
| 25 26 | 
             
              end
         | 
| 26 | 
            -
             | 
| 27 | 
            +
             | 
| 27 28 | 
             
              it "should decode an XML String" do
         | 
| 28 29 | 
             
                decoded = OEmbed::Formatter.decode(:xml, valid_response(:xml))
         | 
| 29 30 | 
             
                # We need to compare keys & values separately because we don't expect all
         | 
| 30 31 | 
             
                # non-string values to be recognized correctly.
         | 
| 31 | 
            -
                decoded.keys. | 
| 32 | 
            -
                decoded.values.map{|v|v.to_s}. | 
| 32 | 
            +
                expect(decoded.keys).to eq(valid_response(:object).keys)
         | 
| 33 | 
            +
                expect(decoded.values.map{|v|v.to_s}).to eq(valid_response(:object).values.map{|v|v.to_s})
         | 
| 33 34 | 
             
              end
         | 
| 34 | 
            -
             | 
| 35 | 
            +
             | 
| 35 36 | 
             
              it "should raise an OEmbed::ParseError when decoding an invalid XML String" do
         | 
| 36 | 
            -
                 | 
| 37 | 
            +
                expect {
         | 
| 37 38 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('unclosed_container', :xml))
         | 
| 38 | 
            -
                }. | 
| 39 | 
            -
                 | 
| 39 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 40 | 
            +
                expect {
         | 
| 40 41 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('unclosed_tag', :xml))
         | 
| 41 | 
            -
                }. | 
| 42 | 
            -
                 | 
| 42 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 43 | 
            +
                expect {
         | 
| 43 44 | 
             
                  decode = OEmbed::Formatter.decode(:xml, invalid_response('invalid_syntax', :xml))
         | 
| 44 | 
            -
                }. | 
| 45 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 45 46 | 
             
              end
         | 
| 46 | 
            -
             | 
| 47 | 
            +
             | 
| 47 48 | 
             
              it "should raise an OEmbed::ParseError when decoding fails with an unexpected error" do
         | 
| 48 49 | 
             
                error_to_raise = ArgumentError
         | 
| 49 | 
            -
                OEmbed::Formatter::XML.backend.parse_error. | 
| 50 | 
            -
             | 
| 51 | 
            -
                ::XmlSimple. | 
| 50 | 
            +
                expect(OEmbed::Formatter::XML.backend.parse_error).to_not be_kind_of(error_to_raise)
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                expect(::XmlSimple).to receive(:xml_in).
         | 
| 52 53 | 
             
                  and_raise(error_to_raise.new("unknown error"))
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                 | 
| 54 | 
            +
             | 
| 55 | 
            +
                expect {
         | 
| 55 56 | 
             
                  decode = OEmbed::Formatter.decode(:xml, valid_response(:xml))
         | 
| 56 | 
            -
                }. | 
| 57 | 
            +
                }.to raise_error(OEmbed::ParseError)
         | 
| 57 58 | 
             
              end
         | 
| 58 59 | 
             
            end
         | 
    
        data/spec/formatter_spec.rb
    CHANGED
    
    | @@ -4,32 +4,34 @@ describe OEmbed::Formatter do | |
| 4 4 | 
             
              include OEmbedSpecHelper
         | 
| 5 5 |  | 
| 6 6 | 
             
              it "should support JSON" do
         | 
| 7 | 
            -
                 | 
| 8 | 
            -
             | 
| 7 | 
            +
                expect {
         | 
| 8 | 
            +
                  OEmbed::Formatter.supported?(:json)
         | 
| 9 | 
            +
                }.to_not raise_error
         | 
| 9 10 | 
             
              end
         | 
| 10 11 |  | 
| 11 12 | 
             
              it "should default to JSON" do
         | 
| 12 | 
            -
                OEmbed::Formatter.default. | 
| 13 | 
            +
                expect(OEmbed::Formatter.default).to eq('json')
         | 
| 13 14 | 
             
              end
         | 
| 14 15 |  | 
| 15 16 | 
             
              it "should decode a JSON String" do
         | 
| 16 17 | 
             
                decoded = OEmbed::Formatter.decode(:json, valid_response(:json))
         | 
| 17 18 | 
             
                # We need to compare keys & values separately because we don't expect all
         | 
| 18 19 | 
             
                # non-string values to be recognized correctly.
         | 
| 19 | 
            -
                decoded.keys. | 
| 20 | 
            -
                decoded.values.map{|v|v.to_s}. | 
| 20 | 
            +
                expect(decoded.keys).to eq(valid_response(:object).keys)
         | 
| 21 | 
            +
                expect(decoded.values.map{|v|v.to_s}).to eq(valid_response(:object).values.map{|v|v.to_s})
         | 
| 21 22 | 
             
              end
         | 
| 22 23 |  | 
| 23 24 | 
             
              it "should support XML" do
         | 
| 24 | 
            -
                 | 
| 25 | 
            -
             | 
| 25 | 
            +
                expect {
         | 
| 26 | 
            +
                  OEmbed::Formatter.supported?(:xml)
         | 
| 27 | 
            +
                }.to_not raise_error
         | 
| 26 28 | 
             
              end
         | 
| 27 29 |  | 
| 28 30 | 
             
              it "should decode an XML String" do
         | 
| 29 31 | 
             
                decoded = OEmbed::Formatter.decode(:xml, valid_response(:xml))
         | 
| 30 32 | 
             
                # We need to compare keys & values separately because we don't expect all
         | 
| 31 33 | 
             
                # non-string values to be recognized correctly.
         | 
| 32 | 
            -
                decoded.keys. | 
| 33 | 
            -
                decoded.values.map{|v|v.to_s}. | 
| 34 | 
            +
                expect(decoded.keys).to eq(valid_response(:object).keys)
         | 
| 35 | 
            +
                expect(decoded.values.map{|v|v.to_s}).to eq(valid_response(:object).values.map{|v|v.to_s})
         | 
| 34 36 | 
             
              end
         | 
| 35 37 | 
             
            end
         |