omni_api 0.0.4 → 0.0.5
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/lib/omni_api/config.rb +10 -7
 - data/lib/omni_api/resources/{omni_api_connection.rb → connection.rb} +4 -6
 - data/lib/omni_api/resources/oauth2/token.rb +3 -1
 - data/lib/omni_api/resources/user_authorization_error_handler.rb +13 -0
 - data/lib/omni_api/resources/user_authorized_resource.rb +13 -0
 - data/lib/omni_api/version.rb +1 -1
 - data/spec/OmniApi/resources/connection_spec.rb +74 -0
 - data/spec/OmniApi/resources/oauth2/token_spec.rb +59 -0
 - data/spec/OmniApi/resources/user/user_resource_spec.rb +6 -0
 - data/spec/OmniApi/resources/user_authorization_error_handler_spec.rb +68 -0
 - data/spec/OmniApi/resources/user_authorized_resource_spec.rb +8 -0
 - metadata +8 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 8464dd48ed93791d548c2f5b3eaa744aec2d20f5
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 4a8c63a501d5283c8fa9c3bfaa11ca902b56d0c4
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 279d94e3a2869c510244bec6cf3cd3664615f6e2397fcc8265c563cc81c45a016a650ebce12fc9b6e0609dffe00dbe9832b36644a4a7bc997b9bf2bbec0bf1c2
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 9f8563f868fdcfeddc75ea8c4a85ce4cadf37810fb1fac1bf43f72a07d1deed89d9c3740745b9eb2c97141a28ff26c5ac221d6782f0dc361e5481604970dc599
         
     | 
    
        data/lib/omni_api/config.rb
    CHANGED
    
    | 
         @@ -11,21 +11,24 @@ module OmniApi 
     | 
|
| 
       11 
11 
     | 
    
         
             
              mattr_accessor :client_secret
         
     | 
| 
       12 
12 
     | 
    
         
             
              self.client_secret = ''
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
      
 14 
     | 
    
         
            +
              mattr_accessor :user_access_token
         
     | 
| 
      
 15 
     | 
    
         
            +
              self.user_access_token = ''
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              mattr_accessor :user_refresh_token
         
     | 
| 
      
 18 
     | 
    
         
            +
              self.user_refresh_token = ''
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              mattr_accessor :base_url
         
     | 
| 
      
 21 
     | 
    
         
            +
              self.base_url = ''
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       14 
23 
     | 
    
         
             
              # rubocop:disable Style/ClassVars
         
     | 
| 
       15 
24 
     | 
    
         
             
              def self.client_access_token=(token)
         
     | 
| 
       16 
25 
     | 
    
         
             
                @@client_access_token = "bearer #{token}"
         
     | 
| 
       17 
26 
     | 
    
         
             
              end
         
     | 
| 
       18 
27 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
              mattr_accessor :user_access_token
         
     | 
| 
       20 
     | 
    
         
            -
              self.user_access_token = ''
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
28 
     | 
    
         
             
              # rubocop:disable Style/ClassVars
         
     | 
| 
       23 
29 
     | 
    
         
             
              def self.user_access_token=(token)
         
     | 
| 
       24 
30 
     | 
    
         
             
                @@user_access_token = "bearer #{token}"
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              mattr_accessor :base_url
         
     | 
| 
       28 
     | 
    
         
            -
              self.base_url = ''
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
       29 
32 
     | 
    
         | 
| 
       30 
33 
     | 
    
         
             
              def self.config
         
     | 
| 
       31 
34 
     | 
    
         
             
                self
         
     | 
| 
         @@ -2,19 +2,17 @@ require 'active_resource/connection' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module OmniApi
         
     | 
| 
       4 
4 
     | 
    
         
             
              module Resources
         
     | 
| 
       5 
     | 
    
         
            -
                class  
     | 
| 
      
 5 
     | 
    
         
            +
                class Connection < ActiveResource::Connection
         
     | 
| 
       6 
6 
     | 
    
         
             
                  def initialize(site, format = ActiveResource::Formats::JsonFormat)
         
     | 
