     func keyboardWrapper(wrapper: KeyboardWrapper, didChangeWithKeyboardInfo info: KeyboardInfo)
 }
 
+/// Responsible for observing `UIKeyboard` notifications and calling delegate
+/// to notify about changes.
 public class KeyboardWrapper {
 
+    /// The delegate for keyboard notifications.
     public weak var delegate: KeyboardWrapperDelegate?
 
+    /// Current state of keyboard.
+    /// We assume that initial state of keyboard is `Hidden`.
     private(set) public var state = KeyboardState.Hidden
 
     public init() {

        }
    }

    public static func fromNotificationUserInfo(info: [NSObject : AnyObject]?) -> KeyboardInfo {
        var beginFrame = CGRectZero
        info?[UIKeyboardFrameBeginUserInfoKey]?.getValue(&beginFrame)

    }
}

/// Represents keyboard state.
public enum KeyboardState {

    /// Denotes hidden state of keyboard
    case Hidden

    /// Denotes state when keyboard about to show.
    case WillShow

    /// Denotes visible state of keyboard.
    case Visible

    ///Denotes state when keyboard about to hide.
    case WillHide
}

/// Represents info about keyboard extracted from `NSNotification`.
public struct KeyboardInfo {

    /// The start frame of the keyboard in screen coordinates.
    public let beginFrame: CGRect

    /// The end frame of the keyboard in screen coordinates.
    public let endFrame: CGRect

    /// Defines how the keyboard will be animated onto or off the screen.
    public let animationCurve: UIViewAnimationCurve

    /// The duration of the animation in seconds.
    public let animationDuration: NSTimeInterval

    /// Options for animating constructed from `animationCurve`.
    public var animationOptions: UIViewAnimationOptions {
        switch animationCurve {
        case .EaseInOut: return UIViewAnimationOptions.CurveEaseInOut
