planter-cli 0.0.4 → 3.0.2

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 (115) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.gitmodules +3 -0
  4. data/.rubocop.yml +1 -1
  5. data/CHANGELOG.md +31 -0
  6. data/README.md +33 -4
  7. data/Rakefile +52 -16
  8. data/bin/plant +2 -2
  9. data/docker/Dockerfile +2 -4
  10. data/docker/Dockerfile-2.6 +4 -6
  11. data/docker/Dockerfile-2.7 +4 -6
  12. data/docker/Dockerfile-3.0 +4 -5
  13. data/docker/Dockerfile-3.3 +11 -0
  14. data/docker/sources.list +11 -0
  15. data/lib/planter/array.rb +17 -0
  16. data/lib/planter/fileentry.rb +5 -1
  17. data/lib/planter/filelist.rb +13 -4
  18. data/lib/planter/hash.rb +17 -1
  19. data/lib/planter/plant.rb +5 -3
  20. data/lib/planter/prompt.rb +5 -5
  21. data/lib/planter/string.rb +22 -0
  22. data/lib/planter/tag.rb +91 -0
  23. data/lib/planter/version.rb +1 -1
  24. data/lib/planter.rb +34 -18
  25. data/lib/tty-spinner/.editorconfig +9 -0
  26. data/lib/tty-spinner/.github/FUNDING.yml +1 -0
  27. data/lib/tty-spinner/.github/ISSUE_TEMPLATE/BUG_REPORT.md +31 -0
  28. data/lib/tty-spinner/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md +23 -0
  29. data/lib/tty-spinner/.github/ISSUE_TEMPLATE/config.yml +5 -0
  30. data/lib/tty-spinner/.github/PULL_REQUEST_TEMPLATE.md +19 -0
  31. data/lib/tty-spinner/.github/workflows/ci.yml +59 -0
  32. data/lib/tty-spinner/.gitignore +14 -0
  33. data/lib/tty-spinner/.rspec +2 -0
  34. data/lib/tty-spinner/.rubocop.yml +78 -0
  35. data/lib/tty-spinner/CHANGELOG.md +151 -0
  36. data/lib/tty-spinner/CODE_OF_CONDUCT.md +132 -0
  37. data/lib/tty-spinner/Gemfile +17 -0
  38. data/lib/tty-spinner/LICENSE.txt +22 -0
  39. data/lib/tty-spinner/README.md +581 -0
  40. data/lib/tty-spinner/Rakefile +10 -0
  41. data/lib/tty-spinner/appveyor.yml +33 -0
  42. data/lib/tty-spinner/bin/console +14 -0
  43. data/lib/tty-spinner/bin/setup +8 -0
  44. data/lib/tty-spinner/demo.gif +0 -0
  45. data/lib/tty-spinner/examples/auto_spin.rb +10 -0
  46. data/lib/tty-spinner/examples/basic.rb +10 -0
  47. data/lib/tty-spinner/examples/clear.rb +11 -0
  48. data/lib/tty-spinner/examples/color.rb +14 -0
  49. data/lib/tty-spinner/examples/error.rb +11 -0
  50. data/lib/tty-spinner/examples/formats.rb +13 -0
  51. data/lib/tty-spinner/examples/hide_cursor.rb +14 -0
  52. data/lib/tty-spinner/examples/log.rb +13 -0
  53. data/lib/tty-spinner/examples/multi/basic.rb +15 -0
  54. data/lib/tty-spinner/examples/multi/basic_top_level.rb +15 -0
  55. data/lib/tty-spinner/examples/multi/custom_style.rb +28 -0
  56. data/lib/tty-spinner/examples/multi/files.rb +16 -0
  57. data/lib/tty-spinner/examples/multi/jobs.rb +11 -0
  58. data/lib/tty-spinner/examples/multi/multi.rb +19 -0
  59. data/lib/tty-spinner/examples/multi/multi_top_level.rb +20 -0
  60. data/lib/tty-spinner/examples/multi/pause.rb +28 -0
  61. data/lib/tty-spinner/examples/multi/threaded.rb +30 -0
  62. data/lib/tty-spinner/examples/pause.rb +24 -0
  63. data/lib/tty-spinner/examples/run.rb +20 -0
  64. data/lib/tty-spinner/examples/success.rb +11 -0
  65. data/lib/tty-spinner/examples/threaded.rb +13 -0
  66. data/lib/tty-spinner/examples/update.rb +13 -0
  67. data/lib/tty-spinner/lib/tty/spinner/formats.rb +274 -0
  68. data/lib/tty-spinner/lib/tty/spinner/multi.rb +352 -0
  69. data/lib/tty-spinner/lib/tty/spinner/version.rb +7 -0
  70. data/lib/tty-spinner/lib/tty/spinner.rb +604 -0
  71. data/lib/tty-spinner/lib/tty-spinner.rb +2 -0
  72. data/lib/tty-spinner/spec/spec_helper.rb +52 -0
  73. data/lib/tty-spinner/spec/unit/auto_spin_spec.rb +25 -0
  74. data/lib/tty-spinner/spec/unit/clear_spec.rb +16 -0
  75. data/lib/tty-spinner/spec/unit/error_spec.rb +53 -0
  76. data/lib/tty-spinner/spec/unit/events_spec.rb +35 -0
  77. data/lib/tty-spinner/spec/unit/formats_spec.rb +9 -0
  78. data/lib/tty-spinner/spec/unit/frames_spec.rb +31 -0
  79. data/lib/tty-spinner/spec/unit/hide_cursor_spec.rb +51 -0
  80. data/lib/tty-spinner/spec/unit/job_spec.rb +12 -0
  81. data/lib/tty-spinner/spec/unit/join_spec.rb +10 -0
  82. data/lib/tty-spinner/spec/unit/log_spec.rb +60 -0
  83. data/lib/tty-spinner/spec/unit/multi/auto_spin_spec.rb +32 -0
  84. data/lib/tty-spinner/spec/unit/multi/error_spec.rb +107 -0
  85. data/lib/tty-spinner/spec/unit/multi/line_inset_spec.rb +57 -0
  86. data/lib/tty-spinner/spec/unit/multi/on_spec.rb +11 -0
  87. data/lib/tty-spinner/spec/unit/multi/register_spec.rb +46 -0
  88. data/lib/tty-spinner/spec/unit/multi/spin_spec.rb +101 -0
  89. data/lib/tty-spinner/spec/unit/multi/stop_spec.rb +95 -0
  90. data/lib/tty-spinner/spec/unit/multi/success_spec.rb +108 -0
  91. data/lib/tty-spinner/spec/unit/new_spec.rb +25 -0
  92. data/lib/tty-spinner/spec/unit/pause_spec.rb +43 -0
  93. data/lib/tty-spinner/spec/unit/reset_spec.rb +19 -0
  94. data/lib/tty-spinner/spec/unit/run_spec.rb +30 -0
  95. data/lib/tty-spinner/spec/unit/spin_spec.rb +117 -0
  96. data/lib/tty-spinner/spec/unit/stop_spec.rb +88 -0
  97. data/lib/tty-spinner/spec/unit/success_spec.rb +53 -0
  98. data/lib/tty-spinner/spec/unit/tty_spec.rb +8 -0
  99. data/lib/tty-spinner/spec/unit/update_spec.rb +85 -0
  100. data/lib/tty-spinner/tasks/console.rake +11 -0
  101. data/lib/tty-spinner/tasks/coverage.rake +11 -0
  102. data/lib/tty-spinner/tasks/spec.rake +29 -0
  103. data/lib/tty-spinner/tty-spinner.gemspec +36 -0
  104. data/planter-cli.gemspec +1 -0
  105. data/scripts/runtests.sh +1 -1
  106. data/spec/cli_spec.rb +27 -0
  107. data/spec/planter/hash_spec.rb +27 -0
  108. data/spec/planter_spec.rb +15 -0
  109. data/spec/spec_helper.rb +26 -0
  110. data/spec/templates/test/%%project:snake%%.rtf +10 -0
  111. data/spec/templates/test/Rakefile +6 -0
  112. data/spec/templates/test/_planter.yml +3 -6
  113. data/spec/templates/test/test.rb +5 -0
  114. data/src/_README.md +20 -3
  115. metadata +108 -3
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Planter
4
+ module Tag
5
+ class << self
6
+ def set(target, tags)
7
+ return false unless TTY::Which.exist?('xattr')
8
+
9
+ tags = [tags] unless tags.is_a?(Array)
10
+
11
+ set_tags(target, tags)
12
+ $? == 0
13
+ end
14
+
15
+ # Add tags to a directory.
16
+ #
17
+ # @param dir [String] The directory to tag.
18
+ # @param tags [Array<String>] The tags to add.
19
+ def add(target, tags)
20
+ return false unless TTY::Which.exist?('xattr')
21
+
22
+ tags = [tags] unless tags.is_a?(Array)
23
+ existing_tags = get(target)
24
+ tags.concat(existing_tags).uniq!
25
+
26
+ set_tags(target, tags)
27
+
28
+ res = $? == 0
29
+
30
+ if res
31
+ Planter.notify("[Added tags] to #{target}", :debug, above_spinner: true)
32
+ else
33
+ Planter.notify("Failed to add tags to #{target}", :error)
34
+ end
35
+
36
+ res
37
+ end
38
+
39
+ def get(target)
40
+ return false unless TTY::Which.exist?('xattr')
41
+
42
+ res = `xattr -p com.apple.metadata:_kMDItemUserTags "#{target}" 2>/dev/null`.clean_encode
43
+ return [] if res =~ /no such xattr/ || res.empty?
44
+
45
+ tags = Plist.parse_xml(res)
46
+
47
+ return false if tags.nil?
48
+
49
+ tags
50
+ end
51
+
52
+ def copy(source, target)
53
+ return false unless TTY::Which.exist?('xattr')
54
+
55
+ tags = `xattr -px com.apple.metadata:_kMDItemUserTags "#{source}" 2>/dev/null`
56
+ `xattr -wx com.apple.metadata:_kMDItemUserTags "#{tags}" "#{target}"`
57
+ res = $? == 0
58
+
59
+ if res
60
+ Planter.notify("[Copied tags] from #{source} to #{target}", :debug, above_spinner: true)
61
+ else
62
+ Planter.notify("Failed to copy tags from #{source} to #{target}", :error)
63
+ end
64
+
65
+ res
66
+ end
67
+
68
+ private
69
+
70
+ def set_tags(target, tags)
71
+ return false unless TTY::Which.exist?('xattr')
72
+
73
+ tags.map! { |tag| "<string>#{tag}</string>" }
74
+ `xattr -w com.apple.metadata:_kMDItemUserTags '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
75
+ <plist version="1.0">
76
+ <array>#{tags.join}</array>
77
+ </plist>' "#{target}"`
78
+
79
+ res = $? == 0
80
+
81
+ if res
82
+ Planter.notify("[Set tags] on #{target}", :debug, above_spinner: true)
83
+ else
84
+ Planter.notify("Failed to set tags on #{target}", :error)
85
+ end
86
+
87
+ res
88
+ end
89
+ end
90
+ end
91
+ end
@@ -3,5 +3,5 @@
3
3
  # Primary module for this gem.
