soapy_cake 1.10.2 → 1.11.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/lib/soapy_cake/admin_batched.rb +56 -0
- data/lib/soapy_cake/client.rb +1 -1
- data/lib/soapy_cake/response.rb +5 -3
- data/lib/soapy_cake/version.rb +1 -1
- data/lib/soapy_cake.rb +1 -0
- data/spec/lib/soapy_cake/admin_batched_spec.rb +35 -0
- data/spec/lib/soapy_cake/response_spec.rb +38 -0
- metadata +7 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0f638bcf63e5c298c8106c4c71bacdbe8acd6927
         | 
| 4 | 
            +
              data.tar.gz: 264608b47a9493bc9d3251339a6ceaf1d303495c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d66e47f6285e02f0e2adde97ee5834d440cb4d67a9f10cd1c36325d73bdacdf2393fa2a29a56e0d4e8ba45af782871467b027f63168051885b7abee9aae02ce3
         | 
| 7 | 
            +
              data.tar.gz: aa0d393e775190a19e457406bef37d4b6fd8fe05d41ddc4ab56f767de084f38a1b91c253cd17043bd0a70365f2b3ddde6537c5c82cc9de2a61fc77ef1239ef5b
         | 
| @@ -0,0 +1,56 @@ | |
| 1 | 
            +
            module SoapyCake
         | 
| 2 | 
            +
              class AdminBatched
         | 
| 3 | 
            +
                class BatchedRequest
         | 
| 4 | 
            +
                  # Both 0 and 1 return the first element. We need to set it to 1,
         | 
| 5 | 
            +
                  # otherwise we get an overlap in the next call. This is not documented in the API spec.
         | 
| 6 | 
            +
                  INITIAL_OFFSET = 1
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  # This value depends on the entity size.
         | 
| 9 | 
            +
                  # When all offers have a lot of info (e.g. geotargeting) we probably need to decrease this.
         | 
| 10 | 
            +
                  LIMIT = 500
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def initialize(admin, method, opts)
         | 
| 13 | 
            +
                    if opts.key?(:row_limit) || opts.key?(:start_at_row)
         | 
| 14 | 
            +
                      fail Error, 'Cannot set row_limit/start_at_row in batched mode!'
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    @admin = admin
         | 
| 18 | 
            +
                    @method = method
         | 
| 19 | 
            +
                    @opts = opts
         | 
| 20 | 
            +
                    @offset = INITIAL_OFFSET
         | 
| 21 | 
            +
                    @finished = false
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def to_enum
         | 
| 25 | 
            +
                    Enumerator.new do |y|
         | 
| 26 | 
            +
                      next_batch.each { |row| y << row } until finished
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  private
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  attr_reader :admin, :method, :opts, :finished, :offset
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def next_batch
         | 
| 35 | 
            +
                    result = admin.public_send(method, opts.merge(row_limit: LIMIT, start_at_row: offset))
         | 
| 36 | 
            +
                    @finished = true if result.count < LIMIT
         | 
| 37 | 
            +
                    @offset += LIMIT
         | 
| 38 | 
            +
                    result
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                ALLOWED_METHODS = %i(advertisers affiliates campaigns offers creatives)
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                def method_missing(name, opts = {})
         | 
| 45 | 
            +
                  fail Error, "Invalid method #{name}" unless ALLOWED_METHODS.include?(name)
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  BatchedRequest.new(admin, name, opts).to_enum
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                private
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                def admin
         | 
| 53 | 
            +
                  @admin ||= Admin.new
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
            end
         | 
    
        data/lib/soapy_cake/client.rb
    CHANGED
    
    
    
        data/lib/soapy_cake/response.rb
    CHANGED
    
    | @@ -10,13 +10,15 @@ module SoapyCake | |
| 10 10 | 
             
                  @short_response = short_response
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 | 
            -
                def  | 
| 13 | 
            +
                def to_enum
         | 
| 14 14 | 
             
                  check_errors!
         | 
