yap-shell 0.7.1 → 0.7.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.
- checksums.yaml +4 -4
- data/.gitignore +9 -24
- data/Gemfile +1 -5
- data/LICENSE.txt +17 -18
- data/README.md +28 -14
- data/Rakefile +4 -1
- data/bin/yap +1 -3
- data/lib/.gitkeep +0 -0
- data/yap-shell.gemspec +12 -11
- metadata +19 -184
- data/.rspec +0 -2
- data/.travis.yml +0 -11
- data/DESIGN.md +0 -87
- data/Gemfile.travis +0 -8
- data/Gemfile.travis.lock +0 -104
- data/WISHLIST.md +0 -54
- data/bin/yap-dev +0 -45
- data/lib/tasks/gem.rake +0 -62
- data/lib/yap.rb +0 -52
- data/lib/yap/addon.rb +0 -24
- data/lib/yap/addon/base.rb +0 -52
- data/lib/yap/addon/export_as.rb +0 -12
- data/lib/yap/addon/loader.rb +0 -84
- data/lib/yap/addon/path.rb +0 -56
- data/lib/yap/addon/rc_file.rb +0 -21
- data/lib/yap/addon/reference.rb +0 -22
- data/lib/yap/cli.rb +0 -4
- data/lib/yap/cli/commands.rb +0 -6
- data/lib/yap/cli/commands/addon.rb +0 -14
- data/lib/yap/cli/commands/addon/disable.rb +0 -35
- data/lib/yap/cli/commands/addon/enable.rb +0 -35
- data/lib/yap/cli/commands/addon/list.rb +0 -37
- data/lib/yap/cli/commands/addon/search.rb +0 -99
- data/lib/yap/cli/commands/generate.rb +0 -13
- data/lib/yap/cli/commands/generate/addon.rb +0 -258
- data/lib/yap/cli/commands/generate/addonrb.template +0 -22
- data/lib/yap/cli/commands/generate/gemspec.template +0 -25
- data/lib/yap/cli/commands/generate/license.template +0 -21
- data/lib/yap/cli/commands/generate/rakefile.template +0 -6
- data/lib/yap/cli/commands/generate/readme.template +0 -40
- data/lib/yap/cli/options.rb +0 -162
- data/lib/yap/cli/options/addon.rb +0 -64
- data/lib/yap/cli/options/addon/disable.rb +0 -62
- data/lib/yap/cli/options/addon/enable.rb +0 -63
- data/lib/yap/cli/options/addon/list.rb +0 -65
- data/lib/yap/cli/options/addon/search.rb +0 -76
- data/lib/yap/cli/options/generate.rb +0 -59
- data/lib/yap/cli/options/generate/addon.rb +0 -63
- data/lib/yap/configuration.rb +0 -74
- data/lib/yap/gem_helper.rb +0 -195
- data/lib/yap/gem_tasks.rb +0 -6
- data/lib/yap/shell.rb +0 -116
- data/lib/yap/shell/aliases.rb +0 -58
- data/lib/yap/shell/builtins.rb +0 -18
- data/lib/yap/shell/builtins/alias.rb +0 -42
- data/lib/yap/shell/builtins/cd.rb +0 -57
- data/lib/yap/shell/builtins/env.rb +0 -11
- data/lib/yap/shell/commands.rb +0 -163
- data/lib/yap/shell/evaluation.rb +0 -439
- data/lib/yap/shell/evaluation/shell_expansions.rb +0 -99
- data/lib/yap/shell/event_emitter.rb +0 -18
- data/lib/yap/shell/execution.rb +0 -16
- data/lib/yap/shell/execution/builtin_command_execution.rb +0 -20
- data/lib/yap/shell/execution/command_execution.rb +0 -30
- data/lib/yap/shell/execution/context.rb +0 -128
- data/lib/yap/shell/execution/file_system_command_execution.rb +0 -137
- data/lib/yap/shell/execution/result.rb +0 -18
- data/lib/yap/shell/execution/ruby_command_execution.rb +0 -80
- data/lib/yap/shell/execution/shell_command_execution.rb +0 -30
- data/lib/yap/shell/prompt.rb +0 -21
- data/lib/yap/shell/repl.rb +0 -237
- data/lib/yap/shell/version.rb +0 -5
- data/lib/yap/world.rb +0 -286
- data/rcfiles/yaprc +0 -390
- data/scripts/4 +0 -8
- data/scripts/bg-vim +0 -4
- data/scripts/fail +0 -3
- data/scripts/letters +0 -8
- data/scripts/lots-of-output +0 -6
- data/scripts/pass +0 -3
- data/scripts/simulate-long-running +0 -4
- data/scripts/write-to-stderr.rb +0 -3
- data/scripts/write-to-stdout.rb +0 -3
- data/spec/features/addons/generating_an_addon_spec.rb +0 -55
- data/spec/features/addons/using_an_addon_spec.rb +0 -182
- data/spec/features/aliases_spec.rb +0 -78
- data/spec/features/environment_variables_spec.rb +0 -69
- data/spec/features/filesystem_commands_spec.rb +0 -61
- data/spec/features/first_time_spec.rb +0 -45
- data/spec/features/grouping_spec.rb +0 -81
- data/spec/features/line_editing_spec.rb +0 -174
- data/spec/features/range_spec.rb +0 -35
- data/spec/features/redirection_spec.rb +0 -234
- data/spec/features/repetition_spec.rb +0 -118
- data/spec/features/shell_expansions_spec.rb +0 -127
- data/spec/spec_helper.rb +0 -172
- data/spec/support/matchers/have_not_printed.rb +0 -30
- data/spec/support/matchers/have_printed.rb +0 -68
- data/spec/support/very_soon.rb +0 -9
- data/spec/support/yap_spec_dsl.rb +0 -258
- data/test.rb +0 -206
- data/update-rawline.sh +0 -6
data/lib/yap/addon/base.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Addon
|
3
|
-
class Base
|
4
|
-
def self.load_addon
|
5
|
-
@instance ||= new
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.addon_name
|
9
|
-
@addon_name ||= begin
|
10
|
-
addon_name = self.name.split(/::/)
|
11
|
-
.last.scan(/[A-Z][^A-Z]+/)
|
12
|
-
.map(&:downcase).reject{ |f| f == "addon" }
|
13
|
-
.join("_")
|
14
|
-
.to_sym
|
15
|
-
addon_name.length == 0 ? self.name : addon_name
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.export_as(name=nil)
|
20
|
-
if name
|
21
|
-
@export_as = name.to_sym
|
22
|
-
end
|
23
|
-
@export_as
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.logger
|
27
|
-
calling_method = caller[1][/`.*'/][1..-2]
|
28
|
-
Treefell["addon:#{export_as}"]["#{name}##{calling_method}"]
|
29
|
-
end
|
30
|
-
|
31
|
-
def addon_name
|
32
|
-
@addon_name ||= self.class.addon_name
|
33
|
-
end
|
34
|
-
|
35
|
-
def logger
|
36
|
-
self.class.logger
|
37
|
-
end
|
38
|
-
|
39
|
-
def export_as
|
40
|
-
self.class.export_as
|
41
|
-
end
|
42
|
-
|
43
|
-
def initialize(enabled: true)
|
44
|
-
@yap_enabled = enabled
|
45
|
-
end
|
46
|
-
|
47
|
-
def yap_enabled?
|
48
|
-
@yap_enabled
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/lib/yap/addon/export_as.rb
DELETED
data/lib/yap/addon/loader.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Addon
|
3
|
-
class Loader
|
4
|
-
def initialize(addon_references)
|
5
|
-
@addon_references = addon_references
|
6
|
-
end
|
7
|
-
|
8
|
-
def load_all
|
9
|
-
@addon_references.map do |reference|
|
10
|
-
load_reference(reference)
|
11
|
-
end.compact
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def bring_addon_into_existence(reference)
|
17
|
-
require reference.require_as
|
18
|
-
classified_name = reference.require_as.split('-').map(&:capitalize).join
|
19
|
-
unless Object.const_defined?(classified_name)
|
20
|
-
fail LoadError, "Expected #{name}.rb to load #{classified_name}, but it didn't"
|
21
|
-
end
|
22
|
-
|
23
|
-
addon = Object.const_get(classified_name)
|
24
|
-
addon_class = if addon.is_a?(Addon)
|
25
|
-
addon
|
26
|
-
elsif addon.const_defined?(:Addon)
|
27
|
-
addon.const_get(:Addon)
|
28
|
-
else
|
29
|
-
fail LoadError, "Expected gem #{name} to define a constant, but nothing was found"
|
30
|
-
end
|
31
|
-
addon_class.new enabled: reference.enabled?
|
32
|
-
end
|
33
|
-
|
34
|
-
def load_reference(reference)
|
35
|
-
begin
|
36
|
-
if Gem.path.any? { |path| reference.path.include?(path) }
|
37
|
-
load_gem reference
|
38
|
-
else
|
39
|
-
load_non_gem reference
|
40
|
-
end
|
41
|
-
rescue Exception => ex
|
42
|
-
puts Term::ANSIColor.red("Rut roh! The #{reference.name} addon failed to load.")
|
43
|
-
puts
|
44
|
-
puts ex.message
|
45
|
-
puts
|
46
|
-
puts "To uninstall this addon:"
|
47
|
-
puts
|
48
|
-
puts " gem uninstall #{reference.require_as}"
|
49
|
-
puts
|
50
|
-
puts "Note: this did not stop yap from loading, but functionality from the addon will be missing."
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def load_gem(reference)
|
55
|
-
gem reference.require_as
|
56
|
-
bring_addon_into_existence reference
|
57
|
-
end
|
58
|
-
|
59
|
-
def load_non_gem(reference)
|
60
|
-
lib_path = File.expand_path File.join(reference.path, 'lib')
|
61
|
-
Treefell['addon'].puts "prepending addon path to $LOAD_PATH: #{lib_path}"
|
62
|
-
$LOAD_PATH.unshift lib_path
|
63
|
-
|
64
|
-
bring_addon_into_existence reference
|
65
|
-
ensure
|
66
|
-
Treefell['addon'].puts "Removing addon #{lib_path} path from $LOAD_PATH"
|
67
|
-
$LOAD_PATH.delete(lib_path)
|
68
|
-
end
|
69
|
-
|
70
|
-
def self.load_rcfiles(files)
|
71
|
-
Treefell['addon'].puts %|searching for rcfiles:\n * #{files.join("\n * ")}|
|
72
|
-
files.map do |file|
|
73
|
-
if File.exists?(file)
|
74
|
-
Treefell['addon'].puts "rcfile #{file} found, loading."
|
75
|
-
RcFile.new file
|
76
|
-
else
|
77
|
-
Treefell['addon'].puts "rcfile #{file} not found, skipping."
|
78
|
-
end
|
79
|
-
end.flatten.compact
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
data/lib/yap/addon/path.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Addon
|
3
|
-
class Path
|
4
|
-
def self.find_for_configuration(configuration)
|
5
|
-
addons_config_hsh = {}
|
6
|
-
if File.exists?(configuration.yap_addons_configuration_path)
|
7
|
-
addons_config_hsh = YAML.load_file(configuration.yap_addons_configuration_path)
|
8
|
-
end
|
9
|
-
|
10
|
-
new(configuration.addon_paths.flatten, addons_config_hsh).
|
11
|
-
references.sort_by(&:name)
|
12
|
-
end
|
13
|
-
|
14
|
-
attr_reader :references
|
15
|
-
|
16
|
-
def initialize(paths, addons_config_hsh={})
|
17
|
-
@paths = paths
|
18
|
-
@addons_config_hsh = addons_config_hsh
|
19
|
-
end
|
20
|
-
|
21
|
-
def references
|
22
|
-
@references ||= search_for_addons
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def search_for_addons
|
28
|
-
@paths.each_with_object([]) do |path, results|
|
29
|
-
Dir["#{path}/*"].map do |directory|
|
30
|
-
next unless File.directory?(directory)
|
31
|
-
|
32
|
-
if File.basename(directory) =~ /(yap-shell-addon-(.*))-\d+\.\d+\.\d+/
|
33
|
-
require_as, name = $1, $2
|
34
|
-
|
35
|
-
addonrb_path = directory + "/lib/" + require_as + ".rb"
|
36
|
-
export_as = ExportAs.find_in_file(addonrb_path)
|
37
|
-
name = export_as if export_as
|
38
|
-
name = name.to_sym
|
39
|
-
|
40
|
-
enabled = !@addons_config_hsh.fetch(
|
41
|
-
name, { disabled: false }
|
42
|
-
)[:disabled]
|
43
|
-
|
44
|
-
results << Yap::Addon::Reference.new(
|
45
|
-
name: name,
|
46
|
-
require_as: require_as,
|
47
|
-
path: File.expand_path(directory),
|
48
|
-
enabled: enabled
|
49
|
-
)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
data/lib/yap/addon/rc_file.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Addon
|
3
|
-
class RcFile < Yap::Addon::Base
|
4
|
-
attr_reader :file
|
5
|
-
|
6
|
-
def initialize(file)
|
7
|
-
super(enabled: true)
|
8
|
-
@file = File.expand_path(file)
|
9
|
-
end
|
10
|
-
|
11
|
-
def addon_name
|
12
|
-
@file
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize_world(world)
|
16
|
-
Treefell['shell'].puts "initializing rcfile: #{file}"
|
17
|
-
world.instance_eval File.read(@file), @file
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/yap/addon/reference.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Addon
|
3
|
-
class Reference
|
4
|
-
attr_reader :name, :require_as, :path
|
5
|
-
|
6
|
-
def initialize(name:, require_as:, path:, enabled: true)
|
7
|
-
@name = name
|
8
|
-
@require_as = require_as
|
9
|
-
@path = path
|
10
|
-
@enabled = enabled
|
11
|
-
end
|
12
|
-
|
13
|
-
def disabled?
|
14
|
-
!@enabled
|
15
|
-
end
|
16
|
-
|
17
|
-
def enabled?
|
18
|
-
@enabled
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
data/lib/yap/cli.rb
DELETED
data/lib/yap/cli/commands.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Cli
|
3
|
-
module Commands
|
4
|
-
class Addon::Disable
|
5
|
-
def initialize(addon_name)
|
6
|
-
@addon_name = addon_name
|
7
|
-
end
|
8
|
-
|
9
|
-
def process
|
10
|
-
configuration = Yap.configuration
|
11
|
-
addon_refs = Yap::Addon::Path.find_for_configuration(configuration)
|
12
|
-
addon_config_hsh = {}
|
13
|
-
found_addon_ref = nil
|
14
|
-
addon_refs.each do |addon_ref|
|
15
|
-
is_disabled = addon_ref.disabled?
|
16
|
-
if addon_ref.name.to_s == @addon_name.to_s
|
17
|
-
is_disabled = true
|
18
|
-
found_addon_ref = addon_ref
|
19
|
-
end
|
20
|
-
addon_config_hsh[addon_ref.name] = { disabled: is_disabled }
|
21
|
-
end
|
22
|
-
|
23
|
-
if found_addon_ref
|
24
|
-
destination = configuration.yap_addons_configuration_path.to_s
|
25
|
-
FileUtils.mkdir_p File.dirname(destination)
|
26
|
-
File.write destination, addon_config_hsh.to_yaml
|
27
|
-
puts "Addon #{found_addon_ref.name} has been disabled"
|
28
|
-
else
|
29
|
-
puts "Could not find addon with name #{@addon_name}"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Cli
|
3
|
-
module Commands
|
4
|
-
class Addon::Enable
|
5
|
-
def initialize(addon_name)
|
6
|
-
@addon_name = addon_name
|
7
|
-
end
|
8
|
-
|
9
|
-
def process
|
10
|
-
configuration = Yap.configuration
|
11
|
-
addon_refs = Yap::Addon::Path.find_for_configuration(configuration)
|
12
|
-
addon_config_hsh = {}
|
13
|
-
found_addon_ref = nil
|
14
|
-
addon_refs.each do |addon_ref|
|
15
|
-
is_disabled = addon_ref.disabled?
|
16
|
-
if addon_ref.name.to_s == @addon_name.to_s
|
17
|
-
is_disabled = false
|
18
|
-
found_addon_ref = addon_ref
|
19
|
-
end
|
20
|
-
addon_config_hsh[addon_ref.name] = { disabled: is_disabled }
|
21
|
-
end
|
22
|
-
|
23
|
-
if found_addon_ref
|
24
|
-
destination = configuration.yap_addons_configuration_path.to_s
|
25
|
-
FileUtils.mkdir_p File.dirname(destination)
|
26
|
-
File.write destination, addon_config_hsh.to_yaml
|
27
|
-
puts "Addon #{found_addon_ref.name} has been enabled"
|
28
|
-
else
|
29
|
-
puts "Could not find addon with name #{@addon_name}"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Cli
|
3
|
-
module Commands
|
4
|
-
class Addon::List
|
5
|
-
def filter=(filter_kind)
|
6
|
-
@filter = filter_kind
|
7
|
-
end
|
8
|
-
|
9
|
-
def process
|
10
|
-
configuration = Yap.configuration
|
11
|
-
|
12
|
-
addon_refs = ::Yap::Addon::Path.
|
13
|
-
find_for_configuration(configuration)
|
14
|
-
if addon_refs.empty?
|
15
|
-
puts <<-MSG.strip_heredoc
|
16
|
-
|No addons found searching paths:
|
17
|
-
| - #{configuration.addon_paths.join("\n -")}
|
18
|
-
MSG
|
19
|
-
elsif @filter == :enabled
|
20
|
-
addon_refs.select(&:enabled?).each do |addon_ref|
|
21
|
-
puts "#{addon_ref.name}"
|
22
|
-
end
|
23
|
-
elsif @filter == :disabled
|
24
|
-
addon_refs.select(&:disabled?).each do |addon_ref|
|
25
|
-
puts "#{addon_ref.name}"
|
26
|
-
end
|
27
|
-
else
|
28
|
-
addon_refs.each do |addon_ref|
|
29
|
-
enabled_or_disabled = addon_ref.enabled? ? 'enabled' : 'disabled'
|
30
|
-
puts "#{addon_ref.name} (#{enabled_or_disabled})"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
module Yap
|
2
|
-
module Cli
|
3
|
-
module Commands
|
4
|
-
class Addon::Search
|
5
|
-
attr_accessor :all, :local, :prerelease, :search_term, :version
|
6
|
-
attr_accessor :show_gem_name
|
7
|
-
|
8
|
-
def process
|
9
|
-
options = []
|
10
|
-
|
11
|
-
if search_term.nil?
|
12
|
-
puts "No addons found. Please provide a search term."
|
13
|
-
end
|
14
|
-
|
15
|
-
options << '--all' if all
|
16
|
-
options << '--local' if local
|
17
|
-
options << '--prerelease' if prerelease
|
18
|
-
options << "--version #{version}" if version
|
19
|
-
|
20
|
-
print_addons gem_search(options)
|
21
|
-
end
|
22
|
-
|
23
|
-
def extract_gem_names_from_search(search_results)
|
24
|
-
search_results.lines.map(&:chomp).map do |line|
|
25
|
-
results = line.scan(/^(yap-shell-addon-(\S+))\s*\((\d+\.\d+\.\d+)\)/)
|
26
|
-
gem_name, _, _ = results.flatten
|
27
|
-
gem_name
|
28
|
-
end.compact
|
29
|
-
end
|
30
|
-
|
31
|
-
def gem_search(options)
|
32
|
-
search_results = `gem search #{options.join(' ')} yap-shell | grep #{search_term}`
|
33
|
-
gem_names = extract_gem_names_from_search search_results
|
34
|
-
gem_specs_for_gems gem_names
|
35
|
-
end
|
36
|
-
|
37
|
-
def gem_specs_for_gems(gem_names)
|
38
|
-
options = []
|
39
|
-
options << (local ? '-l' : '-r')
|
40
|
-
options << "--version #{version}" if version
|
41
|
-
gem_names.map do |gem_name|
|
42
|
-
YAML.load `gem spec #{options.join(' ')} #{gem_name}`
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def print_addons(gemspecs)
|
47
|
-
headers = {
|
48
|
-
name: (show_gem_name ? "Rubygem" : "Addon Name"),
|
49
|
-
version: "Version",
|
50
|
-
date: "Date Released",
|
51
|
-
author: "Author",
|
52
|
-
summary: "Summary"
|
53
|
-
}
|
54
|
-
value_for = {
|
55
|
-
name: -> (s) {
|
56
|
-
if show_gem_name
|
57
|
-
s.name
|
58
|
-
else
|
59
|
-
s.name.scan(/^yap-shell-addon-(\S+)/).flatten.first
|
60
|
-
end
|
61
|
-
},
|
62
|
-
version: -> (s) { s.version.to_s },
|
63
|
-
date: -> (s) { s.date.to_date.to_s },
|
64
|
-
author: -> (s) { s.author },
|
65
|
-
summary: -> (s) { s.summary }
|
66
|
-
}
|
67
|
-
|
68
|
-
longest = {
|
69
|
-
name: gemspecs.map{ |s| value_for[:name].call(s) }.concat(Array(headers[:name])).map(&:length).max,
|
70
|
-
version: gemspecs.map{ |s| value_for[:version].call(s) }.concat(Array(headers[:version])).map(&:length).max,
|
71
|
-
date: gemspecs.map{ |s| value_for[:date].call(s) }.concat(Array(headers[:date])).map(&:length).max,
|
72
|
-
author: gemspecs.map{ |s| value_for[:author].call(s) }.concat(Array(headers[:author])).map(&:length).max,
|
73
|
-
summary: gemspecs.map{ |s| value_for[:summary].call(s) }.concat(Array(headers[:summary])).map(&:length).max
|
74
|
-
}
|
75
|
-
|
76
|
-
spacing = " "
|
77
|
-
format_string = longest.reduce([]) do |str, (key, maxlength)|
|
78
|
-
str << "%-#{maxlength}s"
|
79
|
-
end.join(spacing)
|
80
|
-
|
81
|
-
output = gemspecs.map do |gemspec|
|
82
|
-
values = longest.keys.map { |key| value_for[key].call(gemspec) }
|
83
|
-
sprintf "#{format_string}", *values
|
84
|
-
end
|
85
|
-
output = output.join("\n")
|
86
|
-
|
87
|
-
highlighted_output = output.gsub(/(#{Regexp.escape(search_term)})/) do
|
88
|
-
Term::ANSIColor.cyan($1)
|
89
|
-
end
|
90
|
-
|
91
|
-
puts Term::ANSIColor.bright_black(
|
92
|
-
sprintf("#{format_string}", *longest.keys.map { |key| headers[key] })
|
93
|
-
)
|
94
|
-
puts highlighted_output
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|