Merge: Java FFI: use class NitObject for references to Nit objects from Java
[nit.git] / lib / popcorn / pop_repos.nit
index 4c3ea14..c054d5a 100644 (file)
 # 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"
@@ -54,7 +54,6 @@
 #      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")
 #
@@ -121,50 +120,39 @@ module pop_repos
 
 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.
@@ -264,9 +252,10 @@ end
 
 # 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:
 #
@@ -301,7 +290,7 @@ end
 # # 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}")
 #
@@ -419,7 +408,6 @@ end
 # end
 # ~~~
 abstract class RepoObject
-       super Jsonable
        serialize
 
        # `self` unique id.
@@ -436,7 +424,6 @@ abstract class RepoObject
 
        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`.