Sha256: 0e8c02a1c25d6d2f57850c1788531c9d613965d466a8152d927e6880f32568e5

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

# frozen_string_literal: true

module Wayfarer
  module Middleware
    class Router
      module API
        def self.included(base)
          base.include(InstanceMethods)
          base.extend(ClassMethods)
        end

        module InstanceMethods
          def steer
            []
          end

          def params
            task.metadata.params
          end
        end

        module ClassMethods
          def router
            @router ||= Wayfarer::Routing::Router.new
          end

          def route(&block)
            router.draw(&block) if block_given?
          end

          def steer(&block)
            define_method(:steer) { block.call(task) }
          end
        end
      end

      def call(task)
        router = task.job.class.router
        url = Addressable::URI.parse(task.url)

        case result = router.invoke(url, task.job.steer)
        when Routing::Result::Mismatch
          return
        when Routing::Result::Match
          task.metadata.action = result.action
          task.metadata.params = ActiveSupport::HashWithIndifferentAccess.new(result.params)
        end

        yield if block_given?
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
wayfarer-0.4.3 lib/wayfarer/middleware/router.rb
wayfarer-0.4.2 lib/wayfarer/middleware/router.rb