hasoffersv3 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b36a6dc2d698ab001e81abab9d81817768a0b380
4
- data.tar.gz: 742c1ac5faff8ef98652e7215bc924d2e8dafa2f
3
+ metadata.gz: 4756bb80ad0c0810d52a7eeb37a54583f353b215
4
+ data.tar.gz: 381f65f864de2725357e2f4a7a9a5e0dd2fe25ae
5
5
  SHA512:
6
- metadata.gz: faad76a0e86ee5d00fa3332bdec0027b7fa73b6f17f013a06ce93a6d47813f4db3e5a7837d524f1f235b4a021386661efc9a2565a20917cfd40dabd12270cb5f
7
- data.tar.gz: ce2014031b7e6409ef398afdd507a95a9d0d970cb65e70f9e8a2a12cfbed31b7c20e6cc8ee6be6251dafe68139302734e897b5392947f44bf6847ee0ec9faeec
6
+ metadata.gz: 0f8cfd576d622db0094c2e2c4b1e558a111b62e180daa69e634a49ea16630badc5f84891f0d3104ca1dc15e4a8a4155cb4dcc24d8020879e5a98d765689e3296
7
+ data.tar.gz: b49e82d36cef0696416f0d42d4426fc048ec51dd61d88995092960b6bb04ee8403e820b351850e79a6334266fb778bd76d2948540ae4081c80263e159789fcc6
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.0.0-p353
1
+ 2.1.2
data/.travis.yml CHANGED
@@ -2,4 +2,7 @@ language: ruby
2
2
  script: bundle exec rspec spec
3
3
  rvm:
4
4
  - 1.9.3
5
+ - 2.0.0
5
6
  - 2.1.1
7
+ - 2.1.2
8
+ - ruby-head
data/Gemfile CHANGED
@@ -1,2 +1,7 @@
1
1
  source "https://rubygems.org"
2
2
  gemspec
3
+
4
+ # To support Ruby 2.2.0
5
+ group :test do
6
+ gem 'safe_yaml', github: 'dtao/safe_yaml'
7
+ end
data/README.md CHANGED
@@ -12,6 +12,8 @@ Supported ruby versions:
12
12
 
13
13
  * 1.9.3
14
14
  * 2.0
15
+ * 2.1
16
+ * 2.2
15
17
 
16
18
  ## Installation
17
19
 
@@ -0,0 +1,30 @@
1
+ class HasOffersV3
2
+ class Adapter
3
+ attr_reader :configuration
4
+
5
+ def initialize(configuration, target)
6
+ @configuration = configuration
7
+ @target = target
8
+ end
9
+
10
+ def with_configuration(&block)
11
+ previous_config = HasOffersV3.configuration
12
+ HasOffersV3.configuration = @configuration
13
+ begin
14
+ yield
15
+ ensure
16
+ HasOffersV3.configuration = previous_config
17
+ end
18
+ end
19
+
20
+ def method_missing(meth, *args, &block)
21
+ if @target.respond_to?(meth)
22
+ with_configuration do
23
+ @target.send(meth, *args, &block)
24
+ end
25
+ else
26
+ super
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,4 +1,4 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class Advertiser < Base
3
3
  class << self
4
4
  def find_all_ids
@@ -1,4 +1,4 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class AdvertiserUser < Base
3
3
  class << self
4
4
  def find_all(params = {})
@@ -1,4 +1,4 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class Affiliate < Base
3
3
  class << self
4
4
  def find_all(params = {})
@@ -0,0 +1,28 @@
1
+ class HasOffersV3
2
+ class AffiliateOffer < Base
3
+
4
+ def self.target
5
+ 'Affiliate_Offer'
6
+ end
7
+
8
+ def self.find_all(params = {})
9
+ post_request 'findAll', params
10
+ end
11
+
12
+ def self.find_by_id(params = {})
13
+ requires! params, [:id]
14
+ post_request 'findById', params
15
+ end
16
+
17
+ def self.get_categories(params = {})
18
+ requires! params, [:ids]
19
+ post_request 'getCategories', params
20
+ end
21
+
22
+ def self.get_target_countries(params = {})
23
+ requires! params, [:ids]
24
+ post_request 'getTargetCountries', params
25
+ end
26
+
27
+ end
28
+ end
@@ -1,7 +1,7 @@
1
1
  require 'net/http' if RUBY_VERSION < '2'
