From 47266817f617d4d79bb3445c1aae69cb3110ceca Mon Sep 17 00:00:00 2001 From: "Daniel J. Summers" Date: Sat, 12 Nov 2016 08:52:53 -0600 Subject: [PATCH] A little housekeeping - Simplified user message generation (Info is default level) - Removed paket and FAKE files, as we're using the default .NET Core build system --- src/.paket/paket.bootstrapper.exe | Bin 28208 -> 0 bytes src/MyWebLog.App/PageModule.fs | 29 +++++------ src/MyWebLog.App/PostModule.fs | 82 +++++++++++++++++------------- src/build.cmd | 14 ----- src/build.fsx | 42 --------------- src/build.sh | 33 ------------ src/paket.dependencies | 13 ----- src/paket.lock | 34 ------------- 8 files changed, 59 insertions(+), 188 deletions(-) delete mode 100644 src/.paket/paket.bootstrapper.exe delete mode 100644 src/build.cmd delete mode 100644 src/build.fsx delete mode 100644 src/build.sh delete mode 100644 src/paket.dependencies delete mode 100644 src/paket.lock diff --git a/src/.paket/paket.bootstrapper.exe b/src/.paket/paket.bootstrapper.exe deleted file mode 100644 index 64fdf248bfcf48ee396f801e8a8a266b85974238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28208 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
SV|C^5SU~ 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 diff --git a/src/MyWebLog.App/PageModule.fs b/src/MyWebLog.App/PageModule.fs index b78d9de..a928dac 100644 --- a/src/MyWebLog.App/PageModule.fs +++ b/src/MyWebLog.App/PageModule.fs @@ -15,17 +15,17 @@ type PageModule (data : IMyWebLogData, clock : IClock) as this = inherit NancyModule () do - this.Get ("/pages", fun _ -> this.PageList ()) - this.Get ("/page/{id}/edit", fun parms -> this.EditPage (downcast parms)) - this.Post ("/page/{id}/edit", fun parms -> this.SavePage (downcast parms)) - this.Delete ("/page/{id}/delete", fun parms -> this.DeletePage (downcast parms)) + this.Get ("/pages", fun _ -> this.PageList ()) + this.Get ("/page/{id}/edit", fun p -> this.EditPage (downcast p)) + this.Post ("/page/{id}/edit", fun p -> this.SavePage (downcast p)) + this.Delete ("/page/{id}/delete", fun p -> this.DeletePage (downcast p)) /// List all pages member this.PageList () : obj = this.RequiresAccessLevel AuthorizationLevel.Administrator let model = - PagesModel(this.Context, this.WebLog, findAllPages data this.WebLog.Id - |> List.map (fun p -> PageForDisplay (this.WebLog, p))) + PagesModel (this.Context, this.WebLog, findAllPages data this.WebLog.Id + |> List.map (fun p -> PageForDisplay (this.WebLog, p))) model.PageTitle <- Strings.get "Pages" upcast this.View.["admin/page/list", model] @@ -74,12 +74,12 @@ type PageModule (data : IMyWebLogData, clock : IClock) as this = } |> savePage data let model = MyWebLogModel (this.Context, this.WebLog) - { UserMessage.Empty with - Level = Level.Info - Message = System.String.Format - (Strings.get "MsgPageEditSuccess", - Strings.get (match pageId with "new" -> "Added" | _ -> "Updated")) } - |> model.AddMessage + model.AddMessage + { UserMessage.Empty with + Message = System.String.Format + (Strings.get "MsgPageEditSuccess", + Strings.get (match pageId with "new" -> "Added" | _ -> "Updated")) + } this.Redirect (sprintf "/page/%s/edit" pId) model | _ -> this.NotFound () @@ -92,9 +92,6 @@ type PageModule (data : IMyWebLogData, clock : IClock) as this = | Some page -> deletePage data page.WebLogId page.Id let model = MyWebLogModel (this.Context, this.WebLog) - { UserMessage.Empty with - Level = Level.Info - Message = Strings.get "MsgPageDeleted" } - |> model.AddMessage + model.AddMessage { UserMessage.Empty with Message = Strings.get "MsgPageDeleted" } this.Redirect "/pages" model | _ -> this.NotFound () diff --git a/src/MyWebLog.App/PostModule.fs b/src/MyWebLog.App/PostModule.fs index a83efeb..7e20d18 100644 --- a/src/MyWebLog.App/PostModule.fs +++ b/src/MyWebLog.App/PostModule.fs @@ -23,12 +23,14 @@ type NewsItem = } /// Routes dealing with posts (including the home page, /tag, /category, RSS, and catch-all routes) -type PostModule(data : IMyWebLogData, clock : IClock) as this = +type PostModule (data : IMyWebLogData, clock : IClock) as this = inherit NancyModule () /// Get the page number from the dictionary let getPage (parameters : DynamicDictionary) = - match parameters.ContainsKey "page" with true -> System.Int32.Parse (parameters.["page"].ToString ()) | _ -> 1 + match parameters.ContainsKey "page" with + | true -> match System.Int32.TryParse (parameters.["page"].ToString ()) with true, pg -> pg | _ -> 1 + | _ -> 1 /// Convert a list of posts to a list of posts for display let forDisplay posts = posts |> List.map (fun post -> PostForDisplay (this.WebLog, post)) @@ -37,23 +39,23 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = let generateFeed format : obj = let myChannelFeed channelTitle channelLink channelDescription (items : NewsItem list) = let xn = XName.Get - let elem name (valu:string) = XElement (xn name, valu) + let elem name (valu : string) = XElement (xn name, valu) let elems = items |> List.sortBy (fun i -> i.ReleaseDate) |> List.map (fun i -> - XElement - (xn "item", + XElement ( + xn "item", elem "title" (System.Net.WebUtility.HtmlEncode i.Title), elem "link" i.Link, elem "guid" i.Link, elem "pubDate" (i.ReleaseDate.ToString "r"), elem "description" (System.Net.WebUtility.HtmlEncode i.Description) )) - XDocument( - XDeclaration("1.0", "utf-8", "yes"), - XElement - (xn "rss", + XDocument ( + XDeclaration ("1.0", "utf-8", "yes"), + XElement ( + xn "rss", XAttribute (xn "version", "2.0"), elem "title" channelTitle, elem "link" channelLink, @@ -61,16 +63,21 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = elem "language" "en-us", XElement (xn "channel", elems)) |> box) - |> box let schemeAndUrl = sprintf "%s://%s" this.Request.Url.Scheme this.WebLog.UrlBase - findFeedPosts data this.WebLog.Id 10 - |> List.map (fun (post, _) -> - { Title = post.Title - Link = sprintf "%s/%s" schemeAndUrl post.Permalink - ReleaseDate = Instant.FromUnixTimeTicks(post.PublishedOn).ToDateTimeOffset().DateTime - Description = post.Text - }) - |> myChannelFeed this.WebLog.Name schemeAndUrl this.WebLog.Subtitle + let feed = + findFeedPosts data this.WebLog.Id 10 + |> List.map (fun (post, _) -> + { Title = post.Title + Link = sprintf "%s/%s" schemeAndUrl post.Permalink + ReleaseDate = Instant.FromUnixTimeTicks(post.PublishedOn).ToDateTimeOffset().DateTime + Description = post.Text + }) + |> myChannelFeed this.WebLog.Name schemeAndUrl this.WebLog.Subtitle + let stream = new IO.MemoryStream () + Xml.XmlWriter.Create stream |> feed.Save + //|> match format with "atom" -> feed.SaveAsAtom10 | _ -> feed.SaveAsRss20 + stream.Position <- 0L + upcast this.Response.FromStream (stream, sprintf "application/%s+xml" format) // TODO: how to return this? (* @@ -246,11 +253,12 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = match postId with "new" -> Some Post.Empty | _ -> tryFindPost data this.WebLog.Id postId |> function | Some post -> - let rev = match post.Revisions - |> List.sortByDescending (fun r -> r.AsOf) - |> List.tryHead with - | Some r -> r - | None -> Revision.Empty + let rev = + match post.Revisions + |> List.sortByDescending (fun r -> r.AsOf) + |> List.tryHead with + | Some r -> r + | None -> Revision.Empty let model = EditPostModel (this.Context, this.WebLog, post, rev) model.Categories <- findAllCategories data this.WebLog.Id |> List.map (fun cat -> @@ -270,12 +278,14 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = |> function | Some p -> let justPublished = p.PublishedOn = 0L && form.PublishNow - let post = match postId with - | "new" -> { p with - WebLogId = this.WebLog.Id - AuthorId = (this.Request.PersistableSession.GetOrDefault - (Keys.User, User.Empty)).Id } - | _ -> p + let post = + match postId with + | "new" -> + { p with + WebLogId = this.WebLog.Id + AuthorId = this.Request.PersistableSession.GetOrDefault(Keys.User, User.Empty).Id + } + | _ -> p let pId = { post with Status = match form.PublishNow with true -> PostStatus.Published | _ -> PostStatus.Draft @@ -296,12 +306,12 @@ type PostModule(data : IMyWebLogData, clock : IClock) as this = Text = form.Text } :: post.Revisions } |> savePost data let model = MyWebLogModel(this.Context, this.WebLog) - { UserMessage.Empty with - Level = Level.Info - Message = System.String.Format - (Strings.get "MsgPostEditSuccess", - Strings.get (match postId with "new" -> "Added" | _ -> "Updated"), - (match justPublished with true -> Strings.get "AndPublished" | _ -> "")) } - |> model.AddMessage + model.AddMessage + { UserMessage.Empty with + Message = System.String.Format + (Strings.get "MsgPostEditSuccess", + Strings.get (match postId with "new" -> "Added" | _ -> "Updated"), + (match justPublished with true -> Strings.get "AndPublished" | _ -> "")) + } this.Redirect (sprintf "/post/%s/edit" pId) model | _ -> this.NotFound () diff --git a/src/build.cmd b/src/build.cmd deleted file mode 100644 index 40aff45..0000000 --- a/src/build.cmd +++ /dev/null @@ -1,14 +0,0 @@ -@echo off -cls - -.paket\paket.bootstrapper.exe -if errorlevel 1 ( - exit /b %errorlevel% -) - -.paket\paket.exe restore -if errorlevel 1 ( - exit /b %errorlevel% -) - -packages\FAKE\tools\FAKE.exe build.fsx %* diff --git a/src/build.fsx b/src/build.fsx deleted file mode 100644 index a13fe19..0000000 --- a/src/build.fsx +++ /dev/null @@ -1,42 +0,0 @@ -// include Fake libs -#r "./packages/FAKE/tools/FakeLib.dll" - -open Fake - -// Directories -let buildDir = "./build/" -let deployDir = "./deploy/" - - -// Filesets -let appReferences = - !! "/**/*.csproj" - ++ "/**/*.fsproj" - -// version info -let version = "0.1" // or retrieve from CI server - -// Targets -Target "Clean" (fun _ -> - CleanDirs [buildDir; deployDir] -) - -Target "Build" (fun _ -> - // compile all projects below src/app/ - MSBuildDebug buildDir "Build" appReferences - |> Log "AppBuild-Output: " -) - -Target "Deploy" (fun _ -> - !! (buildDir + "/**/*.*") - -- "*.zip" - |> Zip buildDir (deployDir + "ApplicationName." + version + ".zip") -) - -// Build order -"Clean" - ==> "Build" - ==> "Deploy" - -// start build -RunTargetOrDefault "Build" diff --git a/src/build.sh b/src/build.sh deleted file mode 100644 index c40c3f8..0000000 --- a/src/build.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -if test "$OS" = "Windows_NT" -then - # use .Net - - .paket/paket.bootstrapper.exe - exit_code=$? - if [ $exit_code -ne 0 ]; then - exit $exit_code - fi - - .paket/paket.exe restore - exit_code=$? - if [ $exit_code -ne 0 ]; then - exit $exit_code - fi - - packages/FAKE/tools/FAKE.exe $@ --fsiargs build.fsx -else - # use mono - mono .paket/paket.bootstrapper.exe - exit_code=$? - if [ $exit_code -ne 0 ]; then - exit $exit_code - fi - - mono .paket/paket.exe restore - exit_code=$? - if [ $exit_code -ne 0 ]; then - exit $exit_code - fi - mono packages/FAKE/tools/FAKE.exe $@ --fsiargs -d:MONO build.fsx -fi diff --git a/src/paket.dependencies b/src/paket.dependencies deleted file mode 100644 index 7fb3107..0000000 --- a/src/paket.dependencies +++ /dev/null @@ -1,13 +0,0 @@ -framework: net40, net45, net452 -source https://www.nuget.org/api/v2 -nuget Common.Logging 3.3.0 -nuget FAKE -nuget FSharp.Interop.Dynamic -nuget FSharp.Formatting -nuget Nancy -nuget Nancy.Authentication.Forms -nuget Nancy.Session.RethinkDb -nuget Newtonsoft.Json -nuget NodaTime -nuget RethinkDb.Driver -nuget Suave \ No newline at end of file diff --git a/src/paket.lock b/src/paket.lock deleted file mode 100644 index d7e0315..0000000 --- a/src/paket.lock +++ /dev/null @@ -1,34 +0,0 @@ -FRAMEWORK: NET40, NET45, NET452 -NUGET - remote: https://www.nuget.org/api/v2 - Common.Logging (3.3) - Common.Logging.Core (>= 3.3) - Common.Logging.Core (3.3.1) - Dynamitey (1.0.2) - FAKE (4.36) - FSharp.Compiler.Service (2.0.0.6) - FSharp.Core (4.0.0.1) - FSharp.Formatting (2.14.4) - FSharp.Compiler.Service (2.0.0.6) - FSharpVSPowerTools.Core (>= 2.3 < 2.4) - FSharp.Interop.Dynamic (3.0) - Dynamitey (>= 1.0.2) - FSharp.Core (>= 3.1.2.1) - FSharpVSPowerTools.Core (2.3) - FSharp.Compiler.Service (>= 2.0.0.3) - Nancy (1.4.3) - Nancy.Authentication.Forms (1.4.1) - Nancy (>= 1.4.1) - Nancy.Session.Persistable (0.9) - Nancy (>= 1.4.3) - Newtonsoft.Json (>= 9.0.1) - Nancy.Session.RethinkDB (0.9) - Nancy.Session.Persistable (>= 0.9) - RethinkDb.Driver (>= 2.3.9) - Newtonsoft.Json (9.0.1) - NodaTime (1.3.2) - RethinkDb.Driver (2.3.10) - Common.Logging (>= 3.3) - framework: net45, net452 - Newtonsoft.Json (>= 9.0.1) - framework: net45, net452 - Suave (1.1.3) - FSharp.Core (>= 3.1.2.5)