bing-ads-api 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -13,7 +13,7 @@ Add to your Gemfile
13
13
  gem 'bing-ads-api'
14
14
 
15
15
  == Examples
16
- So far, I've just integrated some methods from +CampaignManagement+ and +Reporting+ services
16
+ So far, I've just integrated some methods from +CampaignManagement+, +CustomerManagement+ and +Reporting+ services
17
17
 
18
18
 
19
19
  === Authentication
@@ -87,6 +87,35 @@ a object representation of the hash
87
87
  # => campaigns is an array of BingAdsApi::Campaign
88
88
 
89
89
 
90
+ === Customer Management
91
+
92
+ Example of service object initialization:
93
+ options = {
94
+ :environment => :sandbox,
95
+ :username => "desarrollo_neonline",
96
+ :password => "neonline2013",
97
+ :developer_token => "BBD37VB98",
98
+ :customer_id => "21021746",
99
+ :account_id => "5978083"
100
+ }
101
+ service = BingAdsApi::CustomerManagement.new(options)
102
+
103
+ ==== Get accounts info
104
+ accounts = service.get_accounts_info
105
+ # => accounts is an array of BingAdsApi::AccountsInfo
106
+
107
+ For this method you can also specify a diferent customer id
108
+ accounts = service.get_accounts_info(12345)
109
+ # => accounts is an array of BingAdsApi::AccountsInfo
110
+ That would give you the customer's 12345 accounts
111
+
112
+
90
113
 
91
114
  === Reporting
92
115
 
116
+ ==== Submit generate report
117
+
118
+
119
+ ==== Poll generate report
120
+
121
+
data/lib/bing-ads-api.yml CHANGED
@@ -8,9 +8,11 @@
8
8
  wsdl:
9
9
  sandbox:
10
10
  campaign_management: "https://api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v9/CampaignManagementService.svc?singleWsdl"
11
+ customer_management: "https://clientcenter.api.sandbox.bingads.microsoft.com/Api/CustomerManagement/v9/CustomerManagementService.svc?singleWsdl"
11
12
  reporting: "https://api.sandbox.bingads.microsoft.com/Api/Advertiser/Reporting/V9/ReportingService.svc?singleWsdl"
12
13
  production:
13
14
  campaign_management: "https://api.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v9/CampaignManagementService.svc?singleWsdl"
15
+ customer_management: "i.bingads.microsoft.com/Api/CustomerManagement/v9/CustomerManagementService.svc?singleWsdl"
14
16
  reporting: "https://api.bingads.microsoft.com/Api/Advertiser/Reporting/V9/ReportingService.svc?singleWsdl"
15
17
 
16
18
  # All major constants are here
@@ -177,6 +179,14 @@ constants:
177
179
  paused: 'Paused'
178
180
  deleted: 'Deleted'
179
181
  inactive: 'Inactive'
182
+ # Constants specific for customer management
183
+ customer_management:
184
+ account_life_cycle_statuses:
185
+ draft: "Draft"
186
+ active: "Active"
187
+ inactive: "Inactive"
188
+ pause: "Pause"
189
+ pending: "Pending"
180
190
  # Constants specific for reporting services
181
191
  reporting:
182
192
  format:
@@ -56,6 +56,23 @@ module BingAdsApi
56
56
 
57
57
  end
58
58
 
59
+
60
+ ## Dynamic classes for customer management constants
61
+ BingAdsApi::Config.instance.customer_management_constants.each do |const_key, const_value|
62
+
63
+ const_module = Module.new do
64
+ # Dynamically create Constants classes for each value found
65
+ const_value.each do |key, value|
66
+ self.const_set(key.upcase, value)
67
+ end
68
+
69
+ end
70
+ BingAdsApi.const_set(const_key.camelize, const_module)
71
+
72
+ end
73
+
74
+
75
+
59
76
  # Public : Module for Reporting formats
60
77
  #
61
78
  # Example
