tty-reader 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +13 -6
- data/examples/keypress_nonblock.rb +17 -0
- data/lib/tty/reader.rb +10 -5
- data/lib/tty/reader/console.rb +5 -3
- data/lib/tty/reader/line.rb +8 -5
- data/lib/tty/reader/version.rb +1 -1
- data/spec/spec_helper.rb +6 -0
- data/spec/unit/line_spec.rb +1 -2
- data/spec/unit/read_line_spec.rb +27 -0
- data/tty-reader.gemspec +5 -5
- metadata +13 -19
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6193cf64fd770d652ff66d89ff395c28f52181521242ce432b3b651aa7b13d63
         | 
| 4 | 
            +
              data.tar.gz: 7fa878638a8851265dfed9f8970f03fd360f975007c8ad0c865bf2bb304c64a1
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 91136b6cecab81d4705560af21775ae5e4140e860c1d2413e8c01b545652623f2d17c2a146494fcf790d0c3e996a4b38cab1a80741f1900d3422eb4018e861ac
         | 
| 7 | 
            +
              data.tar.gz: bf159f08943f118a48c133171410bd5e9f8f6e8da0f83be54745e653648f9d3de7863025667a4a08da19d8ba27ab1c1c6cab0add921777de23a7a0b069c2ac15
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,18 @@ | |
| 1 1 | 
             
            # Change log
         | 
| 2 2 |  | 
| 3 | 
            +
            ## [v0.6.0] - 2019-05-27
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ### Added
         | 
| 6 | 
            +
            * Add :value option to #read_line to allow pre-populating of line content
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            ### Changed
         | 
| 9 | 
            +
            * Change to make InputInterrupt to derive from Interrupt by Samuel Williams(@ioquatix)
         | 
| 10 | 
            +
            * Change #read_line to trigger before line is printed to allow for line changes in key callbacks
         | 
| 11 | 
            +
            * Change Console#get_char :nonblock option to wait for readable input without blocking
         | 
| 12 | 
            +
            * Change to remove bundler version constraints
         | 
| 13 | 
            +
            * Change to update tty-screen dependency
         | 
| 14 | 
            +
            * Change to update tty-cursor dependency
         | 
| 15 | 
            +
             | 
| 3 16 | 
             
            ## [v0.5.0] - 2018-11-24
         | 
| 4 17 |  | 
| 5 18 | 
             
            ### Added
         | 
| @@ -47,6 +60,7 @@ | |
| 47 60 |  | 
| 48 61 | 
             
            * Initial implementation and release
         | 
| 49 62 |  | 
| 63 | 
            +
            [v0.6.0]: https://github.com/piotrmurach/tty-reader/compare/v0.5.0...v0.6.0
         | 
| 50 64 | 
             
            [v0.5.0]: https://github.com/piotrmurach/tty-reader/compare/v0.4.0...v0.5.0
         | 
| 51 65 | 
             
            [v0.4.0]: https://github.com/piotrmurach/tty-reader/compare/v0.3.0...v0.4.0
         | 
| 52 66 | 
             
            [v0.3.0]: https://github.com/piotrmurach/tty-reader/compare/v0.2.0...v0.3.0
         | 
    
        data/README.md
    CHANGED
    
    | @@ -140,7 +140,14 @@ You can also provide a line prefix displayed before input by passing it as a fir | |
| 140 140 |  | 
| 141 141 | 
             
            ```ruby
         | 
| 142 142 | 
             
            reader.read_line(">> ")
         | 
| 143 | 
            -
            # >> | 
| 143 | 
            +
            # >>
         | 
| 144 | 
            +
            ```
         | 
| 145 | 
            +
             | 
| 146 | 
            +
            To pre-populate the line content for editing use `:value` option:
         | 
| 147 | 
            +
             | 
| 148 | 
            +
            ```ruby
         | 
| 149 | 
            +
            reader.read_line("> ", value: "edit me")
         | 
| 150 | 
            +
            # > edit me
         | 
| 144 151 | 
             
            ```
         | 
| 145 152 |  | 
| 146 153 | 
             
            ### 2.3 read_multiline
         | 
| @@ -230,13 +237,13 @@ class MyListener | |
| 230 237 | 
             
            end
         | 
