adzerk 0.17 → 0.18

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
  SHA256:
3
- metadata.gz: 81c206b72f16aa47a2968e4f6fcc1143bd44d8ead4585e8c65e70e14a1b2541f
4
- data.tar.gz: a61cfe82cbd4fe8a2899307fbc4844da2ae974257891e97b9c7336427c3d3989
3
+ metadata.gz: b525a552892d3f147e720f80fe005ce713dbcce9901df753827532f10ca52b6d
4
+ data.tar.gz: e518839ef615fb2b444b2f324ea7eddd2fedd5c36426a28b01d65ef2b04e1bca
5
5
  SHA512:
6
- metadata.gz: 44611cee6e3f78945dae45e86f286cbfb964c603933587191798df9c9b810bfd214c7b110edae97ff46968fca5ee74d0a7ef8dee87ccaca0ef47ef01672b7e6f
7
- data.tar.gz: 0fab0586f87c62820036ef226b2c27bf2ee8c9a7ca38075ba17429c8269bed5e9e2e51649fcc3c722e968416006454533a6e5b44ea55b8ac67f35d8e9616df0b
6
+ metadata.gz: 7902d331dcc69911d7a8e8273e3f913678443366367f691d15f234918d7ea31b084df045e13f869b52440b48c89aeec7852cb540fa9247512c7c0237b3b74f6e
7
+ data.tar.gz: 23b51f2303b6d091105bca619d885ff05dc5649c4e2332b7cdc4d59c6ea35b7dc381b7625528d0e1d3f640cadea71d7a74d6afbeeac97c5f64b92630c85fdd02
data/lib/adzerk.rb CHANGED
@@ -24,3 +24,4 @@ require "adzerk/instant_count"
24
24
  require "adzerk/creative_template"
25
25
  require "adzerk/scheduled_reporting"
26
26
  require "adzerk/day_parting"
27
+ require "adzerk/distance_targeting"
data/lib/adzerk/client.rb CHANGED
@@ -8,7 +8,7 @@ module Adzerk
8
8
  :publishers, :invitations, :reports, :channel_site_maps,
9
9
  :logins, :geotargetings, :sitezonetargetings, :categories,
10
10
  :instant_counts, :ads, :creative_templates, :scheduled_reports,
11
- :day_parts
11
+ :day_parts, :distance_targetings
12
12
 
13
13
  VERSION = Gem.loaded_specs['adzerk'].version.to_s
14
14
  SDK_HEADER_NAME = 'X-Adzerk-Sdk-Version'
@@ -49,6 +49,7 @@ module Adzerk
49
49
  @creative_templates = Adzerk::CreativeTemplate.new(:client => self)
50
50
  @scheduled_reports = Adzerk::ScheduledReporting.new(:client => self, :endpoint => 'report')
51
51
  @day_parts = Adzerk::DayParting.new(:client => self, :endpoint => 'dayparting')
52
+ @distance_targetings = Adzerk::DistanceTargeting.new(:client => self, :endpoint => 'distancetargeting')
52
53
  end
53
54
 
54
55
  def get_request(url, version: 'v1')
@@ -59,6 +60,14 @@ module Adzerk
59
60
  send_request(request, uri)
60
61
  end
61
62
 
63
+ def delete_request(url, version: 'v1')
64
+ uri = URI.parse("#{@config[:host]}#{version}/#{url}")
65
+ request = Net::HTTP::Delete.new(uri.request_uri)
66
+ request.add_field(@config[:header], @api_key)
67
+ request.add_field(SDK_HEADER_NAME, SDK_HEADER_VALUE)
68
+ send_request(request, uri)
69
+ end
70
+
62
71
  def post_request(url, data, version: 'v1')
63
72
  uri = URI.parse("#{@config[:host]}#{version}/#{url}")
64
73
  request = Net::HTTP::Post.new(uri.request_uri)
