annotate examples/blog/src/lib/Post.luan @ 1349:0cceff521abb

IO error handling
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 27 Feb 2019 12:30:46 -0700
parents 4721c482c86b
children 709f7498a363
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
693
ca169567ce07 module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents: 604
diff changeset
1 local Luan = require "luan:Luan.luan"
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2 local error = Luan.error
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 local ipairs = Luan.ipairs or error()
1164
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1088
diff changeset
4 local type = Luan.type or error()
693
ca169567ce07 module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents: 604
diff changeset
5 local Time = require "luan:Time.luan"
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 local now = Time.now or error()
693
ca169567ce07 module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents: 604
diff changeset
7 local String = require "luan:String.luan"
599
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
8 local trim = String.trim or error()
1220
4721c482c86b cleaner Db example
Franklin Schmidt <fschmidt@gmail.com>
parents: 1164
diff changeset
9 local db = require("site:/lib/Db.luan").db or error()
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 779
diff changeset
12 local Post = {}
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 local function from_doc(doc)
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 779
diff changeset
15 return Post.new {
604
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
16 id = doc.id
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
17 subject = doc.subject
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
18 content = doc.content
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
19 date = doc.date
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 }
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 end
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 779
diff changeset
23 function Post.new(this)
1164
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1088
diff changeset
24 type(this.subject)=="string" or error "subject must be string"
1f9d34a6f308 remove assertions
Franklin Schmidt <fschmidt@gmail.com>
parents: 1088
diff changeset
25 type(this.content)=="string" or error "content must be string"
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 this.date = this.date or now()
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 function this.save()
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 local doc = {
604
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
30 type = "post"
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
31 id = this.id
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
32 subject = this.subject
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
33 content = this.content
b73f005f3735 table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents: 599
diff changeset
34 date = this.date
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 }
1220
4721c482c86b cleaner Db example
Franklin Schmidt <fschmidt@gmail.com>
parents: 1164
diff changeset
36 db.save(doc)
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 this.id = doc.id
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 end
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 return this
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 end
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 779
diff changeset
43 function Post.get_by_id(id)
1220
4721c482c86b cleaner Db example
Franklin Schmidt <fschmidt@gmail.com>
parents: 1164
diff changeset
44 local doc = db.get_document("id:"..id)
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 return doc and from_doc(doc)
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 end
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 779
diff changeset
48 function Post.get_all()
1220
4721c482c86b cleaner Db example
Franklin Schmidt <fschmidt@gmail.com>
parents: 1164
diff changeset
49 local docs = db.search("type:post",1,1000,"id desc")
596
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 local posts = {}
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 for _, doc in ipairs(docs) do
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 posts[#posts+1] = from_doc(doc)
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 end
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 return posts
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55 end
6bb0c83116e9 add blog sample app
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
56
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 779
diff changeset
57 function Post.search(query)
599
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
58 query = trim(query)
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
59 if #query == 0 then
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 779
diff changeset
60 return Post.get_all()
599
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
61 end
1220
4721c482c86b cleaner Db example
Franklin Schmidt <fschmidt@gmail.com>
parents: 1164
diff changeset
62 local docs = db.search(query,1,1000)
599
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
63 local posts = {}
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
64 for _, doc in ipairs(docs) do
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
65 posts[#posts+1] = from_doc(doc)
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
66 end
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
67 return posts
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
68 end
50540f0813e2 support default search fields in lucene;
Franklin Schmidt <fschmidt@gmail.com>
parents: 596
diff changeset
69
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 779
diff changeset
70 return Post