Sha256: 0c64db3de869f0ded0bfcc9b851e27e892ac7488f6e38943007ef30b40815e62

Contents?: true

Size: 1.33 KB

Versions: 4

Compression:

Stored size: 1.33 KB

Contents

module JsTestCore
  module Resources
    class File < Resource
      map "*"

      MIME_TYPES = {
        '.html' => 'text/html',
        '.htm' => 'text/html',
        '.js' => 'text/javascript',
        '.css' => 'text/css',
        '.png' => 'image/png',
        '.jpg' => 'image/jpeg',
        '.jpeg' => 'image/jpeg',
        '.gif' => 'image/gif',
        }

      get "*" do
        do_get
      end
      
      def relative_path
        @relative_path ||= request.path_info
      end

      def absolute_path
        @absolute_path ||= ::File.expand_path("#{public_path}#{relative_path}")
      end

      protected

      def do_get
        if ::File.exists?(absolute_path)
          if ::File.directory?(absolute_path)
            render_dir
          else
            render_file
          end
        else
          pass
        end
      end

      def render_dir
        Representations::Dir.new(:relative_path => relative_path, :absolute_path => absolute_path).to_s
      end

      def render_file
        extension = ::File.extname(absolute_path)
        content_type = MIME_TYPES[extension] || 'text/html'
        [
          200,
          {
            'Content-Type' => content_type,
            'Last-Modified' => ::File.mtime(absolute_path).rfc822
          },
          ::File.read(absolute_path)
        ]
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pivotal-screw-unit-server-0.5.10 vendor/js-test-core/lib/js_test_core/resources/file.rb
pivotal-screw-unit-server-0.5.11 vendor/js-test-core/lib/js_test_core/resources/file.rb
pivotal-screw-unit-server-0.5.12 vendor/js-test-core/lib/js_test_core/resources/file.rb
pivotal-screw-unit-server-0.5.9 vendor/js-test-core/lib/js_test_core/resources/file.rb