Sha256: b3bef783947b613c1b05076681c22b5f43e0ecf0248acfc2c9e560038994f738

Contents?: true

Size: 1.54 KB

Versions: 6

Compression:

Stored size: 1.54 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
      else
        nil
      end
    end

    def version_key
      VersionCake::Railtie.config.versioncake.version_key
    end

    def execute(request)
      raise Exception, "ExtractionStrategy requires execute to be implemented"
    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

6 entries across 6 versions & 2 rubygems

Version Path
solidus_backend-1.0.0.pre3 vendor/bundle/gems/versioncake-2.3.1/lib/versioncake/strategies/extraction_strategy.rb
solidus_backend-1.0.0.pre2 vendor/bundle/gems/versioncake-2.3.1/lib/versioncake/strategies/extraction_strategy.rb
solidus_backend-1.0.0.pre vendor/bundle/gems/versioncake-2.3.1/lib/versioncake/strategies/extraction_strategy.rb
versioncake-2.5.0 lib/versioncake/strategies/extraction_strategy.rb
versioncake-2.4.0 lib/versioncake/strategies/extraction_strategy.rb
versioncake-2.3.1 lib/versioncake/strategies/extraction_strategy.rb