From b4ee5266f196afc66686e88a4033262fa0f4933d Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Fri, 19 Jan 2024 15:41:59 +0900 Subject: [PATCH] Extract abbrev as bundled gems --- gems/bundled_gems | 1 + lib/abbrev.gemspec | 30 ---------- lib/abbrev.rb | 133 -------------------------------------------- test/test_abbrev.rb | 55 ------------------ 4 files changed, 1 insertion(+), 218 deletions(-) delete mode 100644 lib/abbrev.gemspec delete mode 100644 lib/abbrev.rb delete mode 100644 test/test_abbrev.rb diff --git a/gems/bundled_gems b/gems/bundled_gems index fa7d39dfd2..7fdbf0d57d 100644 --- a/gems/bundled_gems +++ b/gems/bundled_gems @@ -26,3 +26,4 @@ getoptlong 0.2.1 https://github.com/ruby/getoptlong base64 0.2.0 https://github.com/ruby/base64 bigdecimal 3.1.6 https://github.com/ruby/bigdecimal observer 0.1.2 https://github.com/ruby/observer +abbrev 0.1.2 https://github.com/ruby/abbrev diff --git a/lib/abbrev.gemspec b/lib/abbrev.gemspec deleted file mode 100644 index 57ae5738b8..0000000000 --- a/lib/abbrev.gemspec +++ /dev/null @@ -1,30 +0,0 @@ -name = File.basename(__FILE__, ".gemspec") -version = ["lib", Array.new(name.count("-")+1, ".").join("/")].find do |dir| - break File.foreach(File.join(__dir__, dir, "#{name.tr('-', '/')}.rb")) do |line| - /^\s*VERSION\s*=\s*"(.*)"/ =~ line and break $1 - end rescue nil -end - -Gem::Specification.new do |spec| - spec.name = name - spec.version = version - spec.authors = ["Akinori MUSHA"] - spec.email = ["knu@idaemons.org"] - - spec.summary = %q{Calculates a set of unique abbreviations for a given set of strings} - spec.description = %q{Calculates a set of unique abbreviations for a given set of strings} - spec.homepage = "https://github.com/ruby/abbrev" - spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") - spec.licenses = ["Ruby", "BSD-2-Clause"] - - spec.metadata["homepage_uri"] = spec.homepage - spec.metadata["source_code_uri"] = spec.homepage - spec.metadata["changelog_uri"] = spec.homepage + "/releases" - - spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do - `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } - end - spec.bindir = "exe" - spec.executables = [] - spec.require_paths = ["lib"] -end diff --git a/lib/abbrev.rb b/lib/abbrev.rb deleted file mode 100644 index 312085c289..0000000000 --- a/lib/abbrev.rb +++ /dev/null @@ -1,133 +0,0 @@ -# frozen_string_literal: true -#-- -# Copyright (c) 2001,2003 Akinori MUSHA -# -# All rights reserved. You can redistribute and/or modify it under -# the same terms as Ruby. -# -# $Idaemons: /home/cvs/rb/abbrev.rb,v 1.2 2001/05/30 09:37:45 knu Exp $ -# $RoughId: abbrev.rb,v 1.4 2003/10/14 19:45:42 knu Exp $ -# $Id$ -#++ - -## -# Calculates the set of unambiguous abbreviations for a given set of strings. -# -# require 'abbrev' -# require 'pp' -# -# pp Abbrev.abbrev(['ruby']) -# #=> {"ruby"=>"ruby", "rub"=>"ruby", "ru"=>"ruby", "r"=>"ruby"} -# -# pp Abbrev.abbrev(%w{ ruby rules }) -# -# _Generates:_ -# { "ruby" => "ruby", -# "rub" => "ruby", -# "rules" => "rules", -# "rule" => "rules", -# "rul" => "rules" } -# -# It also provides an array core extension, Array#abbrev. -# -# pp %w{ summer winter }.abbrev -# -# _Generates:_ -# { "summer" => "summer", -# "summe" => "summer", -# "summ" => "summer", -# "sum" => "summer", -# "su" => "summer", -# "s" => "summer", -# "winter" => "winter", -# "winte" => "winter", -# "wint" => "winter", -# "win" => "winter", -# "wi" => "winter", -# "w" => "winter" } - -module Abbrev - VERSION = "0.1.2" - - # Given a set of strings, calculate the set of unambiguous abbreviations for - # those strings, and return a hash where the keys are all the possible - # abbreviations and the values are the full strings. - # - # Thus, given +words+ is "car" and "cone", the keys pointing to "car" would - # be "ca" and "car", while those pointing to "cone" would be "co", "con", and - # "cone". - # - # require 'abbrev' - # - # Abbrev.abbrev(%w{ car cone }) - # #=> {"ca"=>"car", "con"=>"cone", "co"=>"cone", "car"=>"car", "cone"=>"cone"} - # - # The optional +pattern+ parameter is a pattern or a string. Only input - # strings that match the pattern or start with the string are included in the - # output hash. - # - # Abbrev.abbrev(%w{car box cone crab}, /b/) - # #=> {"box"=>"box", "bo"=>"box", "b"=>"box", "crab" => "crab"} - # - # Abbrev.abbrev(%w{car box cone}, 'ca') - # #=> {"car"=>"car", "ca"=>"car"} - def abbrev(words, pattern = nil) - table = {} - seen = Hash.new(0) - - if pattern.is_a?(String) - pattern = /\A#{Regexp.quote(pattern)}/ # regard as a prefix - end - - words.each do |word| - next if word.empty? - word.size.downto(1) { |len| - abbrev = word[0...len] - - next if pattern && pattern !~ abbrev - - case seen[abbrev] += 1 - when 1 - table[abbrev] = word - when 2 - table.delete(abbrev) - else - break - end - } - end - - words.each do |word| - next if pattern && pattern !~ word - - table[word] = word - end - - table - end - - module_function :abbrev -end - -class Array - # Calculates the set of unambiguous abbreviations for the strings in +self+. - # - # require 'abbrev' - # %w{ car cone }.abbrev - # #=> {"car"=>"car", "ca"=>"car", "cone"=>"cone", "con"=>"cone", "co"=>"cone"} - # - # The optional +pattern+ parameter is a pattern or a string. Only input - # strings that match the pattern or start with the string are included in the - # output hash. - # - # %w{ fast boat day }.abbrev(/^.a/) - # #=> {"fast"=>"fast", "fas"=>"fast", "fa"=>"fast", "day"=>"day", "da"=>"day"} - # - # Abbrev.abbrev(%w{car box cone}, "ca") - # #=> {"car"=>"car", "ca"=>"car"} - # - # See also Abbrev.abbrev - def abbrev(pattern = nil) - Abbrev::abbrev(self, pattern) - end -end diff --git a/test/test_abbrev.rb b/test/test_abbrev.rb deleted file mode 100644 index 67287138aa..0000000000 --- a/test/test_abbrev.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true -require 'test/unit' -require 'abbrev' - -class TestAbbrev < Test::Unit::TestCase - def test_abbrev - words = %w[summer winter win ruby rules] - - assert_equal({ - "rub" => "ruby", - "ruby" => "ruby", - "rul" => "rules", - "rule" => "rules", - "rules" => "rules", - "s" => "summer", - "su" => "summer", - "sum" => "summer", - "summ" => "summer", - "summe" => "summer", - "summer" => "summer", - "win" => "win", - "wint" => "winter", - "winte" => "winter", - "winter" => "winter", - }, words.abbrev) - - assert_equal({ - "rub" => "ruby", - "ruby" => "ruby", - "rul" => "rules", - "rule" => "rules", - "rules" => "rules", - }, words.abbrev('ru')) - - assert_equal words.abbrev, Abbrev.abbrev(words) - assert_equal words.abbrev('ru'), Abbrev.abbrev(words, 'ru') - end - - def test_abbrev_lf - words = ["abc", "abc\nd", "de"] - - assert_equal({ - "abc" => "abc", - "abc\n" => "abc\nd", - "abc\nd" => "abc\nd", - "d" => "de", - "de" => "de", - }, words.abbrev) - - assert_equal({ - "d" => "de", - "de" => "de", - }, words.abbrev('d')) - end -end