planter-cli 3.0.1 → 3.0.3

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 (109) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.gitmodules +3 -0
  4. data/.rubocop.yml +1 -2
  5. data/CHANGELOG.md +24 -0
  6. data/README.md +85 -4
  7. data/bin/plant +1 -1
  8. data/docker/Dockerfile +2 -4
  9. data/docker/Dockerfile-2.6 +4 -5
  10. data/docker/Dockerfile-2.7 +4 -5
  11. data/docker/Dockerfile-3.0 +4 -4
  12. data/docker/Dockerfile-3.3 +12 -0
  13. data/docker/bash_profile +2 -1
  14. data/docker/sources.list +11 -0
  15. data/lib/planter/array.rb +56 -1
  16. data/lib/planter/filelist.rb +5 -4
  17. data/lib/planter/hash.rb +24 -0
  18. data/lib/planter/plant.rb +6 -4
  19. data/lib/planter/prompt.rb +56 -16
  20. data/lib/planter/string.rb +143 -5
  21. data/lib/planter/tag.rb +39 -2
  22. data/lib/planter/version.rb +1 -1
  23. data/lib/planter.rb +30 -17
  24. data/lib/tty-spinner/.editorconfig +9 -0
  25. data/lib/tty-spinner/.github/FUNDING.yml +1 -0
  26. data/lib/tty-spinner/.github/ISSUE_TEMPLATE/BUG_REPORT.md +31 -0
  27. data/lib/tty-spinner/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md +23 -0
  28. data/lib/tty-spinner/.github/ISSUE_TEMPLATE/config.yml +5 -0
  29. data/lib/tty-spinner/.github/PULL_REQUEST_TEMPLATE.md +19 -0
  30. data/lib/tty-spinner/.github/workflows/ci.yml +59 -0
  31. data/lib/tty-spinner/.gitignore +14 -0
  32. data/lib/tty-spinner/.rspec +2 -0
  33. data/lib/tty-spinner/.rubocop.yml +78 -0
  34. data/lib/tty-spinner/CHANGELOG.md +151 -0
  35. data/lib/tty-spinner/CODE_OF_CONDUCT.md +132 -0
  36. data/lib/tty-spinner/Gemfile +17 -0
  37. data/lib/tty-spinner/LICENSE.txt +22 -0
  38. data/lib/tty-spinner/README.md +581 -0
  39. data/lib/tty-spinner/Rakefile +10 -0
  40. data/lib/tty-spinner/appveyor.yml +33 -0
  41. data/lib/tty-spinner/bin/console +14 -0
  42. data/lib/tty-spinner/bin/setup +8 -0
  43. data/lib/tty-spinner/demo.gif +0 -0
  44. data/lib/tty-spinner/examples/auto_spin.rb +10 -0
  45. data/lib/tty-spinner/examples/basic.rb +10 -0
  46. data/lib/tty-spinner/examples/clear.rb +11 -0
  47. data/lib/tty-spinner/examples/color.rb +14 -0
  48. data/lib/tty-spinner/examples/error.rb +11 -0
  49. data/lib/tty-spinner/examples/formats.rb +13 -0
  50. data/lib/tty-spinner/examples/hide_cursor.rb +14 -0
  51. data/lib/tty-spinner/examples/log.rb +13 -0
  52. data/lib/tty-spinner/examples/multi/basic.rb +15 -0
  53. data/lib/tty-spinner/examples/multi/basic_top_level.rb +15 -0
  54. data/lib/tty-spinner/examples/multi/custom_style.rb +28 -0
  55. data/lib/tty-spinner/examples/multi/files.rb +16 -0
  56. data/lib/tty-spinner/examples/multi/jobs.rb +11 -0
  57. data/lib/tty-spinner/examples/multi/multi.rb +19 -0
  58. data/lib/tty-spinner/examples/multi/multi_top_level.rb +20 -0
  59. data/lib/tty-spinner/examples/multi/pause.rb +28 -0
  60. data/lib/tty-spinner/examples/multi/threaded.rb +30 -0
  61. data/lib/tty-spinner/examples/pause.rb +24 -0
  62. data/lib/tty-spinner/examples/run.rb +20 -0
  63. data/lib/tty-spinner/examples/success.rb +11 -0
  64. data/lib/tty-spinner/examples/threaded.rb +13 -0
  65. data/lib/tty-spinner/examples/update.rb +13 -0
  66. data/lib/tty-spinner/lib/tty/spinner/formats.rb +274 -0
  67. data/lib/tty-spinner/lib/tty/spinner/multi.rb +352 -0
  68. data/lib/tty-spinner/lib/tty/spinner/version.rb +7 -0
  69. data/lib/tty-spinner/lib/tty/spinner.rb +604 -0
  70. data/lib/tty-spinner/lib/tty-spinner.rb +2 -0
  71. data/lib/tty-spinner/spec/spec_helper.rb +52 -0
  72. data/lib/tty-spinner/spec/unit/auto_spin_spec.rb +25 -0
  73. data/lib/tty-spinner/spec/unit/clear_spec.rb +16 -0
  74. data/lib/tty-spinner/spec/unit/error_spec.rb +53 -0
  75. data/lib/tty-spinner/spec/unit/events_spec.rb +35 -0
  76. data/lib/tty-spinner/spec/unit/formats_spec.rb +9 -0
  77. data/lib/tty-spinner/spec/unit/frames_spec.rb +31 -0
  78. data/lib/tty-spinner/spec/unit/hide_cursor_spec.rb +51 -0
  79. data/lib/tty-spinner/spec/unit/job_spec.rb +12 -0
  80. data/lib/tty-spinner/spec/unit/join_spec.rb +10 -0
  81. data/lib/tty-spinner/spec/unit/log_spec.rb +60 -0
  82. data/lib/tty-spinner/spec/unit/multi/auto_spin_spec.rb +32 -0
  83. data/lib/tty-spinner/spec/unit/multi/error_spec.rb +107 -0
  84. data/lib/tty-spinner/spec/unit/multi/line_inset_spec.rb +57 -0
  85. data/lib/tty-spinner/spec/unit/multi/on_spec.rb +11 -0
  86. data/lib/tty-spinner/spec/unit/multi/register_spec.rb +46 -0
  87. data/lib/tty-spinner/spec/unit/multi/spin_spec.rb +101 -0
  88. data/lib/tty-spinner/spec/unit/multi/stop_spec.rb +95 -0
  89. data/lib/tty-spinner/spec/unit/multi/success_spec.rb +108 -0
  90. data/lib/tty-spinner/spec/unit/new_spec.rb +25 -0
  91. data/lib/tty-spinner/spec/unit/pause_spec.rb +43 -0
  92. data/lib/tty-spinner/spec/unit/reset_spec.rb +19 -0
  93. data/lib/tty-spinner/spec/unit/run_spec.rb +30 -0
  94. data/lib/tty-spinner/spec/unit/spin_spec.rb +117 -0
  95. data/lib/tty-spinner/spec/unit/stop_spec.rb +88 -0
  96. data/lib/tty-spinner/spec/unit/success_spec.rb +53 -0
  97. data/lib/tty-spinner/spec/unit/tty_spec.rb +8 -0
  98. data/lib/tty-spinner/spec/unit/update_spec.rb +85 -0
  99. data/lib/tty-spinner/tasks/console.rake +11 -0
  100. data/lib/tty-spinner/tasks/coverage.rake +11 -0
  101. data/lib/tty-spinner/tasks/spec.rake +29 -0
  102. data/lib/tty-spinner/tty-spinner.gemspec +36 -0
  103. data/scripts/runtests.sh +1 -1
  104. data/spec/cli_spec.rb +27 -0
  105. data/spec/planter/string_spec.rb +31 -4
  106. data/spec/spec_helper.rb +26 -0
  107. data/spec/templates/test/_planter.yml +3 -6
  108. data/src/_README.md +85 -4
  109. metadata +86 -2
