buildkite-builder 1.0.0.beta.1

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 (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).