| 15 15 |  | 
| 16 16 | 
             
                  return typed_element(sax.at_depth(3).first) if short_response
         | 
| 17 17 |  | 
| 18 | 
            -
                   | 
| 19 | 
            -
                     | 
| 18 | 
            +
                  Enumerator.new do |y|
         | 
| 19 | 
            +
                    sax.at_depth(5).each do |element|
         | 
| 20 | 
            +
                      y << typed_element(element)
         | 
| 21 | 
            +
                    end
         | 
| 20 22 | 
             
                  end
         | 
| 21 23 | 
             
                end
         | 
| 22 24 |  | 
    
        data/lib/soapy_cake/version.rb
    CHANGED
    
    
    
        data/lib/soapy_cake.rb
    CHANGED
    
    | @@ -15,6 +15,7 @@ require 'soapy_cake/response' | |
| 15 15 | 
             
            require 'soapy_cake/response_value'
         | 
| 16 16 | 
             
            require 'soapy_cake/client'
         | 
| 17 17 | 
             
            require 'soapy_cake/admin'
         | 
| 18 | 
            +
            require 'soapy_cake/admin_batched'
         | 
| 18 19 | 
             
            require 'soapy_cake/admin_addedit'
         | 
| 19 20 | 
             
            require 'soapy_cake/admin_track'
         | 
| 20 21 | 
             
            require 'soapy_cake/affiliate'
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            RSpec.describe SoapyCake::AdminBatched do
         | 
| 2 | 
            +
              let(:admin) { double('admin') }
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              before :each do
         | 
| 5 | 
            +
                allow(SoapyCake::Admin).to receive(:new).and_return(admin)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                stub_const('SoapyCake::AdminBatched::BatchedRequest::LIMIT', 2)
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              it 'returns an enumerator and uses batched CAKE calls' do
         | 
| 11 | 
            +
                expect(admin).to receive(:offers)
         | 
| 12 | 
            +
                  .with(advertiser: 1, start_at_row: 1, row_limit: 2).and_return(%i(a b))
         | 
| 13 | 
            +
                expect(admin).to receive(:offers)
         | 
| 14 | 
            +
                  .with(advertiser: 1, start_at_row: 3, row_limit: 2).and_return(%i(c))
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                result = subject.offers(advertiser: 1)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                expect(result).to be_a(Enumerator)
         | 
| 19 | 
            +
                expect(result.to_a).to eq(%i(a b c))
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              context 'errors' do
         | 
| 23 | 
            +
                it 'fails with an invalid method' do
         | 
| 24 | 
            +
                  expect { subject.clicks }.to raise_error(/Invalid method clicks/)
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                it 'fails when row_limit is set' do
         | 
| 28 | 
            +
                  expect { subject.offers(row_limit: 123) }.to raise_error(/Cannot set .* in batched mode/)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                it 'fails when start_at_row is set' do
         | 
| 32 | 
            +
                  expect { subject.offers(start_at_row: 123) }.to raise_error(/Cannot set .* in batched mode/)
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            RSpec.describe SoapyCake::Response do
         | 
| 2 | 
            +
              let(:xml) do
         | 
| 3 | 
            +
                <<-EOD
         | 
| 4 | 
            +
                  <?xml version="1.0" encoding="utf-8"?>
         | 
| 5 | 
            +
                  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
         | 
| 6 | 
            +
                    <soap:Body>
         | 
| 7 | 
            +
                      <SomeResponse>
         | 
| 8 | 
            +
                        <SomeResult>
         | 
| 9 | 
            +
                          <success>true</success>
         | 
| 10 | 
            +
                          <row_count>2</row_count>
         | 
| 11 | 
            +
                          <somes>
         | 
| 12 | 
            +
                            <some>
         | 
| 13 | 
            +
                              <id>123</id>
         | 
| 14 | 
            +
                            </some>
         | 
| 15 | 
            +
                            <some>
         | 
| 16 | 
            +
                              <id>312</id>
         | 
| 17 | 
            +
                            </some>
         | 
| 18 | 
            +
                          </somes>
         | 
| 19 | 
            +
                        </SomeResult>
         | 
| 20 | 
            +
                      </SomeResponse>
         | 
| 21 | 
            +
                    </soap:Body>
         | 
| 22 | 
            +
                  </soap:Envelope>
         | 
| 23 | 
            +
                EOD
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              subject { described_class.new(xml.strip, false) }
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              it 'returns an enumerator' do
         | 
| 29 | 
            +
                expect(subject.to_enum).to be_a(Enumerator)
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              it 'parses the CAKE XML structure properly' do
         | 
| 33 | 
            +
                expect(subject.to_enum.to_a).to eq([
         | 
| 34 | 
            +
                  { id: '123' },
         | 
| 35 | 
            +
                  { id: '312' }
         | 
| 36 | 
            +
                ])
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: soapy_cake
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.11.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - ad2games GmbH
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-07- | 
| 11 | 
            +
            date: 2015-07-27 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -183,6 +183,7 @@ files: | |
| 183 183 | 
             
            - lib/soapy_cake.rb
         | 
| 184 184 | 
             
            - lib/soapy_cake/admin.rb
         | 
| 185 185 | 
             
            - lib/soapy_cake/admin_addedit.rb
         | 
| 186 | 
            +
            - lib/soapy_cake/admin_batched.rb
         | 
| 186 187 | 
             
            - lib/soapy_cake/admin_track.rb
         | 
| 187 188 | 
             
            - lib/soapy_cake/affiliate.rb
         | 
| 188 189 | 
             
            - lib/soapy_cake/client.rb
         | 
| @@ -216,10 +217,12 @@ files: | |
| 216 217 | 
             
            - spec/integration/soapy_cake/admin_spec.rb
         | 
| 217 218 | 
             
            - spec/integration/soapy_cake/admin_track_spec.rb
         | 
| 218 219 | 
             
            - spec/lib/soapy_cake/admin_addedit_spec.rb
         | 
| 220 | 
            +
            - spec/lib/soapy_cake/admin_batched_spec.rb
         | 
| 219 221 | 
             
            - spec/lib/soapy_cake/admin_spec.rb
         | 
| 220 222 | 
             
            - spec/lib/soapy_cake/admin_track_spec.rb
         | 
| 221 223 | 
             
            - spec/lib/soapy_cake/affiliate_spec.rb
         | 
| 222 224 | 
             
            - spec/lib/soapy_cake/request_spec.rb
         | 
| 225 | 
            +
            - spec/lib/soapy_cake/response_spec.rb
         | 
| 223 226 | 
             
            - spec/lib/soapy_cake/response_value_spec.rb
         | 
| 224 227 | 
             
            - spec/spec_helper.rb
         | 
| 225 228 | 
             
            - spec/support/admin_method_example.rb
         | 
| @@ -270,10 +273,12 @@ test_files: | |
| 270 273 | 
             
            - spec/integration/soapy_cake/admin_spec.rb
         | 
| 271 274 | 
             
            - spec/integration/soapy_cake/admin_track_spec.rb
         | 
| 272 275 | 
             
            - spec/lib/soapy_cake/admin_addedit_spec.rb
         | 
| 276 | 
            +
            - spec/lib/soapy_cake/admin_batched_spec.rb
         | 
| 273 277 | 
             
            - spec/lib/soapy_cake/admin_spec.rb
         | 
| 274 278 | 
             
            - spec/lib/soapy_cake/admin_track_spec.rb
         | 
| 275 279 | 
             
            - spec/lib/soapy_cake/affiliate_spec.rb
         | 
| 276 280 | 
             
            - spec/lib/soapy_cake/request_spec.rb
         | 
| 281 | 
            +
            - spec/lib/soapy_cake/response_spec.rb
         | 
| 277 282 | 
             
            - spec/lib/soapy_cake/response_value_spec.rb
         | 
| 278 283 | 
             
            - spec/spec_helper.rb
         | 
| 279 284 | 
             
            - spec/support/admin_method_example.rb
         |