tty 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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.