| 231 238 | 
             
            ```
         | 
| 232 239 |  | 
| 233 | 
            -
            Then  | 
| 240 | 
            +
            Then subscribing is done:
         | 
| 234 241 |  | 
| 235 242 | 
             
            ```ruby
         | 
| 236 243 | 
             
            reader.subscribe(MyListener.new)
         | 
| 237 244 | 
             
            ```
         | 
| 238 245 |  | 
| 239 | 
            -
            Alternatively, `subscribe` allows you to listen to events only for the  | 
| 246 | 
            +
            Alternatively, `subscribe` allows you to listen to events only for the duration of block execution like so:
         | 
| 240 247 |  | 
| 241 248 | 
             
            ```ruby
         | 
| 242 249 | 
             
            reader.subscribe(MyListener) do
         | 
| @@ -290,7 +297,7 @@ The available key events for character input are: | |
| 290 297 | 
             
            * `:keyalpha`
         | 
| 291 298 | 
             
            * `:keynum`
         | 
| 292 299 |  | 
| 293 | 
            -
            The navigation  | 
| 300 | 
            +
            The navigation related key events are:
         | 
| 294 301 |  | 
| 295 302 | 
             
            * `:keydown`
         | 
| 296 303 | 
             
            * `:keyup`
         | 
| @@ -333,7 +340,7 @@ reader = TTY::Reader.new(interrupt: :signal) | |
| 333 340 |  | 
| 334 341 | 
             
            ### 3.2. `:track_history`
         | 
| 335 342 |  | 
| 336 | 
            -
            The `read_line` and `read_multiline` provide history buffer that tracks all the lines entered during `TTY::Reader.new` interactions. The history buffer provides  | 
| 343 | 
            +
            The `read_line` and `read_multiline` provide history buffer that tracks all the lines entered during `TTY::Reader.new` interactions. The history buffer provides previous or next lines when user presses up/down arrows respectively. However, if you wish to disable this behaviour use `:track_history` option like so:
         | 
| 337 344 |  | 
| 338 345 | 
             
            ```ruby
         | 
| 339 346 | 
             
            reader = TTY::Reader.new(track_history: false)
         | 
| @@ -357,7 +364,7 @@ reader = TTY::Reader.new(history_duplicates: false) | |
| 357 364 |  | 
| 358 365 | 
             
            ### 3.5. `:history_exclude`
         | 
| 359 366 |  | 
| 360 | 
            -
            This option allows you to exclude lines from being stored in history. It accepts a `Proc` with a line as a first argument. By default it is set to  | 
| 367 | 
            +
            This option allows you to exclude lines from being stored in history. It accepts a `Proc` with a line as a first argument. By default it is set to exclude empty lines. To change this:
         | 
| 361 368 |  | 
| 362 369 | 
             
            ```ruby
         | 
| 363 370 | 
             
            reader = TTY::Reader.new(history_exclude: ->(line) { ... })
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            require_relative '../lib/tty-reader'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            reader = TTY::Reader.new
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            puts "Press a key (or Ctrl-X to exit)"
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            loop do
         | 
| 8 | 
            +
              print reader.cursor.clear_line
         | 
| 9 | 
            +
              print "=> "
         | 
| 10 | 
            +
              char = reader.read_keypress(nonblock: true)
         | 
| 11 | 
            +
              if ?\C-x == char
         | 
| 12 | 
            +
                puts "Exiting..."
         | 
| 13 | 
            +
                exit
         | 
| 14 | 
            +
              elsif char
         | 
| 15 | 
            +
                puts "#{char.inspect} [#{char.ord}] (hex: #{char.ord.to_s(16)})"
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
    
        data/lib/tty/reader.rb
    CHANGED
    
    | @@ -23,7 +23,7 @@ module TTY | |
| 23 23 | 
             
                # Raised when the user hits the interrupt key(Control-C)
         | 
| 24 24 | 
             
                #
         | 
| 25 25 | 
             
                # @api public
         | 
