facebookbusiness 0.5.0.2 → 0.5.0.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.
- checksums.yaml +4 -4
- data/lib/facebook_ads.rb +7 -1
- data/lib/facebook_ads/ad_objects/ad_account.rb +0 -6
- data/lib/facebook_ads/ad_objects/ad_creative.rb +1 -0
- data/lib/facebook_ads/ad_objects/ad_creative_link_data_image_overlay_spec.rb +2 -0
- data/lib/facebook_ads/ad_objects/ad_preview.rb +2 -0
- data/lib/facebook_ads/ad_objects/ad_set.rb +19 -19
- data/lib/facebook_ads/ad_objects/ad_study.rb +0 -4
- data/lib/facebook_ads/ad_objects/ads_insights.rb +0 -1
- data/lib/facebook_ads/ad_objects/album.rb +1 -0
- data/lib/facebook_ads/ad_objects/business.rb +3 -7
- data/lib/facebook_ads/ad_objects/business_image.rb +1 -1
- data/lib/facebook_ads/ad_objects/business_unit.rb +10 -1
- data/lib/facebook_ads/ad_objects/event.rb +17 -6
- data/lib/facebook_ads/ad_objects/group.rb +4 -3
- data/lib/facebook_ads/ad_objects/live_video.rb +1 -0
- data/lib/facebook_ads/ad_objects/null_node.rb +36 -0
- data/lib/facebook_ads/ad_objects/page.rb +13 -6
- data/lib/facebook_ads/ad_objects/product_catalog.rb +1 -0
- data/lib/facebook_ads/ad_objects/product_feed.rb +8 -0
- data/lib/facebook_ads/ad_objects/product_feed_schedule.rb +1 -3
- data/lib/facebook_ads/ad_objects/reach_frequency_prediction.rb +0 -1
- data/lib/facebook_ads/ad_objects/server_side/content.rb +128 -0
- data/lib/facebook_ads/ad_objects/server_side/custom_data.rb +313 -0
- data/lib/facebook_ads/ad_objects/server_side/event.rb +236 -0
- data/lib/facebook_ads/ad_objects/server_side/event_request.rb +158 -0
- data/lib/facebook_ads/ad_objects/server_side/event_response.rb +106 -0
- data/lib/facebook_ads/ad_objects/server_side/user_data.rb +396 -0
- data/lib/facebook_ads/ad_objects/server_side/util.rb +225 -0
- data/lib/facebook_ads/ad_objects/user.rb +14 -0
- data/lib/facebook_ads/api_response.rb +4 -0
- data/lib/facebook_ads/errors.rb +6 -1
- data/lib/facebook_ads/version.rb +1 -1
- metadata +10 -3
- data/lib/facebook_ads/ad_objects/business_project.rb +0 -86
@@ -0,0 +1,225 @@
|
|
1
|
+
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
+
#
|
3
|
+
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
+
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
+
# in connection with the web services and APIs provided by Facebook.
|
6
|
+
#
|
7
|
+
# As with any software that integrates with the Facebook platform, your use of
|
8
|
+
# this software is subject to the Facebook Platform Policy
|
9
|
+
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
+
# included in all copies or substantial portions of the software.
|
11
|
+
#
|
12
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
+
|
19
|
+
require 'digest'
|
20
|
+
|
21
|
+
module FacebookAds
|
22
|
+
module ServerSide
|
23
|
+
|
24
|
+
PHONE_NUMBER_IGNORE_CHAR_SET = /[\-\s\(\)]+/
|
25
|
+
PHONE_NUMBER_DROP_PREFIX_ZEROS = /^\+?0{0,2}/
|
26
|
+
US_PHONE_NUMBER_REGEX = /^1\(?\d{3}\)?\d{7}$/
|
27
|
+
INTL_PHONE_NUMBER_REGEX = /^\d{1,4}\(?\d{2,3}\)?\d{4,}$/
|
28
|
+
|
29
|
+
# RFC 2822 for email format
|
30
|
+
EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
|
31
|
+
|
32
|
+
# @return [String] SHA 256 hash of input string
|
33
|
+
def self.sha256Hash(input)
|
34
|
+
unless input.nil?
|
35
|
+
Digest::SHA256.hexdigest input
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Normalizes the input string given the field_type
|
40
|
+
# @param [String] input Input string that needs to be normalized
|
41
|
+
# @param [String] field_type Type/Key for the value provided
|
42
|
+
# @return [String] Normalized value for the input and field_type.
|
43
|
+
def self.normalize(input, field_type)
|
44
|
+
|
45
|
+
if input.nil? or field_type.nil?
|
46
|
+
return nil;
|
47
|
+
end
|
48
|
+
|
49
|
+
input = input.strip.downcase
|
50
|
+
|
51
|
+
# If the data is already hashed, we by-pass input normalization
|
52
|
+
if FacebookAds::ServerSide::is_already_hashed?(input) == true
|
53
|
+
return input
|
54
|
+
end
|
55
|
+
|
56
|
+
normalized_input = input;
|
57
|
+
|
58
|
+
case field_type
|
59
|
+
when 'country'
|
60
|
+
normalized_input = FacebookAds::ServerSide::normalize_country input
|
61
|
+
when 'ct'
|
62
|
+
normalized_input = FacebookAds::ServerSide::normalize_city input
|
63
|
+
when 'currency'
|
64
|
+
return FacebookAds::ServerSide::normalize_currency input
|
65
|
+
when 'em'
|
66
|
+
normalized_input = FacebookAds::ServerSide::normalize_email input
|
67
|
+
when 'ge'
|
68
|
+
normalized_input = FacebookAds::ServerSide::normalize_gender input
|
69
|
+
when 'ph'
|
70
|
+
normalized_input = FacebookAds::ServerSide::normalize_phone input
|
71
|
+
when 'st'
|
72
|
+
normalized_input = FacebookAds::ServerSide::normalize_state input
|
73
|
+
when 'zp'
|
74
|
+
normalized_input = FacebookAds::ServerSide::normalize_zip input
|
75
|
+
end
|
76
|
+
|
77
|
+
normalized_input = FacebookAds::ServerSide::sha256Hash normalized_input
|
78
|
+
|
79
|
+
return normalized_input
|
80
|
+
end
|
81
|
+
|
82
|
+
# Boolean method which checks if a input is already hashed with MD5 or SHA256
|
83
|
+
# @param [String] input Input string that is to be validated
|
84
|
+
# @return [TrueClass|FalseClass] representing whether the value is hashed
|
85
|
+
def self.is_already_hashed?(input)
|
86
|
+
|
87
|
+
# We support Md5 and SHA256, and highly recommend users to use SHA256 for hashing PII keys.
|
88
|
+
md5_match = /^[a-f0-9]{32}$/.match(input)
|
89
|
+
sha256_match = /^[a-f0-9]{64}$/.match(input)
|
90
|
+
|
91
|
+
if md5_match != nil or sha256_match != nil
|
92
|
+
return true
|
93
|
+
end
|
94
|
+
|
95
|
+
return false
|
96
|
+
end
|
97
|
+
|
98
|
+
# Normalizes the given country code and returns acceptable hashed country ISO code
|
99
|
+
def self.normalize_country(country)
|
100
|
+
|
101
|
+
# Replace unwanted characters and retain only alpha characters bounded for ISO code.
|
102
|
+
country = country.gsub(/[^a-z]/,'')
|
103
|
+
|
104
|
+
if country.length != 2
|
105
|
+
raise ArgumentError, "Invalid format for country:'" + country + "'.Please follow ISO 2-letter ISO 3166-1 standard for representing country. eg: us"
|
106
|
+
end
|
107
|
+
|
108
|
+
return country
|
109
|
+
end
|
110
|
+
|
111
|
+
# Normalizes the given city and returns acceptable hashed city value
|
112
|
+
def self.normalize_city(city)
|
113
|
+
|
114
|
+
# Remove commonly occuring characters from city name.
|
115
|
+
city = city.gsub(/[0-9.\s\-()]/,'')
|
116
|
+
|
117
|
+
return city
|
118
|
+
end
|
119
|
+
|
120
|
+
# Normalizes the given currency code and returns acceptable hashed currency ISO code
|
121
|
+
def self.normalize_currency(currency)
|
122
|
+
|
123
|
+
# Retain only alpha characters bounded for ISO code.
|
124
|
+
currency = currency.gsub(/[^a-z]/,'')
|
125
|
+
|
126
|
+
if currency.length != 3
|
127
|
+
raise ArgumentError, "Invalid format for currency:'" + currency + "'.Please follow ISO 3-letter ISO 4217 standard for representing currency. Eg: usd"
|
128
|
+
end
|
129
|
+
|
130
|
+
return currency;
|
131
|
+
end
|
132
|
+
|
133
|
+
# Normalizes the given email and returns acceptable hashed email value
|
134
|
+
def self.normalize_email(email)
|
135
|
+
|
136
|
+
if EMAIL_REGEX.match(email) == nil
|
137
|
+
return ArgumentError, "Invalid email format for the passed email:' + email + '.Please check the passed email format."
|
138
|
+
end
|
139
|
+
|
140
|
+
return email
|
141
|
+
end
|
142
|
+
|
143
|
+
# Normalizes the given gender and returns acceptable hashed gender value
|
144
|
+
def self.normalize_gender(gender)
|
145
|
+
|
146
|
+
# Replace extra characters with space, to bound under alpha characters set.
|
147
|
+
gender = gender.gsub(/[^a-z]/,'')
|
148
|
+
|
149
|
+
case gender
|
150
|
+
when 'female' , 'f'
|
151
|
+
gender = 'f'
|
152
|
+
when 'male' , 'm'
|
153
|
+
gender = 'm'
|
154
|
+
else
|
155
|
+
return nil
|
156
|
+
end
|
157
|
+
|
158
|
+
return gender
|
159
|
+
end
|
160
|
+
|
161
|
+
# Normalizes the given phone and returns acceptable hashed phone value
|
162
|
+
def self.normalize_phone(phone)
|
163
|
+
|
164
|
+
# Drop the spaces, hyphen and parenthesis from the Phone Number
|
165
|
+
normalized_phone = phone.gsub(PHONE_NUMBER_IGNORE_CHAR_SET, '')
|
166
|
+
|
167
|
+
if(FacebookAds::ServerSide::is_international_number?(normalized_phone))
|
168
|
+
normalized_phone = normalized_phone.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '')
|
169
|
+
end
|
170
|
+
|
171
|
+
if normalized_phone.length < 7 || normalized_phone.length > 15
|
172
|
+
return nil;
|
173
|
+
end
|
174
|
+
|
175
|
+
return normalized_phone
|
176
|
+
end
|
177
|
+
|
178
|
+
# Normalizes the given city and returns acceptable hashed city value
|
179
|
+
def self.normalize_state(state)
|
180
|
+
state = state.gsub(/[0-9.\s\-()]/,'')
|
181
|
+
|
182
|
+
return state
|
183
|
+
end
|
184
|
+
|
185
|
+
# Normalizes the given zip and returns acceptable hashed zip code value
|
186
|
+
def self.normalize_zip(zip)
|
187
|
+
|
188
|
+
# Remove spaces from the Postal code
|
189
|
+
zip = zip.gsub(/[\s]/,'')
|
190
|
+
|
191
|
+
# If the zip code '-', we retain just the first part alone.
|
192
|
+
zip = zip.split('-')[0]
|
193
|
+
|
194
|
+
if zip.length < 2
|
195
|
+
return nil
|
196
|
+
end
|
197
|
+
|
198
|
+
return zip
|
199
|
+
end
|
200
|
+
|
201
|
+
# Boolean method which checks if a given number is represented in international format
|
202
|
+
# @param [String] phone_number that has to be tested.
|
203
|
+
# @return [TrueClass | FalseClass] boolean value representing if a number is international
|
204
|
+
def self.is_international_number?(phone_number)
|
205
|
+
|
206
|
+
# Drop upto 2 leading 0s from the number
|
207
|
+
phone_number = phone_number.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '')
|
208
|
+
|
209
|
+
if phone_number.start_with?('0')
|
210
|
+
return false;
|
211
|
+
end
|
212
|
+
|
213
|
+
if phone_number.start_with?('1') && US_PHONE_NUMBER_REGEX.match(phone_number) != nil
|
214
|
+
return false;
|
215
|
+
end
|
216
|
+
|
217
|
+
if INTL_PHONE_NUMBER_REGEX.match(phone_number) != nil
|
218
|
+
return true;
|
219
|
+
end
|
220
|
+
|
221
|
+
return false;
|
222
|
+
end
|
223
|
+
|
224
|
+
end
|
225
|
+
end
|
@@ -79,6 +79,7 @@ module FacebookAds
|
|
79
79
|
"MSN",
|
80
80
|
"MYSPACE",
|
81
81
|
"NATEON",
|
82
|
+
"OCULUS",
|
82
83
|
"OK",
|
83
84
|
"ORKUT",
|
84
85
|
"OTHERS",
|
@@ -126,6 +127,7 @@ module FacebookAds
|
|
126
127
|
field :installed, 'bool'
|
127
128
|
field :interested_in, { list: 'string' }
|
128
129
|
field :is_famedeeplinkinguser, 'bool'
|
130
|
+
field :is_guest_user, 'bool'
|
129
131
|
field :is_shared_login, 'bool'
|
130
132
|
field :is_verified, 'bool'
|
131
133
|
field :languages, { list: 'Experience' }
|
@@ -305,6 +307,17 @@ module FacebookAds
|
|
305
307
|
api.has_param :business, 'string'
|
306
308
|
end
|
307
309
|
edge.get 'Business'
|
310
|
+
edge.post 'Business' do |api|
|
311
|
+
api.has_param :email, 'string'
|
312
|
+
api.has_param :name, 'string'
|
313
|
+
api.has_param :primary_page, 'string'
|
314
|
+
api.has_param :sales_rep_email, 'string'
|
315
|
+
api.has_param :survey_business_type, { enum: -> { Business::SURVEY_BUSINESS_TYPE }}
|
316
|
+
api.has_param :survey_num_assets, 'int'
|
317
|
+
api.has_param :survey_num_people, 'int'
|
318
|
+
api.has_param :timezone_id, 'int'
|
319
|
+
api.has_param :vertical, { enum: -> { Business::VERTICAL }}
|
320
|
+
end
|
308
321
|
end
|
309
322
|
|
310
323
|
has_edge :conversations do |edge|
|
@@ -722,6 +735,7 @@ module FacebookAds
|
|
722
735
|
api.has_param :ios_bundle_id, 'string'
|
723
736
|
api.has_param :is_explicit_location, 'bool'
|
724
737
|
api.has_param :is_explicit_place, 'bool'
|
738
|
+
api.has_param :is_visual_search, 'bool'
|
725
739
|
api.has_param :manual_privacy, 'bool'
|
726
740
|
api.has_param :message, 'string'
|
727
741
|
api.has_param :name, 'string'
|
data/lib/facebook_ads/errors.rb
CHANGED
@@ -24,7 +24,7 @@ module FacebookAds
|
|
24
24
|
|
25
25
|
class APIError < Error
|
26
26
|
ERROR_ATTRS = [
|
27
|
-
:fb_message, :type, :code,
|
27
|
+
:headers, :fb_message, :type, :code,
|
28
28
|
:error_subcode, :is_transient, :error_user_title,
|
29
29
|
:error_user_msg, :fbtrace_id,
|
30
30
|
]
|
@@ -32,6 +32,7 @@ module FacebookAds
|
|
32
32
|
attr_accessor *ERROR_ATTRS
|
33
33
|
|
34
34
|
def initialize(api_response)
|
35
|
+
send("headers=", api_response.headers)
|
35
36
|
error_obj = api_response.result
|
36
37
|
@api_response = api_response
|
37
38
|
|
@@ -47,6 +48,10 @@ module FacebookAds
|
|
47
48
|
super(error_obj)
|
48
49
|
end
|
49
50
|
end
|
51
|
+
|
52
|
+
def getHeaders
|
53
|
+
self.headers
|
54
|
+
end
|
50
55
|
end
|
51
56
|
|
52
57
|
class ServerError < APIError; end
|
data/lib/facebook_ads/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: facebookbusiness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.0.
|
4
|
+
version: 0.5.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Facebook
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -344,7 +344,6 @@ files:
|
|
344
344
|
- lib/facebook_ads/ad_objects/business_owned_object_on_behalf_of_request.rb
|
345
345
|
- lib/facebook_ads/ad_objects/business_page_request.rb
|
346
346
|
- lib/facebook_ads/ad_objects/business_pixel_tos.rb
|
347
|
-
- lib/facebook_ads/ad_objects/business_project.rb
|
348
347
|
- lib/facebook_ads/ad_objects/business_role_request.rb
|
349
348
|
- lib/facebook_ads/ad_objects/business_unit.rb
|
350
349
|
- lib/facebook_ads/ad_objects/business_user.rb
|
@@ -464,6 +463,7 @@ files:
|
|
464
463
|
- lib/facebook_ads/ad_objects/native_offer.rb
|
465
464
|
- lib/facebook_ads/ad_objects/native_offer_discount.rb
|
466
465
|
- lib/facebook_ads/ad_objects/native_offer_view.rb
|
466
|
+
- lib/facebook_ads/ad_objects/null_node.rb
|
467
467
|
- lib/facebook_ads/ad_objects/offline_conversion_data_set.rb
|
468
468
|
- lib/facebook_ads/ad_objects/offline_terms_of_service.rb
|
469
469
|
- lib/facebook_ads/ad_objects/offsite_pixel.rb
|
@@ -549,6 +549,13 @@ files:
|
|
549
549
|
- lib/facebook_ads/ad_objects/saved_audience.rb
|
550
550
|
- lib/facebook_ads/ad_objects/saved_message_response.rb
|
551
551
|
- lib/facebook_ads/ad_objects/security_settings.rb
|
552
|
+
- lib/facebook_ads/ad_objects/server_side/content.rb
|
553
|
+
- lib/facebook_ads/ad_objects/server_side/custom_data.rb
|
554
|
+
- lib/facebook_ads/ad_objects/server_side/event.rb
|
555
|
+
- lib/facebook_ads/ad_objects/server_side/event_request.rb
|
556
|
+
- lib/facebook_ads/ad_objects/server_side/event_response.rb
|
557
|
+
- lib/facebook_ads/ad_objects/server_side/user_data.rb
|
558
|
+
- lib/facebook_ads/ad_objects/server_side/util.rb
|
552
559
|
- lib/facebook_ads/ad_objects/split_test_config.rb
|
553
560
|
- lib/facebook_ads/ad_objects/split_test_winner.rb
|
554
561
|
- lib/facebook_ads/ad_objects/store_catalog_settings.rb
|
@@ -1,86 +0,0 @@
|
|
1
|
-
# Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
|
2
|
-
#
|
3
|
-
# You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
4
|
-
# copy, modify, and distribute this software in source code or binary form for use
|
5
|
-
# in connection with the web services and APIs provided by Facebook.
|
6
|
-
#
|
7
|
-
# As with any software that integrates with the Facebook platform, your use of
|
8
|
-
# this software is subject to the Facebook Platform Policy
|
9
|
-
# [http://developers.facebook.com/policy/]. This copyright notice shall be
|
10
|
-
# included in all copies or substantial portions of the software.
|
11
|
-
#
|
12
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
13
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
14
|
-
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
15
|
-
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
16
|
-
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
17
|
-
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
18
|
-
|
19
|
-
# FB:AUTOGEN
|
20
|
-
|
21
|
-
module FacebookAds
|
22
|
-
# This class is auto-generated.
|
23
|
-
|
24
|
-
# For any issues or feature requests related to this class, please let us know
|
25
|
-
# on github and we'll fix in our codegen framework. We'll not be able to accept
|
26
|
-
# pull request for this class.
|
27
|
-
|
28
|
-
class BusinessProject < AdObject
|
29
|
-
|
30
|
-
field :business, 'Business'
|
31
|
-
field :created_time, 'datetime'
|
32
|
-
field :creator, 'object'
|
33
|
-
field :id, 'string'
|
34
|
-
field :name, 'string'
|
35
|
-
|
36
|
-
has_edge :adaccounts do |edge|
|
37
|
-
edge.delete do |api|
|
38
|
-
api.has_param :adaccount_id, 'string'
|
39
|
-
end
|
40
|
-
edge.get 'AdAccount'
|
41
|
-
edge.post 'BusinessProject' do |api|
|
42
|
-
api.has_param :adaccount_id, 'string'
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
has_edge :apps do |edge|
|
47
|
-
edge.delete do |api|
|
48
|
-
api.has_param :app_id, 'string'
|
49
|
-
end
|
50
|
-
edge.get 'Application'
|
51
|
-
edge.post 'BusinessProject' do |api|
|
52
|
-
api.has_param :app_id, 'string'
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
has_edge :assets do |edge|
|
57
|
-
edge.delete do |api|
|
58
|
-
api.has_param :asset_id, 'string'
|
59
|
-
end
|
60
|
-
edge.post 'BusinessProject' do |api|
|
61
|
-
api.has_param :asset_id, 'string'
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
has_edge :pages do |edge|
|
66
|
-
edge.delete do |api|
|
67
|
-
api.has_param :page_id, 'int'
|
68
|
-
end
|
69
|
-
edge.get 'Page'
|
70
|
-
edge.post 'BusinessProject' do |api|
|
71
|
-
api.has_param :page_id, 'int'
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
has_edge :product_catalogs do |edge|
|
76
|
-
edge.delete do |api|
|
77
|
-
api.has_param :product_catalog_id, 'string'
|
78
|
-
end
|
79
|
-
edge.get 'ProductCatalog'
|
80
|
-
edge.post 'BusinessProject' do |api|
|
81
|
-
api.has_param :product_catalog_id, 'string'
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
end
|
86
|
-
end
|