tty 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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +9 -9
  3. data/CHANGELOG.md +27 -10
  4. data/CODE_OF_CONDUCT.md +49 -0
  5. data/Gemfile +2 -2
  6. data/README.md +40 -182
  7. data/appveyor.yml +23 -0
  8. data/lib/tty.rb +2 -65
  9. data/lib/tty/plugins.rb +46 -19
  10. data/lib/tty/plugins/plugin.rb +4 -9
  11. data/lib/tty/version.rb +1 -1
  12. data/spec/fixtures/foo-0.0.1.gemspec +17 -0
  13. data/spec/spec_helper.rb +12 -0
  14. data/spec/tty/plugins/find_spec.rb +11 -19
  15. data/spec/tty/plugins/load_spec.rb +6 -10
  16. data/spec/tty/plugins/plugin/load_spec.rb +15 -5
  17. data/spec/tty/plugins/plugin/new_spec.rb +3 -6
  18. data/spec/tty/tty_spec.rb +1 -7
  19. data/tty.gemspec +11 -9
  20. metadata +89 -94
  21. data/lib/tty/logger.rb +0 -85
  22. data/lib/tty/support/coercion.rb +0 -30
  23. data/lib/tty/support/delegatable.rb +0 -44
  24. data/lib/tty/support/unicode.rb +0 -35
  25. data/lib/tty/system.rb +0 -14
  26. data/lib/tty/system/editor.rb +0 -114
  27. data/lib/tty/terminal.rb +0 -21
  28. data/lib/tty/terminal/home.rb +0 -42
  29. data/lib/tty/vector.rb +0 -116
  30. data/spec/tty/logger/log_spec.rb +0 -23
  31. data/spec/tty/logger/new_spec.rb +0 -36
  32. data/spec/tty/logger/valid_level_spec.rb +0 -33
  33. data/spec/tty/support/coercion_spec.rb +0 -41
  34. data/spec/tty/support/delegatable_spec.rb +0 -28
  35. data/spec/tty/support/fixtures/classes.rb +0 -19
  36. data/spec/tty/system/editor/available_spec.rb +0 -40
  37. data/spec/tty/system/editor/build_spec.rb +0 -32
  38. data/spec/tty/system/editor/command_spec.rb +0 -17
  39. data/spec/tty/system/editor/executables_spec.rb +0 -13
  40. data/spec/tty/system/editor/invoke_spec.rb +0 -34
  41. data/spec/tty/system/editor/open_spec.rb +0 -29
  42. data/spec/tty/terminal/home_spec.rb +0 -27
  43. data/spec/tty/vector/new_spec.rb +0 -48
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e76e7f5fabce92373a5d30470030bb32c3e385a2
4
- data.tar.gz: e22d3ee873af12433ad048780519cdc7a25eccd6
3
+ metadata.gz: 07e4420225b26d591c5808c75a22345b74829df6
4
+ data.tar.gz: a409678307999ca35df8470451c18ee823de4899
5
5
  SHA512:
6
- metadata.gz: 92d6818d1d61b3e1dc4c66b6e62f39e85e43c2c295a312487ac77b468723ede92a917a5fb421bb67975b04d2e416dbf19f913668854da736add9ad966796014f
7
- data.tar.gz: cfed541bea516a36e8568b9bce380dd3667bc107ea56f37553f9cd0bad27094a4569f3a358b4b34242919b224e63c92c3bf7d09a8326d9f893cf9fead22fa0f4
6
+ metadata.gz: b2d142aa5bac867c62e8f3c21173a7855b3d4a18cc0c356d8939944871f87de6fa4fa0aa32770eaa20f0044ca380ee1a5f2097afd4479c80b61e153e32d37d37
7
+ data.tar.gz: 059ea6e8da18de39646be9da9cc3cc115b0fc89a2354bf3251e3ce6846a55beb7010863a82f92372a954af9d6a34a7c7bd2ba4c242f91a95956391e8461003a8
@@ -5,20 +5,20 @@ cache: bundler
5
5
  bundler_args: --without yard guard benchmarks
6
6
  script: "bundle exec rake ci"
7
7
  rvm:
8
- - 1.9
9
- - 2.0
10
- - 2.1
11
- - 2.2
12
- - 2.3.0
8
+ - 2.0.0
9
+ - 2.1.10
10
+ - 2.2.6
11
+ - 2.3.3
12
+ - 2.4.0
13
13
  - ruby-head
