on master help sign in
Mime cleanup
commit33fe04bd283ffdf800f905584a1e3ededcfe83b7 authorMichael Snoyman <michael@snoyman.com> dateTue 22 May 2012, 06:04 (14 years ago) parentac8c0f7
8 files changed+29−12
wai-app-static/Backend/Filesystem.hs+1−1 wai-app-static/Listing.hs+1−1 wai-app-static/Mime.hs+2−6 wai-app-static/Network/Wai/Application/Static.hs+1−1 wai-app-static/Util.hs+1−1 wai-app-static/Types.hs → wai-app-static/WaiAppStatic/Types.hs+12−1 wai-app-static/test/WaiAppStaticTest.hs+10 wai-app-static/wai-app-static.cabal+1−1
wai-app-static/Backend/Filesystem.hs+1−1
@@ -2,7 +2,7 @@
22{-# LANGUAGE OverloadedStrings #-}
33module Backend.Filesystem where
44
5−import Types
5+import WaiAppStatic.Types
66import Prelude hiding (FilePath)
77import Filesystem.Path.CurrentOS (FilePath, (</>))
88import qualified Filesystem.Path.CurrentOS as F
wai-app-static/Listing.hs+1−1
@@ -10,7 +10,7 @@ import Text.Blaze ((!))
1010import qualified Data.Text as T
1111import Data.Time
1212import Data.Time.Clock.POSIX
13−import Types
13+import WaiAppStatic.Types
1414import System.Locale (defaultTimeLocale)
1515import Data.List (sortBy)
1616import Util
wai-app-static/Mime.hs+2−6
@@ -7,8 +7,7 @@ module Mime
77 ) where
88
99import qualified Data.Map as Map
10−import qualified Data.Text as T
11−import Types
10+import WaiAppStatic.Types
1211
1312defaultMimeType :: MimeType
1413defaultMimeType = "application/octet-stream"
@@ -89,12 +88,9 @@ mimeTypeByExt mm def =
8988 where
9089 go [] = def
9190 go (e:es) =
92− case Map.lookup (T.intercalate "." (e:es)) mm of
91+ case Map.lookup e mm of
9392 Nothing -> go es
9493 Just mt -> mt
9594
96−pieceExtensions :: Piece -> [Extension]
97−pieceExtensions = error "pieceExtensions"
98−
9995defaultMimeTypeByExt :: Piece -> MimeType
10096defaultMimeTypeByExt = mimeTypeByExt defaultMimeTypes defaultMimeType
wai-app-static/Network/Wai/Application/Static.hs+1−1
@@ -75,7 +75,7 @@ import Data.Maybe (isJust, fromJust)
7575import Network.HTTP.Date (parseHTTPDate, epochTimeToHTTPDate, formatHTTPDate)
7676import Data.Monoid (First (First, getFirst), mconcat)
7777
78−import Types
78+import WaiAppStatic.Types
7979import Mime
8080import Listing
8181import Util
wai-app-static/Util.hs+1−1
@@ -1,7 +1,7 @@
11{-# LANGUAGE OverloadedStrings #-}
22module Util where
33
4−import Types
4+import WaiAppStatic.Types
55import qualified Data.Text as T
66import Data.ByteString (ByteString)
77import qualified Data.ByteString.Lazy as L
wai-app-static/Types.hs → wai-app-static/WaiAppStatic/Types.hsrenamed+12−1
@@ -1,10 +1,11 @@
11{-# LANGUAGE OverloadedStrings #-}
2−module Types
2+module WaiAppStatic.Types
33 ( Pieces
44 , toPiece
55 , unsafeToPiece
66 , toPieces
77 , fromPiece
8+ , pieceExtensions
89 , MaxAge (..)
910 , Folder (..)
1011 , File (..)
@@ -48,6 +49,16 @@ toPieces = mapM toPiece
4849-- | Request coming from a user. Corresponds to @pathInfo@.
4950type Pieces = [Piece]
5051
52+pieceExtensions :: Piece -> [Extension]
53+pieceExtensions =
54+ go . fromPiece
55+ where
56+ go t
57+ | T.null e = []
58+ | otherwise = e : go e
59+ where
60+ e = T.drop 1 $ T.dropWhile (/= '.') t
61+
5162-- | Values for the max-age component of the cache-control response header.
5263data MaxAge = NoMaxAge -- ^ no cache-control set
5364 | MaxAgeSeconds Int -- ^ set to the given number of seconds
wai-app-static/test/WaiAppStaticTest.hs+10
@@ -5,6 +5,7 @@ import Network.Wai.Application.Static
55
66import Test.Hspec.Monadic
77import Test.Hspec.HUnit ()
8+import Test.HUnit ((@?=))
89import qualified Data.ByteString.Char8 as S8
910-- import qualified Data.ByteString.Lazy.Char8 as L8
1011import System.PosixCompat.Files (getFileStatus, modificationTime)
@@ -17,6 +18,7 @@ import Network.Wai
1718import Network.Wai.Test
1819
1920import Control.Monad.IO.Class (liftIO)
21+import WaiAppStatic.Types
2022
2123defRequest :: Request
2224defRequest = defaultRequest
@@ -30,6 +32,14 @@ specs = do
3032 let file = "a/b"
3133 let statFile = setRawPathInfo defRequest file
3234
35+ describe "mime types" $ do
36+ it "pieceExtensions" $
37+ pieceExtensions (unsafeToPiece "foo.tar.gz") @?= ["tar.gz", "gz"]
38+ it "handles multi-extensions" $
39+ defaultMimeTypeByExt (unsafeToPiece "foo.tar.gz") @?= "application/x-tgz"
40+ it "defaults correctly" $
41+ defaultMimeTypeByExt (unsafeToPiece "foo.unknown") @?= "application/octet-stream"
42+
3343 {-
3444 describe "Pieces: pathFromPieces" $ do
3545 it "converts to a file path" $
wai-app-static/wai-app-static.cabal+1−1
@@ -55,9 +55,9 @@ library
5555 blaze-html >= 0.4 && < 0.5
5656
5757 exposed-modules: Network.Wai.Application.Static
58+ WaiAppStatic.Types
5859 other-modules: Listing
5960 Mime
60− Types
6161 Util
6262 Backend.Filesystem
6363 ghc-options: -Wall