Skip to content

Commit

Permalink
Changed record naming to official F# conventions. WILL BREAK YOUR CODE!
Browse files Browse the repository at this point in the history
Up until now field names of records have been written in camel case.
From now on the code will follow the official F# style conventions
and use Pascal Case for record fields.

Also added a small script for linting.
  • Loading branch information
b0wter committed Sep 29, 2020
1 parent 5f2544d commit 1d42c88
Show file tree
Hide file tree
Showing 54 changed files with 543 additions and 473 deletions.
12 changes: 6 additions & 6 deletions src/lib/Core.fs
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ module Core =
let! content = try response.Content.ReadAsStringAsync() |> Async.AwaitTask with ex -> async { return sprintf "Reading the body threw an exception: %s" ex.Message }
let headers = response.Headers |> Seq.map (fun x -> (x.Key, System.String.Join(",", x.Value))) |> Map.ofSeq
return {
statusCode = Some status
content = content
headers = headers
StatusCode = Some status
Content = content
Headers = headers
}
with
| ex ->
Expand All @@ -49,8 +49,8 @@ module Core =
/// Wraps a status code and string contents. This may represent a success as well as an error.
/// </summary>
type QueryResult = {
statusCode: int option
content: string
StatusCode: int option
Content: string
}

/// <summary>
Expand All @@ -67,7 +67,7 @@ module Core =
result
with
| :? Newtonsoft.Json.JsonException as ex ->
Error { json = content; reason = ex.Message }
Error { Json = content; Reason = ex.Message }

/// <summary>
/// Takes a SuccessRequestResult and deserialises its content.
Expand Down
8 changes: 4 additions & 4 deletions src/lib/Credentials.fs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ module Credentials =
/// Credentials for the CouchDb login.
type T = {
[<JsonProperty("name")>]
username: string
password: string
Username: string
Password: string
}

/// Creates a credentials instance.
let create (username , password) =
{ username = username; password = password }
{ Username = username; Password = password }

/// Represents all possible states the credentials might have.
type CredentialStatus
Expand All @@ -27,7 +27,7 @@ module Credentials =

/// Takes credentials and checks their validity.
let validate (t: T) : CredentialStatus =
match (t.username |> System.String.IsNullOrWhiteSpace, t.password |> System.String.IsNullOrWhiteSpace) with
match (t.Username |> System.String.IsNullOrWhiteSpace, t.Password |> System.String.IsNullOrWhiteSpace) with
| true, true -> MissingUsernameAndPassword
| true, false -> MissingPassword
| false, true -> MissingUsername
Expand Down
14 changes: 7 additions & 7 deletions src/lib/Databases/AddDocument.fs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ open b0wter.FSharp

module AddDocument =
type Response = {
id: string
ok: bool
rev: string
Id: string
Ok: bool
Rev: string
}

type Result
Expand All @@ -38,15 +38,15 @@ module AddDocument =
if obj |> isNull then return DocumentIsNull <| RequestResult.create(None, "The document you supplied is null. No query has been sent to the server.") else
let request = createJsonPost props dbName obj []
let! result = sendRequest request
match result.statusCode with
match result.StatusCode with
| Some 201 | Some 202 ->
return match deserializeJson<Response> result.content with
return match deserializeJson<Response> result.Content with
| Ok o -> Created o
| Error e -> JsonDeserializationError <| RequestResult.createForJson(e, result.statusCode, result.headers)
| Error e -> JsonDeserializationError <| RequestResult.createForJson(e, result.StatusCode, result.Headers)
| Some 401 -> return Unauthorized result
| Some 404 -> return DbDoesNotExist result
| Some 409 -> return DocumentIdConflict result
| x -> return Unknown <| RequestResult.createWithHeaders (x, result.content, result.headers)
| x -> return Unknown <| RequestResult.createWithHeaders (x, result.Content, result.Headers)
}

/// Returns the result from the query as a generic `FSharp.Core.Result`.
Expand Down
27 changes: 13 additions & 14 deletions src/lib/Databases/AllDocuments.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,24 @@ namespace b0wter.CouchDb.Lib.Databases
// Queries: /{db}/_all_docs
//

