     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 enum KeyboardState {
    case Hidden, WillShow, Visible, WillHide
}

public struct KeyboardInfo {
    public let beginFrame: CGRect
    public let endFrame: CGRect
    public let animationCurve: UIViewAnimationCurve
    public let animationDuration: NSTimeInterval
    public var animationOptions: UIViewAnimationOptions {
        switch animationCurve {
        case .EaseInOut: return UIViewAnimationOptions.CurveEaseInOut

        }
    }

    /// Creates instance of `KeyboardInfo` using `userInfo` from `NSNotification` object.
    /// If there is no info or `info` doesn't contain appropriate key-value pair uses default values.
    public static func fromNotificationUserInfo(info: [NSObject : AnyObject]?) -> KeyboardInfo {
        var beginFrame = CGRectZero
        info?[UIKeyboardFrameBeginUserInfoKey]?.getValue(&beginFrame)