| 26 | 
            -
                InputInterrupt = Class.new( | 
| 26 | 
            +
                InputInterrupt = Class.new(Interrupt)
         | 
| 27 27 |  | 
| 28 28 | 
             
                # Check if Windowz mode
         | 
| 29 29 | 
             
                #
         | 
| @@ -215,6 +215,9 @@ module TTY | |
| 215 215 | 
             
                # @param [String] prompt
         | 
| 216 216 | 
             
                #   the prompt to display before input
         | 
| 217 217 | 
             
                #
         | 
| 218 | 
            +
                # @param [String] value
         | 
| 219 | 
            +
                #   the value to pre-populate line with
         | 
| 220 | 
            +
                #
         | 
| 218 221 | 
             
                # @param [Boolean] echo
         | 
| 219 222 | 
             
                #   if true echo back characters, output nothing otherwise
         | 
| 220 223 | 
             
                #
         | 
| @@ -223,10 +226,11 @@ module TTY | |
| 223 226 | 
             
                # @api public
         | 
| 224 227 | 
             
                def read_line(prompt = '', **options)
         | 
| 225 228 | 
             
                  opts = { echo: true, raw: true }.merge(options)
         | 
| 226 | 
            -
                   | 
| 229 | 
            +
                  value = options.fetch(:value, '')
         | 
| 230 | 
            +
                  line = Line.new(value, prompt: prompt)
         | 
| 227 231 | 
             
                  screen_width = TTY::Screen.width
         | 
| 228 232 |  | 
| 229 | 
            -
                  output.print(line | 
| 233 | 
            +
                  output.print(line)
         | 
| 230 234 |  | 
| 231 235 | 
             
                  while (codes = get_codes(opts)) && (code = codes[0])
         | 
| 232 236 | 
             
                    char = codes.pack('U*')
         | 
| @@ -277,6 +281,9 @@ module TTY | |
| 277 281 | 
             
                      end
         | 
| 278 282 | 
             
                    end
         | 
| 279 283 |  | 
| 284 | 
            +
                    # trigger before line is printed to allow for line changes
         | 
| 285 | 
            +
                    trigger_key_event(char, line: line.to_s)
         | 
| 286 | 
            +
             | 
| 280 287 | 
             
                    if opts[:raw] && opts[:echo]
         | 
| 281 288 | 
             
                      output.print(line.to_s)
         | 
| 282 289 | 
             
                      if char == "\n"
         | 
| @@ -286,8 +293,6 @@ module TTY | |
| 286 293 | 
             
                      end
         | 
| 287 294 | 
             
                    end
         | 
| 288 295 |  | 
| 289 | 
            -
                    trigger_key_event(char, line: line.to_s)
         | 
| 290 | 
            -
             | 
| 291 296 | 
             
                    if [CARRIAGE_RETURN, NEWLINE].include?(code)
         | 
| 292 297 | 
             
                      output.puts unless opts[:echo]
         | 
| 293 298 | 
             
                      break
         | 
    
        data/lib/tty/reader/console.rb
    CHANGED
    
    | @@ -1,5 +1,7 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            +
            require 'io/wait'
         | 
| 4 | 
            +
             | 
| 3 5 | 
             
            require_relative 'keys'
         | 
| 4 6 | 
             
            require_relative 'mode'
         | 
| 5 7 |  | 
| @@ -9,6 +11,8 @@ module TTY | |
| 9 11 | 
             
                  ESC = "\e".freeze
         | 
| 10 12 | 
             
                  CSI = "\e[".freeze
         | 
| 11 13 |  | 
| 14 | 
            +
                  TIMEOUT = 0.1
         | 
| 15 | 
            +
             | 
| 12 16 | 
             
                  # Key codes
         | 
| 13 17 | 
             
                  #
         | 
| 14 18 | 
             
                  # @return [Hash[Symbol]]
         | 
| @@ -43,14 +47,12 @@ module TTY | |
| 43 47 | 
             
                    mode.raw(options[:raw]) do
         | 
| 44 48 | 
             
                      mode.echo(options[:echo]) do
         | 
| 45 49 | 
             
                        if options[:nonblock]
         | 
| 46 | 
            -
                          input. | 
| 50 | 
            +
                          input.wait_readable(TIMEOUT) ? input.getc : nil
         | 
| 47 51 | 
             
                        else
         | 
| 48 52 | 
             
                          input.getc
         | 
| 49 53 | 
             
                        end
         | 
| 50 54 | 
             
                      end
         | 
| 51 55 | 
             
                    end
         | 
| 52 | 
            -
                  rescue IO::WaitReadable, EOFError
         | 
| 53 | 
            -
                    # no more bytes to read
         | 
| 54 56 | 
             
                  end
         | 
| 55 57 |  | 
| 56 58 | 
             
                  protected
         | 
    
        data/lib/tty/reader/line.rb
    CHANGED
    
    | @@ -209,16 +209,19 @@ module TTY | |
| 209 209 | 
             
                  # Remove char from the line at current position
         | 
| 210 210 | 
             
                  #
         | 
| 211 211 | 
             
                  # @api public
         | 
| 212 | 
            -
                  def delete
         | 
| 213 | 
            -
                    @text.slice!(@cursor,  | 
| 212 | 
            +
                  def delete(n = 1)
         | 
| 213 | 
            +
                    @text.slice!(@cursor, n)
         | 
| 214 214 | 
             
                  end
         | 
| 215 215 |  | 
| 216 216 | 
             
                  # Remove char from the line in front of the cursor
         | 
| 217 217 | 
             
                  #
         | 
| 218 | 
            +
                  # @param [Integer] n
         | 
| 219 | 
            +
                  #   the number of chars to remove
         | 
| 220 | 
            +
                  #
         | 
| 218 221 | 
             
                  # @api public
         | 
| 219 | 
            -
                  def remove
         | 
| 220 | 
            -
                    left
         | 
| 221 | 
            -
                    @text.slice!(@cursor,  | 
| 222 | 
            +
                  def remove(n = 1)
         | 
| 223 | 
            +
                    left(n)
         | 
| 224 | 
            +
                    @text.slice!(@cursor, n)
         | 
| 222 225 | 
             
                  end
         | 
| 223 226 |  | 
| 224 227 | 
             
                  # Full line with prompt as string
         | 
    
        data/lib/tty/reader/version.rb
    CHANGED
    
    
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -16,6 +16,12 @@ end | |
| 16 16 | 
             
            require "bundler/setup"
         | 
| 17 17 | 
             
            require "tty-reader"
         | 
| 18 18 |  | 
| 19 | 
            +
            class StringIO
         | 
| 20 | 
            +
              def wait_readable(*)
         | 
| 21 | 
            +
                true
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
| 19 25 | 
             
            RSpec.configure do |config|
         | 
| 20 26 | 
             
              # Enable flags like --only-failures and --next-failure
         | 
| 21 27 | 
             
              config.example_status_persistence_file_path = ".rspec_status"
         | 
    
        data/spec/unit/line_spec.rb
    CHANGED
    
    
    
        data/spec/unit/read_line_spec.rb
    CHANGED
    
    | @@ -10,14 +10,18 @@ RSpec.describe TTY::Reader, '#read_line' do | |
| 10 10 | 
             
              it 'masks characters' do
         | 
| 11 11 | 
             
                input << "password\n"
         | 
| 12 12 | 
             
                input.rewind
         | 
| 13 | 
            +
             | 
| 13 14 | 
             
                answer = reader.read_line(echo: false)
         | 
| 15 | 
            +
             | 
| 14 16 | 
             
                expect(answer).to eq("password\n")
         | 
| 15 17 | 
             
              end
         | 
| 16 18 |  | 
| 17 19 | 
             
              it "echoes characters back" do
         | 
| 18 20 | 
             
                input << "password\n"
         | 
| 19 21 | 
             
                input.rewind
         | 
| 22 | 
            +
             | 
| 20 23 | 
             
                answer = reader.read_line
         | 
| 24 | 
            +
             | 
| 21 25 | 
             
                expect(answer).to eq("password\n")
         | 
| 22 26 | 
             
                expect(output.string).to eq([
         | 
| 23 27 | 
             
                  "\e[2K\e[1Gp",
         | 
| @@ -35,7 +39,9 @@ RSpec.describe TTY::Reader, '#read_line' do | |
| 35 39 | 
             
              it "doesn't echo characters back" do
         | 
| 36 40 | 
             
                input << "password\n"
         | 
| 37 41 | 
             
                input.rewind
         | 
| 42 | 
            +
             | 
| 38 43 | 
             
                answer = reader.read_line(echo: false)
         | 
| 44 | 
            +
             | 
| 39 45 | 
             
                expect(answer).to eq("password\n")
         | 
| 40 46 | 
             
                expect(output.string).to eq("\n")
         | 
| 41 47 | 
             
              end
         | 
| @@ -43,7 +49,9 @@ RSpec.describe TTY::Reader, '#read_line' do | |
| 43 49 | 
             
              it "displays a prompt before input" do
         | 
| 44 50 | 
             
                input << "aa\n"
         | 
| 45 51 | 
             
                input.rewind
         | 
| 52 | 
            +
             | 
| 46 53 | 
             
                answer = reader.read_line('>> ')
         | 
| 54 | 
            +
             | 
| 47 55 | 
             
                expect(answer).to eq("aa\n")
         | 
| 48 56 | 
             
                expect(output.string).to eq([
         | 
| 49 57 | 
             
                  ">> ",
         | 
| @@ -53,17 +61,36 @@ RSpec.describe TTY::Reader, '#read_line' do | |
| 53 61 | 
             
                ].join)
         | 
| 54 62 | 
             
              end
         | 
| 55 63 |  | 
| 64 | 
            +
              it "displays custom input with a prompt" do
         | 
| 65 | 
            +
                input << "aa\n"
         | 
| 66 | 
            +
                input.rewind
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                answer = reader.read_line("> ", value: "xx")
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                expect(answer).to eq("xxaa\n")
         | 
| 71 | 
            +
                expect(output.string).to eq([
         | 
| 72 | 
            +
                  "> xx",
         | 
| 73 | 
            +
                  "\e[2K\e[1G> xxa",
         | 
| 74 | 
            +
                  "\e[2K\e[1G> xxaa",
         | 
| 75 | 
            +
                  "\e[2K\e[1G> xxaa\n"
         | 
| 76 | 
            +
                ].join)
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
             | 
| 56 79 | 
             
              it 'deletes characters when backspace pressed' do
         | 
| 57 80 | 
             
                input << "aa\ba\bcc\n"
         | 
| 58 81 | 
             
                input.rewind
         | 
| 82 | 
            +
             | 
| 59 83 | 
             
                answer = reader.read_line
         | 
| 84 | 
            +
             | 
| 60 85 | 
             
                expect(answer).to eq("acc\n")
         | 
| 61 86 | 
             
              end
         | 
| 62 87 |  | 
| 63 88 | 
             
              it 'reads multibyte line' do
         | 
| 64 89 | 
             
                input << "한글"
         | 
| 65 90 | 
             
                input.rewind
         | 
| 91 | 
            +
             | 
| 66 92 | 
             
                answer = reader.read_line
         | 
| 93 | 
            +
             | 
| 67 94 | 
             
                expect(answer).to eq("한글")
         | 
| 68 95 | 
             
              end
         | 
| 69 96 | 
             
            end
         | 
    
        data/tty-reader.gemspec
    CHANGED
    
    | @@ -6,7 +6,7 @@ Gem::Specification.new do |spec| | |
| 6 6 | 
             
              spec.name          = "tty-reader"
         | 
| 7 7 | 
             
              spec.version       = TTY::Reader::VERSION
         | 
| 8 8 | 
             
              spec.authors       = ["Piotr Murach"]
         | 
| 9 | 
            -
              spec.email         = [""]
         | 
| 9 | 
            +
              spec.email         = ["me@piotrmurach.com"]
         | 
| 10 10 | 
             
              spec.summary       = %q{A set of methods for processing keyboard input in character, line and multiline modes.}
         | 
| 11 11 | 
             
              spec.description   = %q{A set of methods for processing keyboard input in character, line and multiline modes. It maintains history of entered input with an ability to recall and re-edit those inputs. It lets you register to listen for keystroke events and trigger custom key events yourself.}
         | 
| 12 12 | 
             
              spec.homepage      = "https://piotrmurach.github.io/tty"
         | 
| @@ -22,10 +22,10 @@ Gem::Specification.new do |spec| | |
| 22 22 | 
             
              spec.required_ruby_version = '>= 2.0.0'
         | 
| 23 23 |  | 
| 24 24 | 
             
              spec.add_dependency "wisper", "~> 2.0.0"
         | 
| 25 | 
            -
              spec.add_dependency "tty-screen", "~> 0. | 
| 26 | 
            -
              spec.add_dependency "tty-cursor", "~> 0. | 
| 25 | 
            +
              spec.add_dependency "tty-screen", "~> 0.7"
         | 
| 26 | 
            +
              spec.add_dependency "tty-cursor", "~> 0.7"
         | 
| 27 27 |  | 
| 28 | 
            -
              spec.add_development_dependency "bundler", ">= 1.5.0" | 
| 29 | 
            -
              spec.add_development_dependency "rake" | 
| 28 | 
            +
              spec.add_development_dependency "bundler", ">= 1.5.0"
         | 
| 29 | 
            +
              spec.add_development_dependency "rake"
         | 
| 30 30 | 
             
              spec.add_development_dependency "rspec",   "~> 3.0"
         | 
| 31 31 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: tty-reader
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Piotr Murach
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2019-05-27 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: wisper
         | 
| @@ -30,28 +30,28 @@ dependencies: | |
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 0. | 
| 33 | 
            +
                    version: '0.7'
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 0. | 
| 40 | 
            +
                    version: '0.7'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: tty-cursor
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 45 | 
             
                - - "~>"
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: 0. | 
| 47 | 
            +
                    version: '0.7'
         | 
| 48 48 | 
             
              type: :runtime
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: 0. | 
| 54 | 
            +
                    version: '0.7'
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 56 | 
             
              name: bundler
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -59,9 +59,6 @@ dependencies: | |
| 59 59 | 
             
                - - ">="
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 61 | 
             
                    version: 1.5.0
         | 
| 62 | 
            -
                - - "<"
         | 
| 63 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 64 | 
            -
                    version: '2.0'
         | 
| 65 62 | 
             
              type: :development
         | 
| 66 63 | 
             
              prerelease: false
         | 
| 67 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| @@ -69,23 +66,20 @@ dependencies: | |
| 69 66 | 
             
                - - ">="
         | 
| 70 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 71 68 | 
             
                    version: 1.5.0
         | 
| 72 | 
            -
                - - "<"
         | 
| 73 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 74 | 
            -
                    version: '2.0'
         | 
| 75 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 76 70 | 
             
              name: rake
         | 
| 77 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 78 72 | 
             
                requirements:
         | 
| 79 | 
            -
                - - " | 
| 73 | 
            +
                - - ">="
         | 
| 80 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 81 | 
            -
                    version: ' | 
| 75 | 
            +
                    version: '0'
         | 
| 82 76 | 
             
              type: :development
         | 
| 83 77 | 
             
              prerelease: false
         | 
| 84 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 85 79 | 
             
                requirements:
         | 
| 86 | 
            -
                - - " | 
| 80 | 
            +
                - - ">="
         | 
| 87 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 88 | 
            -
                    version: ' | 
| 82 | 
            +
                    version: '0'
         | 
| 89 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 90 84 | 
             
              name: rspec
         | 
| 91 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -105,7 +99,7 @@ description: A set of methods for processing keyboard input in character, line a | |
| 105 99 | 
             
              and re-edit those inputs. It lets you register to listen for keystroke events and
         | 
| 106 100 | 
             
              trigger custom key events yourself.
         | 
| 107 101 | 
             
            email:
         | 
| 108 | 
            -
            -  | 
| 102 | 
            +
            - me@piotrmurach.com
         | 
| 109 103 | 
             
            executables: []
         | 
| 110 104 | 
             
            extensions: []
         | 
| 111 105 | 
             
            extra_rdoc_files: []
         | 
| @@ -119,6 +113,7 @@ files: | |
| 119 113 | 
             
            - bin/console
         | 
| 120 114 | 
             
            - bin/setup
         | 
| 121 115 | 
             
            - examples/keypress.rb
         | 
| 116 | 
            +
            - examples/keypress_nonblock.rb
         | 
| 122 117 | 
             
            - examples/line.rb
         | 
| 123 118 | 
             
            - examples/multiline.rb
         | 
| 124 119 | 
             
            - examples/noecho.rb
         | 
| @@ -166,8 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 166 161 | 
             
                - !ruby/object:Gem::Version
         | 
| 167 162 | 
             
                  version: '0'
         | 
| 168 163 | 
             
            requirements: []
         | 
| 169 | 
            -
             | 
| 170 | 
            -
            rubygems_version: 2.7.3
         | 
| 164 | 
            +
            rubygems_version: 3.0.3
         | 
| 171 165 | 
             
            signing_key: 
         | 
| 172 166 | 
             
            specification_version: 4
         | 
| 173 167 | 
             
            summary: A set of methods for processing keyboard input in character, line and multiline
         |