Sha256: b7fb2f86e6183b47b25f6ab1ac778cd8244ead54b23bff00d7aba7625d2a06b4

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

# This module holds all utilities related to the /hooks endpoint.
module Sms77::Hooks
  module Action
    READ = 'read'
    SUBSCRIBE = 'subscribe'
    UNSUBSCRIBE = 'unsubscribe'
  end

  module EventType
    ALL = 'all'
    NEW_INBOUND_SMS = 'sms_mo'
    SMS_STATUS_UPDATE = 'dlr'
    TRACKING = 'tracking'
    VOICE_CALL = 'voice_call'
    VOICE_STATUS_UPDATE = 'voice_status'
  end

  module RequestMethod
    GET = 'GET'
    JSON = 'JSON'
    POST = 'POST'
  end

  module Validator
    def self.validate(params)
      action = params[:action]

      raise "Unknown action #{action}" unless Sms77::Hooks::Validator::is_action?(action)

      if Sms77::Hooks::Action::SUBSCRIBE == action
        raise 'Parameter validation failed' unless Sms77::Hooks::Validator::subscribe(params)
      elsif Sms77::Hooks::Action::UNSUBSCRIBE == action
        raise 'ID must be a positive integer' unless Sms77::Hooks::Validator::unsubscribe(params)
      end
    end

    def self.subscribe(params)
      { :request_method => Sms77::Hooks::RequestMethod::POST }.merge!(params)

      self.event_type?(params[:event_type]) &&
        self.request_method?(params[:request_method]) &&
        self.target_url?(params[:target_url])
    end

    def self.unsubscribe(params)
      Sms77::Util::is_positive_integer?(params[:id])
    end

    def self.is_action?(str)
      Sms77::Util::in_module_constants?(str, Sms77::Hooks::Action)
    end

    def self.event_type?(str)
      Sms77::Util::in_module_constants?(str, Sms77::Hooks::EventType)
    end

    def self.request_method?(str)
      Sms77::Util::in_module_constants?(str, Sms77::Hooks::RequestMethod)
    end

    def self.target_url?(str)
      Sms77::Util::is_valid_url?(str)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sms77-0.5.0 lib/sms77/hooks.rb