| 
       7 
7 
     | 
    
         
             
                    super
         
     | 
| 
       8 
8 
     | 
    
         
             
                  end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                  attr_accessor :error_handler
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                   
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  def request(method, path, *arguments)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  def request(*arguments)
         
     | 
| 
       15 
13 
     | 
    
         
             
                    super
         
     | 
| 
       16 
     | 
    
         
            -
                  rescue  
     | 
| 
       17 
     | 
    
         
            -
                    error_handler.present? ? error_handler.handle(e) : raise
         
     | 
| 
      
 14 
     | 
    
         
            +
                  rescue => e
         
     | 
| 
      
 15 
     | 
    
         
            +
                    error_handler.present? ? error_handler.handle(e, self, arguments) : raise
         
     | 
| 
       18 
16 
     | 
    
         
             
                  end
         
     | 
| 
       19 
17 
     | 
    
         
             
                end
         
     | 
| 
       20 
18 
     | 
    
         
             
              end
         
     | 
| 
         @@ -21,10 +21,12 @@ module OmniApi 
     | 
|
| 
       21 
21 
     | 
    
         
             
                      instance
         
     | 
| 
       22 
22 
     | 
    
         
             
                    end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                    def self. 
     | 
| 
      
 24 
     | 
    
         
            +
                    def self.refresh_for(refresh_token)
         
     | 
| 
       25 
25 
     | 
    
         
             
                      instance = self.new
         
     | 
| 
       26 
26 
     | 
    
         
             
                      instance.attributes[:grant_type] = OmniApi::Resources::Oauth2::GrantTypes::REFRESH_TOKEN
         
     | 
| 
      
 27 
     | 
    
         
            +
                      instance.attributes[:client_id] = OmniApi.config.client_id
         
     | 
| 
       27 
28 
     | 
    
         
             
                      instance.attributes[:refresh_token] = refresh_token
         
     | 
| 
      
 29 
     | 
    
         
            +
                      instance.attributes[:resource_type] = OmniApi::Resources::Oauth2::ResourceTypes::USER
         
     | 
| 
       28 
30 
     | 
    
         
             
                      instance.save
         
     | 
| 
       29 
31 
     | 
    
         
             
                      instance
         
     | 
| 
       30 
32 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OmniApi
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Resources
         
     | 
| 
      
 3 
     | 
    
         
            +
                class UserAuthorizationErrorHandler
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def handle(error, connection, arguments)
         
     | 
| 
      
 5 
     | 
    
         
            +
                    raise error unless error.is_a?(ActiveResource::UnauthorizedAccess)
         
     | 
| 
      
 6 
     | 
    
         
            +
                    Oauth2::Token.refresh_for(OmniApi.config.user_refresh_token)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    new_connection = connection.clone
         
     | 
| 
      
 8 
     | 
    
         
            +
                    new_connection.error_handler = nil
         
     | 
| 
      
 9 
     | 
    
         
            +
                    new_connection.request(*arguments)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -12,6 +12,19 @@ module OmniApi 
     | 
|
| 
       12 
12 
     | 
    
         
             
                    new_headers['Authorization'] = OmniApi.config.user_access_token
         
     | 
| 
       13 
13 
     | 
    
         
             
                    new_headers
         
     | 
| 
       14 
14 
     | 
    
         
             
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def self.connection(refresh = false)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @connection = create_new_connection if refresh || @connection.nil?
         
     | 
| 
      
 18 
     | 
    
         
            +
                    super
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  protected
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  def self.create_new_connection
         
     | 
| 
      
 24 
     | 
    
         
            +
                    connection = Connection.new(site, format)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    connection.error_handler = UserAuthorizationErrorHandler.new
         
     | 
| 
      
 26 
     | 
    
         
            +
                    connection
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
       15 
28 
     | 
    
         
             
                end
         
     | 
| 
       16 
29 
     | 
    
         
             
              end
         
     | 
| 
       17 
30 
     | 
    
         
             
            end
         
     | 
    
        data/lib/omni_api/version.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,74 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe OmniApi::Resources::Connection do
         
     | 
