coltrane 3.4.2 → 4.1.0

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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +1 -1
  5. data/CHANGELOG.md +6 -0
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +88 -75
  8. data/bin/bundle +23 -14
  9. data/bin/console +24 -12
  10. data/bin/gambiarra +29 -0
  11. data/bin/old-coltrane +29 -0
  12. data/bin/setup +27 -6
  13. data/bin/thor +1 -1
  14. data/coltrane.gemspec +4 -4
  15. data/exe/coltrane +14 -55
  16. data/lib/.DS_Store +0 -0
  17. data/lib/coltrane/.DS_Store +0 -0
  18. data/lib/coltrane/commands.rb +4 -9
  19. data/lib/coltrane/commands/available_chord_representations.rb +9 -0
  20. data/lib/coltrane/commands/available_classic_scales.rb +9 -0
  21. data/lib/coltrane/commands/available_notable_progressions.rb +9 -0
  22. data/lib/coltrane/commands/available_representations.rb +9 -0
  23. data/lib/coltrane/commands/command.rb +3 -54
  24. data/lib/coltrane/commands/find_chord_by_notes.rb +9 -0
  25. data/lib/coltrane/commands/find_common_chords.rb +9 -0
  26. data/lib/coltrane/commands/find_progressions_from_chords.rb +9 -0
  27. data/lib/coltrane/commands/find_scale_by_chords.rb +9 -0
  28. data/lib/coltrane/commands/find_scale_by_notes.rb +9 -0
  29. data/lib/coltrane/commands/get_chords_from_notable_progression.rb +9 -0
  30. data/lib/coltrane/commands/get_chords_from_progression.rb +9 -0
  31. data/lib/coltrane/commands/get_chords_from_scale.rb +9 -0
  32. data/lib/coltrane/commands/get_chords_from_string.rb +11 -0
  33. data/lib/coltrane/commands/get_classic_scale.rb +9 -0
  34. data/lib/coltrane/commands/get_notes.rb +9 -0
  35. data/lib/coltrane/commands/get_notes_from_string.rb +9 -0
  36. data/lib/coltrane/commands/get_representation_chords.rb +18 -0
  37. data/lib/coltrane/commands/get_representation_notes.rb +12 -0
  38. data/lib/coltrane/commands/render.rb +9 -0
  39. data/lib/coltrane/renderers/text_renderer/hash_drawer.rb +1 -0
  40. data/lib/coltrane/renderers/text_renderer/representation_guitar_chord_drawer.rb +2 -2
  41. data/lib/coltrane/renderers/text_renderer/representation_piano_note_set_drawer.rb +1 -1
  42. data/lib/coltrane/renderers/text_renderer/theory_chord_drawer.rb +1 -2
  43. data/lib/coltrane/theory/classic_scales.rb +1 -1
  44. data/lib/coltrane/theory/interval.rb +1 -1
  45. data/lib/coltrane/ui.rb +8 -0
  46. data/lib/coltrane/ui/.DS_Store +0 -0
  47. data/lib/coltrane/ui/base_view.rb +9 -0
  48. data/lib/coltrane/ui/views/.DS_Store +0 -0
  49. data/lib/coltrane/ui/views/chords.rb +19 -0
  50. data/lib/coltrane/ui/views/custom_progression.rb +27 -0
  51. data/lib/coltrane/ui/views/find_chord_by_notes.rb +16 -0
  52. data/lib/coltrane/ui/views/find_chords_in_scale.rb +36 -0
  53. data/lib/coltrane/ui/views/find_common_chords_in_scales.rb +40 -0
  54. data/lib/coltrane/ui/views/find_progressions_from_chords.rb +14 -0
  55. data/lib/coltrane/ui/views/find_scale.rb +14 -0
  56. data/lib/coltrane/ui/views/find_scale_by_chords.rb +16 -0
  57. data/lib/coltrane/ui/views/find_scale_by_notes.rb +16 -0
  58. data/lib/coltrane/ui/views/index.rb +14 -0
  59. data/lib/coltrane/ui/views/notes.rb +20 -0
  60. data/lib/coltrane/ui/views/progressions.rb +18 -0
  61. data/lib/coltrane/ui/views/scales.rb +17 -0
  62. data/lib/coltrane/ui/views/show_chord.rb +21 -0
  63. data/lib/coltrane/ui/views/show_progression.rb +26 -0
  64. data/lib/coltrane/ui/views/show_scale.rb +26 -0
  65. data/lib/coltrane/version.rb +1 -1
  66. metadata +61 -26
  67. data/lib/coltrane/commands/chords.rb +0 -93
  68. data/lib/coltrane/commands/common_chords.rb +0 -33
  69. data/lib/coltrane/commands/errors.rb +0 -44
  70. data/lib/coltrane/commands/find_guitar_chord.rb +0 -25
  71. data/lib/coltrane/commands/find_progression.rb +0 -28
  72. data/lib/coltrane/commands/find_scale.rb +0 -39
  73. data/lib/coltrane/commands/notes.rb +0 -50
  74. data/lib/coltrane/commands/progression.rb +0 -28
  75. data/lib/coltrane/commands/scale.rb +0 -46
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 32946013238830132b204f366ee7b647033bc899d46326634a51a639dcd29dbc
4
- data.tar.gz: b67609e215a09f1e9b2f4a4346e0f0b37f6d89f0cea3b06a4266f838f0e17cdc
3
+ metadata.gz: 200087e08310a5e41ca48641d1f3c1cf87f114eb3add7743fbc73ebd33d3953d
4
+ data.tar.gz: 03b3da0eb7f619d778cd12008cd397e15883678179c1e385a1e7c0f49b8e9671
5
5
  SHA512:
