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,215 @@
|
|
1
|
+
require 'ansi/code'
|
2
|
+
|
3
|
+
module ANSI
|
4
|
+
|
5
|
+
# Diff produces colorized differences of two string or objects.
|
6
|
+
#
|
7
|
+
class Diff
|
8
|
+
|
9
|
+
# Highlights the differnce between two strings.
|
10
|
+
#
|
11
|
+
# This class method is equivalent to calling:
|
12
|
+
#
|
13
|
+
# ANSI::Diff.new(object1, object2).to_a
|
14
|
+
#
|
15
|
+
def self.diff(object1, object2, options={})
|
16
|
+
new(object1, object2, options={}).to_a
|
17
|
+
end
|
18
|
+
|
19
|
+
# Setup new Diff object. If the objects given are not Strings
|
20
|
+
# and do not have `#to_str` defined to coerce them to such, then
|
21
|
+
# their `#inspect` methods are used to convert them to strings
|
22
|
+
# for comparison.
|
23
|
+
#
|
24
|
+
# @param [Object] object1
|
25
|
+
# First object to compare.
|
26
|
+
#
|
27
|
+
# @param [Object] object2
|
28
|
+
# Second object to compare.
|
29
|
+
#
|
30
|
+
# @param [Hash] options
|
31
|
+
# Options for contoller the way difference is shown. (Not yet used.)
|
32
|
+
#
|
33
|
+
def initialize(object1, object2, options={})
|
34
|
+
@object1 = convert(object1)
|
35
|
+
@object2 = convert(object2)
|
36
|
+
|
37
|
+
@diff1, @diff2 = diff_string(@object1, @object2)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns the first object's difference string.
|
41
|
+
def diff1
|
42
|
+
@diff1
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns the second object's difference string.
|
46
|
+
def diff2
|
47
|
+
@diff2
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns both first and second difference strings separated by a
|
51
|
+
# new line character.
|
52
|
+
#
|
53
|
+
# @todo Should we use `$/` record separator instead?
|
54
|
+
#
|
55
|
+
# @return [String] Joined difference strings.
|
56
|
+
def to_s
|
57
|
+
"#{@diff1}\n#{@diff2}"
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns both first and second difference strings separated by a
|
61
|
+
# the given `separator`. The default is `$/`, the record separator.
|
62
|
+
#
|
63
|
+
# @param [String] separator
|
64
|
+
# The string to use as the separtor between the difference strings.
|
65
|
+
#
|
66
|
+
# @return [String] Joined difference strings.
|
67
|
+
def join(separator=$/)
|
68
|
+
"#{@diff1}#{separator}#{@diff2}"
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns the first and second difference strings in an array.
|
72
|
+
#
|
73
|
+
# @return [Array] Both difference strings.
|
74
|
+
def to_a
|
75
|
+
[diff1, diff2]
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
# Take two plain strings and produce colorized
|
81
|
+
# versions of each highlighting their differences.
|
82
|
+
#
|
83
|
+
# @param [String] string1
|
84
|
+
# First string to compare.
|
85
|
+
#
|
86
|
+
# @param [String] string2
|
87
|
+
# Second string to compare.
|
88
|
+
#
|
89
|
+
# @return [Array<String>] The two difference strings.
|
90
|
+
def diff_string(string1, string2)
|
91
|
+
compare(string1, string2)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Ensure the object of comparison is a string. If +object+ is not
|
95
|
+
# an instance of String then it wll be converted to one by calling
|
96
|
+
# either #to_str, if the object responds to it, or #inspect.
|
97
|
+
def convert(object)
|
98
|
+
if String === object
|
99
|
+
object
|
100
|
+
elsif object.respond_to?(:to_str)
|
101
|
+
object.to_str
|
102
|
+
else
|
103
|
+
object.inspect
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Rotation of colors for diff output.
|
108
|
+
COLORS = [:red, :yellow, :magenta]
|
109
|
+
|
110
|
+
# Take two plain strings and produce colorized
|
111
|
+
# versions of each highlighting their differences.
|
112
|
+
#
|
113
|
+
# @param [String] x
|
114
|
+
# First string to compare.
|
115
|
+
#
|
116
|
+
# @param [String] y
|
117
|
+
# Second string to compare.
|
118
|
+
#
|
119
|
+
# @return [Array<String>] The two difference strings.
|
120
|
+
def compare(x, y)
|
121
|
+
c = common(x, y)
|
122
|
+
a = x.dup
|
123
|
+
b = y.dup
|
124
|
+
oi = 0
|
125
|
+
oj = 0
|
126
|
+
c.each_with_index do |m, q|
|
127
|
+
i = a.index(m, oi)
|
128
|
+
j = b.index(m, oj)
|
129
|
+
a[i,m.size] = ANSI.ansi(m, COLORS[q%3]) if i
|
130
|
+
b[j,m.size] = ANSI.ansi(m, COLORS[q%3]) if j
|
131
|
+
oi = i + m.size if i
|
132
|
+
oj = j + m.size if j
|
133
|
+
end
|
134
|
+
return a, b
|
135
|
+
end
|
136
|
+
|
137
|
+
# Oh, I should have documented this will I knew what the
|
138
|
+
# hell it was doing ;)
|
139
|
+
def common(x,y)
|
140
|
+
c = lcs(x, y)
|
141
|
+
|
142
|
+
i = x.index(c)
|
143
|
+
j = y.index(c)
|
144
|
+
|
145
|
+
ix = i + c.size
|
146
|
+
jx = j + c.size
|
147
|
+
|
148
|
+
if i == 0
|
149
|
+
l = y[0...j]
|
150
|
+
elsif j == 0
|
151
|
+
l = x[0...i]
|
152
|
+
else
|
153
|
+
l = common(x[0...i], y[0...j])
|
154
|
+
end
|
155
|
+
|
156
|
+
if ix == x.size - 1
|
157
|
+
r = y[jx..-1]
|
158
|
+
elsif jx = y.size - 1
|
159
|
+
r = x[ix..-1]
|
160
|
+
else
|
161
|
+
r = common(x[ix..-1], y[jx..-1])
|
162
|
+
end
|
163
|
+
|
164
|
+
[l, c, r].flatten.reject{ |s| s.empty? }
|
165
|
+
end
|
166
|
+
|
167
|
+
# Least common string.
|
168
|
+
def lcs(s1, s2)
|
169
|
+
res=""
|
170
|
+
num=Array.new(s1.size){Array.new(s2.size)}
|
171
|
+
len,ans=0
|
172
|
+
lastsub=0
|
173
|
+
s1.scan(/./).each_with_index do |l1,i |
|
174
|
+
s2.scan(/./).each_with_index do |l2,j |
|
175
|
+
unless l1==l2
|
176
|
+
num[i][j]=0
|
177
|
+
else
|
178
|
+
(i==0 || j==0)? num[i][j]=1 : num[i][j]=1 + num[i-1][j-1]
|
179
|
+
if num[i][j] > len
|
180
|
+
len = ans = num[i][j]
|
181
|
+
thissub = i
|
182
|
+
thissub -= num[i-1][j-1] unless num[i-1][j-1].nil?
|
183
|
+
if lastsub==thissub
|
184
|
+
res+=s1[i,1]
|
185
|
+
else
|
186
|
+
lastsub=thissub
|
187
|
+
res=s1[lastsub, (i+1)-lastsub]
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
res
|
194
|
+
end
|
195
|
+
|
196
|
+
# Hmm... is this even useful?
|
197
|
+
def lcs_size(s1, s2)
|
198
|
+
num=Array.new(s1.size){Array.new(s2.size)}
|
199
|
+
len,ans=0,0
|
200
|
+
s1.scan(/./).each_with_index do |l1,i |
|
201
|
+
s2.scan(/./).each_with_index do |l2,j |
|
202
|
+
unless l1==l2
|
203
|
+
num[i][j]=0
|
204
|
+
else
|
205
|
+
(i==0 || j==0)? num[i][j]=1 : num[i][j]=1 + num[i-1][j-1]
|
206
|
+
len = ans = num[i][j] if num[i][j] > len
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
ans
|
211
|
+
end
|
212
|
+
|
213
|
+
end
|
214
|
+
|
215
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
module ANSI
|
2
|
+
|
3
|
+
require 'ansi/code'
|
4
|
+
|
5
|
+
# TODO: split dump method into two parts, the first should create a hex table
|
6
|
+
# then the second, #dump method, will print it out.
|
7
|
+
|
8
|
+
# Create a colorized hex dump of byte string.
|
9
|
+
#
|
10
|
+
# Output looks something like the following, but colorized.
|
11
|
+
#
|
12
|
+
# 000352c0: ed 33 8c 85 6e cc f6 f7 72 79 1c e3 3a b4 c2 c6 |.3..n...ry..:...|
|
13
|
+
# 000352d0: c8 8d d6 ee 3e 68 a1 a5 ae b2 b7 97 a4 1d 5f a7 |....>h........_.|
|
14
|
+
# 000352e0: d8 7d 28 db f6 8a e7 8a 7b 8d 0b bd 35 7d 25 3c |.}(.....{...5}%<|
|
15
|
+
# 000352f0: 8b 3c c8 9d ec 04 85 54 92 a0 f7 a8 ed cf 05 7d |.<.....T.......}|
|
16
|
+
# 00035300: b5 e3 9e 35 f0 79 9f 51 74 e3 60 ee 0f 03 8e 3f |...5.y.Qt.`....?|
|
17
|
+
# 00035310: 05 5b 91 87 e6 48 48 ee a3 77 ae ad 5e 2a 56 a2 |.[...HH..w..^*V.|
|
18
|
+
# 00035320: b6 96 86 f3 3c 92 b3 c8 62 4a 6f 96 10 5c 9c bb |....<...bJo..\..|
|
19
|
+
#
|
20
|
+
# In the future, we will make the colorization more customizable and
|
21
|
+
# allow the groupings to be selectable at 2, 4, 8 or 16.
|
22
|
+
#
|
23
|
+
class HexDump
|
24
|
+
|
25
|
+
# Printable ASCII codes.
|
26
|
+
ASCII_PRINTABLE = (33..126)
|
27
|
+
|
28
|
+
#
|
29
|
+
def initialize(options={})
|
30
|
+
@offset = 0
|
31
|
+
|
32
|
+
options.each do |k,v|
|
33
|
+
__send__("#{k}=", v)
|
34
|
+
end
|
35
|
+
|
36
|
+
@color = true if color.nil?
|
37
|
+
end
|
38
|
+
|
39
|
+
# Use color?
|
40
|
+
attr_accessor :color
|
41
|
+
|
42
|
+
# Show index?
|
43
|
+
attr_accessor :index
|
44
|
+
|
45
|
+
# Offset byte count.
|
46
|
+
attr_accessor :offset
|
47
|
+
|
48
|
+
# Dump data string as colorized hex table.
|
49
|
+
#
|
50
|
+
# @param data [String]
|
51
|
+
# String to convert to hex and display.
|
52
|
+
#
|
53
|
+
def dump(data)
|
54
|
+
lines = data.to_s.scan(/.{1,16}/m)
|
55
|
+
max_offset = (offset + data.size) / 256 #16 * 16
|
56
|
+
max_offset_width = max_offset.to_s.size + 1
|
57
|
+
max_hex_width = 49 #3 * 16 + 1
|
58
|
+
|
59
|
+
out = template()
|
60
|
+
off = offset()
|
61
|
+
|
62
|
+
if index?
|
63
|
+
puts((' ' * max_offset_width) + " 0 1 2 3 4 5 6 7 8 9 A B C D E F\n")
|
64
|
+
end
|
65
|
+
|
66
|
+
lines.each_with_index do |line, n|
|
67
|
+
offset = off + n * 16
|
68
|
+
bytes = line.unpack("C*")
|
69
|
+
hex = bytes.map{ |c| "%0.2x" % c }.insert(8, '').join(' ')
|
70
|
+
|
71
|
+
plain = bytes.map do |c|
|
72
|
+
if ASCII_PRINTABLE.include?(c)
|
73
|
+
c = c.chr
|
74
|
+
else
|
75
|
+
color ? Code::WHITE + Code::STRIKE + '.' + Code::CLEAR : '.'
|
76
|
+
end
|
77
|
+
end.join('')
|
78
|
+
|
79
|
+
fill = [offset.to_s.rjust(max_offset_width), hex.ljust(max_hex_width), plain]
|
80
|
+
|
81
|
+
puts(out % fill)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Hex dump a random string.
|
86
|
+
#
|
87
|
+
def dump_random(size=64)
|
88
|
+
data = (0..size).map{ rand(255).chr }.join('')
|
89
|
+
dump(data)
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
def index?
|
94
|
+
@index
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
# Hex dump line template.
|
100
|
+
#
|
101
|
+
# @return [String] hex dump line template
|
102
|
+
def template
|
103
|
+
if color
|
104
|
+
Code::CYAN +
|
105
|
+
"%s: " +
|
106
|
+
Code::YELLOW +
|
107
|
+
"%s " +
|
108
|
+
Code::BLUE +
|
109
|
+
"|" +
|
110
|
+
Code::CLEAR +
|
111
|
+
"%s" +
|
112
|
+
Code::BLUE +
|
113
|
+
"|" +
|
114
|
+
Code::CLEAR
|
115
|
+
else
|
116
|
+
"%s: %s |%s|"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
@@ -0,0 +1,211 @@
|
|
1
|
+
# Ansi::Logger
|
2
|
+
# Copyright (c) 2009 Thomas Sawyer
|
3
|
+
# Copyright (c) 2005 George Moschovitis
|
4
|
+
|
5
|
+
require "logger"
|
6
|
+
require "time"
|
7
|
+
require "ansi/code"
|
8
|
+
|
9
|
+
# = ANSI::Logger
|
10
|
+
#
|
11
|
+
# Extended variation of Ruby's standard Logger library that supports
|
12
|
+
# color output.
|
13
|
+
#
|
14
|
+
# log = ANSI::Logger.new
|
15
|
+
#
|
16
|
+
# log.formatter do |severity, timestamp, progname, msg|
|
17
|
+
# ANSI::Logger::SIMPLE_FORMAT % [severity, msg]
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
#--
|
21
|
+
# TODO: What's all this about then?
|
22
|
+
#
|
23
|
+
# When using debug level logger messages always append 'if $DBG'
|
24
|
+
# at the end. This hack is needed because Ruby does not support
|
25
|
+
# lazy evaluation (lisp macros).
|
26
|
+
#++
|
27
|
+
class ANSI::Logger < Logger
|
28
|
+
|
29
|
+
# Some available logging formats.
|
30
|
+
SIMPLE_FORMAT = "%5s: %s\n"
|
31
|
+
DETAILED_FORMAT = "%s %5s: %s\n"
|
32
|
+
|
33
|
+
# TODO: Not sure I like this approach.
|
34
|
+
class ::Logger #:nodoc:
|
35
|
+
class LogDevice #:nodoc:
|
36
|
+
attr_writer :ansicolor
|
37
|
+
|
38
|
+
def ansicolor?
|
39
|
+
@ansicolor.nil? ? true : @ansicolor
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
def ansicolor?
|
46
|
+
@logdev.ansicolor?
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
def ansicolor=(on)
|
51
|
+
@logdev.ansicolor = on
|
52
|
+
end
|
53
|
+
|
54
|
+
# Dictate the way in which this logger should format the
|
55
|
+
# messages it displays. This method requires a block. The
|
56
|
+
# block should return formatted strings given severity,
|
57
|
+
# timestamp, progname and msg.
|
58
|
+
#
|
59
|
+
# === Example
|
60
|
+
#
|
61
|
+
# logger = ANSI::Logger.new
|
62
|
+
#
|
63
|
+
# logger.formatter do |severity, timestamp, progname, msg|
|
64
|
+
# "#{progname}@#{timestamp} - #{severity}::#{msg}"
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
def formatter(&block)
|
68
|
+
self.formatter = block if block
|
69
|
+
super
|
70
|
+
end
|
71
|
+
|
72
|
+
def styles(options=nil)
|
73
|
+
@styles ||= {
|
74
|
+
:info => [],
|
75
|
+
:warn => [:yellow],
|
76
|
+
:debug => [:cyan],
|
77
|
+
:error => [:red],
|
78
|
+
:fatal => [:bold, :red]
|
79
|
+
}
|
80
|
+
@styles.merge!(options) if options
|
81
|
+
@styles
|
82
|
+
end
|
83
|
+
|
84
|
+
#
|
85
|
+
def info(progname=nil, &block)
|
86
|
+
return unless info?
|
87
|
+
@logdev.ansicolor? ? info_with_color{ super } : super
|
88
|
+
end
|
89
|
+
|
90
|
+
#
|
91
|
+
def warn(progname=nil, &block)
|
92
|
+
return unless warn?
|
93
|
+
@logdev.ansicolor? ? warn_with_color{ super } : super
|
94
|
+
end
|
95
|
+
|
96
|
+
#
|
97
|
+
def debug(progname=nil, &block)
|
98
|
+
return unless debug?
|
99
|
+
@logdev.ansicolor? ? debug_with_color{ super } : super
|
100
|
+
end
|
101
|
+
|
102
|
+
#
|
103
|
+
def error(progname=nil, &block)
|
104
|
+
return unless error?
|
105
|
+
@logdev.ansicolor? ? error_with_color{ super } : super
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
def fatal(progname=nil, &block)
|
110
|
+
return unless error?
|
111
|
+
@logdev.ansicolor? ? fatal_with_color{ super } : super
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def info_with_color #:yield:
|
117
|
+
styles[:info].each{ |s| self << ANSI::Code.send(s) }
|
118
|
+
yield
|
119
|
+
self << ANSI::Code.clear
|
120
|
+
end
|
121
|
+
|
122
|
+
def warn_with_color #:yield:
|
123
|
+
styles[:warn].each{ |s| self << ANSI::Code.send(s) }
|
124
|
+
yield
|
125
|
+
self << ANSI::Code.clear
|
126
|
+
end
|
127
|
+
|
128
|
+
def error_with_color #:yield:
|
129
|
+
styles[:error].each{ |s| self << ANSI::Code.send(s) }
|
130
|
+
yield
|
131
|
+
self << ANSI::Code.clear
|
132
|
+
end
|
133
|
+
|
134
|
+
def debug_with_color #:yield:
|
135
|
+
styles[:debug].each{ |s| self << ANSI::Code.send(s) }
|
136
|
+
yield
|
137
|
+
self << ANSI::Code.clear
|
138
|
+
end
|
139
|
+
|
140
|
+
def fatal_with_color #:yield:
|
141
|
+
styles[:fatal].each{ |s| self << ANSI::Code.send(s) }
|
142
|
+
yield
|
143
|
+
self << ANSI::Code.clear
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
# NOTE: trace is deprecated b/c binding of caller is no longer possible.
|
150
|
+
=begin
|
151
|
+
# Prints a trace message to DEBUGLOG (at debug level).
|
152
|
+
# Useful for emitting the value of variables, etc. Use
|
153
|
+
# like this:
|
154
|
+
#
|
155
|
+
# x = y = 5
|
156
|
+
# trace 'x' # -> 'x = 5'
|
157
|
+
# trace 'x ** y' # -> 'x ** y = 3125'
|
158
|
+
#
|
159
|
+
# If you have a more complicated value, like an array of
|
160
|
+
# hashes, then you'll probably want to use an alternative
|
161
|
+
# output format. For instance:
|
162
|
+
#
|
163
|
+
# trace 'value', :yaml
|
164
|
+
#
|
165
|
+
# Valid output format values (the _style_ parameter) are:
|
166
|
+
#
|
167
|
+
# :p :inspect
|
168
|
+
# :pp (pretty-print, using 'pp' library)
|
169
|
+
# :s :to_s
|
170
|
+
# :y :yaml :to_yaml (using the 'yaml' library')
|
171
|
+
#
|
172
|
+
# The default is <tt>:p</tt>.
|
173
|
+
#
|
174
|
+
# CREDITS:
|
175
|
+
#
|
176
|
+
# This code comes straight from the dev-utils Gem.
|
177
|
+
# Author: Gavin Sinclair <gsinclair@soyabean.com.au>
|
178
|
+
|
179
|
+
def trace(expr, style=:p)
|
180
|
+
unless expr.respond_to? :to_str
|
181
|
+
warn "trace: Can't evaluate the given value: #{caller.first}"
|
182
|
+
else
|
183
|
+
raise "FACETS: binding/or_caller is no longer possible"
|
184
|
+
require "facets/core/binding/self/of_caller"
|
185
|
+
|
186
|
+
Binding.of_caller do |b|
|
187
|
+
value = b.eval(expr.to_str)
|
188
|
+
formatter = TRACE_STYLES[style] || :inspect
|
189
|
+
case formatter
|
190
|
+
when :pp then require 'pp'
|
191
|
+
when :y, :yaml, :to_yaml then require 'yaml'
|
192
|
+
end
|
193
|
+
value_s = value.send(formatter)
|
194
|
+
message = "#{expr} = #{value_s}"
|
195
|
+
lines = message.split(/\n/)
|
196
|
+
indent = " "
|
197
|
+
debug(lines.shift)
|
198
|
+
lines.each do |line|
|
199
|
+
debug(indent + line)
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
TRACE_STYLES = {} # :nodoc:
|
206
|
+
TRACE_STYLES.update(
|
207
|
+
:pp => :pp_s, :s => :to_s, :p => :inspect,
|
208
|
+
:y => :to_yaml, :yaml => :to_yaml,
|
209
|
+
:inspect => :inspect, :to_yaml => :to_yaml
|
210
|
+
)
|
211
|
+
=end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
module ANSI
|
2
|
+
require 'ansi/code'
|
3
|
+
|
4
|
+
# This module is designed specifically for mixing into
|
5
|
+
# String-like classes or extending String-like objects.
|
6
|
+
#
|
7
|
+
# Generally speaking the String#ansi method is the more
|
8
|
+
# elegant approach to modifying a string with codes
|
9
|
+
# via a method call. But in some cases this Mixin's design
|
10
|
+
# might be preferable. Indeed, it original intent was
|
11
|
+
# as a compatability layer for the +colored+ gem.
|
12
|
+
|
13
|
+
module Mixin
|
14
|
+
|
15
|
+
def bold ; ANSI::Code.bold { to_s } ; end
|
16
|
+
def dark ; ANSI::Code.dark { to_s } ; end
|
17
|
+
def italic ; ANSI::Code.italic { to_s } ; end
|
18
|
+
def underline ; ANSI::Code.underline { to_s } ; end
|
19
|
+
def underscore ; ANSI::Code.underscore { to_s } ; end
|
20
|
+
def blink ; ANSI::Code.blink { to_s } ; end
|
21
|
+
def rapid ; ANSI::Code.rapid { to_s } ; end
|
22
|
+
def reverse ; ANSI::Code.reverse { to_s } ; end
|
23
|
+
def negative ; ANSI::Code.negative { to_s } ; end
|
24
|
+
def concealed ; ANSI::Code.concealed { to_s } ; end
|
25
|
+
def strike ; ANSI::Code.strike { to_s } ; end
|
26
|
+
|
27
|
+
def black ; ANSI::Code.black { to_s } ; end
|
28
|
+
def red ; ANSI::Code.red { to_s } ; end
|
29
|
+
def green ; ANSI::Code.green { to_s } ; end
|
30
|
+
def yellow ; ANSI::Code.yellow { to_s } ; end
|
31
|
+
def blue ; ANSI::Code.blue { to_s } ; end
|
32
|
+
def magenta ; ANSI::Code.magenta { to_s } ; end
|
33
|
+
def cyan ; ANSI::Code.cyan { to_s } ; end
|
34
|
+
def white ; ANSI::Code.white { to_s } ; end
|
35
|
+
|
36
|
+
def on_black ; ANSI::Code.on_black { to_s } ; end
|
37
|
+
def on_red ; ANSI::Code.on_red { to_s } ; end
|
38
|
+
def on_green ; ANSI::Code.on_green { to_s } ; end
|
39
|
+
def on_yellow ; ANSI::Code.on_yellow { to_s } ; end
|
40
|
+
def on_blue ; ANSI::Code.on_blue { to_s } ; end
|
41
|
+
def on_magenta ; ANSI::Code.on_magenta { to_s } ; end
|
42
|
+
def on_cyan ; ANSI::Code.on_cyan { to_s } ; end
|
43
|
+
def on_white ; ANSI::Code.on_white { to_s } ; end
|
44
|
+
|
45
|
+
def black_on_red ; ANSI::Code.black_on_red { to_s } ; end
|
46
|
+
def black_on_green ; ANSI::Code.black_on_green { to_s } ; end
|
47
|
+
def black_on_yellow ; ANSI::Code.black_on_yellow { to_s } ; end
|
48
|
+
def black_on_blue ; ANSI::Code.black_on_blue { to_s } ; end
|
49
|
+
def black_on_magenta ; ANSI::Code.black_on_magenta { to_s } ; end
|
50
|
+
def black_on_cyan ; ANSI::Code.black_on_cyan { to_s } ; end
|
51
|
+
def black_on_white ; ANSI::Code.black_on_white { to_s } ; end
|
52
|
+
|
53
|
+
def red_on_black ; ANSI::Code.red_on_black { to_s } ; end
|
54
|
+
def red_on_green ; ANSI::Code.red_on_green { to_s } ; end
|
55
|
+
def red_on_yellow ; ANSI::Code.red_on_yellow { to_s } ; end
|
56
|
+
def red_on_blue ; ANSI::Code.red_on_blue { to_s } ; end
|
57
|
+
def red_on_magenta ; ANSI::Code.red_on_magenta { to_s } ; end
|
58
|
+
def red_on_cyan ; ANSI::Code.red_on_cyan { to_s } ; end
|
59
|
+
def red_on_white ; ANSI::Code.red_on_white { to_s } ; end
|
60
|
+
|
61
|
+
def green_on_black ; ANSI::Code.green_on_black { to_s } ; end
|
62
|
+
def green_on_red ; ANSI::Code.green_on_red { to_s } ; end
|
63
|
+
def green_on_yellow ; ANSI::Code.green_on_yellow { to_s } ; end
|
64
|
+
def green_on_blue ; ANSI::Code.green_on_blue { to_s } ; end
|
65
|
+
def green_on_magenta ; ANSI::Code.green_on_magenta { to_s } ; end
|
66
|
+
def green_on_cyan ; ANSI::Code.green_on_cyan { to_s } ; end
|
67
|
+
def green_on_white ; ANSI::Code.green_on_white { to_s } ; end
|
68
|
+
|
69
|
+
def yellow_on_black ; ANSI::Code.yellow_on_black { to_s } ; end
|
70
|
+
def yellow_on_red ; ANSI::Code.yellow_on_red { to_s } ; end
|
71
|
+
def yellow_on_green ; ANSI::Code.yellow_on_green { to_s } ; end
|
72
|
+
def yellow_on_blue ; ANSI::Code.yellow_on_blue { to_s } ; end
|
73
|
+
def yellow_on_magenta ; ANSI::Code.yellow_on_magenta { to_s } ; end
|
74
|
+
def yellow_on_cyan ; ANSI::Code.yellow_on_cyan { to_s } ; end
|
75
|
+
def yellow_on_white ; ANSI::Code.yellow_on_white { to_s } ; end
|
76
|
+
|
77
|
+
def blue_on_black ; ANSI::Code.blue_on_black { to_s } ; end
|
78
|
+
def blue_on_red ; ANSI::Code.blue_on_red { to_s } ; end
|
79
|
+
def blue_on_green ; ANSI::Code.blue_on_green { to_s } ; end
|
80
|
+
def blue_on_yellow ; ANSI::Code.blue_on_yellow { to_s } ; end
|
81
|
+
def blue_on_magenta ; ANSI::Code.blue_on_magenta { to_s } ; end
|
82
|
+
def blue_on_cyan ; ANSI::Code.blue_on_cyan { to_s } ; end
|
83
|
+
def blue_on_white ; ANSI::Code.blue_on_white { to_s } ; end
|
84
|
+
|
85
|
+
def magenta_on_black ; ANSI::Code.magenta_on_black { to_s } ; end
|
86
|
+
def magenta_on_red ; ANSI::Code.magenta_on_red { to_s } ; end
|
87
|
+
def magenta_on_green ; ANSI::Code.magenta_on_green { to_s } ; end
|
88
|
+
def magenta_on_yellow ; ANSI::Code.magenta_on_yellow { to_s } ; end
|
89
|
+
def magenta_on_blue ; ANSI::Code.magenta_on_blue { to_s } ; end
|
90
|
+
def magenta_on_cyan ; ANSI::Code.magenta_on_cyan { to_s } ; end
|
91
|
+
def magenta_on_white ; ANSI::Code.magenta_on_white { to_s } ; end
|
92
|
+
|
93
|
+
def cyan_on_black ; ANSI::Code.cyan_on_black { to_s } ; end
|
94
|
+
def cyan_on_red ; ANSI::Code.cyan_on_red { to_s } ; end
|
95
|
+
def cyan_on_green ; ANSI::Code.cyan_on_green { to_s } ; end
|
96
|
+
def cyan_on_yellow ; ANSI::Code.cyan_on_yellow { to_s } ; end
|
97
|
+
def cyan_on_blue ; ANSI::Code.cyan_on_blue { to_s } ; end
|
98
|
+
def cyan_on_magenta ; ANSI::Code.cyan_on_magenta { to_s } ; end
|
99
|
+
def cyan_on_white ; ANSI::Code.cyan_on_white { to_s } ; end
|
100
|
+
|
101
|
+
def white_on_black ; ANSI::Code.white_on_black { to_s } ; end
|
102
|
+
def white_on_red ; ANSI::Code.white_on_red { to_s } ; end
|
103
|
+
def white_on_green ; ANSI::Code.white_on_green { to_s } ; end
|
104
|
+
def white_on_yellow ; ANSI::Code.white_on_yellow { to_s } ; end
|
105
|
+
def white_on_blue ; ANSI::Code.white_on_blue { to_s } ; end
|
106
|
+
def white_on_magenta ; ANSI::Code.white_on_magenta { to_s } ; end
|
107
|
+
def white_on_cyan ; ANSI::Code.white_on_cyan { to_s } ; end
|
108
|
+
|
109
|
+
# Move cursor to line and column, insert +self.to_s+ and return to
|
110
|
+
# original positon.
|
111
|
+
def display(line, column=0)
|
112
|
+
result = "\e[s"
|
113
|
+
result << "\e[#{line.to_i};#{column.to_i}H"
|
114
|
+
result << to_s
|
115
|
+
result << "\e[u"
|
116
|
+
result
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|