Skip to content

Commit

Permalink
Specify charset=utf-8 for all text docs
Browse files Browse the repository at this point in the history
  • Loading branch information
laurilehmijoki committed May 9, 2014
1 parent fb538e4 commit 42114ba
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
10 changes: 9 additions & 1 deletion src/main/scala/s3/website/model/push.scala
Expand Up @@ -96,7 +96,7 @@ object LocalFile {
contentEncoding = localFile.encodingOnS3.map(_ => "gzip"), contentEncoding = localFile.encodingOnS3.map(_ => "gzip"),
contentLength = sourceFile.length(), contentLength = sourceFile.length(),
maxAge = maxAge, maxAge = maxAge,
contentType = tika.detect(localFile.sourceFile), contentType = resolveContentType(localFile.sourceFile),
openInputStream = () => new FileInputStream(sourceFile) openInputStream = () => new FileInputStream(sourceFile)
) )
) )
Expand All @@ -108,6 +108,14 @@ object LocalFile {


lazy val tika = new Tika() lazy val tika = new Tika()


def resolveContentType(file: File) = {
val mimeType = tika.detect(file)
if (mimeType.startsWith("text/") || mimeType == "application/json")
mimeType + "; charset=utf-8"
else
mimeType
}

def resolveLocalFiles(implicit site: Site): Either[ErrorReport, Seq[LocalFile]] = Try { def resolveLocalFiles(implicit site: Site): Either[ErrorReport, Seq[LocalFile]] = Try {
val files = recursiveListFiles(new File(site.rootDirectory)).filterNot(_.isDirectory) val files = recursiveListFiles(new File(site.rootDirectory)).filterNot(_.isDirectory)
files map { file => files map { file =>
Expand Down
20 changes: 20 additions & 0 deletions src/test/scala/s3/website/S3WebsiteSpec.scala
Expand Up @@ -379,6 +379,26 @@ class S3WebsiteSpec extends Specification {
sentPutObjectRequest.getKey must equalTo(".vimrc") sentPutObjectRequest.getKey must equalTo(".vimrc")
} }
} }

"content type inference" should {
"add charset=utf-8 to all html documents" in new SiteDirectory with MockAWS {
implicit val site = siteWithFiles(localFiles = "file.html" :: Nil)
Push.pushSite
sentPutObjectRequest.getMetadata.getContentType must equalTo("text/html; charset=utf-8")
}

"add charset=utf-8 to all text documents" in new SiteDirectory with MockAWS {
implicit val site = siteWithFiles(localFiles = "file.txt" :: Nil)
Push.pushSite
sentPutObjectRequest.getMetadata.getContentType must equalTo("text/plain; charset=utf-8")
}

"add charset=utf-8 to all json documents" in new SiteDirectory with MockAWS {
implicit val site = siteWithFiles(localFiles = "file.json" :: Nil)
Push.pushSite
sentPutObjectRequest.getMetadata.getContentType must equalTo("application/json; charset=utf-8")
}
}


trait MockAWS extends MockS3 with MockCloudFront with Scope trait MockAWS extends MockS3 with MockCloudFront with Scope


Expand Down

0 comments on commit 42114ba

Please sign in to comment.