Skip to content

Commit

Permalink
Improve Template.Json Template.Web API
Browse files Browse the repository at this point in the history
  • Loading branch information
Freymaurer committed Sep 22, 2023
1 parent f171c79 commit 41637de
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 37 deletions.
7 changes: 4 additions & 3 deletions src/ARCtrl/ARCtrl.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@
<Compile Include="Contracts\Contracts.ArcStudy.fs" />
<Compile Include="Contracts\Contracts.ArcInvestigation.fs" />
<Compile Include="Contracts\Contracts.ARCtrl.fs" />
<Compile Include="Templates\Templates.fs" />
<Compile Include="Templates\Templates.Json.fs" />
<Compile Include="Templates\Templates.Spreadsheet.fs" />
<Compile Include="Templates\Template.fs" />
<Compile Include="Templates\Template.Json.fs" />
<Compile Include="Templates\Template.Spreadsheet.fs" />
<Compile Include="Templates\Template.Web.fs" />
<None Include="README.md" />
<Compile Include="ARCtrl.fs" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module ARCtrl.Templates.Json
module ARCtrl.Template.Json

open ARCtrl.Templates
open ARCtrl.Template
open ARCtrl.ISA
open System
#if FABLE_COMPILER
Expand Down Expand Up @@ -105,6 +105,14 @@ module Template =
)
)

let decodeFromString (jsonString: string) =
match Decode.fromString decode jsonString with
| Ok template -> template
| Error exn -> failwithf "Error. Given json string cannot be parsed to Template: %A" exn

let encodeToString (spaces: int) (template:Template) =
Encode.toString spaces (encode template)

module Templates =

let encode (templateList: (string*Template) []) =
Expand All @@ -116,31 +124,20 @@ module Templates =
let decode =
let d = Decode.dict Template.decode
Decode.fromString d


let decodeFromString (jsonString: string) =
match decode jsonString with
| Ok templateMap -> templateMap
| Error exn -> failwithf "Error. Given json string cannot be parsed to Templates map: %A" exn

let encodeToString (spaces: int) (templateList: (string*Template) []) =
Encode.toString spaces (encode templateList)


[<AutoOpen>]
module Extension =

type Template with
member this.ToJson(?spaces: int) =
let spaces = defaultArg spaces 0
Encode.toString spaces (Template.encode this)

static member toJson(?spaces: int) =
fun (template: Template) ->
template.ToJson(?spaces=spaces)

static member fromJson(jsonString: string) =
Decode.fromString Template.decode jsonString

static member GetTemplates(?url: string) =
let defaultURL = @"https://github.com/nfdi4plants/Swate-templates/releases/download/latest/templates.json"
let url = defaultArg url defaultURL
async {
let! jsonString = ARCtrl.WebRequest.downloadFile url
let mapResult = Templates.decode jsonString
return
match mapResult with
| Ok map -> map
| Error exn -> failwithf "Unable to parse downloaded json to Templates: %A" exn
}
Template.encodeToString(spaces)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module ARCtrl.Templates.Spreadsheet
module ARCtrl.Template.Spreadsheet

open FsSpreadsheet
open ARCtrl.ISA.Aux
Expand Down
13 changes: 13 additions & 0 deletions src/ARCtrl/Templates/Template.Web.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module ARCtrl.Template.Web

open ARCtrl.Template
open ARCtrl.ISA

let getTemplates(url: string option) =
let defaultURL = @"https://github.com/nfdi4plants/Swate-templates/releases/download/latest/templates.json"
let url = defaultArg url defaultURL
async {
let! jsonString = ARCtrl.WebRequest.downloadFile url
let mapResult = Json.Templates.decodeFromString jsonString
return mapResult
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace ARCtrl.Templates
namespace ARCtrl.Template

open ARCtrl.ISA
open Fable.Core
Expand Down
2 changes: 1 addition & 1 deletion tests/ARCtrl/ARCtrl.Tests.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<ItemGroup>
<None Include="paket.references" />
<Compile Include="SemVer.Tests.fs" />
<Compile Include="Templates.Tests.fs" />
<Compile Include="Template.Tests.fs" />
<Compile Include="WebRequest.Tests.fs" />
<Compile Include="ARCtrl.Contracts.Tests.fs" />
<Compile Include="ARCtrl.Tests.fs" />
Expand Down
2 changes: 1 addition & 1 deletion tests/ARCtrl/Main.fs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ let all = testSequenced <| testList "All" [
ARCtrl.Contracts.Tests.main
ARCtrl.WebRequest.Tests.main
ARCtrl.SemVer.Tests.main
ARCtrl.Templates.Tests.main
ARCtrl.Template.Tests.main
ARCtrl.Tests.main
]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
module ARCtrl.Templates.Tests
module ARCtrl.Template.Tests

#if FABLE_COMPILER
open Thoth.Json
#else
open Thoth.Json.Net
#endif

open ARCtrl.Templates.Json
open ARCtrl.Template.Json
open ARCtrl.ISA

open TestingUtils
Expand Down Expand Up @@ -323,15 +323,15 @@ let private tests_equality = testList "equality" [
]
]

let private tests_GetTemplates = testList "GetTemplates" [
testCaseAsync "GetTemplates" <| async {
let! templatesMap = Template.GetTemplates()
let private tests_Web = testList "Web" [
testCaseAsync "getTemplates" <| async {
let! templatesMap = ARCtrl.Template.Web.getTemplates(None)
Expect.isTrue (templatesMap.Count > 0) "Count > 0"
}
]

let main = testList "Templates" [
tests_json
tests_equality
tests_GetTemplates
tests_Web
]
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ let template =

let template_deprecatedMetadataSheetName =
let ws = templateMetadata.Copy()
ws.Name <- ARCtrl.Templates.Spreadsheet.Template.obsoletemetaDataSheetName
ws.Name <- ARCtrl.Template.Spreadsheet.Template.obsoletemetaDataSheetName
let wb = new FsWorkbook()
wb.AddWorksheet(ws)
wb.AddWorksheet(templateTable)
Expand Down

0 comments on commit 41637de

Please sign in to comment.