| 
      
 4 
     | 
    
         
            +
              let(:instance) { OmniApi::Resources::Connection.new('http://123.com') }
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              subject { instance }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it { is_expected.to respond_to(:error_handler=) }
         
     | 
| 
      
 9 
     | 
    
         
            +
              it { is_expected.to respond_to(:request) }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              describe '#request' do
         
     | 
| 
      
 12 
     | 
    
         
            +
                let(:path) { 'http://123.com/test' }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                subject { instance.request(:get, 'http://123.com/test', {}) }
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                context 'the underlying connection fails to resolve the request' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  before { ActiveResource::HttpMock.respond_to { |mock| mock.get path, {}, nil, 400 } }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  context 'an error handler is not set' do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    before { instance.error_handler = nil }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    it 'does not swallow the resulting exception' do
         
     | 
| 
      
 23 
     | 
    
         
            +
                      expect { subject }.to raise_error(ActiveResource::BadRequest)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  context 'an error handler is set' do
         
     | 
| 
      
 28 
     | 
    
         
            +
                    let(:error_handler) { double('error_handler') }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    before { instance.error_handler = error_handler }
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    it 'calls the handle method of the error handler' do
         
     | 
| 
      
 33 
     | 
    
         
            +
                      expect(error_handler).to receive(:handle).with(ActiveResource::BadRequest, instance, [:get, 'http://123.com/test', {}])
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                      subject
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    context 'the error handler handles the error successfully' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                      let(:response) { ActiveResource::Response.new(body: 'testR') }
         
     | 
| 
      
 40 
     | 
    
         
            +
                      before { allow(error_handler).to receive(:handle).and_return(response) }
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                      it { is_expected.to be response }
         
     | 
| 
      
 43 
     | 
    
         
            +
                    end
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  context 'a user_authorization_error_handler is used' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                    let(:error_handler) { OmniApi::Resources::UserAuthorizationErrorHandler.new }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    before { instance.error_handler = error_handler }
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                    context 'refreshing the access token works but the request always fails with 401' do
         
     | 
| 
      
 52 
     | 
    
         
            +
                      before do
         
     | 
| 
      
 53 
     | 
    
         
            +
                        token_request_headers = {'Content-Type' => 'application/json', 'Authorization' => 'bearer random'}
         
     | 
| 
      
 54 
     | 
    
         
            +
                        ActiveResource::HttpMock.respond_to do |mock|
         
     | 
| 
      
 55 
     | 
    
         
            +
                          mock.get path, {}, nil, 401
         
     | 
| 
      
 56 
     | 
    
         
            +
                          mock.post '/api/v1/oauth2/token.json', token_request_headers, nil, 200
         
     | 
| 
      
 57 
     | 
    
         
            +
                        end
         
     | 
| 
      
 58 
     | 
    
         
            +
                      end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                      it 'raises the first exception encountered after refreshing the token without causing a stack overflow' do
         
     | 
| 
      
 61 
     | 
    
         
            +
                        expect { subject }.to raise_error(ActiveResource::UnauthorizedAccess)
         
     | 
| 
      
 62 
     | 
    
         
            +
                      end
         
     | 
| 
      
 63 
     | 
    
         
            +
                    end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                context 'the underlying connection resolves the request' do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  before { ActiveResource::HttpMock.respond_to { |mock | mock.get path, {}, 'testR', 200 } }
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                  it { is_expected.to be_a(ActiveResource::Response) }
         
     | 
| 
      
 71 
     | 
    
         
            +
                  its(:body) { is_expected.to eq 'testR' }
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -6,4 +6,63 @@ describe OmniApi::Resources::Oauth2::Token do 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                it { is_expected.to eq('token') }
         
     | 
| 
       8 
8 
     | 
    
         
             
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def setup_successful_token_request
         
     | 
| 
      
 11 
     | 
    
         
            +
                body = {}
         
     | 
| 
      
 12 
     | 
    
         
            +
                headers = {'Content-Type' => 'application/json', 'Authorization' => 'bearer random'}
         
     | 
