sigterm_extensions 0.0.4
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 +7 -0
- data/CHANGELOG.md +17 -0
- data/Gemfile +6 -0
- data/LICENSE.md +0 -0
- data/README.md +0 -0
- data/bin/ctxirb +156 -0
- data/lib/git.rb +166 -0
- data/lib/git/LICENSE +21 -0
- data/lib/git/author.rb +14 -0
- data/lib/git/base.rb +551 -0
- data/lib/git/base/factory.rb +75 -0
- data/lib/git/branch.rb +126 -0
- data/lib/git/branches.rb +71 -0
- data/lib/git/config.rb +22 -0
- data/lib/git/diff.rb +159 -0
- data/lib/git/index.rb +5 -0
- data/lib/git/lib.rb +1041 -0
- data/lib/git/log.rb +128 -0
- data/lib/git/object.rb +312 -0
- data/lib/git/path.rb +31 -0
- data/lib/git/remote.rb +36 -0
- data/lib/git/repository.rb +6 -0
- data/lib/git/stash.rb +27 -0
- data/lib/git/stashes.rb +55 -0
- data/lib/git/status.rb +199 -0
- data/lib/git/version.rb +5 -0
- data/lib/git/working_directory.rb +4 -0
- data/lib/sigterm_extensions.rb +75 -0
- data/lib/sigterm_extensions/all.rb +12 -0
- data/lib/sigterm_extensions/backtrace_cleaner.rb +129 -0
- data/lib/sigterm_extensions/callbacks.rb +847 -0
- data/lib/sigterm_extensions/concern.rb +169 -0
- data/lib/sigterm_extensions/configurable.rb +38 -0
- data/lib/sigterm_extensions/core_ext.rb +4 -0
- data/lib/sigterm_extensions/core_ext/array.rb +3 -0
- data/lib/sigterm_extensions/core_ext/array/extract.rb +19 -0
- data/lib/sigterm_extensions/core_ext/array/extract_options.rb +29 -0
- data/lib/sigterm_extensions/core_ext/class.rb +3 -0
- data/lib/sigterm_extensions/core_ext/class/attribute.rb +139 -0
- data/lib/sigterm_extensions/core_ext/class/attribute_accessors.rb +4 -0
- data/lib/sigterm_extensions/core_ext/class/subclasses.rb +52 -0
- data/lib/sigterm_extensions/core_ext/custom.rb +12 -0
- data/lib/sigterm_extensions/core_ext/digest.rb +3 -0
- data/lib/sigterm_extensions/core_ext/digest/uuid.rb +51 -0
- data/lib/sigterm_extensions/core_ext/enumerable.rb +232 -0
- data/lib/sigterm_extensions/core_ext/file.rb +3 -0
- data/lib/sigterm_extensions/core_ext/file/atomic.rb +68 -0
- data/lib/sigterm_extensions/core_ext/hash.rb +3 -0
- data/lib/sigterm_extensions/core_ext/hash/deep_merge.rb +41 -0
- data/lib/sigterm_extensions/core_ext/hash/deep_transform_values.rb +44 -0
- data/lib/sigterm_extensions/core_ext/hash/except.rb +22 -0
- data/lib/sigterm_extensions/core_ext/hash/keys.rb +141 -0
- data/lib/sigterm_extensions/core_ext/hash/reverse_merge.rb +23 -0
- data/lib/sigterm_extensions/core_ext/hash/slice.rb +24 -0
- data/lib/sigterm_extensions/core_ext/kernel.rb +3 -0
- data/lib/sigterm_extensions/core_ext/kernel/concern.rb +12 -0
- data/lib/sigterm_extensions/core_ext/kernel/reporting.rb +43 -0
- data/lib/sigterm_extensions/core_ext/kernel/singleton_class.rb +6 -0
- data/lib/sigterm_extensions/core_ext/load_error.rb +7 -0
- data/lib/sigterm_extensions/core_ext/module.rb +3 -0
- data/lib/sigterm_extensions/core_ext/module/aliasing.rb +29 -0
- data/lib/sigterm_extensions/core_ext/module/anonymous.rb +28 -0
- data/lib/sigterm_extensions/core_ext/module/attr_internal.rb +36 -0
- data/lib/sigterm_extensions/core_ext/module/attribute_accessors.rb +208 -0
- data/lib/sigterm_extensions/core_ext/module/attribute_accessors_per_thread.rb +146 -0
- data/lib/sigterm_extensions/core_ext/module/concerning.rb +132 -0
- data/lib/sigterm_extensions/core_ext/module/delegation.rb +319 -0
- data/lib/sigterm_extensions/core_ext/module/redefine_method.rb +38 -0
- data/lib/sigterm_extensions/core_ext/module/remove_method.rb +15 -0
- data/lib/sigterm_extensions/core_ext/name_error.rb +36 -0
- data/lib/sigterm_extensions/core_ext/object.rb +3 -0
- data/lib/sigterm_extensions/core_ext/object/blank.rb +153 -0
- data/lib/sigterm_extensions/core_ext/object/colors.rb +39 -0
- data/lib/sigterm_extensions/core_ext/object/duplicable.rb +47 -0
- data/lib/sigterm_extensions/core_ext/object/inclusion.rb +27 -0
- data/lib/sigterm_extensions/core_ext/object/instance_variables.rb +28 -0
- data/lib/sigterm_extensions/core_ext/object/methods.rb +61 -0
- data/lib/sigterm_extensions/core_ext/object/with_options.rb +80 -0
- data/lib/sigterm_extensions/core_ext/range.rb +3 -0
- data/lib/sigterm_extensions/core_ext/range/compare_range.rb +74 -0
- data/lib/sigterm_extensions/core_ext/range/conversions.rb +39 -0
- data/lib/sigterm_extensions/core_ext/range/overlaps.rb +8 -0
- data/lib/sigterm_extensions/core_ext/securerandom.rb +43 -0
- data/lib/sigterm_extensions/core_ext/string.rb +3 -0
- data/lib/sigterm_extensions/core_ext/string/access.rb +93 -0
- data/lib/sigterm_extensions/core_ext/string/filters.rb +143 -0
- data/lib/sigterm_extensions/core_ext/string/starts_ends_with.rb +4 -0
- data/lib/sigterm_extensions/core_ext/string/strip.rb +25 -0
- data/lib/sigterm_extensions/core_ext/tryable.rb +132 -0
- data/lib/sigterm_extensions/descendants_tracker.rb +108 -0
- data/lib/sigterm_extensions/gem_methods.rb +47 -0
- data/lib/sigterm_extensions/hash_binding.rb +16 -0
- data/lib/sigterm_extensions/inflector.rb +339 -0
- data/lib/sigterm_extensions/inflector/acronyms.rb +42 -0
- data/lib/sigterm_extensions/inflector/inflections.rb +249 -0
- data/lib/sigterm_extensions/inflector/inflections/defaults.rb +117 -0
- data/lib/sigterm_extensions/inflector/rules.rb +37 -0
- data/lib/sigterm_extensions/inflector/version.rb +8 -0
- data/lib/sigterm_extensions/interactive_editor.rb +120 -0
- data/lib/sigterm_extensions/lazy.rb +34 -0
- data/lib/sigterm_extensions/lazy_load_hooks.rb +79 -0
- data/lib/sigterm_extensions/option_merger.rb +32 -0
- data/lib/sigterm_extensions/ordered_hash.rb +48 -0
- data/lib/sigterm_extensions/ordered_options.rb +83 -0
- data/lib/sigterm_extensions/paths.rb +235 -0
- data/lib/sigterm_extensions/per_thread_registry.rb +58 -0
- data/lib/sigterm_extensions/proxy_object.rb +14 -0
- data/lib/sigterm_extensions/staging/boot.rb +31 -0
- data/lib/sigterm_extensions/staging/boot/bundler_patch.rb +24 -0
- data/lib/sigterm_extensions/staging/boot/command.rb +26 -0
- data/lib/sigterm_extensions/staging/boot/gemfile_next_auto_sync.rb +79 -0
- data/lib/sigterm_extensions/version.rb +4 -0
- data/lib/sigterm_extensions/wrappable.rb +16 -0
- data/sigterm_extensions.gemspec +42 -0
- data/templates/dotpryrc.rb.erb +124 -0
- metadata +315 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require "sigterm_extensions/core_ext/module/delegation"
|
|
2
|
+
|
|
3
|
+
module SigtermExtensions
|
|
4
|
+
# NOTE: This approach has been deprecated for end-user code in favor of {thread_mattr_accessor}[rdoc-ref:Module#thread_mattr_accessor] and friends.
|
|
5
|
+
# Please use that approach instead.
|
|
6
|
+
#
|
|
7
|
+
# This module is used to encapsulate access to thread local variables.
|
|
8
|
+
#
|
|
9
|
+
# Instead of polluting the thread locals namespace:
|
|
10
|
+
#
|
|
11
|
+
# Thread.current[:connection_handler]
|
|
12
|
+
#
|
|
13
|
+
# you define a class that extends this module:
|
|
14
|
+
#
|
|
15
|
+
# module ActiveRecord
|
|
16
|
+
# class RuntimeRegistry
|
|
17
|
+
# extend ActiveSupport::PerThreadRegistry
|
|
18
|
+
#
|
|
19
|
+
# attr_accessor :connection_handler
|
|
20
|
+
# end
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
# and invoke the declared instance accessors as class methods. So
|
|
24
|
+
#
|
|
25
|
+
# ActiveRecord::RuntimeRegistry.connection_handler = connection_handler
|
|
26
|
+
#
|
|
27
|
+
# sets a connection handler local to the current thread, and
|
|
28
|
+
#
|
|
29
|
+
# ActiveRecord::RuntimeRegistry.connection_handler
|
|
30
|
+
#
|
|
31
|
+
# returns a connection handler local to the current thread.
|
|
32
|
+
#
|
|
33
|
+
# This feature is accomplished by instantiating the class and storing the
|
|
34
|
+
# instance as a thread local keyed by the class name. In the example above
|
|
35
|
+
# a key "ActiveRecord::RuntimeRegistry" is stored in <tt>Thread.current</tt>.
|
|
36
|
+
# The class methods proxy to said thread local instance.
|
|
37
|
+
#
|
|
38
|
+
# If the class has an initializer, it must accept no arguments.
|
|
39
|
+
module PerThreadRegistry
|
|
40
|
+
def self.extended(object)
|
|
41
|
+
object.instance_variable_set :@per_thread_registry_key, object.name.freeze
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def instance
|
|
45
|
+
Thread.current[@per_thread_registry_key] ||= new
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
def method_missing(name, *args, &block)
|
|
50
|
+
# Caches the method definition as a singleton method of the receiver.
|
|
51
|
+
#
|
|
52
|
+
# By letting #delegate handle it, we avoid an enclosure that'll capture args.
|
|
53
|
+
singleton_class.delegate name, to: :instance
|
|
54
|
+
|
|
55
|
+
send(name, *args, &block)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
module SigtermExtensions
|
|
3
|
+
# A class with no predefined methods that behaves similarly to Builder's
|
|
4
|
+
# BlankSlate. Used for proxy classes.
|
|
5
|
+
class ProxyObject < ::BasicObject
|
|
6
|
+
#undef_method :== if defined? :==
|
|
7
|
+
#undef_method :equal?
|
|
8
|
+
|
|
9
|
+
# Let SigtermExtensions::ProxyObject at least raise exceptions.
|
|
10
|
+
def raise(*args)
|
|
11
|
+
::Object.send(:raise, *args)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative 'boot/bundler_patch'
|
|
2
|
+
|
|
3
|
+
module SigtermExtensions
|
|
4
|
+
module Boot
|
|
5
|
+
GEMFILE = Bundler.default_gemfile
|
|
6
|
+
GEMFILE_LOCK = Pathname("#{GEMFILE}.lock")
|
|
7
|
+
GEMFILE_NEXT_LOCK = Pathname("#{GEMFILE}_next.lock")
|
|
8
|
+
|
|
9
|
+
autoload :GemfileNextAutoSync, 'sigterm_extensions/staging/boot/gemfile_next_auto_sync'
|
|
10
|
+
autoload :Command, 'sigterm_extensions/staging/boot/command'
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
def env_next
|
|
14
|
+
env_prefix + '_NEXT'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def env_previous
|
|
18
|
+
env_prefix + '_PREVIOUS'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def env_prefix
|
|
24
|
+
Bundler.settings['boot_env_prefix'] || 'DEPENDENCIES'
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Boot::GemfileNextAutoSync.new.setup
|
|
30
|
+
Boot::Command.new.setup
|
|
31
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module DefinitionPatch
|
|
2
|
+
def initialize(wrong_lock, *args)
|
|
3
|
+
lockfile = if ENV['SKIP_BUNDLER_PATCH']
|
|
4
|
+
wrong_lock
|
|
5
|
+
else
|
|
6
|
+
SigtermExtensions::Boot::GEMFILE_NEXT_LOCK
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
super(lockfile, *args)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module SharedHelpersPatch
|
|
14
|
+
def default_lockfile
|
|
15
|
+
SigtermExtensions::Boot::GEMFILE_NEXT_LOCK
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Bundler::Dsl.class_eval do
|
|
20
|
+
def enable_dual_booting
|
|
21
|
+
Bundler::Definition.prepend(DefinitionPatch)
|
|
22
|
+
Bundler::SharedHelpers.singleton_class.prepend(SharedHelpersPatch)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module SigtermExtensions
|
|
4
|
+
module Boot
|
|
5
|
+
class Command < Bundler::Plugin::API
|
|
6
|
+
def setup
|
|
7
|
+
self.class.command('boot')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def exec(_cmd, _args)
|
|
11
|
+
FileUtils.cp(GEMFILE_LOCK, GEMFILE_NEXT_LOCK)
|
|
12
|
+
|
|
13
|
+
File.open(GEMFILE, 'a+') do |f|
|
|
14
|
+
f.write(<<-EOM)
|
|
15
|
+
Plugin.send(:load_plugin, 'boot') if Plugin.installed?('boot')
|
|
16
|
+
if ENV['#{::SigtermExtensions::Boot.env_next}']
|
|
17
|
+
enable_dual_booting if Plugin.installed?('boot')
|
|
18
|
+
# Add any gem you want here, they will be loaded only when running
|
|
19
|
+
# bundler command prefixed with `#{::SigtermExtensions::Boot.env_next}=1`.
|
|
20
|
+
end
|
|
21
|
+
EOM
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
module SigtermExtensions
|
|
2
|
+
module Boot
|
|
3
|
+
class GemfileNextAutoSync < Bundler::Plugin::API
|
|
4
|
+
def setup
|
|
5
|
+
check_bundler_version
|
|
6
|
+
opt_in
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def check_bundler_version
|
|
12
|
+
self.class.hook("before-install-all") do
|
|
13
|
+
next if Bundler::VERSION >= "1.17.0" || !GEMFILE_NEXT_LOCK.exist?
|
|
14
|
+
|
|
15
|
+
Bundler.ui.warn(<<-EOM.gsub(/\s+/, " "))
|
|
16
|
+
Boot can't automatically update the Gemfile_next.lock because you are running
|
|
17
|
+
an older version of Bundler.
|
|
18
|
+
Update Bundler to 1.17.0 to discard this warning.
|
|
19
|
+
EOM
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def opt_in
|
|
24
|
+
self.class.hook('before-install-all') do
|
|
25
|
+
@previous_lock = Bundler.default_lockfile.read
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
self.class.hook("after-install-all") do
|
|
29
|
+
current_definition = Bundler.definition
|
|
30
|
+
|
|
31
|
+
next if !GEMFILE_NEXT_LOCK.exist? ||
|
|
32
|
+
nothing_changed?(current_definition) ||
|
|
33
|
+
ENV[Boot.env_next] ||
|
|
34
|
+
ENV[Boot.env_previous]
|
|
35
|
+
|
|
36
|
+
update!(current_definition)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def nothing_changed?(current_definition)
|
|
41
|
+
current_definition.to_lock == @previous_lock
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def update!(current_definition)
|
|
45
|
+
env = which_env
|
|
46
|
+
lock = which_lock
|
|
47
|
+
|
|
48
|
+
Bundler.ui.confirm("Updating the #{lock}")
|
|
49
|
+
ENV[env] = '1'
|
|
50
|
+
ENV['SKIP_BUNDLER_PATCH'] = '1'
|
|
51
|
+
|
|
52
|
+
unlock = current_definition.instance_variable_get(:@unlock)
|
|
53
|
+
definition = Bundler::Definition.build(GEMFILE, lock, unlock)
|
|
54
|
+
definition.resolve_remotely!
|
|
55
|
+
definition.lock(lock)
|
|
56
|
+
ensure
|
|
57
|
+
ENV.delete(env)
|
|
58
|
+
ENV.delete('SKIP_BUNDLER_PATCH')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def which_env
|
|
62
|
+
if Bundler.default_lockfile.to_s =~ /_next\.lock/
|
|
63
|
+
Boot.env_previous
|
|
64
|
+
else
|
|
65
|
+
Boot.env_next
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def which_lock
|
|
70
|
+
if Bundler.default_lockfile.to_s =~ /_next\.lock/
|
|
71
|
+
GEMFILE_LOCK
|
|
72
|
+
else
|
|
73
|
+
GEMFILE_NEXT_LOCK
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module SigtermExtensions
|
|
2
|
+
module Wrappable
|
|
3
|
+
@@wrappers = []
|
|
4
|
+
|
|
5
|
+
def wrap(mod)
|
|
6
|
+
@@wrappers << mod
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def new(*arguments, &block)
|
|
10
|
+
instance = allocate
|
|
11
|
+
@@wrappers.each { |mod| instance.singleton_class.include(mod) }
|
|
12
|
+
instance.send(:initialize, *arguments, &block)
|
|
13
|
+
instance
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
lib = File.expand_path('./lib', __dir__)
|
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
|
+
|
|
4
|
+
require 'sigterm_extensions/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = 'sigterm_extensions'
|
|
8
|
+
s.version = SigtermExtensions::VERSION
|
|
9
|
+
s.date = '2019-10-16'
|
|
10
|
+
s.summary = 'Sigterm Extensions'
|
|
11
|
+
s.description = 'Later'
|
|
12
|
+
s.authors = ['Mikal Villa']
|
|
13
|
+
s.email = 'mikalv@sigterm.no'
|
|
14
|
+
s.homepage = 'https://rubygems.org/gems/sigterm_extensions'
|
|
15
|
+
s.license = 'MIT'
|
|
16
|
+
|
|
17
|
+
s.bindir = 'bin'
|
|
18
|
+
s.require_paths = ['lib']
|
|
19
|
+
s.required_ruby_version = '>= 2.4'
|
|
20
|
+
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to?(:required_rubygems_version=)
|
|
21
|
+
s.requirements = ['git 1.6.0.0, or greater']
|
|
22
|
+
|
|
23
|
+
s.files = `git ls-files -- bin/* lib/* templates/* CHANGELOG.md LICENSE.md README.md Gemfile sigterm_extensions.gemspec`.split($INPUT_RECORD_SEPARATOR)
|
|
24
|
+
s.executables = ['ctxirb'] #s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
25
|
+
|
|
26
|
+
s.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
27
|
+
|
|
28
|
+
s.extra_rdoc_files = ['README.md']
|
|
29
|
+
s.rdoc_options = ['--charset=UTF-8']
|
|
30
|
+
|
|
31
|
+
s.add_dependency 'irbtools', '~> 3.0.0'
|
|
32
|
+
s.add_dependency 'irbtools-more', '~> 2.3.1'
|
|
33
|
+
s.add_dependency 'highline', '~> 0.6.1' # For prompts in terminal
|
|
34
|
+
s.add_dependency 'awesome_print', '~> 0.3.2'
|
|
35
|
+
s.add_dependency 'table_print', '~> 1.5.6'
|
|
36
|
+
s.add_dependency 'hirb', '~> 0.7.3'
|
|
37
|
+
s.add_dependency 'pycall'
|
|
38
|
+
s.add_dependency 'concurrent-ruby'
|
|
39
|
+
s.add_development_dependency 'pry', '~> 0'
|
|
40
|
+
s.add_development_dependency 'rake', '~> 13.0'
|
|
41
|
+
s.add_development_dependency 'bundler', '~> 2.0'
|
|
42
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# === EDITOR ===
|
|
2
|
+
Pry.editor = 'code' # 'vi', 'code', 'subl'
|
|
3
|
+
|
|
4
|
+
# === PROMPT ===
|
|
5
|
+
Pry.prompt = [ ->(obj, nest_level, _) { "✎ " }, ->(obj, nest_level, _) { "#{' ' * nest_level} " } ]
|
|
6
|
+
|
|
7
|
+
# === COLORS ===
|
|
8
|
+
unless ENV['PRY_BW']
|
|
9
|
+
Pry.color = true
|
|
10
|
+
Pry.config.theme = "railscasts"
|
|
11
|
+
Pry.config.prompt = PryRails::RAILS_PROMPT if defined?(PryRails::RAILS_PROMPT)
|
|
12
|
+
Pry.config.prompt ||= Pry.prompt
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# === HISTORY ===
|
|
16
|
+
Pry.config.history.should_save = true
|
|
17
|
+
Pry::Commands.command /^$/, "repeat last command" do
|
|
18
|
+
_pry_.run_command Pry.history.to_a.last
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# == Pry-Nav - Using pry as a debugger ==
|
|
22
|
+
Pry.commands.alias_command 'c', 'continue' rescue nil
|
|
23
|
+
Pry.commands.alias_command 's', 'step' rescue nil
|
|
24
|
+
Pry.commands.alias_command 'n', 'next' rescue nil
|
|
25
|
+
Pry.commands.alias_command 'f', 'finish' rescue nil
|
|
26
|
+
Pry.commands.alias_command 'l', 'whereami' rescue nil
|
|
27
|
+
|
|
28
|
+
# === Listing config ===
|
|
29
|
+
# Better colors - by default the headings for methods are too
|
|
30
|
+
# similar to method name colors leading to a "soup"
|
|
31
|
+
# These colors are optimized for use with Solarized scheme
|
|
32
|
+
# for your terminal
|
|
33
|
+
Pry.config.ls.separator = "\n" # new lines between methods
|
|
34
|
+
Pry.config.ls.heading_color = :magenta
|
|
35
|
+
Pry.config.ls.public_method_color = :green
|
|
36
|
+
Pry.config.ls.protected_method_color = :yellow
|
|
37
|
+
Pry.config.ls.private_method_color = :bright_black
|
|
38
|
+
|
|
39
|
+
# == PLUGINS ===
|
|
40
|
+
# awesome_print gem: great syntax colorized printing
|
|
41
|
+
# look at ~/.aprc for more settings for awesome_print
|
|
42
|
+
begin
|
|
43
|
+
require 'awesome_print'
|
|
44
|
+
# The following line enables awesome_print for all pry output,
|
|
45
|
+
# and it also enables paging
|
|
46
|
+
Pry.config.print = proc {|output, value| Pry::Helpers::BaseHelpers.stagger_output("=> #{value.ai}", output)}
|
|
47
|
+
|
|
48
|
+
# If you want awesome_print without automatic pagination, use the line below
|
|
49
|
+
module AwesomePrint
|
|
50
|
+
Formatter.prepend(Module.new do
|
|
51
|
+
def awesome_self(object, type)
|
|
52
|
+
if type == :string && @options[:string_limit] && object.inspect.to_s.length > @options[:string_limit]
|
|
53
|
+
colorize(object.inspect.to_s[0..@options[:string_limit]] + "...", type)
|
|
54
|
+
else
|
|
55
|
+
super(object, type)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
AwesomePrint.defaults = {
|
|
62
|
+
:string_limit => 80,
|
|
63
|
+
:indent => 2,
|
|
64
|
+
:multiline => true
|
|
65
|
+
}
|
|
66
|
+
AwesomePrint.pry!
|
|
67
|
+
rescue LoadError => err
|
|
68
|
+
puts "gem install awesome_print # <-- highly recommended"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# === CUSTOM COMMANDS ===
|
|
72
|
+
default_command_set = Pry::CommandSet.new do
|
|
73
|
+
command "sql", "Send sql over AR." do |query|
|
|
74
|
+
if ENV['RAILS_ENV'] || defined?(Rails)
|
|
75
|
+
pp ActiveRecord::Base.connection.select_all(query)
|
|
76
|
+
else
|
|
77
|
+
pp "No rails env defined"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
Pry.config.commands.import default_command_set
|
|
83
|
+
|
|
84
|
+
# === CONVENIENCE METHODS ===
|
|
85
|
+
class Array
|
|
86
|
+
def self.sample(n=10, &block)
|
|
87
|
+
block_given? ? Array.new(n,&block) : Array.new(n) {|i| i+1}
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class Hash
|
|
92
|
+
def self.sample(n=10)
|
|
93
|
+
(97...97+n).map(&:chr).map(&:to_sym).zip(0...n).to_h
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# === COLOR CUSTOMIZATION ===
|
|
98
|
+
# Everything below this line is for customizing colors, you have to use the ugly
|
|
99
|
+
# color codes, but such is life.
|
|
100
|
+
CodeRay.scan("example", :ruby).term # just to load necessary files
|
|
101
|
+
# Token colors pulled from: https://github.com/rubychan/coderay/blob/master/lib/coderay/encoders/terminal.rb
|
|
102
|
+
|
|
103
|
+
$LOAD_PATH << File.dirname(File.realpath(__FILE__))
|
|
104
|
+
|
|
105
|
+
# In CodeRay >= 1.1.0 token colors are defined as pre-escaped ANSI codes
|
|
106
|
+
if Gem::Version.new(CodeRay::VERSION) >= Gem::Version.new('1.1.0')
|
|
107
|
+
require "escaped_colors"
|
|
108
|
+
else
|
|
109
|
+
require "unescaped_colors"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
module CodeRay
|
|
113
|
+
module Encoders
|
|
114
|
+
class Terminal < Encoder
|
|
115
|
+
# override old colors
|
|
116
|
+
TERM_TOKEN_COLORS.each_pair do |key, value|
|
|
117
|
+
TOKEN_COLORS[key] = value
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
metadata
ADDED
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: sigterm_extensions
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.4
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Mikal Villa
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2019-10-16 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: irbtools
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 3.0.0
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 3.0.0
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: irbtools-more
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 2.3.1
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 2.3.1
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: highline
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 0.6.1
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 0.6.1
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: awesome_print
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 0.3.2
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 0.3.2
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: table_print
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: 1.5.6
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: 1.5.6
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: hirb
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 0.7.3
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: 0.7.3
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: pycall
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
type: :runtime
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: concurrent-ruby
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - ">="
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '0'
|
|
118
|
+
type: :runtime
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '0'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: pry
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '0'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: rake
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - "~>"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '13.0'
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - "~>"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '13.0'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: bundler
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '2.0'
|
|
160
|
+
type: :development
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '2.0'
|
|
167
|
+
description: Later
|
|
168
|
+
email: mikalv@sigterm.no
|
|
169
|
+
executables:
|
|
170
|
+
- ctxirb
|
|
171
|
+
extensions: []
|
|
172
|
+
extra_rdoc_files:
|
|
173
|
+
- README.md
|
|
174
|
+
files:
|
|
175
|
+
- CHANGELOG.md
|
|
176
|
+
- Gemfile
|
|
177
|
+
- LICENSE.md
|
|
178
|
+
- README.md
|
|
179
|
+
- bin/ctxirb
|
|
180
|
+
- lib/git.rb
|
|
181
|
+
- lib/git/LICENSE
|
|
182
|
+
- lib/git/author.rb
|
|
183
|
+
- lib/git/base.rb
|
|
184
|
+
- lib/git/base/factory.rb
|
|
185
|
+
- lib/git/branch.rb
|
|
186
|
+
- lib/git/branches.rb
|
|
187
|
+
- lib/git/config.rb
|
|
188
|
+
- lib/git/diff.rb
|
|
189
|
+
- lib/git/index.rb
|
|
190
|
+
- lib/git/lib.rb
|
|
191
|
+
- lib/git/log.rb
|
|
192
|
+
- lib/git/object.rb
|
|
193
|
+
- lib/git/path.rb
|
|
194
|
+
- lib/git/remote.rb
|
|
195
|
+
- lib/git/repository.rb
|
|
196
|
+
- lib/git/stash.rb
|
|
197
|
+
- lib/git/stashes.rb
|
|
198
|
+
- lib/git/status.rb
|
|
199
|
+
- lib/git/version.rb
|
|
200
|
+
- lib/git/working_directory.rb
|
|
201
|
+
- lib/sigterm_extensions.rb
|
|
202
|
+
- lib/sigterm_extensions/all.rb
|
|
203
|
+
- lib/sigterm_extensions/backtrace_cleaner.rb
|
|
204
|
+
- lib/sigterm_extensions/callbacks.rb
|
|
205
|
+
- lib/sigterm_extensions/concern.rb
|
|
206
|
+
- lib/sigterm_extensions/configurable.rb
|
|
207
|
+
- lib/sigterm_extensions/core_ext.rb
|
|
208
|
+
- lib/sigterm_extensions/core_ext/array.rb
|
|
209
|
+
- lib/sigterm_extensions/core_ext/array/extract.rb
|
|
210
|
+
- lib/sigterm_extensions/core_ext/array/extract_options.rb
|
|
211
|
+
- lib/sigterm_extensions/core_ext/class.rb
|
|
212
|
+
- lib/sigterm_extensions/core_ext/class/attribute.rb
|
|
213
|
+
- lib/sigterm_extensions/core_ext/class/attribute_accessors.rb
|
|
214
|
+
- lib/sigterm_extensions/core_ext/class/subclasses.rb
|
|
215
|
+
- lib/sigterm_extensions/core_ext/custom.rb
|
|
216
|
+
- lib/sigterm_extensions/core_ext/digest.rb
|
|
217
|
+
- lib/sigterm_extensions/core_ext/digest/uuid.rb
|
|
218
|
+
- lib/sigterm_extensions/core_ext/enumerable.rb
|
|
219
|
+
- lib/sigterm_extensions/core_ext/file.rb
|
|
220
|
+
- lib/sigterm_extensions/core_ext/file/atomic.rb
|
|
221
|
+
- lib/sigterm_extensions/core_ext/hash.rb
|
|
222
|
+
- lib/sigterm_extensions/core_ext/hash/deep_merge.rb
|
|
223
|
+
- lib/sigterm_extensions/core_ext/hash/deep_transform_values.rb
|
|
224
|
+
- lib/sigterm_extensions/core_ext/hash/except.rb
|
|
225
|
+
- lib/sigterm_extensions/core_ext/hash/keys.rb
|
|
226
|
+
- lib/sigterm_extensions/core_ext/hash/reverse_merge.rb
|
|
227
|
+
- lib/sigterm_extensions/core_ext/hash/slice.rb
|
|
228
|
+
- lib/sigterm_extensions/core_ext/kernel.rb
|
|
229
|
+
- lib/sigterm_extensions/core_ext/kernel/concern.rb
|
|
230
|
+
- lib/sigterm_extensions/core_ext/kernel/reporting.rb
|
|
231
|
+
- lib/sigterm_extensions/core_ext/kernel/singleton_class.rb
|
|
232
|
+
- lib/sigterm_extensions/core_ext/load_error.rb
|
|
233
|
+
- lib/sigterm_extensions/core_ext/module.rb
|
|
234
|
+
- lib/sigterm_extensions/core_ext/module/aliasing.rb
|
|
235
|
+
- lib/sigterm_extensions/core_ext/module/anonymous.rb
|
|
236
|
+
- lib/sigterm_extensions/core_ext/module/attr_internal.rb
|
|
237
|
+
- lib/sigterm_extensions/core_ext/module/attribute_accessors.rb
|
|
238
|
+
- lib/sigterm_extensions/core_ext/module/attribute_accessors_per_thread.rb
|
|
239
|
+
- lib/sigterm_extensions/core_ext/module/concerning.rb
|
|
240
|
+
- lib/sigterm_extensions/core_ext/module/delegation.rb
|
|
241
|
+
- lib/sigterm_extensions/core_ext/module/redefine_method.rb
|
|
242
|
+
- lib/sigterm_extensions/core_ext/module/remove_method.rb
|
|
243
|
+
- lib/sigterm_extensions/core_ext/name_error.rb
|
|
244
|
+
- lib/sigterm_extensions/core_ext/object.rb
|
|
245
|
+
- lib/sigterm_extensions/core_ext/object/blank.rb
|
|
246
|
+
- lib/sigterm_extensions/core_ext/object/colors.rb
|
|
247
|
+
- lib/sigterm_extensions/core_ext/object/duplicable.rb
|
|
248
|
+
- lib/sigterm_extensions/core_ext/object/inclusion.rb
|
|
249
|
+
- lib/sigterm_extensions/core_ext/object/instance_variables.rb
|
|
250
|
+
- lib/sigterm_extensions/core_ext/object/methods.rb
|
|
251
|
+
- lib/sigterm_extensions/core_ext/object/with_options.rb
|
|
252
|
+
- lib/sigterm_extensions/core_ext/range.rb
|
|
253
|
+
- lib/sigterm_extensions/core_ext/range/compare_range.rb
|
|
254
|
+
- lib/sigterm_extensions/core_ext/range/conversions.rb
|
|
255
|
+
- lib/sigterm_extensions/core_ext/range/overlaps.rb
|
|
256
|
+
- lib/sigterm_extensions/core_ext/securerandom.rb
|
|
257
|
+
- lib/sigterm_extensions/core_ext/string.rb
|
|
258
|
+
- lib/sigterm_extensions/core_ext/string/access.rb
|
|
259
|
+
- lib/sigterm_extensions/core_ext/string/filters.rb
|
|
260
|
+
- lib/sigterm_extensions/core_ext/string/starts_ends_with.rb
|
|
261
|
+
- lib/sigterm_extensions/core_ext/string/strip.rb
|
|
262
|
+
- lib/sigterm_extensions/core_ext/tryable.rb
|
|
263
|
+
- lib/sigterm_extensions/descendants_tracker.rb
|
|
264
|
+
- lib/sigterm_extensions/gem_methods.rb
|
|
265
|
+
- lib/sigterm_extensions/hash_binding.rb
|
|
266
|
+
- lib/sigterm_extensions/inflector.rb
|
|
267
|
+
- lib/sigterm_extensions/inflector/acronyms.rb
|
|
268
|
+
- lib/sigterm_extensions/inflector/inflections.rb
|
|
269
|
+
- lib/sigterm_extensions/inflector/inflections/defaults.rb
|
|
270
|
+
- lib/sigterm_extensions/inflector/rules.rb
|
|
271
|
+
- lib/sigterm_extensions/inflector/version.rb
|
|
272
|
+
- lib/sigterm_extensions/interactive_editor.rb
|
|
273
|
+
- lib/sigterm_extensions/lazy.rb
|
|
274
|
+
- lib/sigterm_extensions/lazy_load_hooks.rb
|
|
275
|
+
- lib/sigterm_extensions/option_merger.rb
|
|
276
|
+
- lib/sigterm_extensions/ordered_hash.rb
|
|
277
|
+
- lib/sigterm_extensions/ordered_options.rb
|
|
278
|
+
- lib/sigterm_extensions/paths.rb
|
|
279
|
+
- lib/sigterm_extensions/per_thread_registry.rb
|
|
280
|
+
- lib/sigterm_extensions/proxy_object.rb
|
|
281
|
+
- lib/sigterm_extensions/staging/boot.rb
|
|
282
|
+
- lib/sigterm_extensions/staging/boot/bundler_patch.rb
|
|
283
|
+
- lib/sigterm_extensions/staging/boot/command.rb
|
|
284
|
+
- lib/sigterm_extensions/staging/boot/gemfile_next_auto_sync.rb
|
|
285
|
+
- lib/sigterm_extensions/version.rb
|
|
286
|
+
- lib/sigterm_extensions/wrappable.rb
|
|
287
|
+
- sigterm_extensions.gemspec
|
|
288
|
+
- templates/dotpryrc.rb.erb
|
|
289
|
+
homepage: https://rubygems.org/gems/sigterm_extensions
|
|
290
|
+
licenses:
|
|
291
|
+
- MIT
|
|
292
|
+
metadata:
|
|
293
|
+
allowed_push_host: https://rubygems.org
|
|
294
|
+
post_install_message:
|
|
295
|
+
rdoc_options:
|
|
296
|
+
- "--charset=UTF-8"
|
|
297
|
+
require_paths:
|
|
298
|
+
- lib
|
|
299
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
300
|
+
requirements:
|
|
301
|
+
- - ">="
|
|
302
|
+
- !ruby/object:Gem::Version
|
|
303
|
+
version: '2.4'
|
|
304
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
305
|
+
requirements:
|
|
306
|
+
- - ">="
|
|
307
|
+
- !ruby/object:Gem::Version
|
|
308
|
+
version: '0'
|
|
309
|
+
requirements:
|
|
310
|
+
- git 1.6.0.0, or greater
|
|
311
|
+
rubygems_version: 3.0.6
|
|
312
|
+
signing_key:
|
|
313
|
+
specification_version: 4
|
|
314
|
+
summary: Sigterm Extensions
|
|
315
|
+
test_files: []
|