tty_string 0.2.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a98f1f00566e4802bab20aa02326c6c53f9bbd164bbd5a499f64afc5a84f88cb
4
- data.tar.gz: aa22c08116ffc776f98342bf7f8704cb5bfff7ec477fbe237d7405d1ae75752d
3
+ metadata.gz: ce94f319deb6062d8492d19e856f93d1e4b7fb1ef454e31e6824a1814b59a319
4
+ data.tar.gz: '05826ce61d59609df5db320f5e4bf83084b494a9f045f90b13cf8a3c18f07b40'
5
5
  SHA512:
6
- metadata.gz: e2f47e040687ea392c87784ffbe45cefe76c0dc0c5c644e651ecdc349f7d57a140c869dfd685492e8f02b430b3b3e92a3121d3f67edc3e9bd7109cd2cf979fba
7
- data.tar.gz: 59ddb4338dc11b483666497ea417a30f9857172a81e3c39271b1585d94d40f1738a3f426600e037f50d110f5abeeab36d6f0b62b9495bb4207802c5333ccb181
6
+ metadata.gz: 4299d0e7ffca36bf56f6899cb971a882e0646a71777cdbf0fd34a4569cfe3986d057fb0b10137815747b163d2e4da44b6243692d36ab8bee0141695df93416b1
7
+ data.tar.gz: 81e5f9aeee83e5b65df853dcfe94f41398eb5de0d690acafeded7aa896cfe80ba5c1cb09fad9ed4ff0a84edeb495cf6b4185a832261ce7ca9a248508015d0de9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ # v1.1.1
2
+ - i forgot how arity works
3
+
4
+ # v1.1.0
5
+ - suppress bracketed paste mode codes
6
+
7
+ # v1.0.1
8
+ - test push to rubygems, no functional changes
9
+
10
+ # v1.0.0
11
+ - added TTYString.parse as a shortcut for .new#to_s
12
+ - added TTYString.to_proc for lols
13
+ - added jruby to travis matrix, fortunately it just works™
14
+
15
+ # v0.2.1
16
+ - fixed a bug with ignoring \a
17
+
1
18
  # v0.2.0
2
19
  - Stricter rendering because it turns out terminals are randomly permissive
3
20
  - removed support for ruby 2.3
data/README.md CHANGED
@@ -1,42 +1,49 @@
1
1
  # TTYString
2
2
 