| 
      
 13 
     | 
    
         
            +
                ActiveResource::HttpMock.respond_to { |mock| mock.post '/api/v1/oauth2/token.json', headers, body.to_json, 200 }
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              describe '.create_for' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                let(:email) { 'someUser@email.com' }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                subject { OmniApi::Resources::Oauth2::Token.create_for(email) }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                it 'tries to create a new access token for the user with the given email for the the current client using client credentials' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  setup_successful_token_request
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  subject
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  expected_body = {
         
     | 
| 
      
 27 
     | 
    
         
            +
                    'grant_type' => 'client_credentials',
         
     | 
| 
      
 28 
     | 
    
         
            +
                    'client_id' => '',
         
     | 
| 
      
 29 
     | 
    
         
            +
                    'client_secret' => '',
         
     | 
| 
      
 30 
     | 
    
         
            +
                    'resource_type' => 'user',
         
     | 
| 
      
 31 
     | 
    
         
            +
                    'resource_id' => 'someUser@email.com'
         
     | 
| 
      
 32 
     | 
    
         
            +
                  }
         
     | 
| 
      
 33 
     | 
    
         
            +
                  expect(ActiveResource::HttpMock.requests.first.body).to eq expected_body.to_json
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                context 'creating the token is successful' do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  before { setup_successful_token_request }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  it { is_expected.to be_a(OmniApi::Resources::Oauth2::Token) }
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              describe '.refresh_for' do
         
     | 
| 
      
 44 
     | 
    
         
            +
                let(:refresh_token) { 'someRefreshToken' }
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                subject { OmniApi::Resources::Oauth2::Token.refresh_for(refresh_token) }
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                it 'tries to refresh the current user access token using the current user refresh token' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                  setup_successful_token_request
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  subject
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  expected_body = {
         
     | 
| 
      
 54 
     | 
    
         
            +
                    'grant_type' => 'refresh_token',
         
     | 
| 
      
 55 
     | 
    
         
            +
                    'client_id' => '',
         
     | 
| 
      
 56 
     | 
    
         
            +
                    'refresh_token' => 'someRefreshToken',
         
     | 
| 
      
 57 
     | 
    
         
            +
                    'resource_type' => 'user'
         
     | 
| 
      
 58 
     | 
    
         
            +
                  }
         
     | 
| 
      
 59 
     | 
    
         
            +
                  expect(ActiveResource::HttpMock.requests.first.body).to eq expected_body.to_json
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                context 'refreshing the token is successful' do
         
     | 
| 
      
 63 
     | 
    
         
            +
                  before { setup_successful_token_request }
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  it { is_expected.to be_a(OmniApi::Resources::Oauth2::Token) }
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
       9 
68 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2,6 +2,12 @@ require 'spec_helper' 
     | 
|
| 
       2 
2 
     | 
    
         
             
            require 'uri'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            describe OmniApi::Resources::User::UserResource do
         
     | 
| 
      
 5 
     | 
    
         
            +
              describe '.connection' do
         
     | 
| 
      
 6 
     | 
    
         
            +
                subject { OmniApi::Resources::User::UserResource.connection }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                it { is_expected.to be_a(OmniApi::Resources::Connection) }
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       5 
11 
     | 
    
         
             
              describe '.site' do
         
     | 
| 
       6 
12 
     | 
    
         
             
                subject { OmniApi::Resources::User::UserResource.site }
         
     | 
| 
       7 
13 
     | 
    
         | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'active_resource/http_mock'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe OmniApi::Resources::UserAuthorizationErrorHandler do
         
     | 
| 
      
 5 
     | 
    
         
            +
              let(:instance) { OmniApi::Resources::UserAuthorizationErrorHandler.new }
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              describe '#handle' do
         
     | 
| 
      
 8 
     | 
    
         
            +
                let(:error) { Exception.new('some message') }
         
     | 
| 
      
 9 
     | 
    
         
            +
                let(:connection) { OmniApi::Resources::Connection.new('http://123.com') }
         
     | 