@@ -12,7 +12,42 @@ module Planter
12
12
  ## @return [Symbol] string as variable key
13
13
  ##
14
14
  def to_var
15
- snake_case.to_sym
15
+ strip_quotes.snake_case.to_sym
16
+ end
17
+
18
+ ## Strip quotes from a string
19
+ ##
20
+ ## @return [String] string with quotes stripped
21
+ ##
22
+ def strip_quotes
23
+ sub(/^(["'])(.*)\1$/, '\2')
24
+ end
25
+
26
+ ## Destructive version of #strip_quotes
27
+ def strip_quotes!
28
+ replace strip_quotes
29
+ end
30
+
31
+ #
32
+ # Convert {a,b,c} to (?:a|b|c)
33
+ #
34
+ # @return [String] Converted string
35
+ #
36
+ def glob_to_rx
37
+ gsub(/\\?\{(.*?)\\?\}/) do
38
+ m = Regexp.last_match
39
+ "(?:#{m[1].split(/,/).map { |c| Regexp.escape(c) }.join('|')})"
40
+ end
41
+ end
42
+
43
+ #
44
+ # Convert a string to a regular expression by escaping special
45
+ # characters and converting wildcards (*,?) to regex wildcards
46
+ #
47
+ # @return [String] String with wildcards converted (not Regexp)
48
+ #
49
+ def to_rx
50
+ gsub(/([.()])/, '\\\\\1').gsub(/\?/, '.').gsub(/\*/, '.*?').glob_to_rx
16
51
  end
17
52
 
18
53
  ##
@@ -162,6 +197,96 @@ module Planter
162
197
  replace apply_defaults(variables)
163
198
  end
164
199
 
200
+ ## Apply logic to a string
201
+ ##
202
+ ## @param variables [Hash] Hash of variables to apply
203
+ ##
204
+ def apply_logic(variables = nil)
205
+ variables = variables.nil? ? Planter.variables : variables
206
+
207
+ gsub(/%%if .*?%%.*?%%end(if)?%%/mi) do |construct|
208
+ res = false
209
+ # Get the condition and the content
210
+ output = construct.match(/%%else%%(.*?)%%end/m) ? Regexp.last_match(1) : ''
211
+
212
+ conditions = construct.to_enum(:scan,
213
+ /%%(?<statement>(?:els(?:e )?)?if) (?<condition>.*?)%%(?<content>.*?)(?=%%)/mi).map do
214
+ Regexp.last_match
215
+ end
216
+ conditions.each do |condition|
217
+ variable, operator, value = condition['condition'].split(/ +/, 3)
218
+ value.strip_quotes!
219
+ variable = variable.to_var
220
+ negate = false
221
+ if operator =~ /^!/
222
+ operator = operator[1..-1]
223
+ negate = true
224
+ end
225
+ operator = case operator
226
+ when /^={1,2}/
227
+ :equal
228
+ when /^=~/
229
+ :matches_regex
230
+ when /\*=/
231
+ :contains
232
+ when /\^=/
233
+ :starts_with
234
+ when /\$=/
235
+ :ends_with
236
+ when />/
237
+ :greater_than
238
+ when /</
239
+ :less_than
240
+ when />=/
241
+ :greater_than_or_equal
242
+ when /<=/
243
+ :less_than_or_equal
244
+ else
245
+ :equal
246
+ end
247
+
248
+ comp = variables[variable.to_var].to_s
249
+
250
+ res = case operator
251
+ when :equal
252
+ comp =~ /^#{value}$/i
253
+ when :matches_regex
254
+ comp =~ Regexp.new(value.gsub(%r{^/|/$}, ''))
255
+ when :contains
256
+ comp =~ /#{value}/i
257
+ when :starts_with
258
+ comp =~ /^#{value}/i
259
+ when :ends_with
260
+ comp =~ /#{value}$/i
261
+ when :greater_than
262
+ comp > value.to_f
263
+ when :less_than
264
+ comp < value.to_f
265
+ when :greater_than_or_equal
266
+ comp >= value.to_f
267
+ when :less_than_or_equal
268
+ comp <= value.to_f
269
+ else
270
+ false
271
+ end
272
+ res = !res if negate
273
+
274
+ next unless res
275
+
276
+ Planter.notify("Condition matched: #{comp} #{negate ? 'not ' : ''}#{operator} #{value}", :debug)
277
+ output = condition['content']
278
+ break
279
+ end
280
+
281
+ output
282
+ end
283
+ end
284
+
285
+ ## Destructive version of #apply_logic
286
+ def apply_logic!(variables)
287
+ replace apply_logic(variables)
288
+ end
289
+
165
290
  ##
166
291
  ## Apply key/value substitutions to a string. Variables are represented as
167
292
  ## %%key%%, and the hash passed to the function is { key: value }
@@ -177,6 +302,8 @@ module Planter
177
302
 
178
303
  content = content.apply_defaults(variables)
179
304
 
305
+ content = content.apply_logic(variables)
306
+
180
307
  variables.each do |k, v|
181
308
  if last_only
182
309
  pattern = "%%#{k.to_var}"
@@ -415,15 +542,18 @@ module Planter
415
542
  # number or float
416
543
  when /^[nf]/
417
544
  :float
418
- # multiline or paragraph
419
- when /^(mu|p)/
545
+ # paragraph
546
+ when /^p/
420
547
  :multiline
421
548
  # class
422
- when /^c/
549
+ when /^cl/
423
550
  :class
424
551
  # module
425
- when /^m/
552
+ when /^mod/
426
553
  :module
554
+ # multiple choice
555
+ when /^(ch|mu)/
556
+ :choice
427
557
  # string
428
558
  else
429
559
  :string
@@ -471,6 +601,14 @@ module Planter
471
601
  replace clean_encode
472
602
  end
473
603
 
604
+ ## Clean up a string by removing leading numbers and parentheticalse
605
+ ##
606
+ ## @return [String] cleaned string
607
+ ##
608
+ def clean_value
609
+ sub(/^\(?\d+\.\)? +/, '').sub(/\((.*?)\)/, '\1')
610
+ end
611
+
474
612
  ##
475
613
  ## Highlight characters in parenthesis, with special color for default if
476
614
  ## provided. Output is color templated string, unprocessed.
data/lib/planter/tag.rb CHANGED
@@ -4,6 +4,8 @@ module Planter
4
4
  module Tag
5
5
  class << self
6
6
  def set(target, tags)
7
+ return false unless TTY::Which.exist?('xattr')
8
+
7
9
  tags = [tags] unless tags.is_a?(Array)
8
10
 
9
11
  set_tags(target, tags)
@@ -15,15 +17,28 @@ module Planter
15
17
  # @param dir [String] The directory to tag.
16
18
  # @param tags [Array<String>] The tags to add.
17
19
  def add(target, tags)
20
+ return false unless TTY::Which.exist?('xattr')
21
+
18
22
  tags = [tags] unless tags.is_a?(Array)
19
23
  existing_tags = get(target)
20
24
  tags.concat(existing_tags).uniq!
21
25
 
22
26
  set_tags(target, tags)
23
- $? == 0
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
24
37
  end
25
38
 
26
39
  def get(target)
40
+ return false unless TTY::Which.exist?('xattr')
41
+
27
42
  res = `xattr -p com.apple.metadata:_kMDItemUserTags "#{target}" 2>/dev/null`.clean_encode
28
43
  return [] if res =~ /no such xattr/ || res.empty?
29
44
 
@@ -35,19 +50,41 @@ module Planter
35
50
  end
36
51
 
37
52
  def copy(source, target)
53
+ return false unless TTY::Which.exist?('xattr')
54
+
38
55
  tags = `xattr -px com.apple.metadata:_kMDItemUserTags "#{source}" 2>/dev/null`
39
56
  `xattr -wx com.apple.metadata:_kMDItemUserTags "#{tags}" "#{target}"`
40
- $? == 0
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
41
66
  end
42
67
 
43
68
  private
44
69
 
45
70
  def set_tags(target, tags)
71
+ return false unless TTY::Which.exist?('xattr')
72
+
46
73
  tags.map! { |tag| "<string>#{tag}</string>" }
47
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">
48
75
  <plist version="1.0">
49
76
  <array>#{tags.join}</array>
50
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
51
88
  end
52
89
  end
53
90
  end
@@ -3,5 +3,5 @@
3
3
  # Primary module for this gem.
4
4
  module Planter
5
5
  # Current Planter version.
6
- VERSION = '3.0.1'
6
+ VERSION = '3.0.3'
7
7
  end
data/lib/planter.rb CHANGED
@@ -11,9 +11,10 @@ require 'plist'
11
11
  require 'chronic'
12
12
  require 'tty-reader'
13
13
  require 'tty-screen'
14
- require 'tty-spinner'
14
+ # require 'tty-spinner'
15
15
  require 'tty-which'
16
16
 
17
+ require_relative 'tty-spinner/lib/tty-spinner'
17
18
  require_relative 'planter/version'
18
19
  require_relative 'planter/hash'
19
20
  require_relative 'planter/array'
@@ -72,20 +73,28 @@ module Planter
72
73
  ## @param string [String] The message string
73
74
  ## @param notification_type [Symbol] The notification type (:debug, :error, :warn, :info)
74
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
75
78
  ##
76
- def notify(string, notification_type = :info, exit_code: nil)
77
- case notification_type
78
- when :debug
79
- return false unless @debug
80
-
81
- warn "\n{dw}#{string}{x}".x
82
- when :error
83
- warn "{br}#{string}{x}".x
84
- when :warn
85
- warn "{by}#{string}{x}".x
86
- else
87
- warn "{bw}#{string}{x}".x
88
- 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 = out.gsub(/\[(.*?)\]/, "{by}\\1{x}#{color}")
96
+ out = "\n#{out}" if newline
97
+ above_spinner ? spinner.log(out.x) : warn(out.x)
89
98
 
90
99
  Process.exit exit_code unless exit_code.nil?
91
100
 
@@ -197,13 +206,17 @@ module Planter
197
206
  key: 'var_key',
198
207
  prompt: 'CLI Prompt',
199
208
  type: '[string, float, integer, number, date]',
200
- 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.)',
201
210
  default: '(optional default value, leave empty or remove key for no default)',
202
211
  min: '(optional, for number type set a minimum value)',
203
212
  max: '(optional, for number type set a maximum value)'
204
213
  ],
205
214
  git_init: false,
206
- files: { '*.tmp' => 'ignore' }
215
+ files: {
216
+ '*.tmp' => 'ignore',
217
+ '*.bak' => 'ignore',
218
+ '.DS_Store' => 'ignore'
219
+ }
207
220
  }
208
221
  FileUtils.mkdir_p(base_dir)
209
222
  File.open(config, 'w') { |f| f.puts(YAML.dump(default_config.stringify_keys)) }
@@ -238,7 +251,7 @@ module Planter
238
251
  def process_patterns
239
252
  patterns = {}
240
253
  @config[:files].each do |file, oper|
241
- pattern = Regexp.new(".*?/#{file.to_s.sub(%r{^/}, '').gsub(/\./, '\.').gsub(/\*/, '.*?').gsub(/\?/, '.')}$")
254
+ pattern = Regexp.new(".*?/#{file.to_s.sub(%r{^/}, '').to_rx}$")
242
255
  operator = oper.normalize_operator
243
256
  patterns[pattern] = operator
244
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