6
- metadata.gz: 19aa9d773da33d5b2adf560071c0d3bd6ab3cb7e936014ff8065cda097b0d6ffb959f15eba5e26ca1bc0de3970fcb76a2e5b03a7ee9b01ff34dfccf9b7241cb8
7
- data.tar.gz: b3f307536e4a287135ace9901c7707cbb94c6138e05eaa7b1799c07e1162fc11eda8f854e06b0530fe9320d8e228e0de2f31072e0d275a7c1d0decc2c968081a
6
+ metadata.gz: b438a82b687d8a673b08c5dca43a81ca06d2264260a4f11fc7e5fe62da5e313198e18fd35c71f8d253198e59239261bc10d890dbf069f1f3f7253378d342cc8d
7
+ data.tar.gz: ffa7d8a8dae84e23438cd1c42c7efafd64943b41b1672d0563f673e2ca5860da8c87d0cf4d6ce09b5e1870c6f3acfa493078ab417e61c881dff3b95e6db104e4
Binary file
@@ -0,0 +1 @@
1
+ 3.0.0
@@ -7,7 +7,7 @@ git:
7
7
  depth: 1
8
8
 
9
9
  rvm:
10
- - 2.5.0
10
+ - 3.0.0
11
11
 
12
12
  before_script:
13
13
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
@@ -5,6 +5,12 @@
5
5
  - Fix chords so that they generate a barre and a non-barre version and prevent
6
6
  barre chords from picking notes before the barre.
7
7
 
8
+ ## [4.0.6]
9
+ - Change the CLI into a more intuitive one
10
+
11
+ ## [4.0.0]
12
+ - Includes totally revamped, easy to use command line interface.
13
+
8
14
  ## [3.4.2]
