buildkite-builder 1.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/CHANGELOG.md +0 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +13 -0
  7. data/Gemfile.lock +56 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +6 -0
  11. data/bin/buildkite-builder +6 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/buildkite-builder.gemspec +28 -0
  15. data/lib/buildkite-builder.rb +14 -0
  16. data/lib/buildkite/builder.rb +54 -0
  17. data/lib/buildkite/builder/commands.rb +49 -0
  18. data/lib/buildkite/builder/commands/abstract.rb +64 -0
  19. data/lib/buildkite/builder/commands/files.rb +25 -0
  20. data/lib/buildkite/builder/commands/preview.rb +29 -0
  21. data/lib/buildkite/builder/definition.rb +24 -0
  22. data/lib/buildkite/builder/file_resolver.rb +59 -0
  23. data/lib/buildkite/builder/github.rb +71 -0
  24. data/lib/buildkite/builder/loaders.rb +12 -0
  25. data/lib/buildkite/builder/loaders/abstract.rb +40 -0
  26. data/lib/buildkite/builder/loaders/manifests.rb +23 -0
  27. data/lib/buildkite/builder/loaders/processors.rb +37 -0
  28. data/lib/buildkite/builder/loaders/templates.rb +25 -0
  29. data/lib/buildkite/builder/logging_utils.rb +24 -0
  30. data/lib/buildkite/builder/manifest.rb +89 -0
  31. data/lib/buildkite/builder/manifest/rule.rb +51 -0
  32. data/lib/buildkite/builder/processors.rb +9 -0
  33. data/lib/buildkite/builder/processors/abstract.rb +76 -0
  34. data/lib/buildkite/builder/rainbow.rb +9 -0
  35. data/lib/buildkite/builder/runner.rb +114 -0
  36. data/lib/buildkite/env.rb +52 -0
  37. data/lib/buildkite/pipelines.rb +13 -0
  38. data/lib/buildkite/pipelines/api.rb +119 -0
  39. data/lib/buildkite/pipelines/attributes.rb +137 -0
  40. data/lib/buildkite/pipelines/command.rb +59 -0
  41. data/lib/buildkite/pipelines/helpers.rb +43 -0
  42. data/lib/buildkite/pipelines/helpers/block.rb +18 -0
  43. data/lib/buildkite/pipelines/helpers/command.rb +21 -0
  44. data/lib/buildkite/pipelines/helpers/depends_on.rb +13 -0
  45. data/lib/buildkite/pipelines/helpers/key.rb +13 -0
  46. data/lib/buildkite/pipelines/helpers/label.rb +18 -0
  47. data/lib/buildkite/pipelines/helpers/plugins.rb +24 -0
  48. data/lib/buildkite/pipelines/helpers/retry.rb +20 -0
  49. data/lib/buildkite/pipelines/helpers/skip.rb +15 -0
  50. data/lib/buildkite/pipelines/helpers/soft_fail.rb +15 -0
  51. data/lib/buildkite/pipelines/helpers/timeout_in_minutes.rb +17 -0
  52. data/lib/buildkite/pipelines/pipeline.rb +129 -0
  53. data/lib/buildkite/pipelines/plugin.rb +23 -0
  54. data/lib/buildkite/pipelines/steps.rb +15 -0
  55. data/lib/buildkite/pipelines/steps/abstract.rb +26 -0
  56. data/lib/buildkite/pipelines/steps/block.rb +20 -0
  57. data/lib/buildkite/pipelines/steps/command.rb +30 -0
  58. data/lib/buildkite/pipelines/steps/input.rb +20 -0
  59. data/lib/buildkite/pipelines/steps/skip.rb +28 -0
  60. data/lib/buildkite/pipelines/steps/trigger.rb +22 -0
  61. data/lib/buildkite/pipelines/steps/wait.rb +18 -0
  62. data/lib/vendor/rainbow/Changelog.md +101 -0
  63. data/lib/vendor/rainbow/Gemfile +30 -0
  64. data/lib/vendor/rainbow/LICENSE +20 -0
  65. data/lib/vendor/rainbow/README.markdown +225 -0
  66. data/lib/vendor/rainbow/Rakefile +11 -0
  67. data/lib/vendor/rainbow/lib/rainbow.rb +13 -0
  68. data/lib/vendor/rainbow/lib/rainbow/color.rb +150 -0
  69. data/lib/vendor/rainbow/lib/rainbow/ext/string.rb +64 -0
  70. data/lib/vendor/rainbow/lib/rainbow/global.rb +25 -0
  71. data/lib/vendor/rainbow/lib/rainbow/null_presenter.rb +100 -0
  72. data/lib/vendor/rainbow/lib/rainbow/presenter.rb +144 -0
  73. data/lib/vendor/rainbow/lib/rainbow/refinement.rb +14 -0
  74. data/lib/vendor/rainbow/lib/rainbow/string_utils.rb +22 -0
  75. data/lib/vendor/rainbow/lib/rainbow/version.rb +5 -0
  76. data/lib/vendor/rainbow/lib/rainbow/wrapper.rb +22 -0
  77. data/lib/vendor/rainbow/lib/rainbow/x11_color_names.rb +153 -0
  78. data/lib/vendor/rainbow/rainbow.gemspec +23 -0
  79. metadata +126 -0
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ class Plugin
6
+ attr_reader :uri, :version, :options
7
+
8
+ def initialize(uri, version, options = nil)
9
+ @uri = uri
10
+ @version = version
11
+ @options = options
12
+ end
13
+
14
+ def full_uri
15
+ "#{uri}##{version}"
16
+ end
17
+
18
+ def to_h
19
+ Helpers.sanitize(full_uri => options)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ module Steps
6
+ autoload :Abstract, File.expand_path('steps/abstract', __dir__)
7
+ autoload :Block, File.expand_path('steps/block', __dir__)
8
+ autoload :Command, File.expand_path('steps/command', __dir__)
9
+ autoload :Input, File.expand_path('steps/input', __dir__)
10
+ autoload :Skip, File.expand_path('steps/skip', __dir__)
11
+ autoload :Trigger, File.expand_path('steps/trigger', __dir__)
12
+ autoload :Wait, File.expand_path('steps/wait', __dir__)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ module Steps
6
+ class Abstract
7
+ include Attributes
8
+
9
+ attr_reader :pipeline
10
+ attr_reader :template
11
+
12
+ def self.to_sym
13
+ name.split('::').last.downcase.to_sym
14
+ end
15
+
16
+ def initialize(pipeline, template = nil, &block)
17
+ @pipeline = pipeline
18
+ @template = template
19
+
20
+ instance_eval(&template) if template
21
+ instance_eval(&block) if block_given?
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ module Steps
6
+ class Block < Abstract
7
+ # Do NOT sort this list. The order here is carried over to the YAML output.
8
+ # The order specified here was deliberate.
9
+ attribute :block
10
+ attribute :key
11
+ attribute :prompt
12
+ attribute :if, as: :condition
13
+ attribute :depends_on, append: true
14
+ attribute :allow_dependency_failure
15
+ attribute :branches
16
+ attribute :fields
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ module Steps
6
+ class Command < Abstract
7
+ # Do NOT sort this list. The order here is carried over to the YAML output.
8
+ # The order specified here was deliberate.
9
+ attribute :label
10
+ attribute :key
11
+ attribute :command, append: true
12
+ attribute :skip
13
+ attribute :if, as: :condition
14
+ attribute :depends_on, append: true
15
+ attribute :allow_dependency_failure
16
+ attribute :parallelism
17
+ attribute :branches
18
+ attribute :artifact_paths
19
+ attribute :agents
20
+ attribute :concurrency
21
+ attribute :concurrency_group
22
+ attribute :retry
23
+ attribute :env
24
+ attribute :soft_fail, append: true
25
+ attribute :timeout_in_minutes
26
+ attribute :plugins, append: true
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ module Steps
6
+ class Input < Abstract
7
+ # Do NOT sort this list. The order here is carried over to the YAML output.
8
+ # The order specified here was deliberate.
9
+ attribute :input
10
+ attribute :key
11
+ attribute :prompt
12
+ attribute :if, as: :condition
13
+ attribute :depends_on, append: true
14
+ attribute :allow_dependency_failure
15
+ attribute :branches
16
+ attribute :fields
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ module Steps
6
+ class Skip < Abstract
7
+ # This skip step is not an official Buildkite step. A skip step is really
8
+ # just a command step that does nothing and is used to portray a hidden
9
+ # step on the Buildkite web UI.
10
+ #
11
+ # Since it is it's own class, pipeline processors will be able to distinguish
12
+ # between this type of skip and a conditional skip. Conditional skips are
13
+ # full command or trigger steps skipped by the `skip` attribute. They can be
14
+ # unskipped in processors for certain situations. See the `DefaultBranch`
15
+ # processor for example.
16
+
17
+ # Do NOT sort this list. The order here is carried over to the YAML output.
18
+ # The order specified here was deliberate.
19
+ attribute :label
20
+ attribute :skip
21
+ attribute :if, as: :condition
22
+ attribute :depends_on, append: true
23
+ attribute :allow_dependency_failure
24
+ attribute :command
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ module Steps
6
+ class Trigger < Abstract
7
+ # Do NOT sort this list. The order here is carried over to the YAML output.
8
+ # The order specified here was deliberate.
9
+ attribute :label
10
+ attribute :key
11
+ attribute :trigger
12
+ attribute :skip
13
+ attribute :if, as: :condition
14
+ attribute :depends_on, append: true
15
+ attribute :allow_dependency_failure
16
+ attribute :branches
17
+ attribute :async
18
+ attribute :build
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Buildkite
4
+ module Pipelines
5
+ module Steps
6
+ class Wait < Abstract
7
+ # Do NOT sort this list. The order here is carried over to the YAML output.
8
+ # The order specified here was deliberate.
9
+ attribute :wait
10
+ attribute :key
11
+ attribute :if, as: :condition
12
+ attribute :depends_on, append: true
13
+ attribute :allow_dependency_failure
14
+ attribute :continue_on_failure
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,101 @@
1
+ # Rainbow changelog
2
+
3
+ ## 3.1.0 (2020-08-26)
4
+
5
+ - added `cross_out` aka `strike`
6
+ - hexadecimal color names supported better, see #83
7
+ - gemspec: list files using a Ruby expression, avoiding git
8
+
9
+ ## 3.0.0 (2017-11-29)
10
+
11
+ * added String refinement
12
+ * added new `Rainbow.uncolor` method
13
+ * dropped MRI 1.9.3 compatibility
14
+ * dropped MRI 2.0 compatibility
15
+ * removed Rake dependency
16
+
17
+ ## 2.2.2 (2017-04-21)
18
+
19
+ * added explicit rake dependency to fix installation issue
20
+
21
+ ## 2.2.1 (2016-12-28)
22
+
23
+ * fixed gem installation (2.2.0 was a broken release)
24
+
25
+ ## 2.2.0 (2016-12-27)
26
+
27
+ * improved Windows support
28
+ * added Ruby 2.4 support
29
+ * added `bold` alias method for `bright`
30
+
31
+ ## 2.1.0 (2016-01-24)
32
+
33
+ * added X11 color support
34
+ * fixed `require` issue when rainbow is used as a dependency in another gem
35
+ * improved Windows support
36
+
37
+ ## 2.0.0 (2014-01-24)
38
+
39
+ * disable string mixin by default
40
+
41
+ ## 1.99.2 (2014-01-24)
42
+
43
+ * bring back ruby 1.8 support
44
+
45
+ ## 1.99.1 (2013-12-28)
46
+
47
+ * drop support for ruby 1.8
48
+ * `require "rainbow/string"` -> `require "rainbow/ext/string"`
49
+ * custom rainbow wrapper instances (with separate enabled/disabled state)
50
+ * shortcut methods for changing text color (`Rainbow("foo").red`)
51
+
52
+ ## 1.99.0 (2013-12-26)
53
+
54
+ * preparation for dropping String monkey patching
55
+ * `require "rainbow/string"` if you want to use monkey patched String
56
+ * introduction of Rainbow() wrapper
57
+ * support for MRI 1.8.7, 1.9.2, 1.9.3, 2.0 and 2.1, JRuby and Rubinius
58
+ * deprecation of Sickill::Rainbow namespace (use Rainbow.enabled = true instead)
59
+
60
+ ## 1.1.4 (2012-4-28)
61
+
62
+ * option for forcing coloring even when STDOUT is not a TTY (CLICOLOR_FORCE env var)
63
+ * fix for frozen strings
64
+
65
+ ## 1.1.3 (2011-12-6)
66
+
67
+ * improved compatibility with MRI 1.8.7
68
+ * fix for regression with regards to original string mutation
69
+
70
+ ## 1.1.2 (2011-11-13)
71
+
72
+ * improved compatibility with MRI 1.9.3
73
+
74
+ ## 1.1.1 (2011-2-7)
75
+
76
+ * improved Windows support
77
+
78
+ ## 1.1 (2010-6-7)
79
+
80
+ * option for enabling/disabling of escape code wrapping
81
+ * auto-disabling when STDOUT is not a TTY
82
+
83
+ ## 1.0.4 (2009-11-27)
84
+
85
+ * support for 256 colors
86
+
87
+ ## 1.0.3 (2009-7-26)
88
+
89
+ * rainbow methods don't mutate the original string object anymore
90
+
91
+ ## 1.0.2 (2009-5-15)
92
+
93
+ * improved support for ruby 1.8.6 and 1.9.1
94
+
95
+ ## 1.0.1 (2009-3-19)
96
+
97
+ * Windows support
98
+
99
+ ## 1.0.0 (2008-7-21)
100
+
101
+ * initial version
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ gem 'rake'
8
+
9
+ group :test do
10
+ gem 'coveralls', require: false
11
+ gem 'rspec'
12
+ end
13
+
14
+ group :development do
15
+ gem 'mutant-rspec'
16
+ end
17
+
18
+ group :test, :development do
19
+ gem 'rubocop', '0.81.0', require: false # This version supports Ruby 2.3
20
+ end
21
+
22
+ group :guard do
23
+ gem 'guard'
24
+ gem 'guard-rspec'
25
+ end
26
+
27
+ platform :rbx do
28
+ gem 'json'
29
+ gem 'rubysl'
30
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) Marcin Kulik
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,225 @@
1
+ # Rainbow
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/rainbow.svg)](https://rubygems.org/gems/rainbow)
4
+ [![Build Status](https://travis-ci.org/sickill/rainbow.svg?branch=master)](https://travis-ci.org/sickill/rainbow)
5
+ [![Build status](https://ci.appveyor.com/api/projects/status/vq4acb2c38642s5q?svg=true)](https://ci.appveyor.com/project/sickill/rainbow)
6
+ [![Code Climate](https://codeclimate.com/github/sickill/rainbow.svg)](https://codeclimate.com/github/sickill/rainbow)
7
+ [![Coverage Status](https://coveralls.io/repos/sickill/rainbow/badge.svg)](https://coveralls.io/r/sickill/rainbow)
8
+
9
+ Rainbow is a ruby gem for colorizing printed text on ANSI terminals.
10
+
11
+ It provides a string presenter object, which adds several methods to your
12
+ strings for wrapping them in [ANSI escape
13
+ codes](http://en.wikipedia.org/wiki/ANSI_escape_code). These codes when printed
14
+ in a terminal change text attributes like text color, background color,
15
+ intensity etc.
16
+
17
+ ## Usage
18
+
19
+ To make your string colored wrap it with `Rainbow()` presenter and call
20
+ `.color(<color name>)` on it.
21
+
22
+ ### Example
23
+
24
+ ```ruby
25
+ require 'rainbow'
26
+
27
+ puts Rainbow("this is red").red + " and " + Rainbow("this on yellow bg").bg(:yellow) + " and " + Rainbow("even bright underlined!").underline.bright
28
+
29
+ # => "\e[31mthis is red\e[0m and \e[43mthis on yellow bg\e[0m and \e[4m\e[1meven bright underlined!\e[0m"
30
+ ```
31
+
32
+ Or, [watch this video example](https://asciinema.org/a/J928KpHoUQ0sl54ulOSOLE71E?rows=20&speed=2.5)
33
+
34
+ ### Rainbow presenter API
35
+
36
+ Rainbow presenter adds the following methods to presented string:
37
+
38
+ * `color(c)` (with `foreground`, and `fg` aliases)
39
+ * `background(c)` (with `bg` alias)
40
+ * `bright`
41
+ * `underline`
42
+ * `blink`
43
+ * `inverse`
44
+ * `hide`
45
+ * `faint` (not well supported by terminal emulators)
46
+ * `italic` (not well supported by terminal emulators)
47
+ * `cross_out`, `strike`
48
+
49
+ Text color can also be changed by calling a method named by a color:
50
+
51
+ * `black`
52
+ * `red`
53
+ * `green`
54
+ * `yellow`
55
+ * `blue`
56
+ * `magenta`
57
+ * `cyan`
58
+ * `white`
59
+ * `aqua`
60
+ * `silver`
61
+ * `aliceblue`
62
+ * `indianred`
63
+
64
+ All of the methods return `self` (the presenter object) so you can chain method
65
+ calls:
66
+
67
+ ```ruby
68
+ Rainbow("hola!").blue.bright.underline
69
+ ```
70
+
71
+ ### Refinement
72
+
73
+ If you want to use the Refinements version, you can:
74
+
75
+ ```ruby
76
+ require 'rainbow/refinement'
77
+ using Rainbow
78
+ puts "Hi!".green
79
+ ```
80
+
81
+ Here's an IRB session example:
82
+
83
+ ```
84
+ >> 'Hello, World!'.blue.bright.underline
85
+ NoMethodError: undefined method `blue' for "Hello, World!":String
86
+ (ripl):1:in `<main>'
87
+ >> using Rainbow
88
+ => main
89
+ >> 'Hello, World!'.blue.bright.underline
90
+ => "\e[34m\e[1m\e[4mHello, World!\e[0m"
91
+ ```
92
+
93
+ ### Color specification
94
+
95
+ Both `color` and `background` accept color specified in any
96
+ of the following ways:
97
+
98
+ * ANSI color number (where 0 is black, 1 is red, 2 is green and so on):
99
+ `Rainbow("hello").color(1)`
100
+
101
+ * [ANSI color](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) name or [X11 color](https://en.wikipedia.org/wiki/X11_color_names) name as a symbol:
102
+ `Rainbow("hello").color(:yellow)`.
103
+ This can be simplified to `Rainbow("hello").yellow`
104
+
105
+ See [Color list](#user-content-color-list) for all available color names.
106
+ Note that ANSI colors can be changed in accordance with terminal setting.
107
+ But X11 color is just a syntax sugar for RGB triplet. So you always see what you specified.
108
+
109
+ * RGB triplet as separate values in the range 0-255:
110
+ `Rainbow("hello").color(115, 23, 98)`
111
+
112
+ * RGB triplet as a hex string:
113
+ `Rainbow("hello").color("FFC482")` or `Rainbow("hello").color("#FFC482")`
114
+
115
+ When you specify a color with a RGB triplet rainbow finds the nearest match
116
+ from 256 colors palette. Note that it requires a 256-colors capable terminal to
117
+ display correctly.
118
+
119
+ #### Example: Choose a random color
120
+
121
+ You can pick a random color with Rainbow, it's a one-liner:
122
+
123
+ ```ruby
124
+ colors = Range.new(0,7).to_a
125
+ "whoop dee doop".chars.map { |char| Rainbow(char).color(colors.sample) }.join
126
+ # => "\e[36mw\e[0m\e[37mh\e[0m\e[34mo\e[0m\e[34mo\e[0m\e[37mp\e[0m\e[34m \e[0m\e[36md\e[0m\e[33me\e[0m\e[34me\e[0m\e[37m \e[0m\e[32md\e[0m\e[35mo\e[0m\e[33mo\e[0m\e[36mp\e[0m"
127
+
128
+ colors = [:aliceblue, :antiquewhite, :aqua, :aquamarine, :azure, :beige, :bisque, :blanchedalmond, :blueviolet]
129
+ "whoop dee doop".chars.map { |char| Rainbow(char).color(colors.sample) }.join
130
+ # => "\e[38;5;135mw\e[0m\e[38;5;230mh\e[0m\e[38;5;231mo\e[0m\e[38;5;135mo\e[0m\e[38;5;231mp\e[0m\e[38;5;231m \e[0m\e[38;5;122md\e[0m\e[38;5;231me\e[0m\e[38;5;231me\e[0m\e[38;5;230m \e[0m\e[38;5;122md\e[0m\e[38;5;51mo\e[0m\e[38;5;51mo\e[0m\e[38;5;51mp\e[0m"
131
+ ```
132
+
133
+ ### Configuration
134
+
135
+ Rainbow can be enabled/disabled globally by setting:
136
+
137
+ ```ruby
138
+ Rainbow.enabled = true/false
139
+ ```
140
+
141
+ When disabled all the methods return an unmodified string
142
+ (`Rainbow("hello").red == "hello"`).
143
+
144
+ It's enabled by default, unless STDOUT/STDERR is not a TTY or a terminal is
145
+ dumb.
146
+
147
+ ### Advanced usage
148
+
149
+ `Rainbow()` and `Rainbow.enabled` operate on the global Rainbow wrapper
150
+ instance. If you would like to selectively enable/disable coloring in separate
151
+ parts of your application you can get a new Rainbow wrapper instance for each
152
+ of them and control the state of coloring during the runtime.
153
+
154
+ ```ruby
155
+ rainbow_one = Rainbow.new
156
+ rainbow_two = Rainbow.new
157
+
158
+ rainbow_one.enabled = false
159
+
160
+ Rainbow("hello").red # => "\e[31mhello\e[0m" ("hello" if not on TTY)
161
+ rainbow_one.wrap("hello").red # => "hello"
162
+ rainbow_two.wrap("hello").red # => "\e[31mhello\e[0m" ("hello" if not on TTY)
163
+ ```
164
+
165
+ By default each new instance inherits enabled/disabled state from the global
166
+ `Rainbow.enabled`.
167
+
168
+ This feature comes handy for example when you have multiple output formatters
169
+ in your application and some of them print to a terminal but others write to a
170
+ file. Normally rainbow would detect that STDIN/STDERR is a TTY and would
171
+ colorize all the strings, even the ones that go through file writing
172
+ formatters. You can easily solve that by disabling coloring for the Rainbow
173
+ instances that are used by formatters with file output.
174
+
175
+ ## Installation
176
+
177
+ Add it to your Gemfile:
178
+
179
+ ```ruby
180
+ gem 'rainbow'
181
+ ```
182
+
183
+ Or just install it via rubygems:
184
+
185
+ ```ruby
186
+ gem install rainbow
187
+ ```
188
+
189
+ ## Color list
190
+
191
+ ### ANSI colors
192
+
193
+ `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`
194
+
195
+ ### X11 colors
196
+
197
+ `aliceblue`, `antiquewhite`, `aqua`, `aquamarine`, `azure`, `beige`, `bisque`,
198
+ `blanchedalmond`, `blueviolet`, `brown`, `burlywood`, `cadetblue`, `chartreuse`,
199
+ `chocolate`, `coral`, `cornflower`, `cornsilk`, `crimson`, `darkblue`,
200
+ `darkcyan`, `darkgoldenrod`, `darkgray`, `darkgreen`, `darkkhaki`,
201
+ `darkmagenta`, `darkolivegreen`, `darkorange`, `darkorchid`, `darkred`,
202
+ `darksalmon`, `darkseagreen`, `darkslateblue`, `darkslategray`, `darkturquoise`,
203
+ `darkviolet`, `deeppink`, `deepskyblue`, `dimgray`, `dodgerblue`, `firebrick`,
204
+ `floralwhite`, `forestgreen`, `fuchsia`, `gainsboro`, `ghostwhite`, `gold`,
205
+ `goldenrod`, `gray`, `greenyellow`, `honeydew`, `hotpink`, `indianred`,
206
+ `indigo`, `ivory`, `khaki`, `lavender`, `lavenderblush`, `lawngreen`,
207
+ `lemonchiffon`, `lightblue`, `lightcoral`, `lightcyan`, `lightgoldenrod`,
208
+ `lightgray`, `lightgreen`, `lightpink`, `lightsalmon`, `lightseagreen`,
209
+ `lightskyblue`, `lightslategray`, `lightsteelblue`, `lightyellow`, `lime`,
210
+ `limegreen`, `linen`, `maroon`, `mediumaquamarine`, `mediumblue`,
211
+ `mediumorchid`, `mediumpurple`, `mediumseagreen`, `mediumslateblue`,
212
+ `mediumspringgreen`, `mediumturquoise`, `mediumvioletred`, `midnightblue`,
213
+ `mintcream`, `mistyrose`, `moccasin`, `navajowhite`, `navyblue`, `oldlace`,
214
+ `olive`, `olivedrab`, `orange`, `orangered`, `orchid`, `palegoldenrod`,
215
+ `palegreen`, `paleturquoise`, `palevioletred`, `papayawhip`, `peachpuff`,
216
+ `peru`, `pink`, `plum`, `powderblue`, `purple`, `rebeccapurple`, `rosybrown`,
217
+ `royalblue`, `saddlebrown`, `salmon`, `sandybrown`, `seagreen`, `seashell`,
218
+ `sienna`, `silver`, `skyblue`, `slateblue`, `slategray`, `snow`, `springgreen`,
219
+ `steelblue`, `tan`, `teal`, `thistle`, `tomato`, `turquoise`, `violet`,
220
+ `webgray`, `webgreen`, `webmaroon`, `webpurple`, `wheat`, `whitesmoke`,
221
+ `yellowgreen`
222
+
223
+ ## Authors
224
+
225
+ [Marcin Kulik](http://ku1ik.com/) and [great open-source contributors](https://github.com/sickill/rainbow/graphs/contributors).