@@ -0,0 +1,33 @@
1
+ module Adzerk
2
+ class DistanceTargeting < ApiEndpoint
3
+ def create(flight_id, data={})
4
+ url = "flight/#{flight_id}/distance"
5
+ parse_response(@client.post_json_request(url, camelize_data(data)))
6
+ end
7
+
8
+ def batch_upload(flight_id, data={})
9
+ url = "flight/#{flight_id}/distance/batch"
10
+ parse_response(@client.post_json_request(url, camelize_data(data)))
11
+ end
12
+
13
+ def update(flight_id, geometry_id, data={})
14
+ url = "flight/#{flight_id}/distance/#{geometry_id}"
15
+ parse_response(@client.put_json_request(url, camelize_data(data)))
16
+ end
17
+
18
+ def get(flight_id, geometry_id)
19
+ url = "flight/#{flight_id}/distance/#{geometry_id}"
20
+ parse_response(@client.get_request(url))
21
+ end
22
+
23
+ def list(flight_id)
24
+ url = "flight/#{flight_id}/distance"
25
+ parse_response(@client.get_request(url))
26
+ end
27
+
28
+ def delete(flight_id, geometry_id)
29
+ url = "flight/#{flight_id}/distance/#{geometry_id}"
30
+ @client.delete_request(url)
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module Adzerk
2
- VERSION = "0.17"
2
+ VERSION = "0.18"
3
3
  end
