Sha256: 3b0cd3e355efd13f5d8f8d5afa97ed161b029905ec2961ee063040c5c850a4f3

Contents?: true

Size: 1.72 KB

Versions: 4

Compression:

Stored size: 1.72 KB

Contents

module SalesforceStreamer
  # Models the PushTopic object for both Restforce and Streamer
  class PushTopic
    extend Dry::Initializer

    DEFAULT_API_VERSION = ENV.fetch('SALESFORCE_API_VERSION', '58.0')

    option :name
    option :query, ->(v) { v.gsub(/\s+/, ' ') }
    option :handler, ->(v) { prepare_handler_proc(Object.const_get(v)) }
    option :replay, ->(v) { v.to_i }, default: -> { -1 }
    option :api_version, proc(&:to_s), default: -> { DEFAULT_API_VERSION }
    option :notify_for_fields, default: -> { 'Referenced' }
    option :id, optional: true
    option :description, optional: true

    attr_writer :id

    def handle(message)
      message['topic'] = @name
      message_middleware.call(message)
    rescue StandardError => e
      Log.error e
      Configuration.instance.exception_adapter.call e
    end

    def attributes
      self.class.dry_initializer.public_attributes self
    end

    private

    def validate!
      fail(PushTopicNameTooLongError, @name) if @name.size > 25

      @handler = Object.const_get(@handler)
      true
    rescue NameError, TypeError => e
      message = "handler=#{@handler} exception=#{e}"
      raise(PushTopicHandlerMissingError, message)
    end

    def message_middleware
      Configuration.instance.middleware_runner(handler)
    end

    class << self
      def strip_spaces(str)
        fail(NilQueryError, @name) unless str

        str.gsub(/\s+/, ' ')
      end

      def prepare_handler_proc(constant)
        if constant.respond_to? :call
          constant
        elsif constant.respond_to? :perform_async
          proc { |message| constant.perform_async message }
        else
          fail(UnprocessableHandlerError, constant)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
salesforce_streamer-2.11.1 lib/salesforce_streamer/push_topic.rb
salesforce_streamer-2.11.0 lib/salesforce_streamer/push_topic.rb
salesforce_streamer-2.10.0 lib/salesforce_streamer/push_topic.rb
salesforce_streamer-2.9.0 lib/salesforce_streamer/push_topic.rb