adcloud 0.7.2 → 0.7.3
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.
- data/.gitignore +4 -1
- data/RELEASE_NOTES.md +6 -0
- data/lib/adcloud/campaign_performance_data.rb +14 -0
- data/lib/adcloud/campaign_performance_data_entry.rb +18 -0
- data/lib/adcloud/entity.rb +12 -0
- data/lib/adcloud/version.rb +1 -1
- data/lib/adcloud/webhook.rb +1 -1
- data/lib/adcloud.rb +2 -0
- data/test/adcloud/campaign_performance_data_test.rb +34 -0
- data/test/adcloud/entity_test.rb +21 -0
- data/test/adcloud/webhook_test.rb +1 -1
- metadata +6 -2
data/.gitignore
CHANGED
@@ -12,10 +12,13 @@ doc
|
|
12
12
|
# bundler
|
13
13
|
.bundle
|
14
14
|
|
15
|
+
# not wanted in gems
|
16
|
+
Gemfile.lock
|
17
|
+
|
15
18
|
# jeweler generated
|
16
19
|
pkg
|
17
20
|
|
18
|
-
# Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
|
21
|
+
# Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
|
19
22
|
#
|
20
23
|
# * Create a file at ~/.gitignore
|
21
24
|
# * Include files you want ignored
|
data/RELEASE_NOTES.md
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Adcloud
|
2
|
+
class CampaignPerformanceData < Adcloud::Entity
|
3
|
+
include Virtus
|
4
|
+
|
5
|
+
attribute :_meta, Hash
|
6
|
+
attribute :items, Array[Adcloud::CampaignPerformanceDataEntry]
|
7
|
+
|
8
|
+
def self.find_by_campaign_ids(campaign_ids)
|
9
|
+
result = connection.get(self.api_endpoint, { :campaign_ids => campaign_ids.join(',') })
|
10
|
+
self.new(result)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Adcloud
|
2
|
+
class CampaignPerformanceDataEntry
|
3
|
+
include Virtus
|
4
|
+
|
5
|
+
attribute :budget_delivered, Float
|
6
|
+
attribute :budget_delivered_today, Float
|
7
|
+
attribute :budget_limit_today, Float
|
8
|
+
attribute :campaign_id, Integer
|
9
|
+
attribute :clicks_delivered, Integer
|
10
|
+
attribute :clicks_delivered_today, Integer
|
11
|
+
attribute :impressions_delivered, Integer
|
12
|
+
attribute :impressions_delivered_today, Integer
|
13
|
+
attribute :leads_delivered, Integer
|
14
|
+
attribute :leads_delivered_today, Integer
|
15
|
+
attribute :performance, Float
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
data/lib/adcloud/entity.rb
CHANGED
@@ -29,6 +29,14 @@ module Adcloud
|
|
29
29
|
false
|
30
30
|
end
|
31
31
|
|
32
|
+
def update
|
33
|
+
result = connection.put("#{self.class.api_endpoint}/#{id}", { self.class.api_name => attributes_for_update })
|
34
|
+
true
|
35
|
+
rescue Adcloud::BadRequestError => ex
|
36
|
+
derive_errors_from_error(ex)
|
37
|
+
false
|
38
|
+
end
|
39
|
+
|
32
40
|
def destroy
|
33
41
|
result = connection.delete("#{self.class.api_endpoint}/#{id}")
|
34
42
|
self
|
@@ -99,6 +107,10 @@ module Adcloud
|
|
99
107
|
self.attributes.reject { |i| [:id, :_meta].include?(i) }
|
100
108
|
end
|
101
109
|
|
110
|
+
def attributes_for_update
|
111
|
+
self.attributes.reject { |i| [:_meta].include?(i) }
|
112
|
+
end
|
113
|
+
|
102
114
|
end
|
103
115
|
|
104
116
|
end
|
data/lib/adcloud/version.rb
CHANGED
data/lib/adcloud/webhook.rb
CHANGED
data/lib/adcloud.rb
CHANGED
@@ -15,6 +15,8 @@ module Adcloud
|
|
15
15
|
autoload :ApiError, "adcloud/api_error"
|
16
16
|
autoload :Authentication, "adcloud/authentication"
|
17
17
|
autoload :Campaign, "adcloud/campaign"
|
18
|
+
autoload :CampaignPerformanceData, "adcloud/campaign_performance_data"
|
19
|
+
autoload :CampaignPerformanceDataEntry, "adcloud/campaign_performance_data_entry"
|
18
20
|
autoload :Connection, "adcloud/connection"
|
19
21
|
autoload :Customer, "adcloud/customer"
|
20
22
|
autoload :Entity, "adcloud/entity"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
describe Adcloud::CampaignPerformanceData do
|
5
|
+
subject { Adcloud::CampaignPerformanceData }
|
6
|
+
|
7
|
+
let(:connection) { stub }
|
8
|
+
|
9
|
+
describe ".find_by_campaign_ids" do
|
10
|
+
let(:response_data) { { "_meta" => {"page" => 1, "per_page" => 2, "size" => 2, "sort" => {}, "total_count" => 2, "total_pages" => 1, "type" => "Array<CampaignPerformanceData>", "uuid" => "542fe08151374ceaf8e97dfbc22d480d"}, "items" => [{"budget_delivered" => 0.0, "budget_delivered_today" => 0.0, "budget_limit_today" => 100.0, "campaign_id" => 101, "clicks_delivered" => 0, "clicks_delivered_today" => 0, "impressions_delivered" => 0, "impressions_delivered_today" => 0, "leads_delivered" => 0, "leads_delivered_today" => 0, "performance" => 0.0 }, {"budget_delivered" => 0.0, "budget_delivered_today" => 0.0, "budget_limit_today" => 100.0, "campaign_id" => 102, "clicks_delivered" => 0, "clicks_delivered_today" => 0, "impressions_delivered" => 0, "impressions_delivered_today" => 0, "leads_delivered" => 0, "leads_delivered_today" => 0, "performance" => 0.0 } ] } }
|
11
|
+
|
12
|
+
before do
|
13
|
+
subject.stubs(:connection => connection)
|
14
|
+
connection.stubs(:get).returns(response_data)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'access the api at the correct path' do
|
18
|
+
subject.connection.expects(:get).with('campaign_performance_data', { campaign_ids: '101,102' })
|
19
|
+
subject.find_by_campaign_ids([101, 102])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns a campaign performance data set' do
|
23
|
+
subject.find_by_campaign_ids([101, 102]).must_be_instance_of(Adcloud::CampaignPerformanceData)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'creates report entries for all items' do
|
27
|
+
subject.find_by_campaign_ids([101, 102]).items.first.must_be_instance_of(Adcloud::CampaignPerformanceDataEntry)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'parses the entry data correctly' do
|
31
|
+
subject.find_by_campaign_ids([101, 102]).items.first[:budget_limit_today].must_equal 100.0
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/test/adcloud/entity_test.rb
CHANGED
@@ -134,6 +134,27 @@ describe Adcloud::Entity do
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
|
+
describe '#update' do
|
138
|
+
before { subject.stubs(:connection => connection) }
|
139
|
+
|
140
|
+
describe 'when submitting a valid object' do
|
141
|
+
let(:response) { { '_meta' => { 'status' => 200 }, 'id' => 1 } }
|
142
|
+
|
143
|
+
it 'sends a request to the api' do
|
144
|
+
car = subject.new(:id => 1, :name => 'Audi')
|
145
|
+
attributes = car.attributes
|
146
|
+
attributes.delete(:_meta)
|
147
|
+
connection.expects(:put).with('cars/1', { 'car' => attributes }).returns(response)
|
148
|
+
car.update
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'returns true' do
|
152
|
+
connection.stubs(:put).returns(response)
|
153
|
+
subject.new.update.must_equal true
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
137
158
|
describe '.create' do
|
138
159
|
it 'creates a new car' do
|
139
160
|
car = subject.new
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
describe Adcloud::Webhook do
|
4
|
-
let(:event_payload) { '{"id":"2","country_id":"1","guidance_price_cpc":"1.49","guidance_price_cpm":"0.6","variance":"20.00","modified":"2012-09-04 14:21:20","created":"2012-04-10 20:40:24","_meta":{"is_test_data":true,"model":"TopicPrice","event":"
|
4
|
+
let(:event_payload) { '{"id":"2","country_id":"1","guidance_price_cpc":"1.49","guidance_price_cpm":"0.6","variance":"20.00","modified":"2012-09-04 14:21:20","created":"2012-04-10 20:40:24","_meta":{"is_test_data":true,"model":"TopicPrice","event":"TopicDiscount.update","updated_fields":["guidance_price_cpc","guidance_price_cpm"],"id":"2"}}' }
|
5
5
|
let(:payload) { "[#{event_payload}]" }
|
6
6
|
|
7
7
|
subject { Adcloud::Webhook.new(payload) }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adcloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-10-
|
13
|
+
date: 2012-10-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: minitest
|
@@ -179,6 +179,8 @@ files:
|
|
179
179
|
- lib/adcloud/api_error.rb
|
180
180
|
- lib/adcloud/authentication.rb
|
181
181
|
- lib/adcloud/campaign.rb
|
182
|
+
- lib/adcloud/campaign_performance_data.rb
|
183
|
+
- lib/adcloud/campaign_performance_data_entry.rb
|
182
184
|
- lib/adcloud/campaign_state.rb
|
183
185
|
- lib/adcloud/connection.rb
|
184
186
|
- lib/adcloud/customer.rb
|
@@ -197,6 +199,7 @@ files:
|
|
197
199
|
- lib/adcloud/webhook_event.rb
|
198
200
|
- test/adcloud/advertisement_test.rb
|
199
201
|
- test/adcloud/authentication_test.rb
|
202
|
+
- test/adcloud/campaign_performance_data_test.rb
|
200
203
|
- test/adcloud/campaign_test.rb
|
201
204
|
- test/adcloud/connection_test.rb
|
202
205
|
- test/adcloud/customer_test.rb
|
@@ -236,6 +239,7 @@ summary: Wrapper for adcloud API
|
|
236
239
|
test_files:
|
237
240
|
- test/adcloud/advertisement_test.rb
|
238
241
|
- test/adcloud/authentication_test.rb
|
242
|
+
- test/adcloud/campaign_performance_data_test.rb
|
239
243
|
- test/adcloud/campaign_test.rb
|
240
244
|
- test/adcloud/connection_test.rb
|
241
245
|
- test/adcloud/customer_test.rb
|