14
- - rbx-2
15
- - jruby-19mode
14
+ - jruby-9000
15
+ - jruby-head
16
+ - rbx-3
16
17
  matrix:
17
- include:
18
- - rvm: jruby-head
19
18
  allow_failures:
20
19
  - rvm: ruby-head
21
20
  - rvm: jruby-head
21
+ - rvm: rbx-3
22
22
  fast_finish: true
23
23
  branches:
24
24
  only: master
@@ -1,5 +1,20 @@
1
1
  # Change log
2
2
 
3
+ ## [v0.6.0] - 2017-01-28
4
+
5
+ ### Added
6
+ * Add tty-editor dependency
7
+ * Add tty-file dependency
8
+
9
+ ### Changed
10
+ * Change to use plugin system to load all tty dependencies
11
+ * Remove coercion, delegatable & unicode support
12
+ * Remove error types from TTY module namespace
13
+ * Remove System::Editor
14
+ * Remove Vector
15
+ * Remove Logger
16
+ * Remove Terminal & Terminal:Home
17
+
3
18
  ## [v0.5.0] - 2016-05-30
4
19
 
5
20
  ### Added
@@ -88,13 +103,15 @@
88
103
  * Improve method documentation across library
89
104
  * Semantic changes across library to improve code readability
90
105
 
