json :: JsonStore :: defaultinit
json :: JsonStore :: has_collection
Doeskey
matches a collection?
json :: JsonStore :: list_collection
Get the list of keys stored under the collectionkey
.
json :: JsonStore :: load_array
Load a JsonArray associated tokey
from store.
json :: JsonStore :: load_object
Load a JsonObject associated tokey
from store.
json :: JsonStore :: store_array
Savejson
array under key
.
json :: JsonStore :: store_dir=
Directory where data are stored.json :: JsonStore :: store_object
Savejson
object under key
.
core :: Object :: class_factory
Implementation used byget_class
to create the specific class.
core :: Object :: defaultinit
json :: JsonStore :: defaultinit
json :: JsonStore :: has_collection
Doeskey
matches a collection?
core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
json :: JsonStore :: list_collection
Get the list of keys stored under the collectionkey
.
json :: JsonStore :: load_array
Load a JsonArray associated tokey
from store.
json :: JsonStore :: load_object
Load a JsonObject associated tokey
from store.
core :: Object :: output_class_name
Display class name on stdout (debug only).json :: JsonStore :: store_array
Savejson
array under key
.
json :: JsonStore :: store_dir=
Directory where data are stored.json :: JsonStore :: store_object
Savejson
object under key
.
# A JsonStore can save and load json data from file system.
class JsonStore
# Directory where data are stored.
#
# Directory is created lazilly at the first write.
var store_dir: String
# Delete all stored data.
#
# Warning: all `JsonStore` instances sharing the same `store_dir` will
# be cleared.
fun clear do
if not store_dir.file_exists then return
store_dir.rmdir
end
# Is there data are stored under `key`.
fun has_key(key: String): Bool do
return ("{store_dir}/{key}.json".simplify_path).file_exists
end
# Save `json` object under `key`.
fun store_object(key: String, json: JsonObject) do
store_json(key, json)
end
# Save `json` array under `key`.
fun store_array(key: String, json: JsonArray) do
store_json(key, json)
end
# Save `json` data under `key`.
#
# Only `JsonObject` and `JsonArray` are allowed in a json file.
# Use `store_object` or `store_array` instead.
private fun store_json(key: String, json: Serializable) do
var path = "{store_dir}/{key}.json".simplify_path
path.dirname.mkdir
var file = new FileWriter.open(path)
file.write(json.to_json)
file.close
end
# Load a JsonObject associated to `key` from store.
fun load_object(key: String): JsonObject do
return load_json(key).as(JsonObject)
end
# Load a JsonArray associated to `key` from store.
fun load_array(key: String): JsonArray do
return load_json(key).as(JsonArray)
end
# Load a JsonObject associated to `key` from store.
#
# Ensure `has_data(key)`
private fun load_json(key: String): nullable Serializable do
assert has_key(key)
var path = "{store_dir}/{key}.json".simplify_path
var file = new FileReader.open(path)
var text = file.read_all
file.close
return text.parse_json
end
# Get the list of keys stored under the collection `key`.
fun list_collection(key: String): JsonArray do
var res = new JsonArray
var coll = ("{store_dir}/{key}".simplify_path).to_path
if not coll.exists or not coll.stat.is_dir then return res
for file in coll.files do
if file.to_s.has_suffix(".json") then
res.add(file.to_s.basename(".json"))
end
end
return res
end
# Does `key` matches a collection?
fun has_collection(key: String): Bool do
var path = ("{store_dir}/{key}".simplify_path).to_path
return path.exists and path.stat.is_dir
end
end
lib/json/store.nit:95,1--179,3