         }
     }
 
+    // TODO: Add docstring
     public var debugDescription: String {
         return self.description
     }


// MARK: -

public class DateDecoder: Decoder {
    private let dateFormatter: NSDateFormatter

    public init(dateFormatString: String) {
        self.dateFormatter = NSDateFormatter()
        self.dateFormatter.dateFormat = dateFormatString
    }

    public init(dateFormatter: NSDateFormatter) {
        self.dateFormatter = dateFormatter
    }

    public func decodeObject(data: AnyObject) throws -> Any {
        if let string = data as? String {
            return try dateFromString(string, withFormatter:self.dateFormatter)


// MARK: -

/**
    The parser property maker is used to define the list of properties to be validated and extracted from a object. 
    If a property is not defined in the list it will be ignored.
*/
public class ParserPropertyMaker {
    var properties = [ParserProperty]()

    /**
        Creates, adds and returns a property for the specified key path, type and optionality.

        NOTE: Compound key paths may be used (e.g. `address.city`). Each property name in the key path MUST be 
        separated by a `.` character.

        - parameter keyPath:  Key path for property.
        - parameter type:     Swift object type to be validated and extracted.
        - parameter optional: Specifies if the keyPath is optional. `false` by default.

        - returns: The created parser property.
    */
    public func propertyForKeyPath(keyPath: String, type: ParserPropertyType, optional: Bool = false) -> ParserProperty {
        return addProperty(keyPath: keyPath, type: type, optional: optional, decodingMethod: nil)
    }

    /**
        Creates, adds and returns a property for the specified key path, type, optionality and decodable type.

        NOTE: Compound key paths may be used (e.g. `address.city`). Each property name in the key path MUST be
        separated by a `.` character.

        - parameter keyPath:       Key path for property.
        - parameter type:          Swift object type to be validated and extracted.
        - parameter optional:      Specifies if the keyPath is optional. `false` by default.
        - parameter decodedToType: The `Decodable` type associated to the property. `nil` by default.

        - returns: The created parser property.
    */
    public func propertyForKeyPath(
        keyPath: String,
        type: ParserPropertyType,