open b0wter.CouchDb.Lib
open b0wter.CouchDb.Lib
open b0wter.CouchDb.Lib
open b0wter.CouchDb.Lib.Core
open b0wter.FSharp

module AllDocuments =
type ResponseRowValue = {
rev: string
Rev: string
}
type ResponseRow = {
id: string
key: string
value: ResponseRowValue option
Id: string
Key: string
Value: ResponseRowValue option
}
type Response = {
offset: int option
rows: ResponseRow list
total_rows: int
Offset: int option
Rows: ResponseRow list
[<Newtonsoft.Json.JsonProperty("total_rows")>]
TotalRows: int
}

type Result
Expand All @@ -34,17 +33,17 @@ module AllDocuments =
| Unknown of RequestResult.T

type KeyCollection = {
keys: string list
Keys: string list
}

let private query (request: Async<System.Net.Http.HttpResponseMessage>) =
async {
let! result = (sendRequest request)
return match result.statusCode with
return match result.StatusCode with
| Some 200 ->
match deserializeJsonWith<Response> [] result.content with
match deserializeJsonWith<Response> [] result.Content with
| Ok r -> Success r
| Error e -> JsonDeserialisationError <| RequestResult.createWithHeaders (result.statusCode, sprintf "Error: %s %s JSON: %s" e.reason System.Environment.NewLine e.json, result.headers)
| Error e -> JsonDeserialisationError <| RequestResult.createWithHeaders (result.StatusCode, sprintf "Error: %s %s JSON: %s" e.Reason System.Environment.NewLine e.Json, result.Headers)
| Some 400 -> BadRequest <| result
| Some 401 -> Unauthorized <| result
| Some 404 -> NotFound <| result
Expand All @@ -56,7 +55,7 @@ module AllDocuments =
query request

let querySelected (props: DbProperties.T) (dbName: string) (keys: string list) : Async<Result> =
let keyCollection = { keys = keys }
let keyCollection = { Keys = keys }
let request = createJsonPost props (sprintf "%s/_all_docs" dbName) keyCollection []
query request

Expand Down
28 changes: 14 additions & 14 deletions src/lib/Databases/BulkAdd.fs
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,30 @@ module BulkAdd =
open b0wter.CouchDb.Lib.Core

type Success = {
ok: bool
id: string
rev: string
Ok: bool
Id: string
Rev: string
}

type Failure = {
id: string
error: string
reason: string
Id: string
Error: string
Reason: string
}

let failureAsString (f: Failure) =
sprintf "%s - %s" f.error f.reason
sprintf "%s - %s" f.Error f.Reason

type InsertResult
= Success of Success
| Failure of Failure

let insertResultId ir = match ir with | Success s -> s.id | Failure f -> f.id
let insertResultId ir = match ir with | Success s -> s.Id | Failure f -> f.Id

type Response = InsertResult list

/// Checks if a `Response` contains one or more `InsertResult.Failure`.
let allSuccessful (r: Response) = r |> List.exists (fun x -> match x with Success s -> s.ok = false | Failure _ -> true)
let allSuccessful (r: Response) = r |> List.exists (fun x -> match x with Success s -> s.Ok = false | Failure _ -> true)

type Result
/// Document(s) have been created or updated (201)
Expand All @@ -51,7 +51,7 @@ module BulkAdd =
| Unknown of RequestResult.T

type DocumentContainer<'a> = {
docs: 'a list
Docs: 'a list
}

