Sha256: c9194507c02b64d2164c662359de5846bdf908787cbaa4c5fb755a6b53ca6427

Contents?: true

Size: 1.1 KB

Versions: 3

Compression:

Stored size: 1.1 KB

Contents

module Frank
  module Middleware
    class Statik

      def initialize(app, options={})
        @app = app
        frank_root = File.expand_path(File.dirname(File.dirname(__FILE__))) + '/templates'
        root = options[:root] || Dir.pwd
        @frank_server = Rack::File.new(frank_root)
        @static_server = Rack::File.new(root)
      end

      # handles serving from __frank__
      # looks for static access, if not found,
      # passes request to frank
      def call(env)
        path = env['PATH_INFO'].dup

        if path.include? '__frank__'
          env['PATH_INFO'].gsub!('/__frank__', '')
          result = @frank_server.call(env)
        else
          env['PATH_INFO'] << '/' unless path.match(/(\.\w+|\/)$/)
          env['PATH_INFO'] << 'index.html' if path[-1..-1] == '/'
          result = @static_server.call(env)
        end

        # return if static assets found
        # else reset the path and pass to frank
        if result[0] == 200 || result[0] == 304
          result
        else
          env['PATH_INFO'] = path
          @app.call(env)
        end

      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
frank-1.0.12 lib/frank/middleware/statik.rb
frank-1.0.11 lib/frank/middleware/statik.rb
frank-1.0.10 lib/frank/middleware/statik.rb