4
4
  module Planter
5
5
  # Current Planter version.
6
- VERSION = '0.0.4'
6
+ VERSION = '3.0.2'
7
7
  end
data/lib/planter.rb CHANGED
@@ -6,18 +6,21 @@ require 'json'
6
6
  require 'yaml'
7
7
  require 'fileutils'
8
8
  require 'open3'
9
+ require 'plist'
9
10
 
10
11
  require 'chronic'
11
12
  require 'tty-reader'
12
13
  require 'tty-screen'
13
- require 'tty-spinner'
14
+ # require 'tty-spinner'
14
15
  require 'tty-which'
15
16
 
17
+ require_relative 'tty-spinner/lib/tty-spinner'
16
18
  require_relative 'planter/version'
17
19
  require_relative 'planter/hash'
18
20
  require_relative 'planter/array'
19
21
  require_relative 'planter/symbol'
20
22
  require_relative 'planter/file'
23
+ require_relative 'planter/tag'
21
24
  require_relative 'planter/color'
22
25
  require_relative 'planter/errors'
23
26
  require_relative 'planter/prompt'
@@ -70,20 +73,28 @@ module Planter
70
73
  ## @param string [String] The message string
71
74
  ## @param notification_type [Symbol] The notification type (:debug, :error, :warn, :info)