type InsertResultConverter() =
Expand Down Expand Up @@ -86,14 +86,14 @@ module BulkAdd =
if System.String.IsNullOrWhiteSpace(dbName) then
return DbNameMissing <| RequestResult.create(None, "You need to supply a non-null, non-whitespace database name. No query has been sent to the server.")
else
let content = { docs = docs }
let content = { Docs = docs }
let url = sprintf "%s/_bulk_docs" dbName
let request = createJsonPost props url content []
let! result = sendRequest request
return match result.statusCode with
| Some 201 -> match result.content |> deserializeJsonWith<Response> [ InsertResultConverter() :> JsonConverter ] with
return match result.StatusCode with
| Some 201 -> match result.Content |> deserializeJsonWith<Response> [ InsertResultConverter() :> JsonConverter ] with
| Ok o -> Created o
| Error e -> JsonDeserializationError <| RequestResult.createForJson(e, result.statusCode, result.headers)
| Error e -> JsonDeserializationError <| RequestResult.createForJson(e, result.StatusCode, result.Headers)
| Some 400 -> BadRequest result
| Some 404 -> NotFound result
| Some 417 -> ExpectationFailed result
Expand Down
10 changes: 7 additions & 3 deletions src/lib/Databases/BulkDelete.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module BulkDelete =

open b0wter.CouchDb.Lib
open b0wter.FSharp
open Newtonsoft.Json

type Result
/// Document(s) have been created or updated (201). *Beware*, CouchDb returns created
Expand All @@ -30,9 +31,12 @@ module BulkDelete =
| NotFound of RequestResult.T

type DeleteUpdate<'a, 'b>(id: 'a, rev: 'b) =
member this._id = id
member this._rev = rev
member this._deleted = true
[<JsonProperty("_id")>]
member this.Id = id
[<JsonProperty("_rev")>]
member this.Rev = rev
[<JsonProperty("_deleted")>]
member this.Deleted = true

/// This query wraps `BulkAdd.query` but requires that each doc passes the given idSetCheck and revSetCheck.
/// This makes sure that the documents are updates not insertions.
Expand Down
8 changes: 4 additions & 4 deletions src/lib/Databases/Create.fs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ module Create =
let Replicas r = IntQueryParameter("r", r)

type Response = {
ok: bool
Ok: bool
}

type Result
Expand All @@ -30,8 +30,8 @@ module Create =
| AlreadyExists of RequestResult.T
| Unknown of RequestResult.T

let TrueCreateResult = { ok = true}
let FalseCreateResult = { ok = false}
let TrueCreateResult = { Ok = true}
let FalseCreateResult = { Ok = false}

/// <summary>
/// Runs a PUT query that will create a new database. The database name may only consist of the following characters:
Expand All @@ -43,7 +43,7 @@ module Create =
if System.String.IsNullOrWhiteSpace(name) then return InvalidDbName <| RequestResult.create (None, "You need to set a database name.") else
let request = createPut props name parameters
let! result = (sendRequest request)
let r = match result.statusCode with
let r = match result.StatusCode with
| Some 201 -> Created TrueCreateResult
| Some 202 -> Accepted TrueCreateResult
| Some 400 -> InvalidDbName <| result
Expand Down
8 changes: 4 additions & 4 deletions src/lib/Databases/Delete.fs
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ open b0wter.FSharp

module Delete =
type Response = {
ok: bool
Ok: bool
}

let TrueCreateResult = { ok = true}
let FalseCreateResult = { ok = false}
let TrueCreateResult = { Ok = true}
let FalseCreateResult = { Ok = false}

/// <summary>
/// Deleted - Database removed successfully (quorum is met and database is deleted by at least one node)
Expand All @@ -37,7 +37,7 @@ module Delete =
async {
let request = createDelete props name []
let! result = sendRequest request
let r = match result.statusCode with
let r = match result.StatusCode with
| Some 200 -> Deleted TrueCreateResult
| Some 202 -> Accepted TrueCreateResult
| Some 400 -> BadRequest result
Expand Down
2 changes: 1 addition & 1 deletion src/lib/Databases/Exists.fs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ module Exists =
if System.String.IsNullOrWhiteSpace(name) then return DbNameMissing <| RequestResult.create(None, "No query was sent to the server. You supplied an empty db name.") else
let request = createHead props name []
let! result = sendRequest request
return match result.statusCode with
return match result.StatusCode with
| Some 200 -> Exists
| Some 404 -> DoesNotExist
| _ -> Unknown result
Expand Down
Loading

0 comments on commit 1d42c88

Please sign in to comment.