Sha256: 3289ef0288c4b946a7e1d92fb9815bb4ba03274f84c1181b6a2f3a5ec7e7cb39

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

require 'garage/strategy/cor/version'
require 'garage/strategy/chain_of_responsibility'
require 'garage/strategy/cor/base'
require 'garage/strategy/cor/basic_auth'
require 'garage/strategy/cor/configuration'
require 'garage/strategy/cor/params'

module Garage
  module Strategy
    module Cor
      extend ActiveSupport::Concern

      included do
        before_action :verify_auth, if: -> (_) { verify_permission? }
      end

      def verify_permission?
        true
      end

      def access_token
        return @access_token if defined?(@access_token)

        strategy = build_strategy
        loop do
          @access_token = strategy.access_token
          return @access_token if @access_token

          strategy = strategy.successor
          break unless strategy
        end
      end

      def build_strategy
        return @strategies.first if defined?(@strategies)
          
        strategy_classes = Garage::Strategy::ChainOfResponsibility.configuration.strategies
        @strategies = [].tap do |strategies|
          strategy_classes.reverse.inject(nil) do |successor, strategy|
            strategy.new(self, successor).tap { |strategy| strategies.unshift(strategy) }
          end
        end
        @strategies.first
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
garage-strategy-cor-0.1.0.beta1 lib/garage/strategy/cor.rb