| 
      
 10 
     | 
    
         
            +
                let(:arguments) { [:get, 'http://123.com', {}] }
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                subject { instance.handle(error, connection, arguments) }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                context 'the given error is not an ActiveResource::UnauthorizedAccess error' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                  it 'rethrows the given error' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                    expect { subject }.to raise_error(error)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                context 'the given error is an ActiveResource::UnauthorizedAccess error' do
         
     | 
| 
      
 21 
     | 
    
         
            +
                  let(:error) { ActiveResource::UnauthorizedAccess.new('nah') }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  it 'tries to refresh the current user access token' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    OmniApi.config.user_refresh_token = 'refreshToken'
         
     | 
| 
      
 25 
     | 
    
         
            +
                    expect(OmniApi::Resources::Oauth2::Token).to receive(:refresh_for).with('refreshToken')
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                    subject rescue nil
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  describe 'refreshing the token works' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    let(:updated_token) { OmniApi::Resources::Oauth2::Token.new({access_token: 'test'}) }
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 34 
     | 
    
         
            +
                      allow(updated_token).to receive(:persisted?).and_return(true)
         
     | 
| 
      
 35 
     | 
    
         
            +
                      allow(OmniApi::Resources::Oauth2::Token).to receive(:refresh_for).and_return(updated_token)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    it 'tries to perform the original request again' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                      expect(connection).to receive(:request).with(*arguments)
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                      subject
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                    context 'retrying the request is successful' do
         
     | 
| 
      
 45 
     | 
    
         
            +
                      let(:response) { ActiveResource::Response.new(body: 'test1') }
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                      before { allow(connection).to receive(:request).and_return(response) }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                      it { is_expected.to be response}
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                    context 'retrying the request fails' do
         
     | 
| 
      
 53 
     | 
    
         
            +
                      before { allow(connection).to receive(:request).and_raise(ActiveResource::BadRequest.new('test')) }
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                      it 'rethrows the error' do
         
     | 
| 
      
 56 
     | 
    
         
            +
                        expect { subject }.to raise_error(ActiveResource::BadRequest)
         
     | 
| 
      
 57 
     | 
    
         
            +
                      end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                      context 'the request fails again with ActiveResource::UnauthorizedAccess' do
         
     | 
| 
      
 60 
     | 
    
         
            +
                        before { allow(connection).to receive(:request).and_raise(ActiveResource::BadRequest.new('test')) }
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                      end
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -16,4 +16,12 @@ describe OmniApi::Resources::UserAuthorizedResource do 
     | 
|
| 
       16 
16 
     | 
    
         
             
                  its(['Authorization']) { is_expected.to eq('bearer ') }
         
     | 
| 
       17 
17 
     | 
    
         
             
                end
         
     | 
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              describe '.connection' do
         
     | 
| 
      
 21 
     | 
    
         
            +
                subject { OmniApi::Resources::UserAuthorizedResource.connection }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                it { is_expected.to be_a(OmniApi::Resources::Connection) }
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                its(:error_handler) { is_expected.to be_a(OmniApi::Resources::UserAuthorizationErrorHandler) }
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
       19 
27 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: omni_api
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Cristi Badila
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2015-09- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2015-09-23 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: activeresource
         
     | 
| 
         @@ -129,10 +129,10 @@ files: 
     | 
|
| 
       129 
129 
     | 
    
         
             
            - lib/omni_api/resources/base_client_model.rb
         
     | 
| 
       130 
130 
     | 
    
         
             
            - lib/omni_api/resources/base_model.rb
         
     | 
| 
       131 
131 
     | 
    
         
             
            - lib/omni_api/resources/client.rb
         
     | 
| 
      
 132 
     | 
    
         
            +
            - lib/omni_api/resources/connection.rb
         
     | 
| 
       132 
133 
     | 
    
         
             
            - lib/omni_api/resources/oauth2/grant_types.rb
         
     | 
| 
       133 
134 
     | 
    
         
             
            - lib/omni_api/resources/oauth2/resource_types.rb
         
     | 
| 
       134 
135 
     | 
    
         
             
            - lib/omni_api/resources/oauth2/token.rb
         
     | 
