api-model 2.6.0 → 2.7.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -5
- data/README.md +3 -0
- data/api-model.gemspec +1 -1
- data/lib/api_model/response.rb +7 -1
- data/spec/api-model/parser_spec.rb +47 -0
- metadata +3 -3
- data/spec/api-model/json_response_parser_spec.rb +0 -17
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7d0dd9a26e6eafcc5cfde5f0f7efe1fb7f1ef3e4
         | 
| 4 | 
            +
              data.tar.gz: efea549d31e9bc395b67f02f02d0bd9e2761e191
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0151bb44bddbf6764c40719142841857b1ee27d5dd0ce2a67f7dccb541862c54129eef6b035d1a501a13909ac9eb151c3e2efb62a3b08eba11c4882d50a91c1d
         | 
| 7 | 
            +
              data.tar.gz: 0d2abb36cbc68bdc02555f99fb8ae9435fc4822b2c76d9ccd682974f91d461a17b1d02f2a90339830718a27e148cd4bfe19b2565ef942268729dcd9bd01c189a
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                api-model (2. | 
| 4 | 
            +
                api-model (2.7.0)
         | 
| 5 5 | 
             
                  activemodel (~> 4.1)
         | 
| 6 6 | 
             
                  activesupport (~> 4.1)
         | 
| 7 7 | 
             
                  hash-pipe (~> 0.0)
         | 
| @@ -12,10 +12,10 @@ PATH | |
| 12 12 | 
             
            GEM
         | 
| 13 13 | 
             
              remote: https://rubygems.org/
         | 
| 14 14 | 
             
              specs:
         | 
| 15 | 
            -
                activemodel (4.2. | 
| 16 | 
            -
                  activesupport (= 4.2. | 
| 15 | 
            +
                activemodel (4.2.3)
         | 
| 16 | 
            +
                  activesupport (= 4.2.3)
         | 
| 17 17 | 
             
                  builder (~> 3.1)
         | 
| 18 | 
            -
                activesupport (4.2. | 
| 18 | 
            +
                activesupport (4.2.3)
         | 
| 19 19 | 
             
                  i18n (~> 0.7)
         | 
| 20 20 | 
             
                  json (~> 1.7, >= 1.7.7)
         | 
| 21 21 | 
             
                  minitest (~> 5.1)
         | 
| @@ -40,7 +40,7 @@ GEM | |
| 40 40 | 
             
                equalizer (0.0.11)
         | 
| 41 41 | 
             
                ethon (0.7.4)
         | 
| 42 42 | 
             
                  ffi (>= 1.3.0)
         | 
| 43 | 
            -
                ffi (1.9. | 
| 43 | 
            +
                ffi (1.9.10)
         | 
| 44 44 | 
             
                hash-pipe (0.3.0)
         | 
| 45 45 | 
             
                  activesupport (~> 4.1)
         | 
| 46 46 | 
             
                http-cookie (1.0.2)
         | 
    
        data/README.md
    CHANGED
    
    | @@ -192,6 +192,9 @@ an API which returns something other than JSON, you can set custom parsers to de | |
| 192 192 | 
             
            before they are sent to builder classes. The parser should work in the same way as a custom builder, except it needs
         | 
| 193 193 | 
             
            to respond to `#parse`, with the raw response body as an argument.
         | 
| 194 194 |  | 
| 195 | 
            +
            Parsers can also access the raw `response` object, like builders, by using a #parse method which takes two
         | 
| 196 | 
            +
            arguments.
         | 
| 197 | 
            +
             | 
| 195 198 | 
             
            ### Raising exceptions
         | 
| 196 199 |  | 
| 197 200 | 
             
            ```ruby
         | 
    
        data/api-model.gemspec
    CHANGED
    
    | @@ -2,7 +2,7 @@ $:.push File.expand_path("../lib", __FILE__) | |
| 2 2 |  | 
| 3 3 | 
             
            Gem::Specification.new do |s|
         | 
| 4 4 | 
             
              s.name        = "api-model"
         | 
| 5 | 
            -
              s.version     = "2. | 
| 5 | 
            +
              s.version     = "2.7.0"
         | 
| 6 6 | 
             
              s.authors     = ["Damien Timewell", "Erik Rothoff Andersson"]
         | 
| 7 7 | 
             
              s.email       = ["mail@damientimewell.com", "erik.rothoff@gmail.com"]
         | 
| 8 8 | 
             
              s.licenses    = ['MIT']
         | 
    
        data/lib/api_model/response.rb
    CHANGED
    
    | @@ -46,7 +46,13 @@ module ApiModel | |
| 46 46 | 
             
                end
         | 
| 47 47 |  | 
| 48 48 | 
             
                def response_body
         | 
| 49 | 
            -
                  @response_body  | 
| 49 | 
            +
                  return @response_body if @response_body.present?
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  if @_config.parser.method(:parse).arity == 2
         | 
| 52 | 
            +
                    @response_body = @_config.parser.parse self, http_response.api_call.body
         | 
| 53 | 
            +
                  else
         | 
| 54 | 
            +
                    @response_body = @_config.parser.parse http_response.api_call.body
         | 
| 55 | 
            +
                  end
         | 
| 50 56 | 
             
                end
         | 
| 51 57 |  | 
| 52 58 | 
             
                def successful?
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'support/mock_models/blog_post'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe "Parsing" do
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              after :each do
         | 
| 7 | 
            +
                BlogPost.reset_api_configuration
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              describe "Default parser" do
         | 
| 11 | 
            +
                it "should produce a hash given valid json" do
         | 
| 12 | 
            +
                  ApiModel::ResponseParser::Json.new.parse("{\"name\":\"foo\"}")["name"].should eq "foo"
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                it "should catch errors from parsing invalid json" do
         | 
| 16 | 
            +
                  ApiModel::Log.should_receive(:info).with "Could not parse JSON response: blah"
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  expect {
         | 
| 19 | 
            +
                    ApiModel::ResponseParser::Json.new.parse("blah")
         | 
| 20 | 
            +
                  }.to_not raise_error
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              describe "Parser with response handling" do
         | 
| 25 | 
            +
                class CustomResponseParser
         | 
| 26 | 
            +
                  def parse(response, body)
         | 
| 27 | 
            +
                    response.metadata.foobar = "Baz"
         | 
| 28 | 
            +
                    { name: "A blog post" }
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                before do
         | 
| 33 | 
            +
                  BlogPost.api_config do |config|
         | 
| 34 | 
            +
                    config.parser = CustomResponseParser.new
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                it "should use the response object" do
         | 
| 39 | 
            +
                  VCR.use_cassette('posts') do
         | 
| 40 | 
            +
                    res = BlogPost.get_json "http://api-model-specs.com/single_post"
         | 
| 41 | 
            +
                    res.metadata.foobar.should eq "Baz"
         | 
| 42 | 
            +
                    res.name.should eq "A blog post"
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: api-model
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.7.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Damien Timewell
         | 
| @@ -183,7 +183,7 @@ files: | |
| 183 183 | 
             
            - spec/api-model/configuration_spec.rb
         | 
| 184 184 | 
             
            - spec/api-model/http_request_spec.rb
         | 
| 185 185 | 
             
            - spec/api-model/initializer_spec.rb
         | 
| 186 | 
            -
            - spec/api-model/ | 
| 186 | 
            +
            - spec/api-model/parser_spec.rb
         | 
| 187 187 | 
             
            - spec/api-model/response_spec.rb
         | 
| 188 188 | 
             
            - spec/spec_helper.rb
         | 
| 189 189 | 
             
            - spec/support/fixtures/cars.yml
         | 
| @@ -226,7 +226,7 @@ test_files: | |
| 226 226 | 
             
            - spec/api-model/configuration_spec.rb
         | 
| 227 227 | 
             
            - spec/api-model/http_request_spec.rb
         | 
| 228 228 | 
             
            - spec/api-model/initializer_spec.rb
         | 
| 229 | 
            -
            - spec/api-model/ | 
| 229 | 
            +
            - spec/api-model/parser_spec.rb
         | 
| 230 230 | 
             
            - spec/api-model/response_spec.rb
         | 
| 231 231 | 
             
            - spec/spec_helper.rb
         | 
| 232 232 | 
             
            - spec/support/fixtures/cars.yml
         | 
| @@ -1,17 +0,0 @@ | |
| 1 | 
            -
            require 'spec_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            describe ApiModel::ResponseParser::Json do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              it "should produce a hash given valid json" do
         | 
| 6 | 
            -
                ApiModel::ResponseParser::Json.new.parse("{\"name\":\"foo\"}")["name"].should eq "foo"
         | 
| 7 | 
            -
              end
         | 
| 8 | 
            -
             | 
| 9 | 
            -
              it "should catch errors from parsing invalid json" do
         | 
| 10 | 
            -
                ApiModel::Log.should_receive(:info).with "Could not parse JSON response: blah"
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                expect {
         | 
| 13 | 
            -
                  ApiModel::ResponseParser::Json.new.parse("blah")
         | 
| 14 | 
            -
                }.to_not raise_error
         | 
| 15 | 
            -
              end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            end
         |