saiqulhaq/firebase_dynamic_link

View on GitHub
lib/firebase_dynamic_link.rb

Summary

Maintainability
A
0 mins
Test Coverage
C
77%
# frozen_string_literal: true

require 'dry-configurable'
require 'dry/configurable/version'
require 'faraday'
require 'faraday/net_http' if Faraday::VERSION.to_f >= 2.0
require 'firebase_dynamic_link/client'
require 'firebase_dynamic_link/link_renderer'
require 'firebase_dynamic_link/version'

module FirebaseDynamicLink
  extend Dry::Configurable

  USE_FARADAY_2 = Faraday::VERSION.to_i == 2
  USE_DRY_CONFIGURABLE_0_13 = Dry::Configurable::VERSION.to_f >= 0.13

  # called when invalid configuration given
  class InvalidConfig < StandardError; end

  # called when HTTP request failed
  class ConnectionError < StandardError; end

  # called when Firebase says that no more quota
  class QuotaExceeded < StandardError; end

  if FirebaseDynamicLink::USE_FARADAY_2 && Faraday.default_adapter == :test
    Faraday.default_adapter = :net_http # default adapter included in this gem
  end

  # @!group Configuration
  # @!method adapter
  #   @!scope class
  #   Selected Faraday HTTP adapter
  # @!method adapter=(adapter_key)
  #   @!scope class
  #   Set Faraday HTTP adapter
  #   @param adapter_key [Symbol]
  #   @example
  #     FirebaseDynamicLink.adapter = :patron
  #     FirebaseDynamicLink.adapter = :httpclient
  #     FirebaseDynamicLink.adapter = :net_http_persistent
  #   @see https://github.com/lostisland/faraday/tree/master/test/adapters
  # @since 0.1.0
  if USE_DRY_CONFIGURABLE_0_13
    setting :adapter, default: Faraday.default_adapter
  else
    setting :adapter, Faraday.default_adapter
  end

  # @!method api_key
  #   @!scope class
  #   Given api key
  # @!method api_key=(key)
  #   @!scope class
  #   Set api key
  #   @param key [String]
  # @since 0.1.0
  setting :api_key

  # @!method timeout
  #   Timeout default setting is 3 seconds
  #   @!scope class
  # @!method timeout=(seconds)
  #   @!scope class
  #   @param seconds [Integer]
  # @since 0.1.0
  # @!scope class
  if USE_DRY_CONFIGURABLE_0_13
    setting :timeout, default: 3
  else
    setting :timeout, 3
  end

  # @!method open_timeout
  #   @!scope class
  #   Open timeout default setting is 3 seconds
  # @!method open_timeout=(seconds)
  #   @!scope class
  #   @param seconds [Integer]
  # @since 0.1.0
  # @!scope class
  if USE_DRY_CONFIGURABLE_0_13
    setting :open_timeout, default: 3
  else
    setting :open_timeout, 3
  end

  # @!method dynamic_link_domain
  #   @!scope class
  #   Firebase dynamic link domain
  # @!method dynamic_link_domain=(domain)
  #   @!scope class
  #   @param domain [String]
  # @since 1.0.0
  # @!scope class
  setting(:dynamic_link_domain)

  # @!method suffix_option
  #   @!scope class
  #   Firebase suffix option setting, default is UNGUESSABLE
  # @!method suffix_option=(suffix)
  #   @!scope class
  #   @raise [FirebaseDynamicLink::InvalidConfig] if value is not one of SHORT and UNGUESSABLE
  #   @param suffix [String]
  # @since 1.0.0
  # @!scope class
  if USE_DRY_CONFIGURABLE_0_13
    setting(:suffix_option, default: 'UNGUESSABLE', constructor: lambda { |value|
      if %w[SHORT
            UNGUESSABLE].include?(value)
        value
      else
        raise(FirebaseDynamicLink::InvalidConfig,
              'default suffix option config is not valid')
      end
    })
  else
    setting(:suffix_option, 'UNGUESSABLE') do |value|
      if %w[SHORT
            UNGUESSABLE].include?(value)
        value
      else
        raise(FirebaseDynamicLink::InvalidConfig,
              'default suffix option config is not valid')
      end
    end

  end
  # @!endgroup
end