| 
       135 
     | 
    
         
            -
            - lib/omni_api/resources/omni_api_connection.rb
         
     | 
| 
       136 
136 
     | 
    
         
             
            - lib/omni_api/resources/payment_plan.rb
         
     | 
| 
       137 
137 
     | 
    
         
             
            - lib/omni_api/resources/phone_call.rb
         
     | 
| 
       138 
138 
     | 
    
         
             
            - lib/omni_api/resources/sms_message.rb
         
     | 
| 
         @@ -140,13 +140,16 @@ files: 
     | 
|
| 
       140 
140 
     | 
    
         
             
            - lib/omni_api/resources/user/client_association.rb
         
     | 
| 
       141 
141 
     | 
    
         
             
            - lib/omni_api/resources/user/device.rb
         
     | 
| 
       142 
142 
     | 
    
         
             
            - lib/omni_api/resources/user/user_resource.rb
         
     | 
| 
      
 143 
     | 
    
         
            +
            - lib/omni_api/resources/user_authorization_error_handler.rb
         
     | 
| 
       143 
144 
     | 
    
         
             
            - lib/omni_api/resources/user_authorized_resource.rb
         
     | 
| 
       144 
145 
     | 
    
         
             
            - lib/omni_api/version.rb
         
     | 
| 
       145 
146 
     | 
    
         
             
            - spec/OmniApi/factories/user_factory_spec.rb
         
     | 
| 
       146 
147 
     | 
    
         
             
            - spec/OmniApi/resources/client_spec.rb
         
     | 
| 
      
 148 
     | 
    
         
            +
            - spec/OmniApi/resources/connection_spec.rb
         
     | 
| 
       147 
149 
     | 
    
         
             
            - spec/OmniApi/resources/oauth2/token_spec.rb
         
     | 
| 
       148 
150 
     | 
    
         
             
            - spec/OmniApi/resources/sms_message_spec.rb
         
     | 
| 
       149 
151 
     | 
    
         
             
            - spec/OmniApi/resources/user/user_resource_spec.rb
         
     | 
| 
      
 152 
     | 
    
         
            +
            - spec/OmniApi/resources/user_authorization_error_handler_spec.rb
         
     | 
| 
       150 
153 
     | 
    
         
             
            - spec/OmniApi/resources/user_authorized_resource_spec.rb
         
     | 
| 
       151 
154 
     | 
    
         
             
            - spec/OmniApi/resources/user_spec.rb
         
     | 
| 
       152 
155 
     | 
    
         
             
            - spec/OmniApi_spec.rb
         
     | 
| 
         @@ -178,9 +181,11 @@ summary: A gem used to make using OmniApi easier 
     | 
|
| 
       178 
181 
     | 
    
         
             
            test_files:
         
     | 
| 
       179 
182 
     | 
    
         
             
            - spec/OmniApi/factories/user_factory_spec.rb
         
     | 
| 
       180 
183 
     | 
    
         
             
            - spec/OmniApi/resources/client_spec.rb
         
     | 
| 
      
 184 
     | 
    
         
            +
            - spec/OmniApi/resources/connection_spec.rb
         
     | 
| 
       181 
185 
     | 
    
         
             
            - spec/OmniApi/resources/oauth2/token_spec.rb
         
     | 
| 
       182 
186 
     | 
    
         
             
            - spec/OmniApi/resources/sms_message_spec.rb
         
     | 
| 
       183 
187 
     | 
    
         
             
            - spec/OmniApi/resources/user/user_resource_spec.rb
         
     | 
| 
      
 188 
     | 
    
         
            +
            - spec/OmniApi/resources/user_authorization_error_handler_spec.rb
         
     | 
| 
       184 
189 
     | 
    
         
             
            - spec/OmniApi/resources/user_authorized_resource_spec.rb
         
     | 
| 
       185 
190 
     | 
    
         
             
            - spec/OmniApi/resources/user_spec.rb
         
     | 
| 
       186 
191 
     | 
    
         
             
            - spec/OmniApi_spec.rb
         
     |