contrib/tnitter: extract `DB` from `model` into `database`
authorAlexis Laferrière <alexis.laf@xymus.net>
Tue, 10 Nov 2015 03:39:44 +0000 (22:39 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Wed, 11 Nov 2015 19:50:15 +0000 (14:50 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

contrib/tnitter/src/action.nit
contrib/tnitter/src/database.nit [new file with mode: 0644]
contrib/tnitter/src/model.nit

index d95cfe3..fdb718b 100644 (file)
@@ -20,6 +20,7 @@ module action
 import nitcorn
 
 import model
+import database
 
 redef class Session
        # User logged in
diff --git a/contrib/tnitter/src/database.nit b/contrib/tnitter/src/database.nit
new file mode 100644 (file)
index 0000000..4c88b51
--- /dev/null
@@ -0,0 +1,93 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Database interface of Tnitter
+module database
+
+import sqlite3
+
+import model
+
+# The Tnitter database
+class DB
+       super Sqlite3DB
+
+       redef init open(path)
+       do
+               super
+               create_tables
+       end
+
+       # Create the needed tables
+       fun create_tables
+       do
+               assert create_table("IF NOT EXISTS users (user TEXT PRIMARY KEY, pass TEXT)") else
+                       print error or else "?"
+               end
+
+               assert create_table("IF NOT EXISTS posts (user TEXT, text TEXT, posted DATETIME DEFAULT CURRENT_TIMESTAMP)") else
+                       print error or else "?"
+               end
+       end
+
+       # Check if the login credentials are valid
+       #
+       # If valid, returns the username at database creation time. Otherwise returns `null`.
+       fun check_login(user, pass: String): nullable String
+       do
+               var stmt = select("user FROM users WHERE lower({user.to_sql_string}) = lower(user) " +
+                                 "AND {pass.tnitter_hash.to_sql_string} = pass")
+               assert stmt != null else print error or else "?"
+
+               for row in stmt do return row[0].to_s
+               return null
+       end
+
+       # Try to sign up a new user, return `true` on success
+       fun sign_up(user, pass: String): Bool
+       do
+               # Check if already in user
+               var stmt = select("user FROM users WHERE lower({user.to_sql_string}) = lower(user)")
+               assert stmt != null else print error or else "?"
+
+               if not stmt.iterator.to_a.is_empty then return false
+
+               # Insert intro BD
+               assert insert("INTO users(user, pass) VALUES ({user.to_sql_string}, {pass.tnitter_hash.to_sql_string})") else
+                       print error or else "?"
+               end
+
+               return true
+       end
+
+       # Tnit something
+       fun post(user, text: String)
+       do
+               assert insert("INTO posts(user, text) VALUES ({user.to_sql_string}, {text.to_sql_string})") else
+                       print error or else "?"
+               end
+       end
+
+       # Get the latest tnits
+       fun latest_posts(count: Int): Array[Post]
+       do
+               var stmt = select("user, text FROM posts ORDER BY datetime(posted) DESC LIMIT {count}")
+               assert stmt != null else print error or else "?"
+
+               var posts = new Array[Post]
+               for row in stmt do posts.add new Post(row[0].to_s, row[1].to_s)
+
+               return posts
+       end
+end
index bb46193..241baf9 100644 (file)
 # Data and DB model of Tnitter
 module model
 
-import sqlite3
 import md5
 
-# The Tnitter database
-class DB
-       super Sqlite3DB
-
-       redef init open(path)
-       do
-               super
-               create_tables
-       end
-
-       # Create the needed tables
-       fun create_tables
-       do
-               assert create_table("IF NOT EXISTS users (user TEXT PRIMARY KEY, pass TEXT)") else
-                       print error or else "?"
-               end
-
-               assert create_table("IF NOT EXISTS posts (user TEXT, text TEXT, posted DATETIME DEFAULT CURRENT_TIMESTAMP)") else
-                       print error or else "?"
-               end
-       end
-
-       # Check if the login credentials are valid
-       #
-       # If valid, returns the username at database creation time. Otherwise returns `null`.
-       fun check_login(user, pass: String): nullable String
-       do
-               var stmt = select("user FROM users WHERE lower({user.to_sql_string}) = lower(user) " +
-                                 "AND {pass.tnitter_hash.to_sql_string} = pass")
-               assert stmt != null else print error or else "?"
-
-               for row in stmt do return row[0].to_s
-               return null
-       end
-
-       # Try to sign up a new user, return `true` on success
-       fun sign_up(user, pass: String): Bool
-       do
-               # Check if already in user
-               var stmt = select("user FROM users WHERE lower({user.to_sql_string}) = lower(user)")
-               assert stmt != null else print error or else "?"
-
-               if not stmt.iterator.to_a.is_empty then return false
-
-               # Insert intro BD
-               assert insert("INTO users(user, pass) VALUES ({user.to_sql_string}, {pass.tnitter_hash.to_sql_string})") else
-                       print error or else "?"
-               end
-
-               return true
-       end
-
-       # Tnit something
-       fun post(user, text: String)
-       do
-               assert insert("INTO posts(user, text) VALUES ({user.to_sql_string}, {text.to_sql_string})") else
-                       print error or else "?"
-               end
-       end
-
-       # Get the latest tnits
-       fun latest_posts(count: Int): Array[Post]
-       do
-               var stmt = select("user, text FROM posts ORDER BY datetime(posted) DESC LIMIT {count}")
-               assert stmt != null else print error or else "?"
-
-               var posts = new Array[Post]
-               for row in stmt do posts.add new Post(row[0].to_s, row[1].to_s)
-
-               return posts
-       end
-end
-
 # A single post (or Tnit)
 class Post
        # The author