AppRoute provide services for path and uri manipulation and matching..

Default strict routes like / or /user match the same URI string. An exception is done for the trailing /, which is always omitted during the parsing.

var route = new AppRoute("/")
assert route.match("")
assert route.match("/")
assert not route.match("/user")
assert not route.match("user")

route = new AppRoute("/user")
assert not route.match("/")
assert route.match("/user")
assert route.match("/user/")
assert not route.match("/user/10")
assert not route.match("/foo")
assert not route.match("user")
assert not route.match("/username")

Introduced properties

fun match(uri: String): Bool

popcorn :: AppRoute :: match

Does self match the req?
fun path: String

popcorn :: AppRoute :: path

Route relative path from server root.
protected fun path=(path: String)

popcorn :: AppRoute :: path=

Route relative path from server root.
fun resolve_path(uri: String): String

popcorn :: AppRoute :: resolve_path

Replace path parameters with concrete values from the uri.
fun uri_root(uri: String): String

popcorn :: AppRoute :: uri_root

Remove resolved_path prefix from uri.

Redefined properties

redef type SELF: AppRoute

popcorn $ AppRoute :: SELF

Type of this instance, automatically specialized in every class

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
fun match(uri: String): Bool

popcorn :: AppRoute :: match

Does self match the req?
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun path: String

popcorn :: AppRoute :: path

Route relative path from server root.
protected fun path=(path: String)

popcorn :: AppRoute :: path=

Route relative path from server root.
fun resolve_path(uri: String): String

popcorn :: AppRoute :: resolve_path

Replace path parameters with concrete values from the uri.
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun uri_root(uri: String): String

popcorn :: AppRoute :: uri_root

Remove resolved_path prefix from uri.
package_diagram popcorn::AppRoute AppRoute core::Object Object popcorn::AppRoute->core::Object popcorn::AppParamRoute AppParamRoute popcorn::AppParamRoute->popcorn::AppRoute popcorn::AppGlobRoute AppGlobRoute popcorn::AppGlobRoute->popcorn::AppParamRoute popcorn::AppGlobRoute... ... popcorn::AppGlobRoute...->popcorn::AppGlobRoute

Parents

interface Object

core :: Object

The root of the class hierarchy.

Children

class AppParamRoute

popcorn :: AppParamRoute

Parameterizable routes.

Descendants

class AppGlobRoute

popcorn :: AppGlobRoute

Route with glob.

Class definitions

popcorn $ AppRoute
# AppRoute provide services for path and uri manipulation and matching..
#
# Default strict routes like `/` or `/user` match the same URI string.
# An exception is done for the trailing `/`, which is always omitted during the
# parsing.
#
# ~~~
# var route = new AppRoute("/")
# assert route.match("")
# assert route.match("/")
# assert not route.match("/user")
# assert not route.match("user")
#
# route = new AppRoute("/user")
# assert not route.match("/")
# assert route.match("/user")
# assert route.match("/user/")
# assert not route.match("/user/10")
# assert not route.match("/foo")
# assert not route.match("user")
# assert not route.match("/username")
# ~~~
class AppRoute

	# Route relative path from server root.
	var path: String

	# Does self match the `req`?
	fun match(uri: String): Bool do
		uri = uri.simplify_path
		var path = resolve_path(uri)
		if uri.is_empty and path == "/" then return true
		return uri == path
	end

	# Replace path parameters with concrete values from the `uri`.
	#
	# For strict routes, it returns the path unchanged:
	# ~~~
	# var route = new AppRoute("/")
	# assert route.resolve_path("/user/10/profile") == "/"
	#
	# route = new AppRoute("/user")
	# assert route.resolve_path("/user/10/profile") == "/user"
	# ~~~
	fun resolve_path(uri: String): String do return path.simplify_path

	# Remove `resolved_path` prefix from `uri`.
	#
	# Mainly used to resolve and match mountable routes.
	#
	# ~~~
	# var route = new AppRoute("/")
	# assert route.uri_root("/user/10/profile") == "/user/10/profile"
	#
	# route = new AppRoute("/user")
	# assert route.uri_root("/user/10/profile") == "/10/profile"
	# ~~~
	fun uri_root(uri: String): String do
		var path = resolve_path(uri)
		if path == "/" then return uri
		return uri.substring(path.length, uri.length).simplify_path
	end
end
lib/popcorn/pop_routes.nit:22,1--85,3