Sha256: 750f234736c67fd0e43bc771204c62b10dcc04498fd5dfd52bd8fc5d412c5dde

Contents?: true

Size: 1.64 KB

Versions: 5

Compression:

Stored size: 1.64 KB

Contents

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

    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: -> { '49.0' }
    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

5 entries across 5 versions & 1 rubygems

Version Path
salesforce_streamer-2.8.0 lib/salesforce_streamer/push_topic.rb
salesforce_streamer-2.6.0 lib/salesforce_streamer/push_topic.rb
salesforce_streamer-2.5.0 lib/salesforce_streamer/push_topic.rb
salesforce_streamer-2.4.0 lib/salesforce_streamer/push_topic.rb
salesforce_streamer-2.4.0.rc1 lib/salesforce_streamer/push_topic.rb