genius_referrals 0.1.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 +7 -0
- data/LICENSE +28 -0
- data/README.md +134 -0
- data/lib/genius_referrals/client.rb +169 -0
- data/lib/genius_referrals/errors.rb +84 -0
- data/lib/genius_referrals/resource.rb +49 -0
- data/lib/genius_referrals/resources/accounts.rb +13 -0
- data/lib/genius_referrals/resources/advocates.rb +85 -0
- data/lib/genius_referrals/resources/authentications.rb +8 -0
- data/lib/genius_referrals/resources/bonuses.rb +63 -0
- data/lib/genius_referrals/resources/campaigns.rb +15 -0
- data/lib/genius_referrals/resources/products.rb +86 -0
- data/lib/genius_referrals/resources/redemption_requests.rb +36 -0
- data/lib/genius_referrals/resources/referrals.rb +34 -0
- data/lib/genius_referrals/resources/reports.rb +72 -0
- data/lib/genius_referrals/resources/root.rb +8 -0
- data/lib/genius_referrals/resources/tags.rb +35 -0
- data/lib/genius_referrals/resources/utilities.rb +58 -0
- data/lib/genius_referrals/resources/vouchers.rb +33 -0
- data/lib/genius_referrals/resources/widgets_packages.rb +94 -0
- data/lib/genius_referrals/resources.rb +14 -0
- data/lib/genius_referrals/response.rb +34 -0
- data/lib/genius_referrals/transport.rb +30 -0
- data/lib/genius_referrals/version.rb +3 -0
- data/lib/genius_referrals.rb +7 -0
- data/test/client_test.rb +130 -0
- data/test/integration/authentication_test.rb +13 -0
- data/test/resources_test.rb +101 -0
- data/test/test_helper.rb +32 -0
- metadata +98 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
class ProductsResource < Resource
|
|
3
|
+
# List products for an account.
|
|
4
|
+
def list(account_slug, page: 1, limit: 10, filter: nil, sort: nil)
|
|
5
|
+
page('GET',
|
|
6
|
+
"/accounts/#{esc(account_slug)}/products",
|
|
7
|
+
params: compact(page: page, limit: limit, filter: filter, sort: sort))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Create a product using the `product` wrapper.
|
|
11
|
+
def create(account_slug, product)
|
|
12
|
+
request('POST', "/accounts/#{esc(account_slug)}/products", json: wrapped('product', product))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Retrieve one product.
|
|
16
|
+
def retrieve(account_slug, product_slug, filter: nil)
|
|
17
|
+
request('GET',
|
|
18
|
+
"/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}",
|
|
19
|
+
params: compact(filter: filter))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Replace a product using the `product` wrapper.
|
|
23
|
+
def update(account_slug, product_slug, product)
|
|
24
|
+
request('PUT',
|
|
25
|
+
"/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}",
|
|
26
|
+
json: wrapped('product', product))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Patch a product with unwrapped partial fields.
|
|
30
|
+
def patch(account_slug, product_slug, **fields)
|
|
31
|
+
request('PATCH', "/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}", json: fields)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Delete one product.
|
|
35
|
+
def delete(account_slug, product_slug)
|
|
36
|
+
request('DELETE', "/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# List product variants.
|
|
40
|
+
def variants(account_slug, product_slug, page: 1, limit: 10)
|
|
41
|
+
page('GET',
|
|
42
|
+
"/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}/variants",
|
|
43
|
+
params: { page: page, limit: limit })
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Create a product variant.
|
|
47
|
+
def create_variant(account_slug, product_slug, variant)
|
|
48
|
+
request('POST',
|
|
49
|
+
"/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}/variants",
|
|
50
|
+
json: wrapped('variant', variant))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Retrieve one product variant.
|
|
54
|
+
def retrieve_variant(account_slug, product_slug, variant_id, filter: nil)
|
|
55
|
+
request('GET',
|
|
56
|
+
"/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}/variants/#{esc(variant_id)}",
|
|
57
|
+
params: compact(filter: filter))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Replace one product variant.
|
|
61
|
+
def update_variant(account_slug, product_slug, variant_id, variant)
|
|
62
|
+
request('PUT',
|
|
63
|
+
"/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}/variants/#{esc(variant_id)}",
|
|
64
|
+
json: wrapped('variant', variant))
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Patch one product variant with unwrapped partial fields.
|
|
68
|
+
def patch_variant(account_slug, product_slug, variant_id, **fields)
|
|
69
|
+
request('PATCH',
|
|
70
|
+
"/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}/variants/#{esc(variant_id)}",
|
|
71
|
+
json: fields)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Delete one product variant.
|
|
75
|
+
def delete_variant(account_slug, product_slug, variant_id)
|
|
76
|
+
request('DELETE', "/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}/variants/#{esc(variant_id)}")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Patch a variant price with the live-doc unwrapped `amount` field.
|
|
80
|
+
def patch_variant_price(account_slug, product_slug, variant_id, currency_code, amount:)
|
|
81
|
+
request('PATCH',
|
|
82
|
+
"/accounts/#{esc(account_slug)}/products/#{esc(product_slug)}/variants/#{esc(variant_id)}/prices/#{esc(currency_code)}",
|
|
83
|
+
json: { 'amount' => amount })
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
class RedemptionRequestsResource < Resource
|
|
3
|
+
# List redemption requests for an account.
|
|
4
|
+
def list(account_slug, page: 1, limit: 10, filter: nil, sort: nil)
|
|
5
|
+
page('GET',
|
|
6
|
+
"/accounts/#{esc(account_slug)}/redemption-requests",
|
|
7
|
+
params: compact(page: page, limit: limit, filter: filter, sort: sort))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Create a redemption request.
|
|
11
|
+
def create(account_slug, redemption_request)
|
|
12
|
+
request('POST',
|
|
13
|
+
"/accounts/#{esc(account_slug)}/redemption-requests",
|
|
14
|
+
json: wrapped('redemption_request', redemption_request))
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Retrieve one redemption request.
|
|
18
|
+
def retrieve(account_slug, redemption_request_id)
|
|
19
|
+
request('GET', "/accounts/#{esc(account_slug)}/redemption-requests/#{esc(redemption_request_id)}")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Patch a redemption request with unwrapped partial fields.
|
|
23
|
+
def patch(account_slug, redemption_request_id, **fields)
|
|
24
|
+
request('PATCH',
|
|
25
|
+
"/accounts/#{esc(account_slug)}/redemption-requests/#{esc(redemption_request_id)}",
|
|
26
|
+
json: fields)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Patch the redemption action endpoint.
|
|
30
|
+
def redeem(account_slug, redemption_request_id, **fields)
|
|
31
|
+
request('PATCH',
|
|
32
|
+
"/accounts/#{esc(account_slug)}/redemption-requests/#{esc(redemption_request_id)}/redemption",
|
|
33
|
+
json: fields)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
class ReferralsResource < Resource
|
|
3
|
+
# List referrals for one advocate.
|
|
4
|
+
def list(account_slug, advocate_token, page: 1, limit: 10, filter: nil, sort: nil)
|
|
5
|
+
page('GET',
|
|
6
|
+
"/accounts/#{esc(account_slug)}/advocates/#{esc(advocate_token)}/referrals",
|
|
7
|
+
params: compact(page: page, limit: limit, filter: filter, sort: sort))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Create a referral.
|
|
11
|
+
def create(account_slug, advocate_token, referral)
|
|
12
|
+
request('POST',
|
|
13
|
+
"/accounts/#{esc(account_slug)}/advocates/#{esc(advocate_token)}/referrals",
|
|
14
|
+
json: wrapped('referral', referral))
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Retrieve one referral.
|
|
18
|
+
def retrieve(account_slug, advocate_token, referral_id)
|
|
19
|
+
request('GET', "/accounts/#{esc(account_slug)}/advocates/#{esc(advocate_token)}/referrals/#{esc(referral_id)}")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Replace one referral.
|
|
23
|
+
def update(account_slug, advocate_token, referral_id, referral)
|
|
24
|
+
request('PUT',
|
|
25
|
+
"/accounts/#{esc(account_slug)}/advocates/#{esc(advocate_token)}/referrals/#{esc(referral_id)}",
|
|
26
|
+
json: wrapped('referral', referral))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Delete one referral.
|
|
30
|
+
def delete(account_slug, advocate_token, referral_id)
|
|
31
|
+
request('DELETE', "/accounts/#{esc(account_slug)}/advocates/#{esc(advocate_token)}/referrals/#{esc(referral_id)}")
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
class ReportsResource < Resource
|
|
3
|
+
# Run the 1099 tax report.
|
|
4
|
+
def tax_1099(client_slug: nil, account_slug: nil, year: nil)
|
|
5
|
+
request('GET',
|
|
6
|
+
'/reports/1099-tax-report',
|
|
7
|
+
params: compact(client_slug: client_slug, account_slug: account_slug, year: year))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Run the revenue report with accepted live-doc and SDK parameter names.
|
|
11
|
+
def revenue(account_slug: nil, client_account_slug: nil, start_date: nil, end_date: nil)
|
|
12
|
+
request('GET',
|
|
13
|
+
'/reports/revenue',
|
|
14
|
+
params: compact(account_slug: account_slug,
|
|
15
|
+
client_account_slug: client_account_slug,
|
|
16
|
+
start_date: start_date,
|
|
17
|
+
end_date: end_date))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Run the daily bonuses given report.
|
|
21
|
+
def bonuses_daily_given(account_slug:, start_date:, end_date:, advocate_token: nil)
|
|
22
|
+
dated('/reports/bonuses-daily-given', account_slug, start_date, end_date, advocate_token)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Run the bonuses summary per origin report.
|
|
26
|
+
def bonuses_summary_per_origin(account_slug:, start_date:, end_date:, advocate_token: nil)
|
|
27
|
+
dated('/reports/bonuses-summary-per-origin', account_slug, start_date, end_date, advocate_token)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Run the click daily participation report.
|
|
31
|
+
def click_daily_participation(account_slug:, start_date:, end_date:, advocate_token: nil)
|
|
32
|
+
dated('/reports/click-daily-participation', account_slug, start_date, end_date, advocate_token)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Run the referral daily participation report.
|
|
36
|
+
def referral_daily_participation(account_slug:, start_date:, end_date:, advocate_token: nil)
|
|
37
|
+
dated('/reports/referral-daily-participation', account_slug, start_date, end_date, advocate_token)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Run the referrals summary per origin report.
|
|
41
|
+
def referrals_summary_per_origin(account_slug:, start_date:, end_date:, advocate_token: nil)
|
|
42
|
+
dated('/reports/referrals-summary-per-origin', account_slug, start_date, end_date, advocate_token)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Run the share daily participation report.
|
|
46
|
+
def share_daily_participation(account_slug:, start_date:, end_date:, advocate_token: nil)
|
|
47
|
+
dated('/reports/share-daily-participation', account_slug, start_date, end_date, advocate_token)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Run the top advocates report.
|
|
51
|
+
def top_advocates(account_slug:, start_date:, end_date:, advocate_token: nil, limit: nil)
|
|
52
|
+
request('GET',
|
|
53
|
+
'/reports/top-advocates',
|
|
54
|
+
params: compact(account_slug: account_slug,
|
|
55
|
+
start_date: start_date,
|
|
56
|
+
end_date: end_date,
|
|
57
|
+
advocate_token: advocate_token,
|
|
58
|
+
limit: limit))
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def dated(path, account_slug, start_date, end_date, advocate_token)
|
|
64
|
+
request('GET',
|
|
65
|
+
path,
|
|
66
|
+
params: compact(account_slug: account_slug,
|
|
67
|
+
start_date: start_date,
|
|
68
|
+
end_date: end_date,
|
|
69
|
+
advocate_token: advocate_token))
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
class TagsResource < Resource
|
|
3
|
+
# List tags.
|
|
4
|
+
def list(account_slug, page: 1, limit: 10, filter: nil, sort: nil)
|
|
5
|
+
page('GET',
|
|
6
|
+
"/accounts/#{esc(account_slug)}/tags",
|
|
7
|
+
params: compact(page: page, limit: limit, filter: filter, sort: sort))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Create a tag.
|
|
11
|
+
def create(account_slug, tag)
|
|
12
|
+
request('POST', "/accounts/#{esc(account_slug)}/tags", json: wrapped('tag', tag))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Retrieve one tag.
|
|
16
|
+
def retrieve(account_slug, tag_slug)
|
|
17
|
+
request('GET', "/accounts/#{esc(account_slug)}/tags/#{esc(tag_slug)}")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Replace one tag.
|
|
21
|
+
def update(account_slug, tag_slug, tag)
|
|
22
|
+
request('PUT', "/accounts/#{esc(account_slug)}/tags/#{esc(tag_slug)}", json: wrapped('tag', tag))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Patch a tag with unwrapped partial fields.
|
|
26
|
+
def patch(account_slug, tag_slug, **fields)
|
|
27
|
+
request('PATCH', "/accounts/#{esc(account_slug)}/tags/#{esc(tag_slug)}", json: fields)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Delete one tag.
|
|
31
|
+
def delete(account_slug, tag_slug)
|
|
32
|
+
request('DELETE', "/accounts/#{esc(account_slug)}/tags/#{esc(tag_slug)}")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
class UtilitiesResource < Resource
|
|
3
|
+
# List bonus redemption methods.
|
|
4
|
+
def bonus_redemption_methods(page: 1, limit: 10)
|
|
5
|
+
page('GET', '/utilities/bonuses-redemption-methods', params: { page: page, limit: limit })
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Retrieve one bonus redemption method.
|
|
9
|
+
def bonus_redemption_method(slug)
|
|
10
|
+
request('GET', "/utilities/bonuses-redemption-methods/#{esc(slug)}")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# List currencies.
|
|
14
|
+
def currencies(page: 1, limit: 10)
|
|
15
|
+
page('GET', '/utilities/currencies', params: { page: page, limit: limit })
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieve one currency.
|
|
19
|
+
def currency(code)
|
|
20
|
+
request('GET', "/utilities/currencies/#{esc(code)}")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# List utility payment methods.
|
|
24
|
+
def payment_methods(page: 1, limit: 10)
|
|
25
|
+
page('GET', '/utilities/payment-methods', params: { page: page, limit: limit })
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# List redemption request actions.
|
|
29
|
+
def redemption_request_actions(page: 1, limit: 10)
|
|
30
|
+
page('GET', '/utilities/redemption-request-actions', params: { page: page, limit: limit })
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Retrieve one redemption request action.
|
|
34
|
+
def redemption_request_action(slug)
|
|
35
|
+
request('GET', "/utilities/redemption-request-actions/#{esc(slug)}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# List redemption request statuses.
|
|
39
|
+
def redemption_request_statuses(page: 1, limit: 10)
|
|
40
|
+
page('GET', '/utilities/redemption-request-statuses', params: { page: page, limit: limit })
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Retrieve one redemption request status.
|
|
44
|
+
def redemption_request_status(slug)
|
|
45
|
+
request('GET', "/utilities/redemption-request-statuses/#{esc(slug)}")
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# List referral origins.
|
|
49
|
+
def referral_origins(page: 1, limit: 10)
|
|
50
|
+
page('GET', '/utilities/referral-origins', params: { page: page, limit: limit })
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Retrieve one referral origin.
|
|
54
|
+
def referral_origin(slug)
|
|
55
|
+
request('GET', "/utilities/referral-origins/#{esc(slug)}")
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
class VouchersResource < Resource
|
|
3
|
+
# List vouchers.
|
|
4
|
+
def list(account_slug, page: 1, limit: 10)
|
|
5
|
+
page('GET', "/accounts/#{esc(account_slug)}/vouchers", params: { page: page, limit: limit })
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Create a voucher.
|
|
9
|
+
def create(account_slug, voucher)
|
|
10
|
+
request('POST', "/accounts/#{esc(account_slug)}/vouchers", json: wrapped('voucher', voucher))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# List voucher denominations for a currency.
|
|
14
|
+
def denominations(account_slug, currency_code)
|
|
15
|
+
request('GET', "/accounts/#{esc(account_slug)}/vouchers-denominations/#{esc(currency_code)}")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieve one voucher.
|
|
19
|
+
def retrieve(account_slug, voucher_id)
|
|
20
|
+
request('GET', "/accounts/#{esc(account_slug)}/vouchers/#{esc(voucher_id)}")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Patch a voucher with unwrapped partial fields.
|
|
24
|
+
def patch(account_slug, voucher_id, **fields)
|
|
25
|
+
request('PATCH', "/accounts/#{esc(account_slug)}/vouchers/#{esc(voucher_id)}", json: fields)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Delete one voucher.
|
|
29
|
+
def delete(account_slug, voucher_id)
|
|
30
|
+
request('DELETE', "/accounts/#{esc(account_slug)}/vouchers/#{esc(voucher_id)}")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
class WidgetsPackagesResource < Resource
|
|
3
|
+
# List widgets packages.
|
|
4
|
+
def list(account_slug, page: 1, limit: 10)
|
|
5
|
+
page('GET', "/accounts/#{esc(account_slug)}/widgets-packages", params: { page: page, limit: limit })
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Create a widgets package.
|
|
9
|
+
def create(account_slug, widgets_package)
|
|
10
|
+
request('POST',
|
|
11
|
+
"/accounts/#{esc(account_slug)}/widgets-packages",
|
|
12
|
+
json: wrapped('widgets_package', widgets_package))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Retrieve one widgets package.
|
|
16
|
+
def retrieve(account_slug, widgets_package_slug)
|
|
17
|
+
request('GET', "/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Replace one widgets package.
|
|
21
|
+
def update(account_slug, widgets_package_slug, widgets_package)
|
|
22
|
+
request('PUT',
|
|
23
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}",
|
|
24
|
+
json: wrapped('widgets_package', widgets_package))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Delete one widgets package.
|
|
28
|
+
def delete(account_slug, widgets_package_slug)
|
|
29
|
+
request('DELETE', "/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# List widgets inside a package.
|
|
33
|
+
def widgets(account_slug, widgets_package_slug, page: 1, limit: 10, filter: nil)
|
|
34
|
+
page('GET',
|
|
35
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets",
|
|
36
|
+
params: compact(page: page, limit: limit, filter: filter))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Create a widget.
|
|
40
|
+
def create_widget(account_slug, widgets_package_slug, widget)
|
|
41
|
+
request('POST',
|
|
42
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets",
|
|
43
|
+
json: wrapped('widget', widget))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Retrieve one widget.
|
|
47
|
+
def retrieve_widget(account_slug, widgets_package_slug, widget_id, filter: nil)
|
|
48
|
+
request('GET',
|
|
49
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets/#{esc(widget_id)}",
|
|
50
|
+
params: compact(filter: filter))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Replace one widget.
|
|
54
|
+
def update_widget(account_slug, widgets_package_slug, widget_id, widget)
|
|
55
|
+
request('PUT',
|
|
56
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets/#{esc(widget_id)}",
|
|
57
|
+
json: wrapped('widget', widget))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Patch a widget with unwrapped partial fields.
|
|
61
|
+
def patch_widget(account_slug, widgets_package_slug, widget_id, **fields)
|
|
62
|
+
request('PATCH',
|
|
63
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets/#{esc(widget_id)}",
|
|
64
|
+
json: fields)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# List widget translations from the accepted SDK route text.
|
|
68
|
+
def translations(account_slug, widgets_package_slug, widget_id, page: 1, limit: 10)
|
|
69
|
+
page('GET',
|
|
70
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets/#{esc(widget_id)}/translations",
|
|
71
|
+
params: { page: page, limit: limit })
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Create a widget translation using the live-doc `widget` wrapper.
|
|
75
|
+
def create_translation(account_slug, widgets_package_slug, widget_id, widget)
|
|
76
|
+
request('POST',
|
|
77
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets/#{esc(widget_id)}/translations",
|
|
78
|
+
json: wrapped('widget', widget))
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Retrieve one widget translation from the accepted SDK route text.
|
|
82
|
+
def retrieve_translation(account_slug, widgets_package_slug, widget_id, locale)
|
|
83
|
+
request('GET',
|
|
84
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets/#{esc(widget_id)}/translations/#{esc(locale)}")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Patch a widget translation with unwrapped partial fields.
|
|
88
|
+
def patch_translation(account_slug, widgets_package_slug, widget_id, locale, **fields)
|
|
89
|
+
request('PATCH',
|
|
90
|
+
"/accounts/#{esc(account_slug)}/widgets-packages/#{esc(widgets_package_slug)}/widgets/#{esc(widget_id)}/translations/#{esc(locale)}",
|
|
91
|
+
json: fields)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require_relative 'resources/accounts'
|
|
2
|
+
require_relative 'resources/advocates'
|
|
3
|
+
require_relative 'resources/authentications'
|
|
4
|
+
require_relative 'resources/bonuses'
|
|
5
|
+
require_relative 'resources/campaigns'
|
|
6
|
+
require_relative 'resources/products'
|
|
7
|
+
require_relative 'resources/redemption_requests'
|
|
8
|
+
require_relative 'resources/referrals'
|
|
9
|
+
require_relative 'resources/reports'
|
|
10
|
+
require_relative 'resources/root'
|
|
11
|
+
require_relative 'resources/tags'
|
|
12
|
+
require_relative 'resources/utilities'
|
|
13
|
+
require_relative 'resources/vouchers'
|
|
14
|
+
require_relative 'resources/widgets_packages'
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module GeniusReferrals
|
|
2
|
+
APIResponse = Struct.new(:code, :data, :raw, keyword_init: true) do
|
|
3
|
+
# Build a response envelope from the public API `{code, data}` shape.
|
|
4
|
+
def self.from_api(payload)
|
|
5
|
+
if payload.is_a?(Hash) && payload.key?('code') && payload.key?('data')
|
|
6
|
+
new(code: payload['code'], data: payload['data'], raw: payload)
|
|
7
|
+
else
|
|
8
|
+
new(code: nil, data: payload, raw: payload)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Page = Struct.new(:results, :page, :limit, :total, :raw, keyword_init: true) do
|
|
14
|
+
# Build a pagination wrapper from the standard list response shape.
|
|
15
|
+
def self.from_api(payload)
|
|
16
|
+
envelope = APIResponse.from_api(payload)
|
|
17
|
+
data = envelope.data
|
|
18
|
+
|
|
19
|
+
if data.is_a?(Hash)
|
|
20
|
+
new(
|
|
21
|
+
results: data['results'] || [],
|
|
22
|
+
page: data['page'],
|
|
23
|
+
limit: data['limit'],
|
|
24
|
+
total: data['total'],
|
|
25
|
+
raw: payload
|
|
26
|
+
)
|
|
27
|
+
elsif data.is_a?(Array)
|
|
28
|
+
new(results: data, page: nil, limit: nil, total: nil, raw: payload)
|
|
29
|
+
else
|
|
30
|
+
new(results: [], page: nil, limit: nil, total: nil, raw: payload)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'net/http'
|
|
2
|
+
require 'stringio'
|
|
3
|
+
require 'uri'
|
|
4
|
+
|
|
5
|
+
module GeniusReferrals
|
|
6
|
+
TransportResponse = Struct.new(:status_code, :headers, :body, keyword_init: true)
|
|
7
|
+
|
|
8
|
+
class NetHTTPTransport
|
|
9
|
+
# Send one HTTP request using Ruby stdlib Net::HTTP.
|
|
10
|
+
def request(method, url, headers:, body:, timeout:)
|
|
11
|
+
uri = URI(url)
|
|
12
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
13
|
+
http.use_ssl = uri.scheme == 'https'
|
|
14
|
+
http.open_timeout = timeout
|
|
15
|
+
http.read_timeout = timeout
|
|
16
|
+
|
|
17
|
+
request_class = Net::HTTP.const_get(method.capitalize)
|
|
18
|
+
request = request_class.new(uri)
|
|
19
|
+
headers.each { |key, value| request[key] = value }
|
|
20
|
+
request.body = body if body
|
|
21
|
+
|
|
22
|
+
response = http.request(request)
|
|
23
|
+
TransportResponse.new(
|
|
24
|
+
status_code: response.code.to_i,
|
|
25
|
+
headers: response.each_header.to_h,
|
|
26
|
+
body: response.body.to_s
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
require_relative 'genius_referrals/version'
|
|
2
|
+
require_relative 'genius_referrals/errors'
|
|
3
|
+
require_relative 'genius_referrals/response'
|
|
4
|
+
require_relative 'genius_referrals/transport'
|
|
5
|
+
require_relative 'genius_referrals/resource'
|
|
6
|
+
require_relative 'genius_referrals/resources'
|
|
7
|
+
require_relative 'genius_referrals/client'
|