Fix cross_todo example

This commit is contained in:
def 2015-02-15 00:05:16 +01:00
commit d19a4ca827
6 changed files with 15 additions and 15 deletions

View file

@ -13,7 +13,7 @@ type
text*: string ## Description of the task to do. text*: string ## Description of the task to do.
priority*: int ## The priority can be any user defined integer. priority*: int ## The priority can be any user defined integer.
isDone*: bool ## Done todos are still kept marked. isDone*: bool ## Done todos are still kept marked.
modificationDate: TTime ## The modification time can't be modified from modificationDate: Time ## The modification time can't be modified from
## outside of this module, use the ## outside of this module, use the
## getModificationDate accessor. ## getModificationDate accessor.
@ -64,7 +64,7 @@ proc openDatabase*(path: string): TDbConn =
# - Procs related to TTodo objects # - Procs related to TTodo objects
# #
proc initFromDB(id: int64; text: string; priority: int, isDone: bool; proc initFromDB(id: int64; text: string; priority: int, isDone: bool;
modificationDate: TTime): TTodo = modificationDate: Time): TTodo =
## Returns an initialized TTodo object created from database parameters. ## Returns an initialized TTodo object created from database parameters.
## ##
## The proc assumes all values are right. Note this proc is NOT exported. ## The proc assumes all values are right. Note this proc is NOT exported.
@ -81,7 +81,7 @@ proc getId*(todo: TTodo): int64 =
return todo.id return todo.id
proc getModificationDate*(todo: TTodo): TTime = proc getModificationDate*(todo: TTodo): Time =
## Returns the last modification date of a TTodo entry. ## Returns the last modification date of a TTodo entry.
return todo.modificationDate return todo.modificationDate
@ -99,14 +99,14 @@ proc update*(todo: var TTodo; conn: TDbConn): bool =
FROM Todos WHERE id = ?""" FROM Todos WHERE id = ?"""
try: try:
let rows = conn.GetAllRows(query, $todo.id) let rows = conn.getAllRows(query, $todo.id)
if len(rows) < 1: if len(rows) < 1:
return return
assert(1 == len(rows), "Woah, didn't expect so many rows") assert(1 == len(rows), "Woah, didn't expect so many rows")
todo.text = rows[0][0] todo.text = rows[0][0]
todo.priority = rows[0][1].parseInt todo.priority = rows[0][1].parseInt
todo.isDone = rows[0][2].parseBool todo.isDone = rows[0][2].parseBool
todo.modificationDate = TTime(rows[0][3].parseInt) todo.modificationDate = Time(rows[0][3].parseInt)
result = true result = true
except: except:
echo("Something went wrong selecting for id " & $todo.id) echo("Something went wrong selecting for id " & $todo.id)
@ -202,12 +202,12 @@ proc getPagedTodos*(conn: TDbConn; params: TPagedParams;
#echo("Query " & string(query)) #echo("Query " & string(query))
#echo("args: " & args.join(", ")) #echo("args: " & args.join(", "))
var newId: biggestInt var newId: BiggestInt
for row in conn.fastRows(query, args): for row in conn.fastRows(query, args):
let numChars = row[0].parseBiggestInt(newId) let numChars = row[0].parseBiggestInt(newId)
assert(numChars > 0, "Huh, couldn't parse identifier from database?") assert(numChars > 0, "Huh, couldn't parse identifier from database?")
result.add(initFromDB(int64(newId), row[1], row[2].parseInt, result.add(initFromDB(int64(newId), row[1], row[2].parseInt,
row[3].parseBool, TTime(row[4].parseInt))) row[3].parseBool, Time(row[4].parseInt)))
proc getTodo*(conn: TDbConn; todoId: int64): ref TTodo = proc getTodo*(conn: TDbConn; todoId: int64): ref TTodo =

View file

@ -1,4 +1,4 @@
This directory contains the nimrod backend code for the todo cross platform This directory contains the nim backend code for the todo cross platform
example. example.
Unlike the cross platform calculator example, this backend features more code, Unlike the cross platform calculator example, this backend features more code,
@ -8,7 +8,7 @@ The test is not embedded directly in the backend.nim file to avoid being able
to access internal data types and procs not exported and replicate the to access internal data types and procs not exported and replicate the
environment of client code. environment of client code.
In a bigger project with several people you could run `nimrod doc backend.nim` In a bigger project with several people you could run `nim doc backend.nim`
(or use the doc2 command for a whole project) and provide the generated html (or use the doc2 command for a whole project) and provide the generated html
documentation to another programer for her to implement an interface without documentation to another programer for her to implement an interface without
having to look at the source code. having to look at the source code.

View file

@ -1,4 +1,4 @@
# Nimrod configuration file. # Nimrod configuration file.
# The file is used only to add the path of the backend to the compiler options. # The file is used only to add the path of the backend to the compiler options.
path="../nimrod_backend" path="../nim_backend"

View file

@ -69,11 +69,11 @@ template parseTodoIdAndSetCommand(newCommand: TCommand): stmt =
## Helper to parse a big todo identifier into todoId and set command. ## Helper to parse a big todo identifier into todoId and set command.
try: try:
let numChars = val.parseBiggestInt(newId) let numChars = val.parseBiggestInt(newId)
if numChars < 1: raise newException(EInvalidValue, "Empty string?") if numChars < 1: raise newException(ValueError, "Empty string?")
result.command = newCommand result.command = newCommand
result.todoId = newId result.todoId = newId
except EOverflow: except OverflowError:
raise newException(EInvalidValue, "Value $1 too big" % val) raise newException(ValueError, "Value $1 too big" % val)
template verifySingleCommand(actions: stmt): stmt = template verifySingleCommand(actions: stmt): stmt =
@ -111,7 +111,7 @@ proc parseCmdLine(): TParamConfig =
usesListParams = false usesListParams = false
p = initOptParser() p = initOptParser()
key, val: TaintedString key, val: TaintedString
newId: biggestInt newId: BiggestInt
result.initDefaults result.initDefaults
@ -178,7 +178,7 @@ proc parseCmdLine(): TParamConfig =
abort("Unexpected option '$1'." % [key], 6) abort("Unexpected option '$1'." % [key], 6)
of cmdEnd: of cmdEnd:
break break
except EInvalidValue: except ValueError:
abort("Invalid integer value '$1' for parameter '$2'." % [val, key], 7) abort("Invalid integer value '$1' for parameter '$2'." % [val, key], 7)
if not specifiedCommand: if not specifiedCommand: