         return nil
     }
     
-    func params(for urlComponents: [String], routeUrlComponents: [String]) -> RoutableParams? {
+    open func params(for urlComponents: [String], routeUrlComponents: [String]) -> RoutableParams? {
         var params = RoutableParams()
         for (idx, routeComponent) in routeUrlComponents.enumerated() {
             let givenComponent = urlComponents[idx]

import Foundation
import UIKit

typealias RoutableParams = Dictionary <AnyHashable, Any>
typealias RoutableOpenCallback = (_ params: RoutableParams) -> Void

protocol Routable {
    var controllerParams:RoutableParams? { get set }
    init(params:RoutableParams?)
}

extension Routable where Self: UIViewController {
    init(params: RoutableParams?) {
        self.init(nibName: nil, bundle: nil)
        self.controllerParams = params
    }
}

struct RouteParams {
    var routeOptions : RouteOptions?
    var openParams : RoutableParams?
    var extraParams : RoutableParams?
    
    // TODO: CHECK THIS... MAYBE ALWAYS NEED DEFAULT PARAMS AVAILABLE?
    var controllerParams : RoutableParams {
        get {
            var controllerParams = RoutableParams()
            if let defaults = self.routeOptions?.defaultParams {

}


public enum RouteException : Error {
    case initializerNotFound
    case routeNotFound
    case misformedRoute
}

public struct RouteOptions {
    
    public var openClass: Routable?
    public var callback : RoutableOpenCallback?
    
    public init(presentationStyle: UIModalPresentationStyle = UIModalPresentationStyle.none, transitionStyle: UIModalTransitionStyle = UIModalTransitionStyle.coverVertical, defaultParams: RoutableParams? = nil, isRoot: Bool = false, isModal: Bool = false) {
        self.presentationStyle = presentationStyle
        self.transitionStyle = transitionStyle
        self.defaultParams = defaultParams
