Sha256: a41c9ea09162b428e5053bac2f26ae34697cbf45ab89a1688affdac09647b636

Contents?: true

Size: 1.33 KB

Versions: 19

Compression:

Stored size: 1.33 KB

Contents

# frozen_string_literal: true

require 'deterministic'
require 'dry-struct'
require 'dry-types'

module Salestation
  class App
    module Types
      dry_types_version = Gem.loaded_specs['dry-types'].version
      if dry_types_version < Gem::Version.new('0.15.0')
        include Dry::Types.module
      else
        include Dry::Types()
      end
    end

    def initialize(env:, hooks: {})
      @environment = env
      @hook_listeners = {}
      @hooks = hooks
    end

    def start
      @hooks.each do |hook_type, hook|
        hook.start_listening do |payload|
          @hook_listeners.fetch(hook_type, []).each { |handle| handle.call(payload) }
        end
      end
    end

    def create_request(input, span: nil)
      Request.create(
        env: @environment,
        input: input,
        initialize_hook: method(:initialize_hook),
        span: span
      )
    end

    def register_listener(hook_type, listener)
      @hook_listeners[hook_type] ||= []
      @hook_listeners[hook_type].push(listener)
    end

    private

    def initialize_hook(hook_type, payload)
      raise "Unknown hook_type #{hook_type}" unless @hooks[hook_type]

      @hooks[hook_type].init(payload)
    end
  end
end

require_relative './app/errors'
require_relative './app/request'
require_relative './app/input_verification'
require_relative './result_helper'

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
salestation-5.3.2 lib/salestation/app.rb
salestation-5.3.1 lib/salestation/app.rb
salestation-5.3.0 lib/salestation/app.rb
salestation-5.2.0 lib/salestation/app.rb
salestation-5.1.0 lib/salestation/app.rb
salestation-5.0.2 lib/salestation/app.rb
salestation-5.0.1 lib/salestation/app.rb
salestation-5.0.0 lib/salestation/app.rb
salestation-4.6.1 lib/salestation/app.rb
salestation-4.6.0 lib/salestation/app.rb
salestation-4.5.0 lib/salestation/app.rb
salestation-4.4.2 lib/salestation/app.rb
salestation-4.4.1 lib/salestation/app.rb
salestation-4.4.0 lib/salestation/app.rb
salestation-4.3.1 lib/salestation/app.rb
salestation-4.3.0 lib/salestation/app.rb
salestation-4.2.0 lib/salestation/app.rb
salestation-4.1.0 lib/salestation/app.rb
salestation-4.0.3 lib/salestation/app.rb