Sha256: 691c919c01d18fb8aa8e62e496f7ec34138fc8fd0b84c6968bc9b86dc6b359e4

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

require 'rack'

module Rack
  class Revision
    File = ::File
    @@revision = nil

    def initialize(app, options={})
      @options = {
        :header   => options[:header].nil? ? 'X-Revision' : options[:header],
        :filename => options[:filename] || 'REVISION',
        :default  => options[:default]  || 'UNDEFINED',
        :rack_env => options[:rack_env].nil? ? 'rack.app_revision' : options[:rack_env]
      }

      @app = app
    end
 
    def call(env)
      env[@options[:rack_env]] = revision if @options[:rack_env]
      status, headers, body = @app.call(env)
      headers[@options[:header]] = revision if @options[:header]
      [status, headers, body]
    end

    def reset_revision
      @@revision = nil
    end
 
    protected
 
    def revision
      @@revision ||= read_revision
    end
 
    def read_revision
      File.exists?(detected_filename) ? File.read(detected_filename).strip : @options[:default]
    end

    def detected_filename
      @file ||= (@options[:filename] =~ /\A\// ? @options[:filename] : File.join(Dir.pwd, @options[:filename]))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rack-revision-1.0.1 lib/rack/revision.rb