72
75
  ## @param exit_code [Integer] If provided, exit with code after delivering message
76
+ ## @param newline [Boolean] If true, add a newline to the message
77
+ ## @param above_spinner [Boolean] If true, print above the spinner
73
78
  ##
74
- def notify(string, notification_type = :info, exit_code: nil)
75
- case notification_type
76
- when :debug
77
- return false unless @debug
78
-
79
- warn "\n{dw}#{string}{x}".x
80
- when :error
81
- warn "{br}#{string}{x}".x
82
- when :warn
83
- warn "{by}#{string}{x}".x
84
- else
85
- warn "{bw}#{string}{x}".x
86
- end
79
+ ## @return [Boolean] true if message was printed
80
+ def notify(string, notification_type = :info, newline: true, above_spinner: false, exit_code: nil)
81
+ color = case notification_type
82
+ when :debug
83
+ return false unless @debug
84
+
85
+ '{dw}'
86
+ when :error
87
+ '{br}'
88
+
89
+ when :warn
90
+ '{by}'
91
+ else
92
+ '{bw}'
93
+ end
94
+ out = "#{color}#{string}{x}"
95
+ out.gsub!(/\[(.*?)\]/, "{by}\\1{x}#{color}")
96
+ out = "\n#{out}" if newline
97
+ above_spinner ? spinner.log(out.x) : warn(out.x)
87
98
 
