hirohig_palindrome 0.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.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +8 -0
- data/.travis.yml +6 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +30 -0
- data/README.md +36 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/hirohig_palindrome.gemspec +33 -0
- data/lib/hirohig_palindrome/version.rb +3 -0
- data/lib/hirohig_palindrome.rb +17 -0
- data/vendor/.DS_Store +0 -0
- data/vendor/bundle/.DS_Store +0 -0
- data/vendor/bundle/ruby/.DS_Store +0 -0
- data/vendor/bundle/ruby/2.6.0/.DS_Store +0 -0
- data/vendor/bundle/ruby/2.6.0/bin/rake +27 -0
- data/vendor/bundle/ruby/2.6.0/cache/ansi-1.5.0.gem +0 -0
- data/vendor/bundle/ruby/2.6.0/cache/builder-3.2.4.gem +0 -0
- data/vendor/bundle/ruby/2.6.0/cache/minitest-5.14.0.gem +0 -0
- data/vendor/bundle/ruby/2.6.0/cache/minitest-reporters-1.2.0.gem +0 -0
- data/vendor/bundle/ruby/2.6.0/cache/rake-12.3.3.gem +0 -0
- data/vendor/bundle/ruby/2.6.0/cache/ruby-progressbar-1.10.1.gem +0 -0
- data/vendor/bundle/ruby/2.6.0/gems/.DS_Store +0 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/.index +77 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/.yardopts +8 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/DEMO.md +451 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/HISTORY.md +217 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/LICENSE.txt +23 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/NOTICE.md +170 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/README.md +91 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/01_ansicode.md +65 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/02_core.md +11 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/03_logger.md +30 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/04_progressbar.md +62 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/05_mixin.md +37 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/06_string.md +56 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/07_columns.md +89 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/08_table.md +28 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/09_diff.md +47 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/10_bbcode.md +24 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/11_terminal.md +8 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/applique/ae.rb +1 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/applique/output.rb +5 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/bbcode.rb +334 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/chain.rb +50 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/chart.rb +100 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/code.rb +349 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/columns.rb +197 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/constants.rb +25 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/core.rb +30 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/diff.rb +215 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/hexdump.rb +122 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/logger.rb +211 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/mixin.rb +121 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/progressbar.rb +292 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/string.rb +254 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/table.rb +179 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal/curses.rb +26 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal/stty.rb +62 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal/termios.rb +68 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal/win32.rb +107 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal.rb +44 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/version.rb +15 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi.rb +22 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi.yml +77 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/case_ansicode.rb +43 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/case_bbcode.rb +35 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/case_mixin.rb +35 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/case_progressbar.rb +21 -0
- data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/test_helper.rb +3 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/CHANGES +119 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/MIT-LICENSE +20 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/README.md +258 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/Rakefile +194 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/builder.blurb +27 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/builder.gemspec +45 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/doc/releases/builder-1.2.4.rdoc +31 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/doc/releases/builder-2.0.0.rdoc +46 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/doc/releases/builder-2.1.1.rdoc +58 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/blankslate.rb +138 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/blankslate.rb +24 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/version.rb +9 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/xchar.rb +198 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/xmlbase.rb +200 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/xmlevents.rb +64 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/xmlmarkup.rb +345 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder.rb +14 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/rakelib/publish.rake +21 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/rakelib/tags.rake +63 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/rakelib/testing.rake +8 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/helper.rb +13 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/performance.rb +42 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/preload.rb +40 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_blankslate.rb +208 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_eventbuilder.rb +151 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_markupbuilder.rb +617 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_method_caching.rb +63 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_namecollision.rb +40 -0
- data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_xchar.rb +85 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/.autotest +34 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/History.rdoc +1380 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/Manifest.txt +27 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/README.rdoc +764 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/Rakefile +72 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/design_rationale.rb +52 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/hoe/minitest.rb +32 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/assertions.rb +807 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/autorun.rb +13 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/benchmark.rb +455 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/expectations.rb +303 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/hell.rb +11 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/mock.rb +240 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/parallel.rb +70 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/pride.rb +4 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/pride_plugin.rb +142 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/spec.rb +342 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/test.rb +220 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/unit.rb +45 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest.rb +1053 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/metametameta.rb +117 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_assertions.rb +1567 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_benchmark.rb +137 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_mock.rb +872 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_reporter.rb +299 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_spec.rb +1041 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_test.rb +1080 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/.gitignore +27 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/.ruby-gemset +1 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/.travis.yml +10 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/.yardopts +6 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/CHANGELOG.md +40 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/Gemfile +2 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/LICENSE +20 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/README.md +115 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/Rakefile +60 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/assets/default-reporter.png +0 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/assets/mean_time_reporter.png +0 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/assets/progress-reporter.png +0 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/assets/spec-reporter.png +0 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/extensible_backtrace_filter.rb +67 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/minitest_reporter_plugin.rb +75 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/old_activesupport_fix.rb +24 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/relative_position.rb +26 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/ansi.rb +31 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/base_reporter.rb +117 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/default_reporter.rb +228 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/html_reporter.rb +221 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/junit_reporter.rb +157 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/mean_time_reporter.rb +392 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/progress_reporter.rb +96 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/ruby_mate_reporter.rb +54 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/rubymine_reporter.rb +117 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/spec_reporter.rb +61 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/version.rb +5 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters.rb +89 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/templates/index.html.erb +83 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/minitest-reporters.gemspec +31 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/junit_filename_bug_example_test.rb +21 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/mean_time_test.rb +8 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/progress_detailed_skip_test.rb +8 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/progress_test.rb +8 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/sample_test.rb +15 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/spec_test.rb +13 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/gallery/bad_test.rb +25 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/gallery/good_test.rb +14 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/integration/reporters/junit_reporter_test.rb +12 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/integration/reporters/mean_time_reporter_test.rb +7 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/integration/reporters/progress_reporter_test.rb +34 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/test_helper.rb +22 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/extensible_backtrace_filter_test.rb +42 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/mean_time_reporter_unit_test.rb +152 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/minitest_reporter_plugin_test.rb +14 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/reporters_test.rb +52 -0
- data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/spec_reporter_test.rb +41 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/CONTRIBUTING.rdoc +43 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/Gemfile +3 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/History.rdoc +2344 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/README.rdoc +156 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/Rakefile +41 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/azure-pipelines.yml +11 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/bundle +105 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/console +7 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/rake +29 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/rdoc +29 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/rubocop +29 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/setup +6 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/command_line_usage.rdoc +158 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/rakefile.rdoc +622 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/exe/rake +27 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/application.rb +824 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/backtrace.rb +24 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/cpu_counter.rb +107 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/dsl_definition.rb +195 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_task.rb +54 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_utils.rb +137 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_utils_ext.rb +145 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/packagetask.rb +207 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task.rb +413 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_arguments.rb +109 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_manager.rb +324 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/testtask.rb +224 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/thread_pool.rb +163 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/win32.rb +51 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake.rb +71 -0
- data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/rake.gemspec +42 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/LICENSE.txt +19 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/README.md +38 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/Rakefile +2 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/base.rb +183 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/calculators/length.rb +100 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/calculators/running_average.rb +9 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/bar.rb +102 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/percentage.rb +29 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/rate.rb +43 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/time.rb +107 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/title.rb +13 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components.rb +5 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/errors/invalid_progress_error.rb +4 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/format/formatter.rb +27 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/format/molecule.rb +60 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/format/string.rb +36 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/format.rb +3 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/output.rb +68 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/outputs/non_tty.rb +47 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/outputs/null.rb +33 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/outputs/tty.rb +32 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/progress.rb +118 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/refinements/enumerator.rb +23 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/refinements.rb +1 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/throttle.rb +25 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/time.rb +32 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/timer.rb +72 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/version.rb +3 -0
- data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar.rb +22 -0
- data/vendor/bundle/ruby/2.6.0/specifications/ansi-1.5.0.gemspec +49 -0
- data/vendor/bundle/ruby/2.6.0/specifications/builder-3.2.4.gemspec +23 -0
- data/vendor/bundle/ruby/2.6.0/specifications/minitest-5.14.0.gemspec +41 -0
- data/vendor/bundle/ruby/2.6.0/specifications/minitest-reporters-1.2.0.gemspec +48 -0
- data/vendor/bundle/ruby/2.6.0/specifications/rake-12.3.3.gemspec +49 -0
- data/vendor/bundle/ruby/2.6.0/specifications/ruby-progressbar-1.10.1.gemspec +46 -0
- metadata +326 -0
@@ -0,0 +1,349 @@
|
|
1
|
+
module ANSI
|
2
|
+
|
3
|
+
# Global variable can be used to prevent ANSI codes
|
4
|
+
# from being used in ANSI's methods that do so to string.
|
5
|
+
#
|
6
|
+
# NOTE: This has no effect on methods that return ANSI codes.
|
7
|
+
$ansi = true
|
8
|
+
|
9
|
+
if RUBY_PLATFORM =~ /(win32|w32)/
|
10
|
+
begin
|
11
|
+
require 'Win32/Console/ANSI'
|
12
|
+
rescue LoadError
|
13
|
+
warn "ansi: 'gem install win32console' to use color on Windows"
|
14
|
+
$ansi = false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'ansi/constants'
|
19
|
+
|
20
|
+
# TODO: up, down, right, left, etc could have yielding methods too?
|
21
|
+
|
22
|
+
# ANSI Codes
|
23
|
+
#
|
24
|
+
# Ansi::Code module makes it very easy to use ANSI codes.
|
25
|
+
# These are especially nice for beautifying shell output.
|
26
|
+
#
|
27
|
+
# Ansi::Code.red + "Hello" + Ansi::Code.blue + "World"
|
28
|
+
# => "\e[31mHello\e[34mWorld"
|
29
|
+
#
|
30
|
+
# Ansi::Code.red{ "Hello" } + Ansi::Code.blue{ "World" }
|
31
|
+
# => "\e[31mHello\e[0m\e[34mWorld\e[0m"
|
32
|
+
#
|
33
|
+
# IMPORTANT! Do not mixin Ansi::Code, instead use {ANSI::Mixin}.
|
34
|
+
#
|
35
|
+
# See {ANSI::CHART} for list of all supported codes.
|
36
|
+
#
|
37
|
+
module Code
|
38
|
+
extend self
|
39
|
+
|
40
|
+
# include ANSI Constants
|
41
|
+
include Constants
|
42
|
+
|
43
|
+
# Regexp for matching most ANSI codes.
|
44
|
+
PATTERN = /\e\[(\d+)m/
|
45
|
+
|
46
|
+
# ANSI clear code.
|
47
|
+
ENDCODE = "\e[0m"
|
48
|
+
|
49
|
+
# List of primary styles.
|
50
|
+
def self.styles
|
51
|
+
%w{bold dark italic underline underscore blink rapid reverse negative concealed strike}
|
52
|
+
end
|
53
|
+
|
54
|
+
# List of primary colors.
|
55
|
+
def self.colors
|
56
|
+
%w{black red green yellow blue magenta cyan white}
|
57
|
+
end
|
58
|
+
|
59
|
+
# Return ANSI code given a list of symbolic names.
|
60
|
+
def [](*codes)
|
61
|
+
code(*codes)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Dynamically create color on color methods.
|
65
|
+
#
|
66
|
+
# @deprecated
|
67
|
+
#
|
68
|
+
colors.each do |color|
|
69
|
+
colors.each do |on_color|
|
70
|
+
module_eval <<-END, __FILE__, __LINE__
|
71
|
+
def #{color}_on_#{on_color}(string=nil)
|
72
|
+
if string
|
73
|
+
return string unless $ansi
|
74
|
+
#warn "use ANSI block notation for future versions"
|
75
|
+
return #{color.upcase} + ON_#{color.upcase} + string + ENDCODE
|
76
|
+
end
|
77
|
+
if block_given?
|
78
|
+
return yield unless $ansi
|
79
|
+
#{color.upcase} + ON_#{on_color.upcase} + yield.to_s + ENDCODE
|
80
|
+
else
|
81
|
+
#{color.upcase} + ON_#{on_color.upcase}
|
82
|
+
end
|
83
|
+
end
|
84
|
+
END
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Use method missing to dispatch ANSI code methods.
|
89
|
+
def method_missing(code, *args, &blk)
|
90
|
+
esc = nil
|
91
|
+
|
92
|
+
if CHART.key?(code)
|
93
|
+
esc = "\e[#{CHART[code]}m"
|
94
|
+
elsif SPECIAL_CHART.key?(code)
|
95
|
+
esc = SPECIAL_CHART[code]
|
96
|
+
end
|
97
|
+
|
98
|
+
if esc
|
99
|
+
if string = args.first
|
100
|
+
return string unless $ansi
|
101
|
+
#warn "use ANSI block notation for future versions"
|
102
|
+
return "#{esc}#{string}#{ENDCODE}"
|
103
|
+
end
|
104
|
+
if block_given?
|
105
|
+
return yield unless $ansi
|
106
|
+
return "#{esc}#{yield}#{ENDCODE}"
|
107
|
+
end
|
108
|
+
esc
|
109
|
+
else
|
110
|
+
super(code, *args, &blk)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# TODO: How to deal with position codes when $ansi is false?
|
115
|
+
# Should we raise an error or just not push the codes?
|
116
|
+
# For now, we will leave this it as is.
|
117
|
+
|
118
|
+
# Like +move+ but returns to original position after
|
119
|
+
# yielding the block.
|
120
|
+
def display(line, column=0) #:yield:
|
121
|
+
result = "\e[s"
|
122
|
+
result << "\e[#{line.to_i};#{column.to_i}H"
|
123
|
+
if block_given?
|
124
|
+
result << yield
|
125
|
+
result << "\e[u"
|
126
|
+
#elsif string
|
127
|
+
# result << string
|
128
|
+
# result << "\e[u"
|
129
|
+
end
|
130
|
+
result
|
131
|
+
end
|
132
|
+
|
133
|
+
# Move cursor to line and column.
|
134
|
+
def move(line, column=0)
|
135
|
+
"\e[#{line.to_i};#{column.to_i}H"
|
136
|
+
end
|
137
|
+
|
138
|
+
# Move cursor up a specified number of spaces.
|
139
|
+
def up(spaces=1)
|
140
|
+
"\e[#{spaces.to_i}A"
|
141
|
+
end
|
142
|
+
|
143
|
+
# Move cursor down a specified number of spaces.
|
144
|
+
def down(spaces=1)
|
145
|
+
"\e[#{spaces.to_i}B"
|
146
|
+
end
|
147
|
+
|
148
|
+
# Move cursor left a specified number of spaces.
|
149
|
+
def left(spaces=1)
|
150
|
+
"\e[#{spaces.to_i}D"
|
151
|
+
end
|
152
|
+
alias :back :left
|
153
|
+
|
154
|
+
# Move cursor right a specified number of spaces.
|
155
|
+
def right(spaces=1)
|
156
|
+
"\e[#{spaces.to_i}C"
|
157
|
+
end
|
158
|
+
alias :forward :right
|
159
|
+
|
160
|
+
##
|
161
|
+
#def position
|
162
|
+
# "\e[#;#R"
|
163
|
+
#end
|
164
|
+
|
165
|
+
# Apply ANSI codes to a first argument or block value.
|
166
|
+
#
|
167
|
+
# @example
|
168
|
+
# ansi("Valentine", :red, :on_white)
|
169
|
+
#
|
170
|
+
# @example
|
171
|
+
# ansi(:red, :on_white){ "Valentine" }
|
172
|
+
#
|
173
|
+
# @return [String]
|
174
|
+
# String wrapped ANSI code.
|
175
|
+
#
|
176
|
+
def ansi(*codes) #:yield:
|
177
|
+
if block_given?
|
178
|
+
string = yield.to_s
|
179
|
+
else
|
180
|
+
# first argument must be the string
|
181
|
+
string = codes.shift.to_s
|
182
|
+
end
|
183
|
+
|
184
|
+
return string unless $ansi
|
185
|
+
|
186
|
+
c = code(*codes)
|
187
|
+
|
188
|
+
c + string.gsub(ENDCODE, ENDCODE + c) + ENDCODE
|
189
|
+
end
|
190
|
+
|
191
|
+
# TODO: Allow selective removal using *codes argument?
|
192
|
+
|
193
|
+
# Remove ANSI codes from string or block value.
|
194
|
+
#
|
195
|
+
# @param [String] string
|
196
|
+
# String from which to remove ANSI codes.
|
197
|
+
#
|
198
|
+
# @return [String]
|
199
|
+
# String wrapped ANSI code.
|
200
|
+
#
|
201
|
+
def unansi(string=nil) #:yield:
|
202
|
+
if block_given?
|
203
|
+
string = yield.to_s
|
204
|
+
else
|
205
|
+
string = string.to_s
|
206
|
+
end
|
207
|
+
string.gsub(PATTERN, '')
|
208
|
+
end
|
209
|
+
|
210
|
+
# Alias for #ansi method.
|
211
|
+
#
|
212
|
+
# @deprecated
|
213
|
+
# Here for backward compatibility.
|
214
|
+
alias_method :style, :ansi
|
215
|
+
|
216
|
+
# Alias for #unansi method.
|
217
|
+
#
|
218
|
+
# @deprecated
|
219
|
+
# Here for backwards compatibility.
|
220
|
+
alias_method :unstyle, :unansi
|
221
|
+
|
222
|
+
# Alternate term for #ansi.
|
223
|
+
#
|
224
|
+
# @deprecated
|
225
|
+
# May change in future definition.
|
226
|
+
alias_method :color, :ansi
|
227
|
+
|
228
|
+
# Alias for unansi.
|
229
|
+
#
|
230
|
+
# @deprecated
|
231
|
+
# May change in future definition.
|
232
|
+
alias_method :uncolor, :unansi
|
233
|
+
|
234
|
+
# Look-up code from chart, or if Integer simply pass through.
|
235
|
+
# Also resolves :random and :on_random.
|
236
|
+
#
|
237
|
+
# @param codes [Array<Symbol,Integer]
|
238
|
+
# Symbols or integers to convert to ANSI code.
|
239
|
+
#
|
240
|
+
# @return [String] ANSI code
|
241
|
+
def code(*codes)
|
242
|
+
list = []
|
243
|
+
codes.each do |code|
|
244
|
+
list << \
|
245
|
+
case code
|
246
|
+
when Integer
|
247
|
+
code
|
248
|
+
when Array
|
249
|
+
rgb_code(*code)
|
250
|
+
when :random, 'random'
|
251
|
+
random
|
252
|
+
when :on_random, 'on_random'
|
253
|
+
random(true)
|
254
|
+
when String
|
255
|
+
# TODO: code =~ /\d\d\d\d\d\d/ ?
|
256
|
+
if code.start_with?('#')
|
257
|
+
hex_code(code)
|
258
|
+
else
|
259
|
+
CHART[code.to_sym]
|
260
|
+
end
|
261
|
+
else
|
262
|
+
CHART[code.to_sym]
|
263
|
+
end
|
264
|
+
end
|
265
|
+
"\e[" + (list * ";") + "m"
|
266
|
+
end
|
267
|
+
|
268
|
+
# Provides a random primary ANSI color.
|
269
|
+
#
|
270
|
+
# @param background [Boolean]
|
271
|
+
# Use `true` for background color, otherwise foreground color.
|
272
|
+
#
|
273
|
+
# @return [Integer] ANSI color number
|
274
|
+
def random(background=false)
|
275
|
+
(background ? 40 : 30) + rand(8)
|
276
|
+
end
|
277
|
+
|
278
|
+
# Creates an XTerm 256 color escape code from RGB value(s). The
|
279
|
+
# RGB value can be three arguments red, green and blue respectively
|
280
|
+
# each from 0 to 255, or the RGB value can be a single CSS-style
|
281
|
+
# hex string.
|
282
|
+
#
|
283
|
+
# @param background [Boolean]
|
284
|
+
# Use `true` for background color, otherwise foreground color.
|
285
|
+
#
|
286
|
+
def rgb(*args)
|
287
|
+
case args.size
|
288
|
+
when 1, 2
|
289
|
+
hex, background = *args
|
290
|
+
esc = "\e[" + hex_code(hex, background) + "m"
|
291
|
+
when 3, 4
|
292
|
+
red, green, blue, background = *args
|
293
|
+
esc = "\e[" + rgb_code(red, green, blue, background) + "m"
|
294
|
+
else
|
295
|
+
raise ArgumentError
|
296
|
+
end
|
297
|
+
|
298
|
+
if block_given?
|
299
|
+
return yield.to_s unless $ansi
|
300
|
+
return "#{esc}#{yield}#{ENDCODE}"
|
301
|
+
else
|
302
|
+
return esc
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
#private
|
307
|
+
|
308
|
+
# Creates an xterm-256 color from rgb value.
|
309
|
+
#
|
310
|
+
# @param background [Boolean]
|
311
|
+
# Use `true` for background color, otherwise foreground color.
|
312
|
+
#
|
313
|
+
def rgb_code(red, green, blue, background=false)
|
314
|
+
"#{background ? 48 : 38};5;#{rgb_256(red, green, blue)}"
|
315
|
+
end
|
316
|
+
|
317
|
+
# Creates an xterm-256 color code from a CSS-style color string.
|
318
|
+
#
|
319
|
+
# @param string [String]
|
320
|
+
# Hex string in CSS style, .e.g. `#5FA0C2`.
|
321
|
+
#
|
322
|
+
# @param background [Boolean]
|
323
|
+
# Use `true` for background color, otherwise foreground color.
|
324
|
+
#
|
325
|
+
def hex_code(string, background=false)
|
326
|
+
string.tr!('#','')
|
327
|
+
x = (string.size == 6 ? 2 : 1)
|
328
|
+
r, g, b = [0,1,2].map{ |i| string[i*x,2].to_i(16) }
|
329
|
+
rgb_code(r, g, b, background)
|
330
|
+
end
|
331
|
+
|
332
|
+
# Given red, green and blue values between 0 and 255, this method
|
333
|
+
# returns the closest XTerm 256 color value.
|
334
|
+
#
|
335
|
+
def rgb_256(r, g, b)
|
336
|
+
# TODO: what was rgb_valid for?
|
337
|
+
#r, g, b = [r, g, b].map{ |c| rgb_valid(c); (6 * (c.to_f / 256.0)).to_i }
|
338
|
+
r, g, b = [r, g, b].map{ |c| (6 * (c.to_f / 256.0)).to_i }
|
339
|
+
v = (r * 36 + g * 6 + b + 16).abs
|
340
|
+
raise ArgumentError, "RGB value is outside 0-255 range -- #{v}" if v > 255
|
341
|
+
v
|
342
|
+
end
|
343
|
+
|
344
|
+
end
|
345
|
+
|
346
|
+
#
|
347
|
+
extend Code
|
348
|
+
end
|
349
|
+
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require 'ansi/terminal'
|
2
|
+
|
3
|
+
module ANSI
|
4
|
+
|
5
|
+
#
|
6
|
+
class Columns
|
7
|
+
|
8
|
+
# Create a column-based layout.
|
9
|
+
#
|
10
|
+
# @param [String,Array] list
|
11
|
+
# Multiline String or Array of strings to columnize.
|
12
|
+
#
|
13
|
+
# @param [Hash] options
|
14
|
+
# Options to customize columnization.
|
15
|
+
#
|
16
|
+
# @option options [Fixnum] :columns
|
17
|
+
# Number of columns.
|
18
|
+
#
|
19
|
+
# @option options [Symbol] :align
|
20
|
+
# Column alignment, either :left, :right or :center.
|
21
|
+
#
|
22
|
+
# @option options [String,Fixnum] :padding
|
23
|
+
# String or number or spaces to append to each column.
|
24
|
+
#
|
25
|
+
# The +format+ block MUST return ANSI codes.
|
26
|
+
def initialize(list, options={}, &format)
|
27
|
+
self.list = list
|
28
|
+
|
29
|
+
self.columns = options[:columns] || options[:cols]
|
30
|
+
self.padding = options[:padding] || 1
|
31
|
+
self.align = options[:align] || :left
|
32
|
+
#self.ansi = options[:ansi]
|
33
|
+
self.format = format
|
34
|
+
|
35
|
+
#@columns = nil if @columns == 0
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
def inspect
|
40
|
+
"#<#{self.class}:#{object_id} #{list.inspect} x #{columns}>"
|
41
|
+
end
|
42
|
+
|
43
|
+
# List layout into columns. Each new line is taken to be
|
44
|
+
# a row-column cell.
|
45
|
+
attr :list
|
46
|
+
|
47
|
+
def list=(list)
|
48
|
+
case list
|
49
|
+
when ::String
|
50
|
+
@list = list.lines.to_a.map{ |e| e.chomp("\n") }
|
51
|
+
when ::Array
|
52
|
+
@list = list.map{ |e| e.to_s }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Default number of columns to display. If nil then the number
|
57
|
+
# of coumns is estimated from the size of the terminal.
|
58
|
+
attr :columns
|
59
|
+
|
60
|
+
# Set column count ensuring value is either an integer or nil.
|
61
|
+
# The the value given is zero, it will be taken to mean the same
|
62
|
+
# as nil, which means fit-to-screen.
|
63
|
+
def columns=(integer)
|
64
|
+
integer = integer.to_i
|
65
|
+
@columns = (integer.zero? ? nil : integer)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Padding size to apply to cells.
|
69
|
+
attr :padding
|
70
|
+
|
71
|
+
# Set padding to string or number (of spaces).
|
72
|
+
def padding=(pad)
|
73
|
+
case pad
|
74
|
+
when Numeric
|
75
|
+
@padding = ' ' * pad.to_i
|
76
|
+
else
|
77
|
+
@padding = pad.to_s
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Alignment to apply to cells.
|
82
|
+
attr :align
|
83
|
+
|
84
|
+
# Set alignment ensuring value is a symbol.
|
85
|
+
#
|
86
|
+
# @param [#to_sym] symbol
|
87
|
+
# Either `:right`, `:left` or `:center`.
|
88
|
+
#
|
89
|
+
# @return [Symbol] The given symbol.
|
90
|
+
def align=(symbol)
|
91
|
+
symbol = symbol.to_sym
|
92
|
+
raise ArgumentError, "invalid alignment -- #{symbol.inspect}" \
|
93
|
+
unless [:left, :right, :center].include?(symbol)
|
94
|
+
@align = symbol
|
95
|
+
end
|
96
|
+
|
97
|
+
# Formating to apply to cells.
|
98
|
+
attr :format
|
99
|
+
|
100
|
+
# Set formatting procedure. The procedure must return
|
101
|
+
# ANSI codes, suitable for passing to String#ansi method.
|
102
|
+
def format=(procedure)
|
103
|
+
@format = procedure ? procedure.to_proc : nil
|
104
|
+
end
|
105
|
+
|
106
|
+
# TODO: Should #to_s also take options and formatting block?
|
107
|
+
# Maybe instead have hoin take all these and leave #to_s bare.
|
108
|
+
|
109
|
+
# Return string in column layout. The number of columns is determined
|
110
|
+
# by the `columns` property or overriden by +cols+ argument.
|
111
|
+
def to_s(cols=nil)
|
112
|
+
to_s_columns(cols || columns)
|
113
|
+
end
|
114
|
+
|
115
|
+
#
|
116
|
+
def join(cols=nil)
|
117
|
+
to_s_columns(cols || columns)
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
|
122
|
+
# Layout string lines into columns.
|
123
|
+
#
|
124
|
+
# @todo Put in empty strings for blank cells.
|
125
|
+
# @todo Centering look like it's off by one to the right.
|
126
|
+
#
|
127
|
+
def to_s_columns(columns=nil)
|
128
|
+
lines = list.to_a
|
129
|
+
count = lines.size
|
130
|
+
max = lines.map{ |l| l.size }.max
|
131
|
+
|
132
|
+
if columns.nil?
|
133
|
+
width = Terminal.terminal_width
|
134
|
+
columns = (width / (max + padding.size)).to_i
|
135
|
+
end
|
136
|
+
|
137
|
+
rows = []
|
138
|
+
mod = (count / columns.to_f).to_i
|
139
|
+
mod += 1 if count % columns != 0
|
140
|
+
|
141
|
+
lines.each_with_index do |line, index|
|
142
|
+
(rows[index % mod] ||=[]) << line.strip
|
143
|
+
end
|
144
|
+
|
145
|
+
pad = padding
|
146
|
+
tmp = template(max, pad)
|
147
|
+
str = ""
|
148
|
+
rows.each_with_index do |row, ri|
|
149
|
+
row.each_with_index do |cell, ci|
|
150
|
+
ansi_codes = ansi_formatting(cell, ci, ri)
|
151
|
+
if ansi_codes.empty?
|
152
|
+
str << (tmp % cell)
|
153
|
+
else
|
154
|
+
str << (tmp % cell).ansi(*ansi_codes)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
str.rstrip!
|
158
|
+
str << "\n"
|
159
|
+
end
|
160
|
+
str
|
161
|
+
end
|
162
|
+
|
163
|
+
# Aligns the cell left or right.
|
164
|
+
def template(max, pad)
|
165
|
+
case align
|
166
|
+
when :center, 'center'
|
167
|
+
offset = " " * (max / 2)
|
168
|
+
"#{offset}%#{max}s#{offset}#{pad}"
|
169
|
+
when :right, 'right'
|
170
|
+
"%#{max}s#{pad}"
|
171
|
+
else
|
172
|
+
"%-#{max}s#{pad}"
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
# Used to apply ANSI formatting to each cell.
|
177
|
+
def ansi_formatting(cell, col, row)
|
178
|
+
if @format
|
179
|
+
case @format.arity
|
180
|
+
when 0
|
181
|
+
f = @format[]
|
182
|
+
when 1
|
183
|
+
f = @format[cell]
|
184
|
+
when 2
|
185
|
+
f = @format[col, row]
|
186
|
+
else
|
187
|
+
f = @format[cell, col, row]
|
188
|
+
end
|
189
|
+
else
|
190
|
+
f = nil
|
191
|
+
end
|
192
|
+
[f].flatten.compact
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ANSI
|
2
|
+
|
3
|
+
require 'ansi/chart'
|
4
|
+
|
5
|
+
# Converts {CHART} and {SPECIAL_CHART} entries into constants.
|
6
|
+
# So for example, the CHART entry for :red becomes:
|
7
|
+
#
|
8
|
+
# ANSI::Constants::RED #=> "\e[31m"
|
9
|
+
#
|
10
|
+
# The ANSI Constants are include into ANSI::Code and can be included
|
11
|
+
# any where will they would be of use.
|
12
|
+
#
|
13
|
+
module Constants
|
14
|
+
|
15
|
+
CHART.each do |name, code|
|
16
|
+
const_set(name.to_s.upcase, "\e[#{code}m")
|
17
|
+
end
|
18
|
+
|
19
|
+
SPECIAL_CHART.each do |name, code|
|
20
|
+
const_set(name.to_s.upcase, code)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'ansi/code'
|
2
|
+
require 'ansi/chain'
|
3
|
+
|
4
|
+
class ::String
|
5
|
+
|
6
|
+
#
|
7
|
+
def ansi(*codes)
|
8
|
+
if codes.empty?
|
9
|
+
ANSI::Chain.new(self)
|
10
|
+
else
|
11
|
+
ANSI::Code.ansi(self, *codes)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
def ansi!(*codes)
|
17
|
+
replace(ansi(*codes))
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
def unansi
|
22
|
+
ANSI::Code.unansi(self)
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
def unansi!
|
27
|
+
replace(unansi)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|