Module: GeniusReferrals

Defined in:
lib/genius_referrals/client.rb,
lib/genius_referrals/errors.rb,
lib/genius_referrals/version.rb,
lib/genius_referrals/resource.rb,
lib/genius_referrals/response.rb,
lib/genius_referrals/transport.rb,
lib/genius_referrals/resources/root.rb,
lib/genius_referrals/resources/tags.rb,
lib/genius_referrals/resources/bonuses.rb,
lib/genius_referrals/resources/reports.rb,
lib/genius_referrals/resources/accounts.rb,
lib/genius_referrals/resources/products.rb,
lib/genius_referrals/resources/vouchers.rb,
lib/genius_referrals/resources/advocates.rb,
lib/genius_referrals/resources/campaigns.rb,
lib/genius_referrals/resources/referrals.rb,
lib/genius_referrals/resources/utilities.rb,
lib/genius_referrals/resources/authentications.rb,
lib/genius_referrals/resources/widgets_packages.rb,
lib/genius_referrals/resources/redemption_requests.rb

Defined Under Namespace

Classes: APIError, APIResponse, AccountsResource, AdvocatesResource, AuthenticationError, AuthenticationsResource, AuthorizationError, BonusesResource, CampaignsResource, Client, ConflictError, Error, GeniusReferralsClient, NetHTTPTransport, NotFoundError, Page, ProductsResource, RateLimitError, RedemptionRequestsResource, ReferralsResource, ReportsResource, Resource, RootResource, TagsResource, TransportError, TransportResponse, UtilitiesResource, ValidationError, VouchersResource, WidgetsPackagesResource

Constant Summary collapse

DEFAULT_BASE_URL =
'https://api.geniusreferrals.com'
RETRYABLE_STATUS_CODES =
[408, 429, 500, 502, 503, 504].freeze
SENSITIVE_HEADER_NAMES =
['authorization', 'x-auth-token'].freeze
SENSITIVE_FIELD_FRAGMENTS =
['api_key', 'apikey', 'authorization', 'password', 'secret', 'token'].freeze
ERROR_BY_STATUS =
{
  400 => ValidationError,
  401 => AuthenticationError,
  403 => AuthorizationError,
  404 => NotFoundError,
  409 => ConflictError,
  422 => ValidationError,
  429 => RateLimitError
}.freeze
VERSION =
'0.1.0'

Class Method Summary collapse

Class Method Details

.redact(value, secrets: []) ⇒ Object

Returns a redacted deep copy for objects that may contain credentials.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/genius_referrals/errors.rb', line 6

def self.redact(value, secrets: [])
  secret_values = Array(secrets).compact.map(&:to_s).reject(&:empty?)
  case value
  when Hash
    value.each_with_object({}) do |(key, item), redacted|
      lowered = key.to_s.downcase
      redacted[key] = if sensitive_key?(lowered)
                        '[REDACTED]'
                      else
                        redact(item, secrets: secret_values)
                      end
    end
  when Array
    value.map { |item| redact(item, secrets: secret_values) }
  when String
    redact_string(value, secret_values)
  else
    value
  end
end

.redact_string(value, secrets) ⇒ Object



32
33
34
35
36
# File 'lib/genius_referrals/errors.rb', line 32

def self.redact_string(value, secrets)
  secrets.reduce(value.dup) do |text, secret|
    text.gsub(secret, '[REDACTED]')
  end
end

.sensitive_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
30
# File 'lib/genius_referrals/errors.rb', line 27

def self.sensitive_key?(key)
  SENSITIVE_HEADER_NAMES.include?(key) ||
    SENSITIVE_FIELD_FRAGMENTS.any? { |fragment| key.include?(fragment) }
end