88
99
  Process.exit exit_code unless exit_code.nil?
89
100
 
@@ -127,7 +138,8 @@ module Planter
127
138
  defaults: false,
128
139
  git_init: false,
129
140
  files: { '_planter.yml' => 'ignore' },
130
- color: true
141
+ color: true,
142
+ preserve_tags: true
131
143
  }
132
144
  begin
133
145
  File.open(base_config, 'w') { |f| f.puts(YAML.dump(default_base_config.stringify_keys)) }
@@ -194,13 +206,17 @@ module Planter
194
206
  key: 'var_key',
195
207
  prompt: 'CLI Prompt',
196
208
  type: '[string, float, integer, number, date]',
197
- value: '(optional, for date type can be today, time, now, etc., empty to prompt)',
209
+ value: '(optional, force value, can include variables. Empty to prompt. For date type: today, now, etc.)',
198
210
  default: '(optional default value, leave empty or remove key for no default)',
199
211
  min: '(optional, for number type set a minimum value)',
200
212
  max: '(optional, for number type set a maximum value)'
201
213
  ],
202
214
  git_init: false,
203
- files: { '*.tmp' => 'ignore' }
215
+ files: {
216
+ '*.tmp' => 'ignore',
217
+ '*.bak' => 'ignore',
218
+ '.DS_Store' => 'ignore'
219
+ }
204
220
  }
205
221
  FileUtils.mkdir_p(base_dir)
206
222
  File.open(config, 'w') { |f| f.puts(YAML.dump(default_config.stringify_keys)) }
@@ -235,7 +251,7 @@ module Planter
235
251
  def process_patterns
236
252
  patterns = {}
237
253
  @config[:files].each do |file, oper|
238
- pattern = Regexp.new(".*?/#{file.to_s.sub(%r{^/}, '').gsub(/\./, '\.').gsub(/\*/, '.*?').gsub(/\?/, '.')}$")
254
+ pattern = Regexp.new(".*?/#{file.to_s.sub(%r{^/}, '').to_rx}$")
239
255
  operator = oper.normalize_operator
240
256
  patterns[pattern] = operator