@@ -0,0 +1,72 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module BingAdsApi
4
+
5
+ # Public : Define an account info
6
+ #
7
+ # Author:: jlopezn@neonline.cl
8
+ #
9
+ # Examples
10
+ # campaign = BingAdsApi::AccountInfo.new(
11
+ # :account_life_cycle_status => BingAdsApi::AccountsInfo::DRAFT
12
+ # :name => "Account Name",
13
+ # :number => 1234567,
14
+ # :pause_reason => "1")
15
+ # # => <BingAdsApi::AccountInfo>
16
+ class AccountInfo < BingAdsApi::DataObject
17
+ include BingAdsApi::AccountLifeCycleStatuses
18
+
19
+ attr_accessor :id, :account_life_cycle_status, :name, :number, :pause_reason
20
+
21
+ # Public:: Returns true if the account is in status active
22
+ #
23
+ # Author:: jlopezn@neonline.cl
24
+ #
25
+ # Returns:: boolean
26
+ def active?
27
+ return account_life_cycle_status == ACTIVE
28
+ end
29
+
30
+
31
+ # Public:: Returns true if the account is in status draft
32
+ #
33
+ # Author:: jlopezn@neonline.cl
34
+ #
35
+ # Returns:: boolean
36
+ def draft?
37
+ return account_life_cycle_status == DRAFT
38
+ end
39
+
40
+
41
+ # Public:: Returns true if the account is in status inactive
42
+ #
43
+ # Author:: jlopezn@neonline.cl
44
+ #
45
+ # Returns:: boolean
46
+ def inactive?
47
+ return account_life_cycle_status == INACTIVE
48
+ end
49
+
50
+
51
+ # Public:: Returns true if the account is in status pause
52
+ #
53
+ # Author:: jlopezn@neonline.cl
54
+ #
55
+ # Returns:: boolean
56
+ def pause?
57
+ return account_life_cycle_status == PAUSE
58
+ end
59
+
60
+
61
+ # Public:: Returns true if the account is in status pending
62
+ #
63
+ # Author:: jlopezn@neonline.cl
64
+ #
65
+ # Returns:: boolean
66
+ def pending?
67
+ return account_life_cycle_status == PENDING
68
+ end
69
+
70
+ end
71
+
72
+ end
@@ -13,6 +13,7 @@ module BingAdsApi
13
13
  # Default logger for services
14
14
  LOGGER = Logger.new(STDOUT)
15
15
 
16
+
16
17
  # Public : Constructor
17
18
  #
18
19
  # Author:: jlopezn@neonline.cl
@@ -62,7 +63,8 @@ module BingAdsApi
62
63
  self.client_proxy = BingAdsApi::ClientProxy.new(clientProxySettings)
63
64
 
64
65
  end
65
-
66
+
67
+
66
68
  # Public : This is a utility wrapper for calling services into the
67
69
  # +ClientProxy+. This methods handle all the +Savon::Client+ Exceptions
68
70
  # and returns a Hash with the call response
@@ -0,0 +1,83 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module BingAdsApi
3
+
4
+
5
+ # Public : This class represents the Customer Management Services
6
+ # defined in the Bing Ads API, to manage customer accounts
7
+ #
8
+ # Author:: jlopezn@neonline.cl
9
+ #
10
+ # Examples
11
+ # options = {
12
+ # :environment => :sandbox,
13
+ # :username => "username",
14
+ # :password => "pass",
15
+ # :developer_token => "SOME_TOKEN",
16
+ # :customer_id => "1234567",
17
+ # :account_id => "9876543" }
18
+ # service = BingAdsApi::CustomerManagement.new(options)
19
+ class CustomerManagement < BingAdsApi::Service
20
+
21
+
22
+ # Public : Constructor
23
+ #
24
+ # Author:: jlopezn@neonline.cl
25
+ #
26
+ # options - Hash with the parameters for the client proxy and the environment
27
+ #
28
+ # Examples
29
+ # options = {
30
+ # :environment => :sandbox,
31
+ # :username => "username",
32
+ # :password => "password",
33
+ # :developer_token => "DEV_TOKEN",
34
+ # :customer_id => "123456",
35
+ # :account_id => "654321"
36
+ # }
37
+ # service = BingAdsApi::CustomerManagement.new(options)
38
+ def initialize(options={})
39
+ super(options)
40
+ end
41
+
42
+
43
+ #########################
44
+ ## Operations Wrappers ##
45
+ #########################
46
+
47
+ # Public : Gets a list of objects that contains account identification information,
48
+ # for example the name and identifier of the account, for the specified customer.
49
+ #
50
+ # Author:: jlopezn@neonline.cl
51
+ #
52
+ # === Parameters
53
+ # +customer_id+ - identifier for the customer who owns the accounts. If nil, then the authentication customer id is used
54
+ # +only_parent_accounts+ - boolean to determine whether to return only the accounts that belong to the customer or to also
55
+ # return the accounts that the customer manages for other customers. Default false
56
+ #
57
+ # === Examples
58
+ # customer_management_service.get_accounts_info
59
+ # # => Array[BingAdsApi::AccountsInfo]
60
+ #
61
+ # Returns:: Array of BingAdsApi::AccountsInfo
62
+ #
63
+ # Raises:: exception
64
+ def get_accounts_info(customer_id=nil, only_parent_accounts=false)
65
+ response = call(:get_accounts_info,
66
+ {customer_id: customer_id || self.client_proxy.customer_id,
67
+ only_parent_accounts: only_parent_accounts.to_s})
68
+ response_hash = get_response_hash(response, __method__)
69
+ accounts = response_hash[:accounts_info][:account_info].map do |account_hash|
70
+ BingAdsApi::AccountInfo.new(account_hash)
71
+ end
72
+ return accounts
73
+ end
74
+
75
+
76
+ private
77
+ def get_service_name
78
+ "customer_management"
79
+ end
80
+
81
+ end
82
+
83
+ end
@@ -86,10 +86,27 @@ module BingAdsApi
86
86
  end
87
87
 
88
88
 
89
+ # Public:: Normalize the keys of a hash with the case specified
90
+ #
91
+ # Author:: jlopexn@neonline.cl
92
+ #
93
+ # === Parameters
94
+ # * +hash+ - Hash to be normalized
95
+ # * +keys_case+ - :underscore or :camelcase
96
+ #
97
+ # === Examples
98
+ # normalize_hash_keys({:some_key => value1}, :camelcase)
99
+ # # => {"SomeKey" => value1}
100
+ #
101
+ # normalize_hash_keys({:some_key => value1}, :underscore)
102
+ # # => {"some_key" => value1}
103
+ #
104
+ # Returns:: Hash
89
105
  def normalize_hash_keys(hash, keys_case)
90
106
  return hash.inject({}) { |h, (k, v)| h[get_attribute_key(k, keys_case)] = object_to_hash(v, keys_case); h }
91
107
  end
92
108
 
109
+
93
110
  # Internal : Helper method to determinate the key name in the hash for the SOAP request
94
111
  #
95
112
  # Author:: jlopezn@neonline.cl
@@ -2,5 +2,5 @@
2
2
  module BingAdsApi
3
3
 
4
4
  # Gem Version
5
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
6
  end
@@ -0,0 +1,44 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ # Public : Test case for Customer Management services
5
+ #
6
+ # Author:: jlopezn@neonline.cl
7
+ class CustomerManagementTest < ActiveSupport::TestCase
8
+
9
+ def setup
10
+
11
+ @config = BingAdsApi::Config.instance
12
+ @options = {
13
+ :environment => :sandbox,
14
+ :username => "desarrollo_neonline",
15
+ :password => "neonline2013",
16
+ :developer_token => "BBD37VB98",
17
+ :customer_id => "21021746",
18
+ :account_id => "5978083"
19
+ }
20
+ @service = BingAdsApi::CustomerManagement.new(@options)
21
+
22
+ end
23
+
24
+
25
+ test "truth" do
26
+ assert_kind_of Module, BingAdsApi
27
+ end
28
+
29
+
30
+ test "initialize" do
31
+ @service = BingAdsApi::CustomerManagement.new(@options)
32
+ assert !@service.nil?, "CustomerManagement service not instantiated"
33
+ end
34
+
35
+
36
+ test "get accounts info" do
37
+ response = @service.get_accounts_info
38
+ puts response
39
+ assert !response.nil?, "No response received"
40
+ assert response.is_a?(Array), "No Array as response received"
41
+
42
+ end
43
+
44
+ end
@@ -27,3 +27,5 @@ Connecting to database specified by database.yml
27
27
  Connecting to database specified by database.yml
28
28
  Connecting to database specified by database.yml
29
29
  Connecting to database specified by database.yml
30
+ Connecting to database specified by database.yml
31
+ Connecting to database specified by database.yml
@@ -3262,3 +3262,31 @@ Connecting to database specified by database.yml
3262
3262
  Connecting to database specified by database.yml
3263
3263
   (0.3ms) begin transaction
3264
3264
   (0.1ms) rollback transaction
3265
+ Connecting to database specified by database.yml
3266
+  (13.2ms) begin transaction
3267
+  (0.1ms) rollback transaction
3268
+  (0.0ms) begin transaction
3269
+  (0.0ms) rollback transaction
3270
+  (0.0ms) begin transaction
3271
+  (0.0ms) rollback transaction
3272
+ Connecting to database specified by database.yml
3273
+  (0.3ms) begin transaction
3274
+  (0.2ms) rollback transaction
3275
+  (0.1ms) begin transaction
3276
+  (0.1ms) rollback transaction
3277
+  (0.1ms) begin transaction
3278
+  (0.0ms) rollback transaction
3279
+ Connecting to database specified by database.yml
3280
+  (0.3ms) begin transaction
3281
+  (0.1ms) rollback transaction
3282
+  (0.0ms) begin transaction
3283
+  (0.0ms) rollback transaction
3284
+  (0.0ms) begin transaction
3285
+  (0.0ms) rollback transaction
3286
+ Connecting to database specified by database.yml
3287
+  (0.3ms) begin transaction
3288
+  (0.1ms) rollback transaction
3289
+  (0.1ms) begin transaction
3290
+  (0.1ms) rollback transaction
3291
+  (0.1ms) begin transaction
3292
+  (0.1ms) rollback transaction
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bing-ads-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-24 00:00:00.000000000 Z
12
+ date: 2014-02-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -78,11 +78,13 @@ files:
78
78
  - lib/bing-ads-api/data/reporting/account_performance_report_request.rb
79
79
  - lib/bing-ads-api/data/reporting/campaign_performance_report_request.rb
80
80
  - lib/bing-ads-api/data/reporting/performance_report_request.rb
81
+ - lib/bing-ads-api/data/accounts_info.rb
81
82
  - lib/bing-ads-api/data/ad.rb
82
83
  - lib/bing-ads-api/data/ad_group.rb
83
84
  - lib/bing-ads-api/config.rb
84
85
  - lib/bing-ads-api/service/campaign_management.rb
85
86
  - lib/bing-ads-api/service/reporting.rb
87
+ - lib/bing-ads-api/service/customer_management.rb
86
88
  - lib/bing-ads-api/version.rb
87
89
  - lib/bing-ads-api/client_proxy.rb
88
90
  - lib/bing-ads-api/service.rb
@@ -138,6 +140,7 @@ files:
138
140
  - test/test_helper.rb
139
141
  - test/report_request_test.rb
140
142
  - test/reporting_test.rb
143
+ - test/customer_management_test.rb
141
144
  - test/bing-ads-api_test.rb
142
145
  - test/data_object_test.rb
143
146
  homepage: http://www.github.com/jplopez/bing-ads-api
@@ -201,5 +204,6 @@ test_files:
201
204
  - test/test_helper.rb
202
205
  - test/report_request_test.rb
203
206
  - test/reporting_test.rb
207
+ - test/customer_management_test.rb
204
208
  - test/bing-ads-api_test.rb
205
209
  - test/data_object_test.rb