@@ -0,0 +1,138 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "DistanceTargeting API" do
4
+ before(:all) do
5
+ client = Adzerk::Client.new(API_KEY)
6
+ @distance_targeting = client.distance_targetings
7
+ @flights = client.flights
8
+ @advertisers = client.advertisers
9
+ @channels = client.channels
10
+ @campaigns = client.campaigns
11
+ @priorities = client.priorities
12
+
13
+ advertiser = @advertisers.create(:title => "test")
14
+ $advertiserId = advertiser[:id].to_s
15
+
16
+ channel = @channels.create(:title => 'Test Channel ' + rand(1000000).to_s,
17
+ :commission => '0.0',
18
+ :engine => 'CPM',
19
+ :keywords => 'test',
20
+ 'CPM' => '10.00',
21
+ :ad_types => [1,2,3,4])
22
+ $channel_id = channel[:id].to_s
23
+
24
+ priority = @priorities.create(:name => "High Priority Test",
25
+ :channel_id => $channel_id,
26
+ :weight => 1,
27
+ :is_deleted => false)
28
+ $priority_id = priority[:id].to_s
29
+
30
+ campaign = @campaigns.
31
+ create(:name => 'Test campaign ' + rand(1000000).to_s,
32
+ :start_date => "1/1/2011",
33
+ :end_date => "12/31/2011",
34
+ :is_active => false,
35
+ :price => '10.00',
36
+ :advertiser_id => $advertiserId,
37
+ :flights => [],
38
+ :is_deleted => false)
39
+ $campaign_id = campaign[:id]
40
+
41
+ new_flight = {
42
+ :priority_id => $priority_id,
43
+ :name => 'Test flight ' + rand(1000000).to_s,
44
+ :start_date => "1/1/2011",
45
+ :end_date => "12/31/2011",
46
+ :no_end_date => false,
47
+ :price => '15.00',
48
+ :option_type => 1,
49
+ :impressions => 10000,
50
+ :is_unlimited => false,
51
+ :is_full_speed => false,
52
+ :keywords => "test, test2",
53
+ :user_agent_keywords => nil,
54
+ :weight_override => nil,
55
+ :campaign_id => $campaign_id,
56
+ :is_active => true,
57
+ :is_deleted => false,
58
+ :goal_type => 1
59
+ }
60
+ flight = @flights.create(new_flight)
61
+ $flight_id = flight[:id].to_s
62
+ end
63
+
64
+ after(:all) do
65
+ @flights.delete($flight_id)
66
+ @campaigns.delete($campaign_id)
67
+ @advertisers.delete($advertiserId)
68
+ @priorities.delete($priority_id)
69
+ @channels.delete($channel_id)
70
+ end
71
+
72
+ it "should create a Distance Targeting Geometry object with a street address" do
73
+ distance = 42
74
+ address = "1600 Pennsylvania Avenue NW, Washington DC 20500"
75
+ data = {
76
+ :distance => distance,
77
+ :street_address => address
78
+ }
79
+
80
+ response = @distance_targeting.create($flight_id, data)
81
+ expect(response[:flight_id].to_s).to eq($flight_id)
82
+ expect(response[:distance]).to eq(distance)
83
+ expect(response[:street_address]).to eq(address)
84
+ $geometry_id = response[:id]
85
+ end
86
+
87
+ it "should upload a batch of Distance Targeting Geometries" do
88
+ data = {
89
+ :replace_existing => false,
90
+ :geometries => [
91
+ {
92
+ :latitude => -89.05,
93
+ :longitude => 57.1,
94
+ :distance => 5
95
+ },
96
+ {
97
+ :latitude => 14,
98
+ :longitude => 57.1,
99
+ :distance => 5
100
+ }
101
+ ]
102
+ }
103
+
104
+ response = @distance_targeting.batch_upload($flight_id, data)
105
+ expect(response[:inserted_geometries]).to_not eq(nil)
106
+ end
107
+
108
+ it "should update a Distance Targeting Geometry" do
109
+ new_distance = 43
110
+ new_address = "701 N 1st Ave, Minneapolis MN 55403"
111
+ data = {
112
+ :distance => new_distance,
113
+ :street_address => new_address
114
+ }
115
+
116
+ response = @distance_targeting.update($flight_id, $geometry_id, data)
117
+ expect(response[:flight_id].to_s).to eq($flight_id)
118
+ expect(response[:id]).to eq($geometry_id)
119
+ expect(response[:distance]).to eq(new_distance)
120
+ expect(response[:street_address]).to eq(new_address)
121
+ end
122
+
123
+ it "should get a specific Distance Targeting Geometry" do
124
+ response = @distance_targeting.get($flight_id, $geometry_id)
125
+ expect(response[:flight_id].to_s).to eq($flight_id)
126
+ expect(response[:id]).to eq($geometry_id)
127
+ end
128
+
129
+ it "should list Distance Targeting Geometry objects associated with a flight" do
130
+ response = @distance_targeting.list($flight_id)
131
+ expect(response.length).to be > 0
132
+ end
133
+
134
+ it "should delete a specific Distance Targeting Geometry" do
135
+ response = @distance_targeting.delete($flight_id, $geometry_id)
136
+ expect(response.code).to eq('204')
137
+ end
138
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adzerk
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.17'
4
+ version: '0.18'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kacy Fortner
@@ -17,7 +17,7 @@ authors:
17
17
  autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
- date: 2021-04-30 00:00:00.000000000 Z
20
+ date: 2021-05-05 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rspec
@@ -107,6 +107,7 @@ files:
107
107
  - lib/adzerk/creative_map.rb
108
108
  - lib/adzerk/creative_template.rb
109
109
  - lib/adzerk/day_parting.rb
110
+ - lib/adzerk/distance_targeting.rb
110
111
  - lib/adzerk/errors.rb
111
112
  - lib/adzerk/flight.rb
112
113
  - lib/adzerk/geo_targeting.rb
@@ -129,6 +130,7 @@ files:
129
130
  - test/creative_map_api_spec.rb
130
131
  - test/creative_template_spec.rb
131
132
  - test/day_parting_api_spec.rb
133
+ - test/distance_targeting_api_spec.rb
132
134
  - test/flight_api_spec.rb
133
135
  - test/geo_targeting_api_spec.rb
134
136
  - test/instant_count_api_spec.rb
@@ -164,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
166
  - !ruby/object:Gem::Version
165
167
  version: '0'
166
168
  requirements: []
167
- rubygems_version: 3.1.2
169
+ rubygems_version: 3.0.3.1
168
170
  signing_key:
169
171
  specification_version: 4
170
172
  summary: Adzerk API