241
257
  end
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*.rb]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ indent_style = space
8
+ indent_size = 2
9
+ trim_trailing_whitespace = true
@@ -0,0 +1 @@
1
+ github: piotrmurach
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report something not working correctly or as expected
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+ ---
8
+
9
+ ### Describe the problem
10
+
11
+ A brief description of the issue.
12
+
13
+ ### Steps to reproduce the problem
14
+
15
+ ```
16
+ Your code here to reproduce the issue
17
+ ```
18
+
19
+ ### Actual behaviour
20
+
21
+ What happened? This could be a description, log output, error raised etc.
22
+
23
+ ### Expected behaviour
24
+
25
+ What did you expect to happen?
26
+
27
+ ### Describe your environment
28
+
29
+ * OS version:
30
+ * Ruby version:
31
+ * TTY::Spinner version:
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest new functionality
4
+ title: ''
5
+ labels: enhancement
6
+ assignees: ''
7
+ ---
8
+
9
+ ### Describe the problem
10
+
11
+ A brief description of the problem you're trying to solve.
12
+
13
+ ### How would the new feature work?
14
+
15
+ A short explanation of the new feature.
16
+
17
+ ```
18
+ Example code that shows possible usage
19
+ ```
20
+
21
+ ### Drawbacks
22
+
23
+ Can you see any potential drawbacks?
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: TTY Community Discussions
4
+ url: https://github.com/piotrmurach/tty/discussions
5
+ about: Suggest ideas, ask and answer questions
@@ -0,0 +1,19 @@
1
+ ### Describe the change
2
+ What does this Pull Request do?
3
+
4
+ ### Why are we doing this?
5
+ Any related context as to why is this is a desirable change.
6
+
7
+ ### Benefits
8
+ How will the library improve?
9
+
10
+ ### Drawbacks
11
+ Possible drawbacks applying this change.
12
+
13
+ ### Requirements
14
+ <!--- Put an X between brackets on each line if you have done the item: -->
15
+ - [ ] Tests written & passing locally?
16
+ - [ ] Code style checked?
17
+ - [ ] Rebased with `master` branch?
18
+ - [ ] Documentation updated?
19
+ - [ ] Changelog updated?
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: CI
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ paths-ignore:
8
+ - "bin/**"
9
+ - "examples/**"
10
+ - "*.md"
11
+ pull_request:
12
+ branches:
13
+ - master
14
+ paths-ignore:
15
+ - "bin/**"
16
+ - "examples/**"
17
+ - "*.md"
18
+ jobs:
19
+ tests:
20
+ name: Ruby ${{ matrix.ruby }}
21
+ runs-on: ${{ matrix.os || 'ubuntu-latest' }}
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ ruby:
26
+ - "2.0"
27
+ - "2.1"
28
+ - "2.3"
29
+ - "2.4"
30
+ - "2.5"
31
+ - "2.6"
32
+ - "3.0"
33
+ - "3.1"
34
+ - "3.2"
35
+ - "3.3"
36
+ - ruby-head
37
+ - jruby-9.2
38
+ - jruby-9.3
39
+ - jruby-9.4
40
+ - jruby-head
41
+ - truffleruby-head
42
+ include:
43
+ - ruby: "2.2"
44
+ os: ubuntu-20.04
45
+ - ruby: "2.7"
46
+ coverage: true
47
+ env:
48
+ COVERAGE: ${{ matrix.coverage }}
49
+ COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
50
+ continue-on-error: ${{ endsWith(matrix.ruby, 'head') }}
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+ - name: Set up Ruby
54
+ uses: ruby/setup-ruby@v1
55
+ with:
56
+ ruby-version: ${{ matrix.ruby }}
57
+ bundler-cache: true
58
+ - name: Run tests
59
+ run: bundle exec rake ci
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -0,0 +1,78 @@
1
+ AllCops:
2
+ NewCops: enable
3
+
4
+ Layout/FirstArrayElementIndentation:
5
+ Enabled: false
6
+
7
+ Layout/FirstHashElementIndentation:
8
+ Enabled: false
9
+
10
+ Layout/LineLength:
11
+ Max: 82
12
+
13
+ Layout/SpaceInsideHashLiteralBraces:
14
+ EnforcedStyle: no_space
15
+
16
+ Lint/AssignmentInCondition:
17
+ Enabled: false
18
+
19
+ Metrics/AbcSize:
20
+ Max: 30
21
+
22
+ Metrics/BlockLength:
23
+ CountComments: true
24
+ Max: 25
25
+ IgnoredMethods: []
26
+ Exclude:
27
+ - "spec/**/*"
28
+
29
+ Metrics/ClassLength:
30
+ Max: 1500
31
+
32
+ Metrics/CyclomaticComplexity:
33
+ Enabled: false
34
+
35
+ Metrics/MethodLength:
36
+ Max: 20
37
+
38
+ Naming/FileName:
39
+ Exclude:
40
+ - "lib/tty-spinner.rb"
41
+
42
+ Naming/BinaryOperatorParameterName:
43
+ Enabled: false
44
+
45
+ Style/AsciiComments:
46
+ Enabled: false
47
+
48
+ Style/BlockDelimiters:
49
+ Enabled: false
50
+
51
+ Style/CommentedKeyword:
52
+ Enabled: false
53
+
54
+ Style/FrozenStringLiteralComment:
55
+ Exclude:
56
+ - "spec/**/*"
57
+
58
+ Style/LambdaCall:
59
+ SupportedStyles:
60
+ - call
61
+ - braces
62
+
63
+ Style/Semicolon:
64
+ Exclude:
65
+ - "spec/**/*"
66
+
67
+ Style/StringLiterals:
68
+ EnforcedStyle: double_quotes
69
+
70
+ Style/StringLiteralsInInterpolation:
71
+ EnforcedStyle: double_quotes
72
+
73
+ Style/SymbolProc:
74
+ Exclude:
75
+ - "spec/**/*"
76
+
77
+ Style/TrivialAccessors:
78
+ Enabled: false
@@ -0,0 +1,151 @@
1
+ # Change log
2
+
3
+ ## [v0.10.0] - unreleased
4
+
5
+ ### Added
6
+ * Add Spinner#log method for logging messages above the spinner
7
+ * Add new formats (:pulse_4, :toss, :lighthouse, :points, :points_2)
8
+ * Add ability to specify a custom mark for error, pause, success and stop methods
9
+
10
+ ### Changed
11
+ * Change gemspec to include rake and rspec as dev dependencies
12
+ * Change all built-in formats to use consistent frames formatting
13
+
14
+ ## [v0.9.3] - 2020-01-28
15
+
16
+ ### Changed
17
+ * Change gemspec to add metadata, remove test artefacts and load version directly
18
+
19
+ ## [v0.9.2] - 2019-12-08
20
+
21
+ ### Fixed
22
+ * Fix multi spinner cursor hiding by @benklop
23
+
24
+ ## [v0.9.1] - 2019-05-29
25
+
26
+ ### Changed
27
+ * Change bundler to remove version limit
28
+ * Change to update tty-cursor dependency
29
+
30
+ ## [v0.9.0] - 2018-12-01
31
+
32
+ ### Changed
33
+ * Change tty-cursor dependency
34
+ * Change to Ruby >= 2.0
35
+ * Change to freeze all string literals
36
+ * Change #execute_job to stop evaluating in spinner context and just execute the job
37
+ * Change #register to accept a spinner instance by Shane Cavanaugh(@shanecav84)
38
+
39
+ ### Fixed
40
+ * Fix to remove a stray single quote in spin_4 by Kristofer Rye(@rye)
41
+ * Fix Multi#line_inset to correctly assign styling in threaded environment
42
+ * Fix #stop & #auto_spin to always restore hidden cursor if enabled
43
+ * Fix deadlock when registering multi spinners
44
+
45
+ ## [v0.8.0] - 2018-01-11
46
+
47
+ ### Added
48
+ * Add new formats :bounce, :burger, :dance, :dot_2, ..., dot_11, :shark, :pong
49
+
50
+ ### Changed
51
+ * Change to only output to a console and stop output to a file, pipe etc...
52
+
53
+ ### Fixed
54
+ * Fix spinner #stop to clear line before printing final message
55
+
56
+ ## [v0.7.0] - 2017-09-11
57
+
58
+ ### Added
59
+ * Add :spin event type and emit from TTY::Spinner#spin
60
+
61
+ ### Changed
62
+ * Change to automatically spin top level multi spinner when registered spinners spin
63
+ * Remove unnecessary checks for top spinner in multi spinner #stop, #success, #error
64
+
65
+ ### Fixed
66
+ * Fix multi spinner #observe to only listen for events from registered spinners
67
+
68
+ ## [v0.6.0] - 2017-09-07
69
+
70
+ ### Changed
71
+ * Change TTY::Spinner::Multi to render registered spinners at row
72
+ position at point of rendering and not registration
73
+
74
+ ### Fixed
75
+ * Fix handling of multi spinner events
76
+ * Fix multi spinner display for unicode inset characters
77
+
78
+ ## [v0.5.0] - 2017-08-09
79
+
80
+ ### Added
81
+ * Add TTY::Spinner::Multi to allow for parallel spinners executation by Austin Blatt[@austb]
82
+ * Add formatting for multi spinner display by Austin Blatt[@austb]
83
+ * Add ability to add and execute jobs for single and multi spinners
84
+ * Add abilty to register multi spinners with async jobs
85
+ * Add #pause and #resume for single and multispinner
86
+
87
+ ### Changed
88
+ * Change to unify success category to mark spinner as succeded or errored
89
+ * Change Spinner to be thread safe
90
+
91
+ ### Fixed
92
+ * Stop firing events when a spinner is stopped
93
+
94
+ ## [v0.4.1] - 2016-08-07
95
+
96
+ ### Changed
97
+ * Change #update to clear output when in spinning state
98
+
99
+ ## [v0.4.0] - 2016-08-07
100
+
101
+ ### Added
102
+ * Add #auto_spin to automatically displaying spinning animation
103
+
104
+ ### Changed
105
+ * Change #start to setup timer and reset done state
106
+
107
+ ## [v0.3.0] - 2016-07-14
108
+
109
+ ### Added
110
+ * Add #run to automatically execute job with spinning animation by @Thermatix
111
+ * Add #update to allow for dynamic label name replacement
112
+
113
+ ### Fixed
114
+ * Fixed cursor hiding for success and error calls by @m-o-e
115
+ * Fix #join call to define actual error
116
+ * Fix #stop to print only once when finished
117
+
118
+ ## [v0.2.0] - 2016-03-13
119
+
120
+ ### Added
121
+ * Add new spinner formats by @rlqualls
122
+ * Add ability to specify custom frames through :frames option
123
+ * Add :clear option for removing spinner output when done
124
+ * Add #success and #error calls for stopping spinner
125
+ * Add :done, :success, :error completion events
126
+ * Add :success_mark & :error_mark to allow changing markers
127
+ * Add :interval for automatic spinning duration
128
+ * Add #start, #join and #kill for automatic spinner animation
129
+
130
+ ### Changed
131
+ * Change message formatting, use :spinner token to customize message
132
+ * Change format for defining spinner formats and intervals
133
+
134
+ ## [v0.1.0] - 2014-11-15
135
+
136
+ * Initial implementation and release
137
+
138
+ [v0.10.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.9.3...v0.10.0
139
+ [v0.9.3]: https://github.com/piotrmurach/tty-spinner/compare/v0.9.2...v0.9.3
140
+ [v0.9.2]: https://github.com/piotrmurach/tty-spinner/compare/v0.9.1...v0.9.2
141
+ [v0.9.1]: https://github.com/piotrmurach/tty-spinner/compare/v0.9.0...v0.9.1
142
+ [v0.9.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.8.0...v0.9.0
143
+ [v0.8.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.7.0...v0.8.0
144
+ [v0.7.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.6.0...v0.7.0
145
+ [v0.6.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.5.0...v0.6.0
146
+ [v0.5.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.4.1...v0.5.0
147
+ [v0.4.1]: https://github.com/piotrmurach/tty-spinner/compare/v0.4.0...v0.4.1
148
+ [v0.4.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.3.0...v0.4.0
149
+ [v0.3.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.2.0...v0.3.0
150
+ [v0.2.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.1.0...v0.2.0
151
+ [v0.1.0]: https://github.com/piotrmurach/tty-spinner/compare/v0.1.0