Sha256: bd8f3edb412b103a1b129d019d7512f9bfbdee2a004b2e5afcef5fe90790dadf

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

require 'active_support/core_ext/string/inflections.rb'

module VersionCake
  class ExtractionStrategy

    def extract(request)
      version = execute(request)
      if version.is_a?(Fixnum)
        version
      elsif version.is_a?(String) && /[0-9]+/.match(version)
        version.to_i
      elsif version.nil? # no version was found
        nil
      else
        raise Exception, "Invalid format for version number."
      end
    end

    def version_key
      VersionCake.config.version_key
    end

    # Execute should return a number or a numeric string if it successfully finds a version. 
    # If no version is found, nil should be returned. Any other results returned will raise
    # an exception.
    def execute(request)
      raise Exception, "ExtractionStrategy requires execute to be implemented"
    end

    def self.list(*strategies)
      strategies.map do |strategy|
        lookup(strategy)
      end
    end

    def self.lookup(strategy)
      case strategy
        when String, Symbol
          strategy_name = "#{strategy}_strategy".camelize
          begin
            VersionCake.const_get(strategy_name).new
          rescue
            raise Exception, "Unknown VersionCake extraction strategy #{strategy_name}"
          end
        when Proc
          if strategy.arity == 1
            VersionCake::CustomStrategy.new(strategy)
          else
            raise Exception, "Custom proc extraction strategy requires a single parameter"
          end
        when Object
          if !strategy.methods.include?(:execute)
            raise Exception, "Custom extraction strategy requires an execute method"
          elsif strategy.method(:execute).arity != 1
            raise Exception, "Custom extraction strategy requires an execute method with a single parameter"
          else
            VersionCake::CustomStrategy.new(strategy)
          end
        else
          raise Exception, "Invalid extration strategy"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
versioncake-3.1.0 lib/versioncake/strategies/extraction_strategy.rb