# Repositories can be used in Popcorn app to manage your data persistence.
# Here an example with a book management app:
#
-# ~~~
+# ~~~nitish
# # First we declare the `Book` class. It has to be serializable so it can be used
# # within a `Repository`.
#
# import popcorn
# import popcorn::pop_repos
+# import popcorn::pop_json
#
# # Serializable book representation.
# class Book
# serialize
-# super Jsonable
#
# # Book uniq ID
# var id: String = (new MongoObjectId).id is serialize_as "_id"
# redef fun to_s do return title
# redef fun ==(o) do return o isa SELF and id == o.id
# redef fun hash do return id.hash
-# redef fun to_json do return serialize_to_json
# end
#
# # We then need to subclass the `MongoRepository` to provide Book specific services.
# # Let's wrap it all together in a Popcorn app:
#
# # Init database
-# var mongo = new MongoClient("mongodb://localhost:27017/")
+# var mongo = new MongoClient("mongodb://mongo:27017/")
# var db = mongo.database("tests_app_{100000.rand}")
# var coll = db.collection("books")
#
import popcorn::pop_config
import serialization
-import json::serialization
+import json
import mongodb::queries
redef class AppConfig
# Default database host string for MongoDb
- var default_db_host = "mongodb://localhost:27017/"
+ var default_db_host = "mongodb://mongo:27017/"
# Default database hostname
var default_db_name = "popcorn"
- # MongoDB server used for data persistence
- var db_host: String is lazy do return value_or_default("db.host", default_db_host)
-
- # MongoDB DB used for data persistence
- var db_name: String is lazy do return value_or_default("db.name", default_db_name)
-
- # Mongo db client
- var client = new MongoClient(db_host) is lazy
-
- # Mongo db instance
- var db: MongoDb = client.database(db_name) is lazy
-
- redef init from_options(opts) do
- super
- var db_host = opts.opt_db_host.value
- if db_host != null then self["db.host"] = db_host
- var db_name = opts.opt_db_name.value
- if db_name != null then self["db.name"] = db_name
- end
-end
-
-redef class AppOptions
-
# MongoDb host name
var opt_db_host = new OptionString("MongoDb host", "--db-host")
# MongoDb database name
var opt_db_name = new OptionString("MongoDb database name", "--db-name")
+ # MongoDB server used for data persistence
+ fun db_host: String do return opt_db_host.value or else ini["db.host"] or else default_db_host
+
+ # MongoDB DB used for data persistence
+ fun db_name: String do return opt_db_name.value or else ini["db.name"] or else default_db_name
+
init do
super
add_option(opt_db_host, opt_db_name)
end
+
+ # Mongo db client
+ var client = new MongoClient(db_host) is lazy
+
+ # Mongo db instance
+ var db: MongoDb = client.database(db_name) is lazy
end
# A Repository is an object that can store serialized instances.
# A Repository that uses MongoDB as backend.
#
-# ~~~
+# ~~~nitish
# import popcorn
# import popcorn::pop_repos
+# import popcorn::pop_json
#
# # First, let's create a User abstraction:
#
# # The repository can then be used with User instances:
#
# # Init database
-# var mongo = new MongoClient("mongodb://localhost:27017/")
+# var mongo = new MongoClient("mongodb://mongo:27017/")
# var db = mongo.database("tests")
# var coll = db.collection("test_pop_repo_{100000.rand}")
#
# end
# ~~~
abstract class RepoObject
- super Jsonable
serialize
# `self` unique id.
redef fun hash do return id.hash
redef fun to_s do return id
- redef fun to_json do return serialize_to_json
end
# JsonObject can be used as a `RepositoryQuery`.