2
2
  require 'active_support/core_ext/object/to_query'
3
3
 
4
- module HasOffersV3
4
+ class HasOffersV3
5
5
  class Base
6
6
  class << self
7
7
  def get_request(method, params = {}, &block)
@@ -44,53 +44,20 @@ module HasOffersV3
44
44
  name.split('::').last
45
45
  end
46
46
 
47
- private
48
-
49
- def deprecation(from, to)
50
- warn "\033[31m[DEPRECATION] `#{ name }.#{ from }` is deprecated. Please use `#{ name }.#{ to }` instead.\033[0m"
47
+ def client
48
+ HasOffersV3.client
51
49
  end
52
50
 
53
- def new_http(uri)
54
- http = Net::HTTP.new(uri.host, uri.port)
55
- http.use_ssl = true if uri.scheme == 'https'
56
- http.read_timeout = 600
57
- http
58
- end
51
+ private
59
52
 
60
- def query_string(data_hash)
61
- # Rails to_params adds an extra open close brackets to multi-dimensional array parameters which
62
- # hasoffers doesn't like, so the gsub here takes care of that.
63
- data_hash.to_param.gsub(/\[\]\[/,'[')
53
+ def deprecation(from, to)
54
+ warn "\033[31m[DEPRECATION] `#{ name }.#{ from }` is deprecated. Please use `#{ name }.#{ to }` instead.\033[0m"
64
55
  end
65
56
 
66
57
  def make_request(http_method, method, params)
67
- data = build_request_params(method, params)
68
- if http_method == :post
69
- uri = URI.parse("#{HasOffersV3.configuration.base_uri}/#{target}.json")
70
- http = new_http(uri)
71
- raw_request = Net::HTTP::Post.new(uri.request_uri)
72
- raw_request.body = query_string data
73
- else # assume get
74
- uri = URI.parse("#{HasOffersV3.configuration.base_uri}/#{target}.json?#{query_string(data)}")
75
- http = new_http(uri)
76
- raw_request = Net::HTTP::Get.new(uri.request_uri)
77
- end
78
- http_response = execute_request(http, raw_request)
79
-
80
- Response.new(http_response)
58
+ client.request(http_method, target, method, params)
81
59
  end
82
60
 
83
- def execute_request(net_http, raw_request)
84
- net_http.request raw_request
85
- end
86
-
87
- def build_request_params(method, params)
88
- params['Method'] = method
89
- {
90
- NetworkId: HasOffersV3.configuration.network_id,
91
- NetworkToken: HasOffersV3.configuration.api_key,
92
- }.merge(params)
93
- end
94
61
  end
95
62
  end
96
63
  end
@@ -0,0 +1,64 @@
1
+ require 'net/http' if RUBY_VERSION < '2'
2
+ require 'active_support/core_ext/object/to_query'
3
+
4
+ class HasOffersV3
5
+ class Client
6
+
7
+ attr_accessor :configuration
8
+
9
+ def initialize(configuration)
10
+ @configuration = configuration
11
+ end
12
+
13
+ def request(http_method, target, method, params)
14
+ data = build_request_params(method, params)
15
+
16
+ target_uri = "#{base_uri}/#{target}.json"
17
+
18
+ if http_method == :post
19
+ uri = URI.parse(target_uri)
20
+ http = new_http(uri)
21
+ raw_request = Net::HTTP::Post.new(uri.request_uri)
22
+ raw_request.body = query_string data
23
+ else # assume get
24
+ uri = URI.parse("#{target_uri}?#{query_string(data)}")
25
+ http = new_http(uri)
26
+ raw_request = Net::HTTP::Get.new(uri.request_uri)
27
+ end
28
+ http_response = execute_request(http, raw_request)
29
+
30
+ Response.new(http_response)
31
+ end
32
+
33
+ def execute_request(net_http, raw_request)
34
+ net_http.request raw_request
35
+ end
36
+
37
+ def build_request_params(method, params)
38
+ params['Method'] = method
39
+ {
40
+ NetworkId: configuration.network_id,
41
+ NetworkToken: configuration.api_key,
42
+ api_key: configuration.api_key
43
+ }.merge(params)
44
+ end
45
+
46
+ def query_string(data_hash)
47
+ # Rails to_params adds an extra open close brackets to multi-dimensional array parameters which
48
+ # hasoffers doesn't like, so the gsub here takes care of that.
49
+ data_hash.to_param.gsub(/\[\]\[/,'[')
50
+ end
51
+
52
+ def new_http(uri)
53
+ http = Net::HTTP.new(uri.host, uri.port)
54
+ http.use_ssl = true if uri.scheme == 'https'
55
+ http.read_timeout = 600
56
+ http
57
+ end
58
+
59
+ def base_uri
60
+ configuration.base_uri
61
+ end
62
+
63
+ end
64
+ end
@@ -1,11 +1,40 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class Configuration
3
- attr_accessor :network_id, :api_key, :protocol, :host, :base_path
4
3
 
5
- def initialize
6
- @protocol = 'http'
7
- @host = 'api.hasoffers.com'
8
- @base_path = '/v3'
4
+ DEFAULTS = {
5
+ host: 'api.hasoffers.com',
6
+ protocol: 'http',
7
+ base_path: '/v3',
8
+ network_id: '',
9
+ api_key: ''
10
+ }
11
+
12
+ DEFAULTS.keys.each do |option_name|
13
+ define_method option_name do
14
+ @options[option_name]
15
+ end
16
+
17
+ define_method "#{option_name}=" do |val|
18
+ @options[option_name] = val
19
+ end
20
+ end
21
+
22
+ attr_reader :options
23
+
24
+ def initialize(options={})
25
+ defaults = DEFAULTS.dup
26
+ @options = options.dup
27
+
28
+
29
+ defaults.keys.each do |key|
30
+ # Symbolize only keys that are needed
31
+ @options[key] = @options[key.to_s] if @options.has_key?(key.to_s)
32
+ end
33
+
34
+ # Use default when option is not specified or nil
35
+ defaults.keys.each do |key|
36
+ @options[key] = defaults[key] if @options[key].nil?
37
+ end
9
38
  end
10
39
 
11
40
  def base_uri
@@ -1,4 +1,4 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class Conversion < Base
3
3
  class << self
4
4
  def findAll(params = {})
@@ -1,4 +1,4 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class Offer < Base
3
3
  class << self
4
4
  def find_all(params = {})
@@ -1,4 +1,4 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class RawLog < Base
3
3
  class << self
4
4
  def get_download_link(params = {})
@@ -1,4 +1,4 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class Report < Base
3
3
  Target = 'Report'
4
4
 
@@ -1,6 +1,6 @@
1
1
  require 'oj'
2
2
 
3
- module HasOffersV3
3
+ class HasOffersV3
4
4
  class Response
5
5
  attr_reader :body, :http_status_code, :http_message, :http_headers
6
6
 
@@ -1,4 +1,4 @@
1
- module HasOffersV3
1
+ class HasOffersV3
2
2
  class Testing
3
3
  class << self
4
4
  attr_accessor :__test_mode, :__prepared_request
@@ -20,11 +20,12 @@ module HasOffersV3
20
20
  end
21
21
 
22
22
  def stub_request(status = 200, body = '{"response":{"status":1,"data":[]}}', message = 'mock')
23
- self.__prepared_request = begin
24
- response = Net::HTTPResponse.new '1.1', status, message
25
- response.stub(:body) { body }
26
- response
27
- end
23
+ self.__prepared_request =
24
+ begin
25
+ response = Net::HTTPResponse.new '1.1', status, message
26
+ response.stub(:body) { body }
27
+ response
28
+ end
28
29
  end
29
30
 
30
31
  def execute_stubbed_request
@@ -35,18 +36,14 @@ module HasOffersV3
35
36
  end
36
37
  end
37
38
 
38
- class Base
39
- class << self
40
- private
41
-
42
- alias_method :original_execute_request, :execute_request
39
+ class Client
40
+ alias_method :original_execute_request, :execute_request
43
41
 
44
- def execute_request(net_http, raw_request)
45
- if HasOffersV3::Testing.enabled?
46
- HasOffersV3::Testing.execute_stubbed_request
47
- else
48
- original_execute_request net_http, raw_request
49
- end
42
+ def execute_request(net_http, raw_request)
43
+ if HasOffersV3::Testing.enabled?
44
+ HasOffersV3::Testing.execute_stubbed_request
45
+ else
46
+ original_execute_request net_http, raw_request
50
47
  end
51
48
  end
52
49
  end
@@ -1,3 +1,3 @@
1
- module HasOffersV3
2
- VERSION = '0.1.3'
1
+ class HasOffersV3
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/hasoffersv3.rb CHANGED
@@ -1,19 +1,65 @@
1
1
  require 'net/http'
2
2
 
3
+ require 'hasoffersv3/client'
4
+
3
5
  %w!base affiliate response conversion raw_log report configuration advertiser advertiser_user offer!.each do |file|
4
6
  require "hasoffersv3/#{file}"
5
7
  end
6
8
 
7
- module HasOffersV3
9
+ require 'hasoffersv3/affiliate_offer'
10
+ require 'hasoffersv3/adapter'
11
+
12
+ class HasOffersV3
13
+
14
+ API_TARGETS = {
15
+ advertisers: HasOffersV3::Advertiser,
16
+ advertiser_users: HasOffersV3::AdvertiserUser,
17
+ affiliates: HasOffersV3::Affiliate,
18
+ affiliate_offers: HasOffersV3::AffiliateOffer,
19
+ conversions: HasOffersV3::Conversion,
20
+ offers: HasOffersV3::Offer,
21
+ raw_logs: HasOffersV3::RawLog,
22
+ reports: HasOffersV3::Report
23
+ }
24
+
8
25
  class << self
26
+
27
+ def configuration=(config)
28
+ @configuration = config
29
+ end
30
+
9
31
  def configuration
10
- @configuration ||= Configuration.new
32
+ @configuration ||= ::HasOffersV3::Configuration.new
11
33
  end
12
34
 
13
35
  def configure &block
14
- block.call configuration
36
+ yield(configuration)
37
+ end
38
+
39
+ def client
40
+ ::HasOffersV3::Client.new(configuration)
15
41
  end
16
42
  end
43
+
44
+ def configuration
45
+ @configuration ||= ::HasOffersV3.configuration
46
+ end
47
+
48
+ def configure(&block)
49
+ yield(configuration)
50
+ end
51
+
52
+ def initialize(options = {})
53
+ @options = options.dup
54
+ @configuration = ::HasOffersV3::Configuration.new options
55
+ end
56
+
57
+ API_TARGETS.each do |name, target|
58
+ define_method name do
59
+ HasOffersV3::Adapter.new(configuration, target)
60
+ end
61
+ end
62
+
17
63
  end
18
64
 
19
65
  if ENV['RAILS_ENV'] == 'test' || ENV['RACK_ENV'] == 'test' || ENV['TEST']
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe HasOffersV3::Adapter do
4
+
5
+ let(:configuration) { HasOffersV3::Configuration.new(host: 'example.com') }
6
+ subject { HasOffersV3::Adapter.new(HasOffersV3::Offer, HasOffersV3::Offer) }
7
+
8
+ describe '#with_configuration' do
9
+ it 'should apply for block another config' do
10
+ default_config = HasOffersV3.configuration
11
+ expect(HasOffersV3::Offer.client.configuration).to eq(default_config)
12
+
13
+ subject.with_configuration do
14
+ expect(HasOffersV3::Offer.client.configuration).to eq(subject.configuration)
15
+ end
16
+
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ describe HasOffersV3::AffiliateOffer do
4
+ subject { HasOffersV3::AffiliateOffer }
5
+
6
+ let(:url) { api_url 'Affiliate_Offer' }
7
+
8
+ describe '.target' do
9
+ specify { expect(subject.target).to eq('Affiliate_Offer')}
10
+ end
11
+
12
+ context 'urls' do
13
+ specify { expect(url).to eq('http://api.hasoffers.com/v3/Affiliate_Offer.json') }
14
+ end
15
+
16
+ describe '.find_all' do
17
+ it 'should make a proper request call' do
18
+ stub_call
19
+ response = subject.find_all
20
+ request = a_request(:post, url).with(body: hash_including('Method' => 'findAll'))
21
+ expect(request).to have_been_made
22
+ validate_call response
23
+ end
24
+ end
25
+
26
+ describe '.find_by_id' do
27
+ it 'should make a proper request call' do
28
+ stub_call
29
+ response = subject.find_by_id id: 1
30
+ request = a_request(:post, url).with(body: hash_including('Method' => 'findById', 'id' => '1'))
31
+ expect(request).to have_been_made
32
+
33
+ validate_call response
34
+ end
35
+
36
+ context 'when there is no id' do
37
+ it 'should raise exception' do
38
+ expect { subject.find_by_id }.to raise_error ArgumentError
39
+ end
40
+ end
41
+ end
42
+
43
+ describe '.get_categories' do
44
+ it 'should make a proper request call' do
45
+ stub_call
46
+ response = subject.get_categories ids: [1, 2]
47
+ request = a_request(:post, url).with(body: hash_including('Method' => 'getCategories'))
48
+ expect(request).to have_been_made
49
+
50
+ validate_call response
51
+ end
52
+
53
+ context 'when there is no id' do
54
+ it 'should raise exception' do
55
+ expect { subject.get_categories }.to raise_error ArgumentError
56
+ end
57
+ end
58
+ end
59
+
60
+ describe '.get_target_countries' do
61
+ it 'should make a proper request call' do
62
+ stub_call
63
+ response = subject.get_target_countries ids: [1, 2]
64
+ request = a_request(:post, url).with(body: hash_including('Method' => 'getTargetCountries'))
65
+ expect(request).to have_been_made
66
+
67
+ validate_call response
68
+ end
69
+
70
+ context 'when there is no id' do
71
+ it 'should raise exception' do
72
+ expect { subject.get_target_countries }.to raise_error ArgumentError
73
+ end
74
+ end
75
+ end
76
+
77
+ end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe HasOffersV3::Base do
4
4
  subject { HasOffersV3::Base }
5
5
 
6
- let(:url) { Regexp.new api_url('Base') }
6
+ let(:url) { Regexp.new api_url('Base') }
7
7
 
8
8
  describe :requires! do
9
9
  it 'raise ArgumentError is parameters are missing' do
@@ -15,19 +15,28 @@ describe HasOffersV3::Base do
15
15
  it "should make a proper request" do
16
16
  stub_call :get
17
17
  response = subject.get_request 'test'
18
- a_request(:get, url).with(query: hash_including({'Method' => 'test'})).should have_been_made
18
+ request = a_request(:get, url).with(query: hash_including('Method' => 'test'))
19
+ expect(request).to have_been_made
19
20
  validate_call response
20
21
  end
21
22
 
22
23
  context "with HTTPS enabled" do
24
+
23
25
  before(:each) do
26
+ @old_protocol = HasOffersV3.configuration.protocol
24
27
  HasOffersV3.configuration.protocol = 'https'
25
28
  end
26
29
 
30
+ after(:each) do
31
+ HasOffersV3.configuration.protocol = @old_protocol
32
+ end
33
+
27
34
  it "should make a proper request" do
28
35
  stub_call :get
29
36
  response = subject.get_request 'test'
30
- a_request(:get, url).with(query: hash_including({'Method' => 'test'})).should have_been_made
37
+ a_request(:get, url).
38
+ with(query: hash_including('Method' => 'test')).
39
+ should have_been_made
31
40
  validate_call response
32
41
  end
33
42
  end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe HasOffersV3::Client do
4
+
5
+ describe '#base_uri' do
6
+
7
+ let(:configuration_to_default_host) { HasOffersV3::Configuration.new }
8
+ let(:config_for_proxy) {
9
+ result = HasOffersV3::Configuration.new
10
+ result.host = 'api.applift.com'
11
+ result
12
+ }
13
+
14
+ it 'should be different configs' do
15
+ default_connection = HasOffersV3::Client.new(configuration_to_default_host)
16
+ expect(default_connection.base_uri).to eq('http://api.hasoffers.com/v3')
17
+
18
+ proxy_connection = HasOffersV3::Client.new(config_for_proxy)
19
+ expect(proxy_connection.base_uri).to eq('http://api.applift.com/v3')
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe HasOffersV3 do
4
+
5
+ context 'singleton' do
6
+ it 'should use default config' do
7
+ subject = HasOffersV3::Offer.client.configuration
8
+ expect(subject).to eq(HasOffersV3.configuration)
9
+ end
10
+ end
11
+
12
+ describe '#configuration' do
13
+ it 'should create different connections' do
14
+ subject = HasOffersV3.new
15
+ expect(subject.configuration).to_not eq(HasOffersV3.configuration)
16
+ end
17
+ end
18
+
19
+ context 'api' do
20
+ subject { HasOffersV3.new }
21
+
22
+ describe '#offers' do
23
+ it 'should get offers for current connection' do
24
+ expect(HasOffersV3::Offer).to receive(:find_all)
25
+ subject.offers.find_all
26
+ end
27
+ end
28
+ end
29
+ end
30
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hasoffersv3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maximilian Seifert
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-15 00:00:00.000000000 Z
12
+ date: 2014-09-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oj
@@ -115,10 +115,13 @@ files:
115
115
  - Rakefile
116
116
  - hasoffersv3.gemspec
117
117
  - lib/hasoffersv3.rb
118
+ - lib/hasoffersv3/adapter.rb
118
119
  - lib/hasoffersv3/advertiser.rb
119
120
  - lib/hasoffersv3/advertiser_user.rb
120
121
  - lib/hasoffersv3/affiliate.rb
122
+ - lib/hasoffersv3/affiliate_offer.rb
121
123
  - lib/hasoffersv3/base.rb
124
+ - lib/hasoffersv3/client.rb
122
125
  - lib/hasoffersv3/configuration.rb
123
126
  - lib/hasoffersv3/conversion.rb
124
127
  - lib/hasoffersv3/offer.rb
@@ -127,11 +130,15 @@ files:
127
130
  - lib/hasoffersv3/response.rb
128
131
  - lib/hasoffersv3/testing.rb
129
132
  - lib/hasoffersv3/version.rb
133
+ - spec/lib/adapter_spec.rb
130
134
  - spec/lib/advertiser_spec.rb
131
135
  - spec/lib/advertiser_user_spec.rb
136
+ - spec/lib/affiliate_offer_spec.rb
132
137
  - spec/lib/affiliate_spec.rb
133
138
  - spec/lib/base_spec.rb
139
+ - spec/lib/client_spec.rb
134
140
  - spec/lib/conversion_spec.rb
141
+ - spec/lib/hasoffersv3_spec.rb
135
142
  - spec/lib/offer_spec.rb
136
143
  - spec/lib/raw_log_spec.rb
137
144
  - spec/lib/report_spec.rb
@@ -161,12 +168,17 @@ signing_key:
161
168
  specification_version: 4
162
169
  summary: REST Client for the HasOffers API, version 3.
163
170
  test_files:
171
+ - spec/lib/adapter_spec.rb
164
172
  - spec/lib/advertiser_spec.rb
165
173
  - spec/lib/advertiser_user_spec.rb
174
+ - spec/lib/affiliate_offer_spec.rb
166
175
  - spec/lib/affiliate_spec.rb
167
176
  - spec/lib/base_spec.rb
177
+ - spec/lib/client_spec.rb
168
178
  - spec/lib/conversion_spec.rb
179
+ - spec/lib/hasoffersv3_spec.rb
169
180
  - spec/lib/offer_spec.rb
170
181
  - spec/lib/raw_log_spec.rb
171
182
  - spec/lib/report_spec.rb
172
183
  - spec/spec_helper.rb
184
+ has_rdoc: