bing_ads_ruby_sdk 1.3.4 → 1.5.0
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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +21 -19
- data/.github/.keep +0 -0
- data/.github/renovate.json +225 -0
- data/Gemfile +2 -0
- data/Rakefile +4 -4
- data/bing_ads_ruby_sdk.gemspec +25 -27
- data/changelog.md +10 -0
- data/lib/bing_ads_ruby_sdk/api.rb +3 -6
- data/lib/bing_ads_ruby_sdk/augmented_parser.rb +0 -1
- data/lib/bing_ads_ruby_sdk/configuration.rb +1 -1
- data/lib/bing_ads_ruby_sdk/errors/error_handler.rb +1 -1
- data/lib/bing_ads_ruby_sdk/errors/errors.rb +9 -10
- data/lib/bing_ads_ruby_sdk/header.rb +3 -3
- data/lib/bing_ads_ruby_sdk/http_client.rb +6 -6
- data/lib/bing_ads_ruby_sdk/log_message.rb +2 -3
- data/lib/bing_ads_ruby_sdk/oauth2/authorization_handler.rb +24 -21
- data/lib/bing_ads_ruby_sdk/oauth2/fs_store.rb +2 -2
- data/lib/bing_ads_ruby_sdk/postprocessors/cast_long_arrays.rb +2 -3
- data/lib/bing_ads_ruby_sdk/postprocessors/snakize.rb +2 -3
- data/lib/bing_ads_ruby_sdk/preprocessors/camelize.rb +3 -4
- data/lib/bing_ads_ruby_sdk/preprocessors/order.rb +2 -3
- data/lib/bing_ads_ruby_sdk/services/ad_insight.rb +1 -2
- data/lib/bing_ads_ruby_sdk/services/base.rb +13 -10
- data/lib/bing_ads_ruby_sdk/services/bulk.rb +1 -2
- data/lib/bing_ads_ruby_sdk/services/campaign_management.rb +2 -5
- data/lib/bing_ads_ruby_sdk/services/customer_billing.rb +1 -2
- data/lib/bing_ads_ruby_sdk/services/customer_management.rb +1 -2
- data/lib/bing_ads_ruby_sdk/services/reporting.rb +1 -2
- data/lib/bing_ads_ruby_sdk/soap_client.rb +11 -17
- data/lib/bing_ads_ruby_sdk/string_utils.rb +6 -7
- data/lib/bing_ads_ruby_sdk/version.rb +1 -1
- data/lib/bing_ads_ruby_sdk/wsdl_operation_wrapper.rb +0 -1
- data/lib/bing_ads_ruby_sdk.rb +10 -9
- data/spec/bing_ads_ruby_sdk/api_spec.rb +3 -3
- data/spec/bing_ads_ruby_sdk/errors/error_handler_spec.rb +112 -114
- data/spec/bing_ads_ruby_sdk/errors/errors_spec.rb +4 -4
- data/spec/bing_ads_ruby_sdk/header_spec.rb +22 -22
- data/spec/bing_ads_ruby_sdk/http_client_spec.rb +3 -5
- data/spec/bing_ads_ruby_sdk/oauth2/fs_store_spec.rb +2 -3
- data/spec/bing_ads_ruby_sdk/postprocessors/cast_long_arrays_spec.rb +4 -5
- data/spec/bing_ads_ruby_sdk/postprocessors/snakize_spec.rb +1 -2
- data/spec/bing_ads_ruby_sdk/preprocessors/camelize_spec.rb +1 -2
- data/spec/bing_ads_ruby_sdk/preprocessors/order_spec.rb +87 -76
- data/spec/bing_ads_ruby_sdk/services/bulk_spec.rb +7 -12
- data/spec/bing_ads_ruby_sdk/services/campaign_management_spec.rb +74 -67
- data/spec/bing_ads_ruby_sdk/services/customer_management_spec.rb +22 -23
- data/spec/examples/1_customer_creation/customer_spec.rb +11 -11
- data/spec/examples/2_with_customer/budget_spec.rb +19 -21
- data/spec/examples/2_with_customer/campaigns_spec.rb +9 -10
- data/spec/examples/2_with_customer/customer_management_spec.rb +37 -39
- data/spec/examples/2_with_customer/uet_tags_spec.rb +14 -14
- data/spec/examples/3_with_uet_tag/conversion_goal_spec.rb +19 -19
- data/spec/examples/3_with_uet_tag/uet_tags_spec.rb +15 -15
- data/spec/examples/4_with_conversion_goal/conversion_goals_spec.rb +23 -22
- data/spec/examples/5_with_campaign/ad_extension_spec.rb +20 -23
- data/spec/examples/5_with_campaign/ad_group_spec.rb +14 -15
- data/spec/examples/5_with_campaign/campaign_criterions_spec.rb +21 -23
- data/spec/examples/5_with_campaign/campaign_spec.rb +17 -18
- data/spec/examples/6_with_ad_group/ad_group_spec.rb +19 -20
- data/spec/examples/6_with_ad_group/ads_spec.rb +38 -41
- data/spec/examples/6_with_ad_group/keywords_spec.rb +29 -32
- data/spec/examples/examples.rb +3 -4
- data/spec/spec_helper.rb +10 -10
- data/spec/support/spec_helpers.rb +10 -9
- data/tasks/bing_ads_ruby_sdk.rake +7 -8
- metadata +8 -84
- data/.github/delete-merged-branch-config.yml +0 -6
- data/.github/stale.yml +0 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0a6b39b428d7a606c0072d095766bff29b4d7c9e44dd2f825bdb2654915ad14a
|
|
4
|
+
data.tar.gz: 7d6c717dbec5df6bceeb13ec38a000bbf1252f83ce2030c1071a55fe3a8386ab
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d6232334e3e2c510825d83b9d2476ca601eae477c744e7b9b30ac637d0afc3f965127043c5465d5797ec87dc67b4c80150c52dc54f680676c7be49da1f8d6c98
|
|
7
|
+
data.tar.gz: e3ff1cc382a5099754b37fb42b7858d79c0474dcfd22faef5e05c8498ce9c61a625df852adc638d94463682beb37cbf1d715358d4fa80b6daf022510011640bf
|
data/.circleci/config.yml
CHANGED
|
@@ -1,27 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
|
|
4
|
-
#
|
|
5
|
-
version: 2
|
|
6
|
-
jobs:
|
|
7
|
-
build:
|
|
8
|
-
docker:
|
|
9
|
-
- image: circleci/ruby:2.4.1
|
|
10
|
-
|
|
11
|
-
working_directory: ~/repo
|
|
1
|
+
version: 2.1
|
|
12
2
|
|
|
3
|
+
commands:
|
|
4
|
+
build:
|
|
13
5
|
steps:
|
|
14
6
|
- checkout
|
|
15
|
-
|
|
16
|
-
# We can't use restore_cache because we don't include a Gemfile.lock
|
|
17
|
-
# in the Gem repo
|
|
18
|
-
|
|
7
|
+
# We can't use restore_cache because we don't include a Gemfile.lock in the Gem repo
|
|
19
8
|
- run:
|
|
20
9
|
name: install dependencies
|
|
21
10
|
command: |
|
|
22
11
|
bundle install --jobs=4 --retry=3 --path vendor/bundle
|
|
23
|
-
|
|
24
|
-
# run tests!
|
|
12
|
+
- run: bundle exec standardrb
|
|
25
13
|
- run:
|
|
26
14
|
name: run tests
|
|
27
15
|
command: |
|
|
@@ -36,7 +24,6 @@ jobs:
|
|
|
36
24
|
--out /tmp/test-results/rspec.xml \
|
|
37
25
|
--format progress \
|
|
38
26
|
$TEST_FILES
|
|
39
|
-
|
|
40
27
|
# collect reports
|
|
41
28
|
- store_test_results:
|
|
42
29
|
path: /tmp/test-results
|
|
@@ -44,9 +31,24 @@ jobs:
|
|
|
44
31
|
path: /tmp/test-results
|
|
45
32
|
destination: test-results
|
|
46
33
|
|
|
34
|
+
jobs:
|
|
35
|
+
build_2_x:
|
|
36
|
+
docker:
|
|
37
|
+
- image: ruby:2.7.6
|
|
38
|
+
working_directory: ~/repo
|
|
39
|
+
steps:
|
|
40
|
+
- build
|
|
41
|
+
|
|
42
|
+
build_3_x:
|
|
43
|
+
docker:
|
|
44
|
+
- image: ruby:3.1.2
|
|
45
|
+
working_directory: ~/repo
|
|
46
|
+
steps:
|
|
47
|
+
- build
|
|
47
48
|
|
|
48
49
|
workflows:
|
|
49
50
|
version: 2
|
|
50
51
|
build:
|
|
51
52
|
jobs:
|
|
52
|
-
-
|
|
53
|
+
- build_2_x
|
|
54
|
+
- build_3_x
|
data/.github/.keep
ADDED
|
File without changes
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": [
|
|
3
|
+
"config:base",
|
|
4
|
+
"schedule:weekly",
|
|
5
|
+
":preserveSemverRanges"
|
|
6
|
+
],
|
|
7
|
+
"kubernetes": {
|
|
8
|
+
"fileMatch": [
|
|
9
|
+
"\\.yaml$",
|
|
10
|
+
"\\.tpl$"
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"branchPrefix": "bot-",
|
|
14
|
+
"hostRules": [
|
|
15
|
+
{
|
|
16
|
+
"matchHost": "github.com",
|
|
17
|
+
"hostType": "rubygems",
|
|
18
|
+
"encrypted": {
|
|
19
|
+
"token": "wcFMA/xDdHCJBTolARAAjumTJ4PWx0T4aV3fSFZrLqZsnGUW+j+IKh1WPdzAiGdj+9zUQNcdJimlokWffqMzn3pNC8B8GMb+UjStyxQjZH+kzK6fEU4bn9hsg+g8LVHccvRXjzbIwaIyDcBZE0scr9yS7QRk/xI2vviDMAXTiyQEwMIRCfIAaPhcJBbg7L9kRmDmvnlDXPIVkzvenQYFA+3Smib0tL2glJ5NhS/ZgQUAIaz64d/Ibe+PM5atR2+cEf4o0PmBGSa6yGcGJX32kiR0AFMesNtIKWjh5UUjH4M5k0Uuz3bHU2Q85NjXrcmZD1Pqz//LZn+aFYSiDHM7sOHk+LXYnPtjs3+6KrI40tfo64kS4Xp72L/XhE0trhVPki2NmoQXU9ux8YgCCNZb4La3XcGlS0tWAAJU5Ebajx7qCVqweKpoEHHkim+sXl75s3Qu3WOQCgdAWtL3Vds3cu9D4ZEe0Hax6XxurZ/BuE5MS5i3Kd85JFlRgPD+C+/2EABKrCzTpDHNIK72tAY50rgFM1uvGIgaQVHEVsU0l1dm0DzxTwisWERpr90CNaz5dhGT5lYer+p8z5Gye00kn+SWyqWWTTZ0c+ZLh+eEQ6/TdWhFHjBi8524lvotbAT3Wq7lLDWeS3vAW/bj39v7LPbUGIXdvxIvF9EUwr1NRTviOASLXrEH7NNk99RheiLSdgFWqKKuKEGE2gq0t3vXA85GoT7wU0wB4RKCKqGrCK8AbL+PwvKxKZ+P63F+EfMyhIq89Qw9Szu6KbeNoYwsEQgYyXko/HDMWWqfQcTKEMF6rGf7KRmCFEIjrsSO4LJ+RcbmZBESr+L1T790c2nuFjwGI1qcA0Y"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"vulnerabilityAlerts": {
|
|
24
|
+
"enabled": true,
|
|
25
|
+
"automerge": true,
|
|
26
|
+
"groupName": null,
|
|
27
|
+
"labels": [
|
|
28
|
+
"security"
|
|
29
|
+
],
|
|
30
|
+
"schedule": [
|
|
31
|
+
"after 2am and before 6am every day"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"packageRules": [
|
|
35
|
+
{
|
|
36
|
+
"matchPackagePatterns": ["*"],
|
|
37
|
+
"stabilityDays": 5
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"matchDatasources": ["terraform-module","terraform-provider"],
|
|
41
|
+
"labels": ["terraform"],
|
|
42
|
+
"groupName": "terraform",
|
|
43
|
+
"automerge": false
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"matchDepTypes": ["devDependencies"],
|
|
47
|
+
"matchPackagePatterns": ["lint", "prettier"],
|
|
48
|
+
"groupName": "linter-update",
|
|
49
|
+
"labels": ["linter-update"],
|
|
50
|
+
"automerge": true
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"matchManagers": ["nodenv", "npm"],
|
|
54
|
+
"groupName": "js-update",
|
|
55
|
+
"labels": ["js-update"],
|
|
56
|
+
"automerge": true
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"matchManagers": ["bundler", "ruby-version"],
|
|
60
|
+
"groupName": "ruby-update",
|
|
61
|
+
"automerge": true,
|
|
62
|
+
"labels": ["ruby-update"]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"matchManagers": ["pip-compile", "pip_requirements", "pip_setup", "pipenv", "pyenv", "setup-cfg"],
|
|
66
|
+
"groupName": "python-update",
|
|
67
|
+
"automerge": true,
|
|
68
|
+
"labels": ["python-update"]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"matchDepTypes": ["peerDependencies", "devDependencies", "dependencies"],
|
|
72
|
+
"matchUpdateTypes": ["minor","patch","pin","digest","rollback","bump"],
|
|
73
|
+
"groupName": "dep-update",
|
|
74
|
+
"labels": ["dependencies-update"],
|
|
75
|
+
"automerge": true
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"matchCurrentVersion": "/^v?[~ -]?0/",
|
|
79
|
+
"matchUpdateTypes": [
|
|
80
|
+
"minor",
|
|
81
|
+
"patch",
|
|
82
|
+
"pin",
|
|
83
|
+
"digest",
|
|
84
|
+
"rollback",
|
|
85
|
+
"bump"
|
|
86
|
+
],
|
|
87
|
+
"groupName": "betas can break",
|
|
88
|
+
"labels": ["betas-update"],
|
|
89
|
+
"description": "according semver spec, version <1 can introduce breaking changes on each rel",
|
|
90
|
+
"automerge": false
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"matchManagers": ["gitlabci", "gitlabci-include", "circleci", "helm-requirements", "helm-values", "helmfile", "helmv3","docker-compose", "dockerfile","kubernetes"],
|
|
94
|
+
"automerge": true,
|
|
95
|
+
"groupName": "ci-update",
|
|
96
|
+
"labels": ["ci-update"]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"matchManagers": [
|
|
100
|
+
"gitlabci",
|
|
101
|
+
"gitlabci-include",
|
|
102
|
+
"circleci",
|
|
103
|
+
"helm-requirements",
|
|
104
|
+
"helm-values",
|
|
105
|
+
"helmfile",
|
|
106
|
+
"helmv3",
|
|
107
|
+
"docker-compose",
|
|
108
|
+
"dockerfile",
|
|
109
|
+
"kubernetes"
|
|
110
|
+
],
|
|
111
|
+
"matchPackageNames": ["redis"],
|
|
112
|
+
"allowedVersions": "<6",
|
|
113
|
+
"automerge": true,
|
|
114
|
+
"groupName": "redis-update",
|
|
115
|
+
"description": "explicit max version to keep coherence with real infra on GCP"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"matchPackageNames": ["jdk","openjdk"],
|
|
119
|
+
"allowedVersions": "<18",
|
|
120
|
+
"automerge": true,
|
|
121
|
+
"groupName": "jdk-update",
|
|
122
|
+
"description": "explicit max version to keep LTS only"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"matchPackageNames": ["cimg/postgres","postgres","postgis","postgis/postgis"],
|
|
126
|
+
"allowedVersions": "<14",
|
|
127
|
+
"automerge": true,
|
|
128
|
+
"groupName": "postgres-update",
|
|
129
|
+
"labels": ["postgres"],
|
|
130
|
+
"description": "explicit max version to prevent issue like need to coordinate with real infra on GCP"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"matchPackageNames": ["ruby","circleci/ruby","cimg/ruby"],
|
|
134
|
+
"allowedVersions": "<4",
|
|
135
|
+
"groupName": "rubycore-update",
|
|
136
|
+
"description": "explicit max version to prevent issues",
|
|
137
|
+
"labels": ["rubycore-update"]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"matchPackageNames": ["node","circleci/node","cimg/node"],
|
|
141
|
+
"automerge": true,
|
|
142
|
+
"allowedVersions": "<17",
|
|
143
|
+
"groupName": "node-update",
|
|
144
|
+
"labels": ["node-update"],
|
|
145
|
+
"description": "explicit max LTS version to prevent issues : https://cloud.google.com/functions/docs/concepts/nodejs-runtime "
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"matchPackageNames": ["python"],
|
|
149
|
+
"automerge": true,
|
|
150
|
+
"groupName": "python-update",
|
|
151
|
+
"labels": ["python-update"]
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"matchPackageNames": ["circleci/python","cimg/python"],
|
|
155
|
+
"automerge": true,
|
|
156
|
+
"allowedVersions": "<4",
|
|
157
|
+
"groupName": "pythoncore-update",
|
|
158
|
+
"labels": ["pythoncore-update"],
|
|
159
|
+
"description": "explicit max major version to prevent issues"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"matchPackageNames": ["xgboost"],
|
|
163
|
+
"automerge": true,
|
|
164
|
+
"allowedVersions": "<1.5",
|
|
165
|
+
"groupName": "xgboost-update",
|
|
166
|
+
"description": "limitation from the data model used in pricer"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"matchPackageNames": ["pandas"],
|
|
170
|
+
"allowedVersions": "<1.4",
|
|
171
|
+
"automerge": true,
|
|
172
|
+
"groupName": "pandas-update",
|
|
173
|
+
"description": "limitation from dataiku, don't merge upper than 1.3 for now"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"matchPackageNames": [
|
|
177
|
+
"gql"
|
|
178
|
+
],
|
|
179
|
+
"automerge": true,
|
|
180
|
+
"allowedVersions": "<3",
|
|
181
|
+
"groupName": "gql-update",
|
|
182
|
+
"description": "limitation from dataiku"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"matchPackageNames": [
|
|
186
|
+
"envkey"
|
|
187
|
+
],
|
|
188
|
+
"automerge": true,
|
|
189
|
+
"allowedVersions": "<2",
|
|
190
|
+
"groupName": "envkey-update",
|
|
191
|
+
"description": "no switch for now"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"matchPackageNames": [
|
|
195
|
+
"facebookbusiness"
|
|
196
|
+
],
|
|
197
|
+
"groupName": "envkey-update",
|
|
198
|
+
"description": "Facebook API",
|
|
199
|
+
"labels": [
|
|
200
|
+
"apifacebook-update"
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"matchPackageNames": [
|
|
205
|
+
"google-ads-googleads"
|
|
206
|
+
],
|
|
207
|
+
"groupName": "googleads-update",
|
|
208
|
+
"description": "Google Ads API",
|
|
209
|
+
"labels": [
|
|
210
|
+
"apigoogleads-update"
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
],
|
|
214
|
+
"lockFileMaintenance": {
|
|
215
|
+
"enabled": true,
|
|
216
|
+
"schedule": ["after 2am and before 6am every monday"],
|
|
217
|
+
"commitMessageAction": "Update lockfiles",
|
|
218
|
+
"groupName": "lockfile-update",
|
|
219
|
+
"labels": ["lockfile-update"],
|
|
220
|
+
"automerge": true
|
|
221
|
+
},
|
|
222
|
+
"dependencyDashboard": true,
|
|
223
|
+
"timezone": "Europe/Paris",
|
|
224
|
+
"prHourlyLimit": 6
|
|
225
|
+
}
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
import
|
|
1
|
+
require "bundler/gem_tasks"
|
|
2
|
+
require "rspec/core/rake_task"
|
|
3
|
+
require "./lib/bing_ads_ruby_sdk"
|
|
4
|
+
import "tasks/bing_ads_ruby_sdk.rake"
|
|
5
5
|
|
|
6
6
|
RSpec::Core::RakeTask.new(:spec)
|
|
7
7
|
|
data/bing_ads_ruby_sdk.gemspec
CHANGED
|
@@ -1,37 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
3
|
+
require "bing_ads_ruby_sdk/version"
|
|
5
4
|
|
|
6
5
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name
|
|
8
|
-
spec.required_ruby_version =
|
|
6
|
+
spec.name = "bing_ads_ruby_sdk"
|
|
7
|
+
spec.required_ruby_version = ">= 2.3"
|
|
9
8
|
|
|
10
|
-
spec.version
|
|
11
|
-
spec.authors
|
|
12
|
-
spec.email
|
|
9
|
+
spec.version = BingAdsRubySdk::VERSION
|
|
10
|
+
spec.authors = %w[Effilab developers]
|
|
11
|
+
spec.email = %w[dev@effilab.com]
|
|
13
12
|
|
|
14
|
-
spec.summary
|
|
15
|
-
spec.description
|
|
16
|
-
spec.homepage
|
|
17
|
-
spec.license
|
|
13
|
+
spec.summary = "Bing Ads Ruby SDK"
|
|
14
|
+
spec.description = "Bing Ads Api Wrapper"
|
|
15
|
+
spec.homepage = "https://github.com/Effilab/bing_ads_ruby_sdk"
|
|
16
|
+
spec.license = "MIT"
|
|
18
17
|
|
|
19
|
-
spec.files
|
|
20
|
-
spec.executables
|
|
21
|
-
spec.test_files = spec.files.grep(%r{^(spec)/})
|
|
18
|
+
spec.files = `git ls-files`.split($/)
|
|
19
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
22
20
|
spec.require_paths = ["lib"]
|
|
23
21
|
|
|
24
|
-
spec.add_runtime_dependency
|
|
25
|
-
spec.add_runtime_dependency
|
|
26
|
-
spec.add_runtime_dependency
|
|
22
|
+
spec.add_runtime_dependency "signet"
|
|
23
|
+
spec.add_runtime_dependency "excon", ">= 0.62.0"
|
|
24
|
+
spec.add_runtime_dependency "lolsoap", ">=0.9.0"
|
|
27
25
|
|
|
28
|
-
spec.add_development_dependency
|
|
29
|
-
spec.add_development_dependency
|
|
30
|
-
spec.add_development_dependency
|
|
31
|
-
spec.add_development_dependency
|
|
32
|
-
spec.add_development_dependency
|
|
33
|
-
spec.add_development_dependency
|
|
34
|
-
spec.add_development_dependency
|
|
35
|
-
spec.add_development_dependency
|
|
36
|
-
spec.add_development_dependency
|
|
26
|
+
spec.add_development_dependency "bundler"
|
|
27
|
+
spec.add_development_dependency "dotenv"
|
|
28
|
+
spec.add_development_dependency "rake"
|
|
29
|
+
spec.add_development_dependency "yard"
|
|
30
|
+
spec.add_development_dependency "rspec"
|
|
31
|
+
spec.add_development_dependency "simplecov"
|
|
32
|
+
spec.add_development_dependency "byebug"
|
|
33
|
+
spec.add_development_dependency "awesome_print"
|
|
34
|
+
spec.add_development_dependency "rspec_junit_formatter", "~> 0.4.1"
|
|
37
35
|
end
|
data/changelog.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## V1.5.0 Release
|
|
2
|
+
- Breaking: Now raises functional errors
|
|
3
|
+
- Breaking: Now raises an error if not able to read the store in order to refresh the token
|
|
4
|
+
|
|
5
|
+
## V1.4.0 Release
|
|
6
|
+
|
|
7
|
+
- Breaking: change scope from `https://ads.microsoft.com/ads.manage` to `https://ads.microsoft.com/msads.manage` as requested by Bing (deadline March 22)
|
|
8
|
+
|
|
9
|
+
- now reading store at the very last moment to get freshest token
|
|
10
|
+
|
|
1
11
|
## V1.3.4 Release
|
|
2
12
|
|
|
3
13
|
- lift constraint on signet gem
|
|
@@ -23,12 +23,9 @@ module BingAdsRubySdk
|
|
|
23
23
|
# @option environment [Symbol] :sandbox Use the sandbox WSDL configuration
|
|
24
24
|
# @param developer_token
|
|
25
25
|
# @param client_id
|
|
26
|
-
def initialize(version: DEFAULT_SDK_VERSION,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
client_id:,
|
|
30
|
-
oauth_store:,
|
|
31
|
-
client_secret: nil)
|
|
26
|
+
def initialize(developer_token:, client_id:, oauth_store:, version: DEFAULT_SDK_VERSION,
|
|
27
|
+
environment: :production,
|
|
28
|
+
client_secret: nil)
|
|
32
29
|
@version = version
|
|
33
30
|
@environment = environment
|
|
34
31
|
@header = Header.new(
|
|
@@ -9,11 +9,11 @@ module BingAdsRubySdk
|
|
|
9
9
|
def initialize(response)
|
|
10
10
|
@raw_response = response
|
|
11
11
|
|
|
12
|
-
code = response[:error_code] ||
|
|
12
|
+
code = response[:error_code] || "Bing Ads API error"
|
|
13
13
|
|
|
14
14
|
message = response[:message] ||
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
response[:faultstring] ||
|
|
16
|
+
"See exception details for more information."
|
|
17
17
|
|
|
18
18
|
@message = format_message(code, message)
|
|
19
19
|
end
|
|
@@ -23,7 +23,7 @@ module BingAdsRubySdk
|
|
|
23
23
|
# Format the message separated by hyphen if
|
|
24
24
|
# there is a code and a message
|
|
25
25
|
def format_message(code, message)
|
|
26
|
-
[code, message].compact.join(
|
|
26
|
+
[code, message].compact.join(" - ")
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -47,7 +47,7 @@ module BingAdsRubySdk
|
|
|
47
47
|
|
|
48
48
|
first_message = first_error_message(error_list)
|
|
49
49
|
if error_list.count > 1
|
|
50
|
-
"API raised #{
|
|
50
|
+
"API raised #{error_list.count} errors, including: #{first_message}"
|
|
51
51
|
else
|
|
52
52
|
first_message
|
|
53
53
|
end
|
|
@@ -81,7 +81,7 @@ module BingAdsRubySdk
|
|
|
81
81
|
# The fault key that corresponds to the inherited class
|
|
82
82
|
# @return [Symbol] the fault key
|
|
83
83
|
def fault_key
|
|
84
|
-
class_name = self.class.name.split(
|
|
84
|
+
class_name = self.class.name.split("::").last
|
|
85
85
|
BingAdsRubySdk::StringUtils.snakize(class_name).to_sym
|
|
86
86
|
end
|
|
87
87
|
|
|
@@ -100,9 +100,7 @@ module BingAdsRubySdk
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
class << self
|
|
103
|
-
|
|
104
|
-
@error_lists = value
|
|
105
|
-
end
|
|
103
|
+
attr_writer :error_lists
|
|
106
104
|
|
|
107
105
|
def error_lists
|
|
108
106
|
@error_lists ||= []
|
|
@@ -118,7 +116,6 @@ module BingAdsRubySdk
|
|
|
118
116
|
|
|
119
117
|
# Base class for handling partial errors
|
|
120
118
|
class PartialErrorBase < ApplicationFault
|
|
121
|
-
|
|
122
119
|
private
|
|
123
120
|
|
|
124
121
|
# The parent hash for this type of error is the root of the response
|
|
@@ -140,6 +137,7 @@ module BingAdsRubySdk
|
|
|
140
137
|
define_error_lists :batch_error
|
|
141
138
|
|
|
142
139
|
private
|
|
140
|
+
|
|
143
141
|
def fault_key
|
|
144
142
|
:partial_errors
|
|
145
143
|
end
|
|
@@ -149,6 +147,7 @@ module BingAdsRubySdk
|
|
|
149
147
|
define_error_lists :batch_error_collection
|
|
150
148
|
|
|
151
149
|
private
|
|
150
|
+
|
|
152
151
|
def fault_key
|
|
153
152
|
:nested_partial_errors
|
|
154
153
|
end
|
|
@@ -18,9 +18,9 @@ module BingAdsRubySdk
|
|
|
18
18
|
def content
|
|
19
19
|
{
|
|
20
20
|
"AuthenticationToken" => auth_handler.fetch_or_refresh,
|
|
21
|
-
"DeveloperToken" =>
|
|
22
|
-
"CustomerId" =>
|
|
23
|
-
"CustomerAccountId" =>
|
|
21
|
+
"DeveloperToken" => developer_token,
|
|
22
|
+
"CustomerId" => customer[:customer_id],
|
|
23
|
+
"CustomerAccountId" => customer[:account_id]
|
|
24
24
|
}.tap do |hash|
|
|
25
25
|
hash["ClientSecret"] = client_secret if client_secret
|
|
26
26
|
end
|
|
@@ -10,7 +10,7 @@ module BingAdsRubySdk
|
|
|
10
10
|
HTTP_READ_TIMEOUT = 20
|
|
11
11
|
HTTP_RETRY_COUNT_ON_TIMEOUT = 2
|
|
12
12
|
HTTP_INTERVAL_RETRY_COUNT_ON_TIMEOUT = 1
|
|
13
|
-
HTTP_ERRORS = [
|
|
13
|
+
HTTP_ERRORS = [Net::HTTPServerError, Net::HTTPClientError]
|
|
14
14
|
CONNECTION_SETTINGS = {
|
|
15
15
|
persistent: true,
|
|
16
16
|
tcp_nodelay: true,
|
|
@@ -20,17 +20,17 @@ module BingAdsRubySdk
|
|
|
20
20
|
connect_timeout: HTTP_OPEN_TIMEOUT,
|
|
21
21
|
read_timeout: HTTP_READ_TIMEOUT,
|
|
22
22
|
ssl_version: :TLSv1_2,
|
|
23
|
-
ciphers: "TLSv1.2:!aNULL:!eNULL"
|
|
23
|
+
ciphers: "TLSv1.2:!aNULL:!eNULL"
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
class << self
|
|
27
27
|
def post(request)
|
|
28
28
|
uri = URI(request.url)
|
|
29
|
-
conn =
|
|
29
|
+
conn = connection(request.url)
|
|
30
30
|
raw_response = conn.post(
|
|
31
31
|
path: uri.path,
|
|
32
32
|
body: request.content,
|
|
33
|
-
headers: request.headers
|
|
33
|
+
headers: request.headers
|
|
34
34
|
)
|
|
35
35
|
|
|
36
36
|
if contains_error?(raw_response)
|
|
@@ -44,7 +44,7 @@ module BingAdsRubySdk
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def close_http_connections
|
|
47
|
-
|
|
47
|
+
http_connections.values.each do |connection|
|
|
48
48
|
connection.reset
|
|
49
49
|
end
|
|
50
50
|
end
|
|
@@ -65,7 +65,7 @@ module BingAdsRubySdk
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def connection(host)
|
|
68
|
-
|
|
68
|
+
http_connections[host] ||= Excon.new(
|
|
69
69
|
host,
|
|
70
70
|
connection_settings
|
|
71
71
|
)
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
module BingAdsRubySdk
|
|
4
4
|
class LogMessage
|
|
5
|
-
|
|
6
5
|
def initialize(message)
|
|
7
6
|
@message = message
|
|
8
7
|
end
|
|
@@ -43,7 +42,7 @@ module BingAdsRubySdk
|
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
def nokogiri_options
|
|
46
|
-
pretty_print ? {
|
|
45
|
+
pretty_print ? {indent: 2} : {save_with: Nokogiri::XML::Node::SaveOptions::AS_XML}
|
|
47
46
|
end
|
|
48
47
|
|
|
49
48
|
def pretty_print
|
|
@@ -54,4 +53,4 @@ module BingAdsRubySdk
|
|
|
54
53
|
BingAdsRubySdk.config.filters
|
|
55
54
|
end
|
|
56
55
|
end
|
|
57
|
-
end
|
|
56
|
+
end
|