Skip to content
This repository has been archived by the owner on Aug 9, 2023. It is now read-only.

Commit

Permalink
bump 0.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
whitetigle committed Nov 28, 2018
1 parent 2f72b24 commit 16930ea
Show file tree
Hide file tree
Showing 10 changed files with 792 additions and 355 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -279,3 +279,5 @@ ec26cd1e-dc1b-44af-8ed4-2d3799801fe6/
bcbde815-8293-467e-adc4-712913e78ecd/

relax/

db/
318 changes: 159 additions & 159 deletions src/Core.fs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/ElPouch.fsproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>0.1.1</Version>
<Version>0.2.0</Version>
<TargetFramework>netstandard2.0</TargetFramework>
<Description>PouchDB wrappers and helpers for Fable</Description>
<PackageProjectUrl>https://github.com/whitetigle/ElPouch</PackageProjectUrl>
Expand Down
2 changes: 1 addition & 1 deletion src/ElPouch/Elmish.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ module Elmish =

module Relax =

let allDocs (handler:'Msg) (documentDecoder:Decode.Decoder<'Doc>) (store:PouchDB.Database) =
let allDocs (handler: 'Msg) (documentDecoder: Decode.Decoder<'Doc>) (store: PouchDB.Database) =
Standard.allDocs Selectors.retrieveDocs handler documentDecoder store
24 changes: 11 additions & 13 deletions src/ElPouch/Helpers.fs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ namespace ElPouch
type Message = string
type RequestError = Code * Message

[<RequireQualifiedAccess>]
type GetResult<'T> =
| Found of Result<'T, string>
| NotFound of PouchDB.Core.Error
| Found of 'T
| NotFound of HelperError

type HelperError =
and HelperError =
| JsonError of string
| ServerError of ErrorDocument
| ServerError of PouchDB.Core.Error

and Value =
{
Expand Down Expand Up @@ -90,14 +91,6 @@ namespace ElPouch
let getResponse handler (response:'a) =
handler (Ok response)

let getError handler response =
response
|> string
|> Decode.fromString ErrorDocument.Decoder
|> function
| Ok data -> handler (ServerError data) // server error
| Error msg -> handler (JsonError msg) // decoder error

let decodeAllDocs<'T> (customDecoder:Decode.Decoder<'T>) stringToDecode : Result<InnerDocument<'T> list, HelperError> =
Decode.fromString (AllDocsDocument.Decoder customDecoder) stringToDecode
|> function
Expand All @@ -111,13 +104,15 @@ namespace ElPouch
| Ok innerDocuments -> innerDocuments |> List.map( fun d -> d.Doc) |> Ok
| Error s -> Error s

(*
let checkError err =
err
|> string
|> Decode.fromString ErrorDocument.Decoder
|> function
| Ok data -> Error (ServerError data) // server error
| Error err -> Error (JsonError err) // decoder error
*)

module Selectors =

Expand All @@ -130,6 +125,7 @@ namespace ElPouch
module Standard =

open PouchDB.Core
open Types

let allDocs options (handler:'Msg) documentDecoder (store:PouchDB.Database) =
Elmish.Cmd.ofPromise
Expand All @@ -144,4 +140,6 @@ namespace ElPouch
| Error s -> Error s
handler results
)
(fun err -> handler (Helpers.checkError err) )
(fun err ->
let ex: PouchDB.Core.Error = !!err
handler (Error (ServerError ex)) )
79 changes: 59 additions & 20 deletions src/ElPouch/Relax.fs
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,71 @@ open Fable.PowerPack
open PouchDB.Core
open ElPouch.Types

module Relax =
module Relax =

module Database =
module Database =

let create (name:string) =
let create(name: string) =
PouchDB.Core.instance.Create(!^name,None)

let get (decoder: Decode.Decoder<'a> ) (db:PouchDB.Core.PouchDB.Database) (id:string) =
let get (decoder: Decode.Decoder<'a>) (db: PouchDB.Core.PouchDB.Database) (id: string) =
promise {
try
let! document = db.get(id)
let strDoc = Fable.Import.JS.JSON.stringify document
let decoded= Decode.fromString decoder strDoc
return (Found decoded)
with e ->
try
let! document = db.get(id)

return
document
|> Fable.Import.JS.JSON.stringify
|> Decode.fromString decoder
|> function
| Ok doc -> GetResult.Found doc
| Error parsingError -> GetResult.NotFound(JsonError parsingError)

with e ->
let ex: PouchDB.Core.Error = !!e
return (NotFound ex)
return (GetResult.NotFound(ServerError ex))
}

let allDocs (decoder: Decode.Decoder<'a> ) (db:PouchDB.Core.PouchDB.Database) =
promise {
let! response =db.allDocs (Selectors.retrieveDocs)
let bulkInsert (db: PouchDB.Core.PouchDB.Database) (docs: 'T []) =
let options: PouchDB.Core.BulkDocsOptions = jsOptions(fun opt ->
opt.docs <- !!docs
)
db.bulkDocs options

module AllDocs =

let private decode response (decoder: Decode.Decoder<'a>) =
let strDoc = Fable.Import.JS.JSON.stringify(response)
return
Helpers.decodeAllDocs decoder strDoc
|> function
| Ok innerDocuments -> innerDocuments |> List.map( fun d -> d.Doc) |> Ok
| Error s -> Error s
}
Helpers.decodeAllDocs decoder strDoc
|> function
| Ok innerDocuments -> innerDocuments |> List.map(fun d -> d.Doc) |> Ok
| Error s -> Error s

let all (decoder: Decode.Decoder<'a>) (db: PouchDB.Core.PouchDB.Database) =
promise {
let! response = db.allDocs (Selectors.retrieveDocs)
return decode response decoder
}

module Range =
let between (decoder: Decode.Decoder<'a>) (db: PouchDB.Core.PouchDB.Database) (startKey: string,endkey: string) =
promise {
let options: PouchDB.Core.AllDocsWithinRangeOptions = jsOptions(fun opt ->
opt.include_docs <- Some true
opt.startkey <- startKey
opt.endkey <- endkey
)
let! response = db.allDocs options
return decode response decoder
}

let startingWith (decoder: Decode.Decoder<'a>) (db: PouchDB.Core.PouchDB.Database) (key: string) =
promise {
let options: PouchDB.Core.AllDocsWithinRangeOptions = jsOptions(fun opt ->
opt.include_docs <- Some true
opt.startkey <- key
opt.endkey <- key + "\ufff0"
)
let! response = db.allDocs options
return decode response decoder
}
10 changes: 10 additions & 0 deletions src/RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
### 0.2.0

* Breaking change: Get Helpers now return GetResult<'T>
* Breaking changes: Relax.allDocs is now Relax.AllDocs.all
* great range of tests for allDocs
* Introducing Relax.bulkDocs
* Introducing Relax.AllDocs.all
* Introducing Relax.AllDocs.Range.between
* Introducing Relax.AllDocs.Range.startingWith

### 0.1.1

* get: proper error handling with PouchDB.Core.Error
Expand Down
Loading

0 comments on commit 16930ea

Please sign in to comment.