adzerk 0.17 → 0.21

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: 96f542be227479bc2213b3a6af24d3a2166664cf5a22e68a2d0e186f6ef22d91
4
+ data.tar.gz: '038ea10b32bfca0e23766aa6a154711daa41e69aa0ebf5fcd7e5770c53a1ebcf'
5
5
  SHA512:
6
- metadata.gz: 44611cee6e3f78945dae45e86f286cbfb964c603933587191798df9c9b810bfd214c7b110edae97ff46968fca5ee74d0a7ef8dee87ccaca0ef47ef01672b7e6f
7
- data.tar.gz: 0fab0586f87c62820036ef226b2c27bf2ee8c9a7ca38075ba17429c8269bed5e9e2e51649fcc3c722e968416006454533a6e5b44ea55b8ac67f35d8e9616df0b
6
+ metadata.gz: 97fe7a7dfbab1dd3c2993e330d12e47fbd31dbf58af6352435ab585a729702dc3ca9adba91adfaac4adc48afc955bc06ae3bcddf08c7c3bc2912d1176ed4507d
7
+ data.tar.gz: aff2cb68d28f9a156f4332e5ea42b18ad7b1940afc15b309a6c06676b365941383e0a93e136b6b22d6e6420006d9d08c172e6643af23f73bf97f204b65fafe7f
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
data/lib/adzerk/util.rb CHANGED
@@ -19,7 +19,7 @@ module Adzerk
19
19
  # stop condition for the recursion
20
20
  return data unless data.respond_to?(:reduce)
21
21
  data.reduce({}) do |acc, (key, val)|
22
- acc[key.underscore.to_sym] = case val
22
+ acc[/[a-zA-Z]/.match?(key) ? key.underscore.to_sym : key] = case val
23
23
  when Hash then uncamelize_data(val)
24
24
  when Array then val.map {|elem| uncamelize_data(elem) }
25
25
  else val
@@ -1,3 +1,3 @@
1
1
  module Adzerk
2
- VERSION = "0.17"
2
+ VERSION = "0.21"
3
3
  end
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"
@@ -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.21'
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-10-27 00:00:00.000000000 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: rspec
@@ -65,28 +65,28 @@ dependencies:
65
65
  name: rest-client
66
66
  requirement: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '='
68
+ - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: 2.0.1
70
+ version: '2.1'
71
71
  type: :runtime
72
72
  prerelease: false
73
73
  version_requirements: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - '='
75
+ - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: 2.0.1
77
+ version: '2.1'
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: activesupport
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - "~>"
82
+ - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: '5.1'
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - "~>"
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
91
  version: '5.1'
92
92
  description: Ruby library for the Adzerk API
@@ -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