3
- [![Build Status](https://travis-ci.org/robotdana/tty_string.svg?branch=master)](https://travis-ci.org/robotdana/tty_string)
4
-
5
- Render a string like your terminal does by (narrowly) parsing ANSI TTY codes.
6
- This is useful for testing CLI's
7
-
8
- Various terminals are wildly variously permissive with what they accept,
9
- so this doesn't even try to cover all possible cases,
10
- instead it covers the narrowest possible case, and leaves the codes in place when unrecognised
11
-
12
- Supported codes
13
-
14
- - `\a` # BEL, just removed.
15
- - `\b` # backspace
16
- - `\n` # newline
17
- - `\r` # return, jump to the start of the line
18
- - `\t` # tab, move to the next multiple-of-8 column
19
- - `\e[nA` # move up n lines, default: 1
20
- - `\e[nB` # move down n lines, default: 1
21
- - `\e[nC` # move right n columns, default: 1
22
- - `\e[nD` # move left n columns, default: 1
23
- - `\e[nE` # move down n lines, and to the start of the line, default: 1
24
- - `\e[nF` # move up n lines, and to the start of the line, default: 1
25
- - `\e[nG` # jump to column to n
26
- - `\e[n;mH` # jump to row n, column m, default: 1,1
27
- - `\e[nJ` # n=0: clear the screen forward, n=1: clear backward, n=2 or 3: clear the screen. default 0
28
- - `\e[nK` # n=0: clear the line forward, n=1: clear the line backward, n=2: clear the line. default 0
29
- - `\e[n;mf` # jump to row n, column m, default: 1,1
30
- - `\e[m` # styling codes, optionally suppressed with clear_style: false
31
- - `\e[nS` # scroll down n rows, default 1
32
- - `\e[nT` # scroll up n rows, default 1
3
+ [![Build Status](https://travis-ci.com/robotdana/tty_string.svg?branch=main)](https://travis-ci.com/robotdana/tty_string)
4
+ [![Gem Version](https://badge.fury.io/rb/tty_string.svg)](https://rubygems.org/gems/tty_string)
5
+
6
+ Render to a string like your terminal does by (narrowly) parsing ANSI TTY codes.
7
+ Intended for use in tests of command line interfaces.
8
+
9
+ ## Features
10
+
11
+ - supports ruby 2.4 - 3.0.0.preview1, and jruby
12
+ - has no dependencies outside ruby stdlib
13
+
14
+ ## Supported codes
15
+
16
+ | Code | Description | Default |
17
+ |------|-------------|---------|
18
+ | `\a` | bell: suppressed | |
19
+ | `\b` | backspace: clear the character to the left of the cursor and move the cursor back one column | |
20
+ | `\n` | newline: move the cursor to the start of the next line | |
21
+ | `\r` | return: move the cursor to the start of the current line | |
22
+ | `\t` | tab: move the cursor to the next multiple-of-8 column | |
23
+ | `\e[nA` | move the cursor up _n_ lines | _n_=`1` |
24
+ | `\e[nB` | move the cursor down _n_ lines | _n_=`1` |
25
+ | `\e[nC` | move the cursor right _n_ columns | _n_=`1` |
26
+ | `\e[nD` | move the cursor left _n_ columns | _n_=`1` |
27
+ | `\e[nE` | move the cursor down _n_ lines, and to the start of the line | _n_=`1` |
28
+ | `\e[nF` | move the cursor up _n_ lines, and to the start of the line | _n_=`1` |
29
+ | `\e[nG` | move the cursor to column _n_. `1` is left-most column | _n_=`1` |
30
+ | `\e[n;mH` <br> `\e[n;mf` | move the cursor to row _n_, column _m_. `1;1` is top left corner | _n_=`1` _m_=`1` |
31
+ | `\e[nJ` | _n_=`0`: clear the screen from the cursor forward <br>_n_=`1`: clear the screen from the cursor backward <br>_n_=`2` or _n_=`3`: clear the screen | _n_=`0` |
32
+ | `\e[nK` | _n_=`0`: clear the line from the cursor forward <br>_n_=`1`: clear the line from the cursor backward <br>_n_=`2`: clear the line | _n_=`0` |
33
+ | `\e[nS` | scroll up _n_ rows | _n_=`1` |
34
+ | `\e[nT` | scroll down _n_ rows | _n_=`1` |
35
+ | `\e[m` | styling codes: optionally suppressed with `clear_style: false` | |
36
+ | `\e[?2004h` | enabled bracketed paste: suppressed | |
37
+ | `\e[?2004l` | disable bracketed paste: suppressed | |
38
+ | `\e[200~` | bracketed paste start: suppressed | |
39
+ | `\e[201~` | bracketed paste end: suppressed | |
33
40
 
34
41
  ## Installation
35
42
 
36
43
  Add this line to your application's Gemfile:
37
44
 
38
45
  ```ruby
39
- gem 'tty_string'
46
+ gem 'tty_string', '~> 1.0'
40
47
  ```
41
48
 
42
49
  And then execute:
@@ -50,26 +57,40 @@ Or install it yourself as:
50
57
  ## Usage
51
58
 
52
59
  ```ruby
53
- TTYString.new("th\ta string\e[3Gis is").to_s
60
+ TTYString.parse("th\ta string\e[3Gis is")
54
61
  => "this is a string"
55
62
  ```
56
63
 
57
64
  Styling information is suppressed by default:
58
65
  ```ruby
59
- TTYString.new("th\ta \e[31mstring\e[0m\e[3Gis is").to_s
66
+ TTYString.parse("th\ta \e[31mstring\e[0m\e[3Gis is")
60
67
  => "this is a string"
61
68
  ```
62
69
  But can be passed through:
63
70
  ```ruby
64
- TTYString.new("th\ta \e[31mstring\e[0m\e[3Gis is", clear_style: false).to_s
71
+ TTYString.parse("th\ta \e[31mstring\e[0m\e[3Gis is", clear_style: false)
65
72
  => "this is a \e[31mstring\e[0m"
66
73
  ```
67
74
 
75
+ Just for fun TTYString.to_proc provides the `parse` method as a lambda, so:
76
+ ```ruby
77
+ ["th\ta string\e[3Gis is"].each(&TTYString)
78
+ => ["this is a string"]
79
+ ```
80
+
81
+ ## Limitations
82
+
83
+ - Various terminals are wildly variously permissive with what they accept,
84
+ so this doesn't even try to cover all possible cases,
85
+ instead it covers the narrowest possible case, and leaves the codes in place when unrecognized
86
+
87
+ - `clear_style: false` treats the style codes as regular text which may work differently when rendering codes that move the cursor.
88
+
68
89
  ## Development
69
90
 
70
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
91
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake` to run the tests and linters. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
71
92
 
72
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
93
+ To install this gem onto your local machine, run `bundle exec rake install`.
73
94
 
74
95
  ## Contributing
75
96
 
data/lib/tty_string.rb CHANGED
@@ -3,8 +3,18 @@
3
3
  require_relative 'tty_string/parser'
4
4
 
5
5
  # Renders a string taking into ANSI escape codes and \t\r\n etc
6
- # Usage: TTYString.new("this\r\e[Kthat").to_s => "that"
6
+ # Usage: TTYString.parse("This\r\e[KThat") => "That"
7
7
  class TTYString
8
+ class << self
9
+ def parse(input_string, clear_style: true)
10
+ new(input_string, clear_style: clear_style).to_s
11
+ end
12
+
13
+ def to_proc
14
+ method(:parse).to_proc
15
+ end
16
+ end
17
+
8
18
  def initialize(input_string, clear_style: true)
9
19
  @parser = Parser.new(input_string)
10
20
  @parser.clear_style = clear_style
@@ -16,6 +26,5 @@ class TTYString
16
26
 
17
27
  private
18
28
 
19
- attr_reader :clear_style
20
- attr_reader :parser
29
+ attr_reader :clear_style, :parser
21
30
  end
@@ -11,6 +11,8 @@ class TTYString
11
11
  @@descendants ||= [] # rubocop:disable Style/ClassVars I want it to be shared between subclasses.
12
12
  @@descendants << klass
13
13
  @@descendants.uniq!
14
+
15
+ super
14
16
  end
15
17
 
16
18
  def render(parser)
@@ -45,12 +47,12 @@ class TTYString
45
47
  @parser = parser
46
48
  end
47
49
 
50
+ def action; end
51
+
48
52
  private
49
53
 
50
54
  attr_reader :parser
51
55
 
52
- def action; end
53
-
54
56
  def screen
55
57
  parser.screen
56
58
  end
@@ -5,11 +5,11 @@ require_relative 'csi_code'
5
5
 
6
6
  class TTYString
7
7
  class Code
8
- class SlashA < TTYString::Code
8
+ class SlashA < TTYString::Code # leftovers:allow
9
9
  char "\a"
10
10
  end
11
11
 
12
- class SlashB < TTYString::Code
12
+ class SlashB < TTYString::Code # leftovers:allow
13
13
  char "\b"
14
14
 
15
15
  def self.match?(scanner)
@@ -26,7 +26,7 @@ class TTYString
26
26
  end
27
27
  end
28
28
 
29
- class SlashN < TTYString::Code
29
+ class SlashN < TTYString::Code # leftovers:allow
30
30
  char "\n"
31
31
 
32
32
  def action
@@ -36,7 +36,7 @@ class TTYString
36
36
  end
37
37
  end
38
38
 
39
- class SlashR < TTYString::Code
39
+ class SlashR < TTYString::Code # leftovers:allow
40
40
  char "\r"
41
41
 
42
42
  def action
@@ -44,7 +44,7 @@ class TTYString
44
44
  end
45
45
  end
46
46
 
47
- class SlashT < TTYString::Code
47
+ class SlashT < TTYString::Code # leftovers:allow
48
48
  char "\t"
49
49
 
50
50
  def action
@@ -17,18 +17,21 @@ class TTYString
17
17
  end
18
18
 
19
19
  def args(parser)
20
- parser.matched.slice(2..-2).split(';')
21
- .map { |n| n.empty? ? default_arg : n.to_i }
20
+ a = parser.matched.slice(2..-2).split(';')
21
+ a = a.slice(0, max_args) unless max_args == -1
22
+ a.map! { |n| n.empty? ? default_arg : n.to_i }
23
+ a
22
24
  end
23
25
 
24
26
  def re
25
27
  @re ||= /\e\[#{args_re}#{char}/
26
28
  end
27
29
 
28
- def args_re
30
+ def args_re # rubocop:disable Metrics/MethodLength
29
31
  case max_args
32
+ when 0 then nil
30
33
  when 1 then /#{arg_re}?/
31
- when nil then /(#{arg_re}?(;#{arg_re})*)?/
34
+ when -1 then /(#{arg_re}?(;#{arg_re})*)?/
32
35
  else /(#{arg_re}?(;#{arg_re}){0,#{max_args - 1}})?/
33
36
  end
34
37
  end
@@ -40,7 +43,7 @@ class TTYString
40
43
  def max_args
41
44
  @max_args ||= begin
42
45
  params = instance_method(:action).parameters
43
- return if params.assoc(:rest)
46
+ return -1 if params.assoc(:rest)
44
47
 
45
48
  params.length
46
49
  end
@@ -4,52 +4,52 @@ require_relative 'csi_code'
4
4
 
5
5
  class TTYString
6
6
  class CSICode
7
- class A < TTYString::CSICode
7
+ class A < TTYString::CSICode # leftovers:allow
8
8
  def action(rows = 1)
9
9
  cursor.up(rows)
10
10
  end
11
11
  end
12
12
 
13
- class B < TTYString::CSICode
13
+ class B < TTYString::CSICode # leftovers:allow
14
14
  def action(rows = 1)
15
15
  cursor.down(rows)
16
16
  end
17
17
  end
18
18
 
19
- class C < TTYString::CSICode
19
+ class C < TTYString::CSICode # leftovers:allow
20
20
  def action(cols = 1)
21
21
  cursor.right(cols)
22
22
  end
23
23
  end
24
24
 
25
- class D < TTYString::CSICode
25
+ class D < TTYString::CSICode # leftovers:allow
26
26
  def action(cols = 1)
27
27
  cursor.left(cols)
28
28
  end
29
29
  end
30
30
 
31
- class E < TTYString::CSICode
31
+ class E < TTYString::CSICode # leftovers:allow
32
32
  def action(rows = 1)
33
33
  cursor.down(rows)
34
34
  cursor.col = 0
35
35
  end
36
36
  end
37
37
 
38
- class F < TTYString::CSICode
38
+ class F < TTYString::CSICode # leftovers:allow
39
39
  def action(rows = 1)
40
40
  cursor.up(rows)
41
41
  cursor.col = 0
42
42
  end
43
43
  end
44
44
 
45
- class G < TTYString::CSICode
45
+ class G < TTYString::CSICode # leftovers:allow
46
46
  def action(col = 1)
47
47
  # cursor is zero indexed, arg is 1 indexed
48
48
  cursor.col = col.to_i - 1
49
49
  end
50
50
  end
51
51
 
52
- class H < TTYString::CSICode
52
+ class H < TTYString::CSICode # leftovers:allow
53
53
  def action(row = 1, col = 1)
54
54
  # cursor is zero indexed, arg is 1 indexed
55
55
  cursor.row = row.to_i - 1
@@ -57,14 +57,18 @@ class TTYString
57
57
  end
58
58
  end
59
59
 
60
- class LowF < TTYString::CSICode::H
60
+ class LowH < TTYString::CSICode # leftovers:allow
61
+ char(/\?2004h/)
62
+ end
63
+
64
+ class LowF < TTYString::CSICode::H # leftovers:allow
61
65
  char 'f'
62
66
  end
63
67
 
64
- class J < TTYString::CSICode
68
+ class J < TTYString::CSICode # leftovers:allow
65
69
  default_arg 0
66
70
 
67
- def self.args_re
71
+ def self.arg_re
68
72
  /[0-3]?/
69
73
  end
70
74
 
@@ -79,7 +83,7 @@ class TTYString
79
83
  end
80
84
  end
81
85
 
82
- class K < TTYString::CSICode
86
+ class K < TTYString::CSICode # leftovers:allow
83
87
  default_arg 0
84
88
 
85
89
  def self.arg_re
@@ -97,12 +101,16 @@ class TTYString
97
101
  end
98
102
  end
99
103
 
100
- class LowM < TTYString::CSICode
104
+ class LowL < TTYString::CSICode # leftovers:allow
105
+ char(/\?2004l/)
106
+ end
107
+
108
+ class LowM < TTYString::CSICode # leftovers:allow
101
109
  char 'm'
102
110
 
103
111
  def self.arg_re
104
112
  # 0-255
105
- /(\d|\d\d|1\d\d|2[0-4]\d|25[0-5])?/
113
+ /(?:\d|\d\d|1\d\d|2[0-4]\d|25[0-5])?/
106
114
  end
107
115
 
108
116
  def self.render(renderer)
@@ -112,16 +120,20 @@ class TTYString
112
120
  def action(*args); end
113
121
  end
114
122
 
115
- class S < TTYString::CSICode
123
+ class S < TTYString::CSICode # leftovers:allow
116
124
  def action(rows = 1)
117
125
  rows.times { screen.scroll_up }
118
126
  end
119
127
  end
120
128
 
121
- class T < TTYString::CSICode
129
+ class T < TTYString::CSICode # leftovers:allow
122
130
  def action(rows = 1)
123
131
  rows.times { screen.scroll_down }
124
132
  end
125
133
  end
134
+
135
+ class Tilde < TTYString::CSICode # leftovers:allow
136
+ char(/(?:200|201)~/)
137
+ end
126
138
  end
127
139
  end
@@ -39,6 +39,5 @@ class TTYString
39
39
  def to_ary
40
40
  [row, col]
41
41
  end
42
- alias to_a to_ary
43
42
  end
44
43
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TTYString
4
- VERSION = '0.2.0'
4
+ VERSION = '1.1.1'
5
5
  end
data/tty_string.gemspec CHANGED
@@ -14,6 +14,12 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = 'https://github.com/robotdana/tty_string'
15
15
  spec.license = 'MIT'
16
16
 
17
+ if spec.respond_to?(:metadata)
18
+ spec.metadata['homepage_uri'] = spec.homepage
19
+ spec.metadata['source_code_uri'] = spec.homepage
20
+ spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/main/CHANGELOG.md"
21
+ end
22
+
17
23
  spec.files = Dir.glob('{lib}/**/*') + %w{
18
24
  CHANGELOG.md
19
25
  Gemfile
@@ -25,11 +31,15 @@ Gem::Specification.new do |spec|
25
31
  spec.require_paths = ['lib']
26
32
 
27
33
  spec.add_development_dependency 'bundler', '~> 2.0'
34
+ spec.add_development_dependency 'fast_ignore', '>= 0.15.1'
35
+ spec.add_development_dependency 'leftovers', '>= 0.2.0'
28
36
  spec.add_development_dependency 'pry', '~> 0.12'
29
- spec.add_development_dependency 'rake', '~> 10.0'
37
+ spec.add_development_dependency 'rake', '>= 12.3.3'
30
38
  spec.add_development_dependency 'rspec', '~> 3.0'
31
- spec.add_development_dependency 'rubocop', '~> 0.74'
32
- spec.add_development_dependency 'rubocop-performance', '~> 1.4'
33
- spec.add_development_dependency 'rubocop-rspec', '~> 1.35'
39
+ spec.add_development_dependency 'rubocop', '~> 0.93.1'
40
+ spec.add_development_dependency 'rubocop-performance', '~> 1.8.1'
41
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.44.1'
34
42
  spec.add_development_dependency 'simplecov', '~> 0.18.5'
43
+ spec.add_development_dependency 'simplecov-console'
44
+ spec.add_development_dependency 'spellr', '>= 0.8.1'
35
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tty_string
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dana Sherson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-08 00:00:00.000000000 Z
11
+ date: 2021-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fast_ignore
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.15.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.15.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: leftovers
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.2.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.2.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: pry
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -42,16 +70,16 @@ dependencies:
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - "~>"
73
+ - - ">="
46
74
  - !ruby/object:Gem::Version
47
- version: '10.0'
75
+ version: 12.3.3
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - "~>"
80
+ - - ">="
53
81
  - !ruby/object:Gem::Version
54
- version: '10.0'
82
+ version: 12.3.3
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rspec
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -72,42 +100,42 @@ dependencies:
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '0.74'
103
+ version: 0.93.1
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '0.74'
110
+ version: 0.93.1
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rubocop-performance
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '1.4'
117
+ version: 1.8.1
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '1.4'
124
+ version: 1.8.1
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: rubocop-rspec
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '1.35'
131
+ version: 1.44.1
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '1.35'
138
+ version: 1.44.1
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: simplecov
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +150,34 @@ dependencies:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
152
  version: 0.18.5
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov-console
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: spellr
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: 0.8.1
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: 0.8.1
125
181
  description:
126
182
  email:
127
183
  - robot@dana.sh
@@ -146,7 +202,10 @@ files:
146
202
  homepage: https://github.com/robotdana/tty_string
147
203
  licenses:
148
204
  - MIT
149
- metadata: {}
205
+ metadata:
206
+ homepage_uri: https://github.com/robotdana/tty_string
207
+ source_code_uri: https://github.com/robotdana/tty_string
208
+ changelog_uri: https://github.com/robotdana/tty_string/blob/main/CHANGELOG.md
150
209
  post_install_message:
151
210
  rdoc_options: []
152
211
  require_paths:
@@ -162,7 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
221
  - !ruby/object:Gem::Version
163
222
  version: '0'
164
223
  requirements: []
165
- rubygems_version: 3.1.2
224
+ rubygems_version: 3.0.3
166
225
  signing_key:
167
226
  specification_version: 4
168
227
  summary: Render a string using ANSI TTY codes