9
15
  - Fixes guitar strings rendering order (#41)
10
16
 
data/Gemfile CHANGED
@@ -15,4 +15,4 @@ group :test do
15
15
  gem 'rubocop', require: false
16
16
  end
17
17
 
18
- gemspec
18
+ gemspec
@@ -1,114 +1,127 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- coltrane (3.4.2)
4
+ coltrane (4.1.0)
5
+ activesupport (> 5.2)
5
6
  color (~> 1.8)
6
7
  dry-monads (~> 0.4)
8
+ gambiarra (~> 0)
7
9
  paint (~> 2.0)
8
- pedrozath-mercenary (= 0.3.8)
9
- tty-reader (~> 0.2)
10
10
 
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- ast (2.4.0)
15
- byebug (10.0.2)
16
- coderay (1.1.2)
14
+ activesupport (6.1.1)
15
+ concurrent-ruby (~> 1.0, >= 1.0.2)
16
+ i18n (>= 1.6, < 2)
17
+ minitest (>= 5.1)
18
+ tzinfo (~> 2.0)
19
+ zeitwerk (~> 2.3)
20
+ ast (2.4.1)
21
+ byebug (11.1.3)
22
+ cli-ui (1.4.0)
23
+ coderay (1.1.3)
17
24
  color (1.8)
18
- concurrent-ruby (1.0.5)
19
- diff-lcs (1.3)
20
- docile (1.3.0)
21
- dry-core (0.4.7)
25
+ concurrent-ruby (1.1.7)
26
+ diff-lcs (1.4.4)
27
+ docile (1.3.5)
28
+ dry-core (0.5.0)
22
29
  concurrent-ruby (~> 1.0)
23
- dry-equalizer (0.2.1)
30
+ dry-equalizer (0.3.0)
24
31
  dry-monads (0.4.0)
25
32
  dry-core (~> 0.3, >= 0.3.3)
26
33
  dry-equalizer
27
- equatable (0.5.0)
34
+ gambiarra (0.0.3)
35
+ activesupport (> 5.2)
36
+ cli-ui (~> 1.1)
37
+ thor (= 0.20)
28
38
  hike (1.2.3)
29
- hitimes (1.2.6)
30
- json (2.1.0)
31
- method_source (0.9.0)
32
- necromancer (0.4.0)
33
- opal (0.10.5)
39
+ i18n (1.8.7)
40
+ concurrent-ruby (~> 1.0)
41
+ method_source (1.0.0)
42
+ minitest (5.14.3)
43
+ opal (0.10.6)
34
44
  hike (~> 1.2)
35
45
  sourcemap (~> 0.1.0)
36
46
  sprockets (~> 3.1)
37
47
  tilt (>= 1.4)
38
- opal-rspec (0.6.1)
48
+ opal-rspec (0.6.2)
39
49
  opal (>= 0.10.0, < 0.12)
40
- paint (2.0.1)
41
- parallel (1.12.1)
42
- parser (2.5.0.5)
43
- ast (~> 2.4.0)
44
- pastel (0.7.2)
45
- equatable (~> 0.5.0)
46
- tty-color (~> 0.4.0)
47
- pedrozath-mercenary (0.3.8)
48
- powerpack (0.1.1)
49
- pry (0.11.3)
50
- coderay (~> 1.1.0)
51
- method_source (~> 0.9.0)
52
- pry-byebug (3.6.0)
53
- byebug (~> 10.0)
54
- pry (~> 0.10)
55
- rack (2.0.4)
50
+ paint (2.2.1)
51
+ parallel (1.20.1)
52
+ parser (3.0.0.0)
53
+ ast (~> 2.4.1)
54
+ pastel (0.8.0)
55
+ tty-color (~> 0.5)
56
+ pry (0.13.1)
57
+ coderay (~> 1.1)
58
+ method_source (~> 1.0)
59
+ pry-byebug (3.9.0)
60
+ byebug (~> 11.0)
61
+ pry (~> 0.13.0)
62
+ rack (2.2.3)
56
63
  rainbow (3.0.0)
57
64
  rake (10.5.0)
58
- rspec (3.7.0)
59
- rspec-core (~> 3.7.0)
60
- rspec-expectations (~> 3.7.0)
61
- rspec-mocks (~> 3.7.0)
62
- rspec-core (3.7.1)
63
- rspec-support (~> 3.7.0)
64
- rspec-expectations (3.7.0)
65
+ regexp_parser (2.0.3)
66
+ rexml (3.2.4)
67
+ rspec (3.10.0)
68
+ rspec-core (~> 3.10.0)
69
+ rspec-expectations (~> 3.10.0)
70
+ rspec-mocks (~> 3.10.0)
71
+ rspec-core (3.10.1)
72
+ rspec-support (~> 3.10.0)
73
+ rspec-expectations (3.10.1)
65
74
  diff-lcs (>= 1.2.0, < 2.0)
66
- rspec-support (~> 3.7.0)
67
- rspec-mocks (3.7.0)
75
+ rspec-support (~> 3.10.0)
76
+ rspec-mocks (3.10.1)
68
77
  diff-lcs (>= 1.2.0, < 2.0)
69
- rspec-support (~> 3.7.0)
70
- rspec-support (3.7.1)
71
- rubocop (0.54.0)
78
+ rspec-support (~> 3.10.0)
79
+ rspec-support (3.10.1)
80
+ rubocop (1.8.1)
72
81
  parallel (~> 1.10)
73
- parser (>= 2.5)
74
- powerpack (~> 0.1)
82
+ parser (>= 3.0.0.0)
75
83
  rainbow (>= 2.2.2, < 4.0)
84
+ regexp_parser (>= 1.8, < 3.0)
85
+ rexml
86
+ rubocop-ast (>= 1.2.0, < 2.0)
76
87
  ruby-progressbar (~> 1.7)
77
- unicode-display_width (~> 1.0, >= 1.0.1)
78
- ruby-progressbar (1.9.0)
79
- simplecov (0.16.1)
88
+ unicode-display_width (>= 1.4.0, < 3.0)
89
+ rubocop-ast (1.4.0)
90
+ parser (>= 2.7.1.5)
91
+ ruby-progressbar (1.11.0)
92
+ simplecov (0.21.2)
80
93
  docile (~> 1.1)
81
- json (>= 1.8, < 3)
82
- simplecov-html (~> 0.10.0)
83
- simplecov-html (0.10.2)
94
+ simplecov-html (~> 0.11)
95
+ simplecov_json_formatter (~> 0.1)
96
+ simplecov-html (0.12.3)
97
+ simplecov_json_formatter (0.1.2)
84
98
  sourcemap (0.1.1)
85
- sprockets (3.7.1)
99
+ sprockets (3.7.2)
86
100
  concurrent-ruby (~> 1.0)
87
101
  rack (> 1, < 3)
88
- tilt (2.0.8)
89
- timers (4.1.2)
90
- hitimes
91
- tty-color (0.4.2)
92
- tty-cursor (0.5.0)
93
- tty-prompt (0.16.0)
94
- necromancer (~> 0.4.0)
95
- pastel (~> 0.7.0)
96
- timers (~> 4.0)
97
- tty-cursor (~> 0.5.0)
98
- tty-reader (~> 0.2.0)
99
- tty-reader (0.2.0)
100
- tty-cursor (~> 0.5.0)
101
- tty-screen (~> 0.6.4)
102
- wisper (~> 2.0.0)
103
- tty-screen (0.6.4)
104
- unicode-display_width (1.3.0)
105
- wisper (2.0.0)
102
+ thor (0.20.0)
103
+ tilt (2.0.10)
104
+ tty-color (0.6.0)
105
+ tty-cursor (0.7.1)
106
+ tty-prompt (0.23.0)
107
+ pastel (~> 0.8)
108
+ tty-reader (~> 0.8)
109
+ tty-reader (0.9.0)
110
+ tty-cursor (~> 0.7)
111
+ tty-screen (~> 0.8)
112
+ wisper (~> 2.0)
113
+ tty-screen (0.8.1)
114
+ tzinfo (2.0.4)
115
+ concurrent-ruby (~> 1.0)
116
+ unicode-display_width (2.0.0)
117
+ wisper (2.0.1)
118
+ zeitwerk (2.4.2)
106
119
 
107
120
  PLATFORMS
108
121
  ruby
109
122
 
110
123
  DEPENDENCIES
111
- bundler (~> 1.14)
124
+ bundler (~> 2.2.5)
112
125
  coltrane!
113
126
  opal-rspec
114
127
  pry
@@ -120,4 +133,4 @@ DEPENDENCIES
120
133
  tty-prompt
121
134
 
122
135
  BUNDLED WITH
123
- 1.16.4
136
+ 2.2.5
data/bin/bundle CHANGED
@@ -11,7 +11,7 @@
11
11
  require "rubygems"
12
12
 
13
13
  m = Module.new do
14
- module_function
14
+ module_function
15
15
 
16
16
  def invoked_as_script?
17
17
  File.expand_path($0) == File.expand_path(__FILE__)
@@ -31,7 +31,7 @@ m = Module.new do
31
31
  bundler_version = a
32
32
  end
33
33
  next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
34
- bundler_version = $1 || ">= 0.a"
34
+ bundler_version = $1
35
35
  update_index = i
36
36
  end
37
37
  bundler_version
@@ -61,32 +61,41 @@ m = Module.new do
61
61
  end
62
62
 
63
63
  def bundler_version
64
- @bundler_version ||= begin
64
+ @bundler_version ||=
65
65
  env_var_version || cli_arg_version ||
66
- lockfile_version || "#{Gem::Requirement.default}.a"
67
- end
66
+ lockfile_version
67
+ end
68
+
69
+ def bundler_requirement
70
+ return "#{Gem::Requirement.default}.a" unless bundler_version
71
+
72
+ bundler_gem_version = Gem::Version.new(bundler_version)
73
+
74
+ requirement = bundler_gem_version.approximate_recommendation
75
+
76
+ return requirement unless Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.7.0")
77
+
78
+ requirement += ".a" if bundler_gem_version.prerelease?
79
+
80
+ requirement
68
81
  end
69
82
 
70
83
  def load_bundler!
71
84
  ENV["BUNDLE_GEMFILE"] ||= gemfile
72
85
 
73
- # must dup string for RG < 1.8 compatibility
74
- activate_bundler(bundler_version.dup)
86
+ activate_bundler
75
87
  end
76
88
 
77
- def activate_bundler(bundler_version)
78
- if Gem::Version.correct?(bundler_version) && Gem::Version.new(bundler_version).release < Gem::Version.new("2.0")
79
- bundler_version = "< 2"
80
- end
89
+ def activate_bundler
81
90
  gem_error = activation_error_handling do
82
- gem "bundler", bundler_version
91
+ gem "bundler", bundler_requirement
83
92
  end
84
93
  return if gem_error.nil?
85
94
  require_error = activation_error_handling do
86
95
  require "bundler/version"
87
96
  end
88
- return if require_error.nil? && Gem::Requirement.new(bundler_version).satisfied_by?(Gem::Version.new(Bundler::VERSION))
89
- warn "Activating bundler (#{bundler_version}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_version}'`"
97
+ return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
98
+ warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
90
99
  exit 42
91
100
  end
92
101
 
@@ -1,17 +1,29 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
2
+ # frozen_string_literal: true
3
3
 
4
- require "bundler/setup"
5
- require "coltrane"
6
- require "coltrane/commands"
7
- require "coltrane/representation"
8
- require "coltrane/renderers"
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'console' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
9
14
 
10
- require "pry"
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
11
16
 
12
- include Coltrane
13
- include Coltrane::Theory
14
- include Coltrane::Representation
15
- include Coltrane::Renderers
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
16
28
 
17
- Pry.start
29
+ load Gem.bin_path("wisper", "console")
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'gambiarra' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("gambiarra", "gambiarra")
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'old-coltrane' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("coltrane", "old-coltrane")
data/bin/setup CHANGED
@@ -1,8 +1,29 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
5
3
 
6
- bundle install
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'setup' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
7
10
 
8
- # Do any other automated setup that you need to do here
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("wisper", "setup")