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.
@@ -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,8 @@
1
+ module GeniusReferrals
2
+ class RootResource < Resource
3
+ # Retrieve API root links.
4
+ def retrieve
5
+ request('GET', '/')
6
+ end
7
+ end
8
+ 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,3 @@
1
+ module GeniusReferrals
2
+ VERSION = '0.1.0'
3
+ 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'