91
- [v0.4.0]: https://github.com/peter-murach/tty/compare/v0.3.2...v0.4.0
92
- [v0.3.2]: https://github.com/peter-murach/tty/compare/v0.3.1...v0.3.2
93
- [v0.3.1]: https://github.com/peter-murach/tty/compare/v0.3.0...v0.3.1
94
- [v0.3.0]: https://github.com/peter-murach/tty/compare/v0.2.1...v0.3.0
95
- [v0.2.1]: https://github.com/peter-murach/tty/compare/v0.2.0...v0.2.1
96
- [v0.2.0]: https://github.com/peter-murach/tty/compare/v0.1.3...v0.2.0
97
- [v0.1.3]: https://github.com/peter-murach/tty/compare/v0.1.2...v0.1.3
98
- [v0.1.2]: https://github.com/peter-murach/tty/compare/v0.1.1...v0.1.2
99
- [v0.1.1]: https://github.com/peter-murach/tty/compare/v0.1.0...v0.1.1
100
- [v0.1.0]: https://github.com/peter-murach/tty/compare/v0.0.9...v0.1.0
106
+ [v0.6.0]: https://github.com/piotrmurach/tty/compare/v0.5.0...v0.6.0
107
+ [v0.5.0]: https://github.com/piotrmurach/tty/compare/v0.4.0...v0.5.0
108
+ [v0.4.0]: https://github.com/piotrmurach/tty/compare/v0.3.2...v0.4.0
109
+ [v0.3.2]: https://github.com/piotrmurach/tty/compare/v0.3.1...v0.3.2
110
+ [v0.3.1]: https://github.com/piotrmurach/tty/compare/v0.3.0...v0.3.1
111
+ [v0.3.0]: https://github.com/piotrmurach/tty/compare/v0.2.1...v0.3.0
112
+ [v0.2.1]: https://github.com/piotrmurach/tty/compare/v0.2.0...v0.2.1
113
+ [v0.2.0]: https://github.com/piotrmurach/tty/compare/v0.1.3...v0.2.0
114
+ [v0.1.3]: https://github.com/piotrmurach/tty/compare/v0.1.2...v0.1.3
115
+ [v0.1.2]: https://github.com/piotrmurach/tty/compare/v0.1.1...v0.1.2
116
+ [v0.1.1]: https://github.com/piotrmurach/tty/compare/v0.1.0...v0.1.1
117
+ [v0.1.0]: https://github.com/piotrmurach/tty/compare/v0.0.9...v0.1.0
@@ -0,0 +1,49 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, and in the interest of
4
+ fostering an open and welcoming community, we pledge to respect all people who
5
+ contribute through reporting issues, posting feature requests, updating
6
+ documentation, submitting pull requests or patches, and other activities.
7
+
8
+ We are committed to making participation in this project a harassment-free
9
+ experience for everyone, regardless of level of experience, gender, gender
10
+ identity and expression, sexual orientation, disability, personal appearance,
11
+ body size, race, ethnicity, age, religion, or nationality.
12
+
13
+ Examples of unacceptable behavior by participants include:
14
+
15
+ * The use of sexualized language or imagery
16
+ * Personal attacks
17
+ * Trolling or insulting/derogatory comments
18
+ * Public or private harassment
19
+ * Publishing other's private information, such as physical or electronic
20
+ addresses, without explicit permission
21
+ * Other unethical or unprofessional conduct
22
+
23
+ Project maintainers have the right and responsibility to remove, edit, or
24
+ reject comments, commits, code, wiki edits, issues, and other contributions
25
+ that are not aligned to this Code of Conduct, or to ban temporarily or
26
+ permanently any contributor for other behaviors that they deem inappropriate,
27
+ threatening, offensive, or harmful.
28
+
29
+ By adopting this Code of Conduct, project maintainers commit themselves to
30
+ fairly and consistently applying these principles to every aspect of managing
31
+ this project. Project maintainers who do not follow or enforce the Code of
32
+ Conduct may be permanently removed from the project team.
33
+
34
+ This code of conduct applies both within project spaces and in public spaces
35
+ when an individual is representing the project or its community.
36
+
37
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
38
+ reported by contacting a project maintainer at [email]. All
39
+ complaints will be reviewed and investigated and will result in a response that
40
+ is deemed necessary and appropriate to the circumstances. Maintainers are
41
+ obligated to maintain confidentiality with regard to the reporter of an
42
+ incident.
43
+
44
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
45
+ version 1.3.0, available at
46
+ [http://contributor-covenant.org/version/1/3/0/][version]
47
+
48
+ [homepage]: http://contributor-covenant.org
49
+ [version]: http://contributor-covenant.org/version/1/3/0/
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  group :development do
6
- gem 'rspec', '~> 3.4.0'
6
+ gem 'rspec', '~> 3.5.0'
7
7
  gem 'yard', '~> 0.8.7'
8
8
  gem 'timecop', '~> 0.7.1'
9
9
  end
@@ -12,7 +12,7 @@ group :metrics do
12
12
  gem 'coveralls', '~> 0.8.1'
13
13
  gem 'simplecov', '~> 0.10.0'
14
14
  gem 'yardstick', '~> 0.9.9'
15
- gem 'reek', '~> 1.3.7'
15
+ gem 'term-ansicolor', '=1.3.2'
16
16
  end
17
17
 
18
18
  group :benchmarks do
data/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
  <br/>
5
5
  [![Gem Version](https://badge.fury.io/rb/tty.svg)][gem]
6
6
  [![Build Status](https://secure.travis-ci.org/piotrmurach/tty.svg?branch=master)][travis]
7
+ [![Build status](https://ci.appveyor.com/api/projects/status/0a85w6yr40lmuo3o?svg=true)][appveyor]
7
8
  [![Code Climate](https://codeclimate.com/github/piotrmurach/tty/badges/gpa.svg)][codeclimate]
8
9
  [![Coverage Status](https://coveralls.io/repos/piotrmurach/tty/badge.svg?branch=master)][coveralls]
9
10
  [![Inline docs](http://inch-ci.org/github/piotrmurach/tty.svg?branch=master)][inchpages]
@@ -11,6 +12,7 @@
11
12
 
12
13
  [gem]: http://badge.fury.io/rb/tty
13
14
  [travis]: http://travis-ci.org/piotrmurach/tty
15
+ [appveyor]: https://ci.appveyor.com/project/piotrmurach/tty
14
16
  [codeclimate]: https://codeclimate.com/github/piotrmurach/tty
15
17
  [coveralls]: https://coveralls.io/r/piotrmurach/tty
16
18
  [inchpages]: http://inch-ci.org/github/piotrmurach/tty
@@ -26,29 +28,21 @@ Even more so, any command line application needs a clear way of communicating it
26
28
 
27
29
  ## Features
28
30
 
29
- Fully modular, choose out of many components to suite your needs and jump-start development of your command line app:
30
-
31
- * Terminal ASCII and Unicode tables. [status: ]
32
- * Terminal output colorization. [status: ✔ ]
33
- * Terminal output paging. [status: ✔ ]
34
- * System detection utilities. [status: ✔ ]
35
- * Command detection utilities. [status: ✔ ]
36
- * Text manipulation(wrapping/truncation) [status: ✔ ]
37
- * Terminal progress bars drawing. [status: ✔ ]
38
- * Terminal spinners. [status: ✔ ]
39
- * Interactive prompt for user input. [status: ✔ ]
40
- * File diffs. [status: TODO]
41
- * Configuration file management. [status: TODO]
42
- * Logging [status: In Progress]
43
- * Plugin ecosystem [status: TODO]
31
+ * Jump-start development of your command line app the Unix way.
32
+ * Fully modular, choose out of many [components](#2-components) to suite your needs.
33
+ * All tty components are small packages that do one thing well.
44
34
  * Fully tested with major ruby interpreters.
45
35
 
46
36
  ## Installation
47
37
 
48
- Add this line to your application's Gemfile:
38
+ Add this line to your application's Gemfile to install all components:
49
39
 
50
40
  gem 'tty'
51
41
 
42
+ or install a particular component:
43
+
44
+ gem 'tty-*'
45
+
52
46
  And then execute:
53
47
 
54
48
  $ bundle
@@ -60,18 +54,7 @@ Or install it yourself as:
60
54
  ## Contents
61
55
 
62
56
  * [1. Overview](#1-overview)
63
- * [2. Prompting for input](#2-prompting-for-input)
64
- * [3. Drawing tables](#3-drawing-tables)
65
- * [4. Drawing progress bars](#4-drawing-progress-bars)
66
- * [5. Drawing spinners](#5-drawing-spinners)
67
- * [6. Output coloring](#6-output-coloring)
68
- * [7. Output paging](#7-output-paging)
69
- * [8. Detecting screen properties](#8-detecting-screen-properties)
70
- * [9. Detecting platform](#9-detecting-platform)
71
- * [10. Detecting color capabilities](#10-detecting-color-capabilities)
72
- * [11. Searching executables](#11-searching-executables)
73
- * [12. Moving cursor](#12-moving-cursor)
74
- * [13. Setting editor](#13-setting-editor)
57
+ * [2. Components](#2-components)
75
58
 
76
59
  ## 1. Overview
77
60
 
@@ -131,112 +114,14 @@ pager = TTY::Pager.new
131
114
  pager.page('Very long text...')
132
115
  ```
133
116
 
134
- To measure screen size use `TTY::Screen`:
135
-
136
- ```ruby
137
- screen = TTY::Screen.new
138
- screen.size # => [51, 280]
139
- screen.width # => 280
140
- screen.height # => 51
141
- ```
142
-
143
- `TTY::Color` allows you to check if terminal supports color:
144
-
145
- ```ruby
146
- TTY::Color.supports? # => true
147
- TTY::Color.mode # => 64
148
- ```
149
-
150
- To move cursor around the terminal use `TTY::Cursor`:
151
-
152
- ```ruby
153
- cursor = TTY::Cursor
154
- print cursor.up(5) + cursor.forward(2)
155
- ```
156
-
157
- ## 2. Prompting for input
158
-
159
- **TTY** relies on [tty-prompt](https://github.com/piotrmurach/tty-prompt#ttyprompt) component for processing user input.
117
+ To run external commands with output logging, capturing stdout and stderr use `TTY::Command`:
160
118
 
161
119
  ```ruby
162
- prompt.ask('What is your name?', default: ENV['USER'])
163
- # => What is your name? (piotr)
120
+ cmd = TTY::Command.new
121
+ out, err = cmd.run('cat ~/.bashrc | grep alias')
164
122
  ```
165
123
 
166
- Please refer to [documentation](https://github.com/piotrmurach/tty-prompt#contents) for complete API.
167
-
168
- ## 3. Drawing tables
169
-
170
- **TTY** uses the [tty-table](https://github.com/piotrmurach/tty-table) component in order to convert data into table and render as string output in tabular form. For example, to render data with ASCII border:
171
-
172
- ```ruby
173
- table = TTY::Table.new ['header1','header2'], [['a1','a2'], ['b1','b2']]
174
- table.render(:ascii)
175
- # =>
176
- +-------+-------+
177
- |header1|header2|
178
- +-------+-------+
179
- |a1 |a2 |
180
- |b1 |b2 |
181
- +-------+-------+
182
- ```
183
-
184
- Please refer to [documentation](https://github.com/piotrmurach/tty-table) for complete API.
185
-
186
- ## 4. Drawing progress bars
187
-
188
- In order to draw progress bars in terminal, **TTY** uses the [tty-progressbar](https://github.com/piotrmurach/tty-progressbar) component.
189
-
190
- For example, to render basic download bar do:
191
-
192
- ```ruby
193
- bar = TTY::ProgressBar.new("downloading [:bar]", total: 30)
194
- 30.times { bar.advance }
195
- ```
196
-
197
- Please refer to [documentation](https://github.com/piotrmurach/tty-progressbar) for complete API.
198
-
199
- ## 5. Drawing spinners
200
-
201
- **TTY** uses the [tty-spinner](https://github.com/piotrmurach/tty-spinner) component to handle terminal spinning animation. For instance, to create a simple spinner do:
202
-
203
- ```ruby
204
- spinner = TTY::Spinner.new("[:spinner] Loading ...", format: :pulse_2)
205
- 30.times { spinner.spin }
206
- spinner.stop('Done!')
207
- ```
208
-
209
- Please refer to [documentation](https://github.com/piotrmurach/tty-spinner) for complete API.
210
-
211
- ## 6. Output coloring
212
-
213
- In order to colorize strings, **TTY** uses the [pastel](https://github.com/piotrmurach/pastel) component:
214
-
215
- ```ruby
216
- pastel = Pastel.new
217
- pastel.red.on_green.bold 'text...' # => red bold text on green background
218
- ```
219
-
220
- Please refer to [documentation](https://github.com/piotrmurach/pastel#contents) for complete API.
221
-
222
- ## 7. Output paging
223
-
224
- To page terminal output **TTY** relies on [tty-pager](https://github.com/piotrmurach/tty-pager) component.
225
-
226
- For example to page terminal output do (on non unix systems falls back to ruby implementation):
227
-
228
- ```ruby
229
- pager = TTY::Pager.new
230
- pager.page('Very long text...')
231
- ```
232
-
233
- Please refer to [documentation](https://github.com/piotrmurach/tty-pager) for complete API.
234
-
235
- ## 8. Detecting screen properties
236
-
237
- **TTY** uses the [tty-screen](https://github.com/piotrmurach/tty-screen) component to measure the screen properties.
238
-
239
- For example to get screen size do:
124
+ To measure screen size use `TTY::Screen`:
240
125
 
241
126
  ```ruby
242
127
  screen = TTY::Screen.new
@@ -245,84 +130,57 @@ screen.width # => 280
245
130
  screen.height # => 51
246
131
  ```
247
132
 
248
- Please refer to [documentation](https://github.com/piotrmurach/tty-screen) for complete API.
249
-
250
- ## 9. Detecting platform
251
-
252
- To check for platform properties **TTY** uses [tty-platform](https://github.com/piotrmurach/tty-platform) component.
253
-
254
- ```ruby
255
- platform = TTY::Platform.new
256
- platform.cpu # => 'x86_64'
257
- platform.os # => 'darwin'
258
- platform.version # => '10.6.1'
259
- ```
260
-
261
- In addition, there are more generic utilities to check for type of operating system:
262
-
263
- ```
264
- TTY::Platform.unix? # => true
265
- TTY::Platform.windows? # => false
266
- ```
267
-
268
- Please refer to [documentation](https://github.com/piotrmurach/tty-platform) for complete API.
269
-
270
- ## 10. Detecting color capabilities
271
-
272
- [tty-color](https://github.com/piotrmurach/tty-color) component allows **TTY** detect color support and mode in terminal emulator:
133
+ `TTY::Color` allows you to check if terminal supports color and the color mode:
273
134
 
274
135
  ```ruby
275
136
  TTY::Color.supports? # => true
276
137
  TTY::Color.mode # => 64
277
138
  ```
278
139
 
279
- Please refer to [documentation](https://github.com/piotrmurach/tty-color) for complete API.
280
-
281
- ## 11. Searching executables
282
-
283
- To find executable path **TTY** uses [tty-which](https://github.com/piotrmurach/tty-which#ttywhich) component.
284
-
285
140
  For instance, to find out if `less` utility is actually supported by the system do:
286
141
 
287
142
  ```ruby
288
143
  TTY::Which.which('less') # => '/usr/bin/less'
289
144
  ```
290
145
 
291
- Please refer to [documentation](https://github.com/piotrmurach/tty-which#ttywhich) for complete API.
292
-
293
- ## 12. Moving cursor
294
-
295
- To perform terminal cursor movements use [tty-cursor](https://github.com/piotrmurach/tty-cursor#ttycursor) component.
296
-
297
- For example, to move cursor up by 5 rows and forward by 2 columns:
146
+ To move cursor around the terminal use `TTY::Cursor`:
298
147
 
299
148
  ```ruby
300
149
  cursor = TTY::Cursor
301
150
  print cursor.up(5) + cursor.forward(2)
302
151
  ```
303
152
 
304
- Please refer to [documentation](https://github.com/piotrmurach/tty-cursor#contents) for complete API.
305
-
306
- ## 13. Setting editor
307
-
308
- ```ruby
309
- TTY::System.editor.command('vim')
310
- ```
311
-
312
- To open a file in your editor of choice do
313
-
314
- ```ruby
315
- TTY::System.editor.open('file path...')
316
- ```
153
+ ## 2. Components
154
+
155
+ | Component | Description | API docs |
156
+ | ------------ | ----------- | -------- |
157
+ | [pastel](https://github.com/piotrmurach/pastel) | Terminal strings styling with intuitive and clean API. | [docs](http://www.rubydoc.info/gems/pastel) |
158
+ | [tty-color](https://github.com/piotrmurach/tty-color) | Terminal color capabilities detection. | [docs](http://www.rubydoc.info/gems/tty-color) |
159
+ | [tty-command](https://github.com/piotrmurach/tty-command) | Execute shell commands with pretty logging and capture stdout, stderr and exit status. | [docs](http://www.rubydoc.info/gems/tty-command) |
160
+ | [tty-cursor](https://github.com/piotrmurach/tty-cursor) | Move terminal cursor around. | [docs](http://www.rubydoc.info/gems/tty-cursor) |
161
+ | [tty-editor](https://github.com/piotrmurach/tty-editor) | Open a file or text in the user preferred editor. | [docs](http://www.rubydoc.info/gems/tty-editor) |
162
+ | [tty-file](https://github.com/piotrmurach/tty-file) | File manipulation utility methods. | [docs](http://www.rubydoc.info/gems/tty-file) |
163
+ | [tty-pager](https://github.com/piotrmurach/tty-pager) | Terminal output paging in a cross-platform way. | [docs](http://www.rubydoc.info/gems/tty-pager) |
164
+ | [tty-platform](https://github.com/piotrmurach/tty-platform) | Detecting different operating systems. | [docs](http://www.rubydoc.info/gems/tty-platform) |
165
+ | [tty-progressbar](https://github.com/piotrmurach/tty-progressbar) | A flexible progress bars drawing in terminal emulators. | [docs](http://www.rubydoc.info/gems/tty-progressbar) |
166
+ | [tty-prompt](https://github.com/piotrmurach/tty-prompt) | A beautiful and powerful interactive command line prompt. | [docs](http://www.rubydoc.info/gems/tty-prompt) |
167
+ | [tty-screen](https://github.com/piotrmurach/tty-screen) | Terminal screen properties detection. | [docs](http://www.rubydoc.info/gems/tty-screen)
168
+ | [tty-spinner](https://github.com/piotrmurach/tty-spinner) | A terminal spinner for tasks with non-deterministic time.| [docs](http://www.rubydoc.info/gems/tty-spinner) |
169
+ | [tty-table](https://github.com/piotrmurach/tty-table) | A flexible and intuitive table output generator. | [docs](http://www.rubydoc.info/gems/tty-table) |
170
+ | [tty-which](https://github.com/piotrmurach/tty-which) | Platform independent implementation of Unix which command. | [docs](http://www.rubydoc.info/gems/tty-which) |
317
171
 
318
172
  ## Contributing
319
173
 
174
+ You can contribute by posting `feature requests`, evaluating the APIs or simply by hacking on TTY components:
175
+
320
176
  1. Fork it
321
177
  2. Create your feature branch (`git checkout -b my-new-feature`)
322
178
  3. Commit your changes (`git commit -am 'Add some feature'`)
323
179
  4. Push to the branch (`git push origin my-new-feature`)
324
180
  5. Create new Pull Request
325
181
 
182
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
183
+
326
184
  ## Copyright
327
185
 
328
- Copyright (c) 2012-2016 Piotr Murach. See LICENSE for further details.
186
+ Copyright (c) 2012-2017 Piotr Murach. See LICENSE for further details.