Class: String
- Inherits:
-
Object
- Object
- String
- Includes:
- Nuggets::String::CamelscoreMixin, Nuggets::String::EvaluateMixin, Nuggets::String::WcMixin, Nuggets::String::XorMixin
- Defined in:
- lib/nuggets/string/nsub.rb,
lib/nuggets/i18n.rb,
lib/nuggets/string/wc.rb,
lib/nuggets/string/xor.rb,
lib/nuggets/string/msub.rb,
lib/nuggets/string/case.rb,
lib/nuggets/ansicolor2css.rb,
lib/nuggets/dotted_decimal.rb,
lib/nuggets/string/evaluate.rb,
lib/nuggets/string/word_wrap.rb,
lib/nuggets/string/camelscore.rb,
lib/nuggets/string/sub_with_md.rb,
lib/nuggets/string/capitalize_first.rb
Overview
–
#
A component of ruby-nuggets, some extensions to the Ruby programming # language. #
#
Copyright (C) 2007-2011 Jens Wille #
#
Authors: #
Jens Wille <jens.wille@gmail.com> #
#
ruby-nuggets is free software; you can redistribute it and/or modify it # under the terms of the GNU Affero General Public License as published by # the Free Software Foundation; either version 3 of the License, or (at your # option) any later version. #
#
ruby-nuggets is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License # for more details. #
#
You should have received a copy of the GNU Affero General Public License # along with ruby-nuggets. If not, see <www.gnu.org/licenses/>. #
#
++
Defined Under Namespace
Modules: Case
Constant Summary
Constant Summary
Constants included from Nuggets::String::CamelscoreMixin
Nuggets::String::CamelscoreMixin::CAMELSCORE_ACRONYMS
Class Method Summary (collapse)
-
+ (Object) gimme_match_data!
call-seq:.
Instance Method Summary (collapse)
- - (Object) ansicolor2css (also: #ansicolour2css)
-
- (Object) capitalize_first
call-seq:.
-
- (Object) capitalize_first!
call-seq:.
-
- (Boolean) capitalized?
call-seq:.
-
- (Object) case
call-seq:.
-
- (Object) from_dotted_decimal
call-seq:.
-
- (Object) gsub_with_md(pattern, replacement = nil)
call-seq:.
-
- (Object) gsub_with_md!(pattern, replacement = nil)
call-seq:.
-
- (Boolean) lower_case?
(also: #downcase?)
call-seq:.
- - (Object) map_diacritics
- - (Object) map_diacritics!
-
- (Boolean) mixed_case?
call-seq:.
-
- (Object) msub(*substitutions)
call-seq:.
-
- (Object) msub!(*substitutions)
call-seq:.
-
- (Object) nsub(*args)
call-seq:.
-
- (Object) nsub!(*args)
call-seq:.
-
- (Object) replace_diacritics
call-seq:.
-
- (Object) replace_diacritics!
call-seq:.
-
- (Object) sub_with_md(pattern, replacement = nil)
call-seq:.
-
- (Object) sub_with_md!(pattern, replacement = nil)
call-seq:.
-
- (Boolean) upper_case?
(also: #upcase?)
call-seq:.
-
- (Object) word_wrap(line_width = 80, as_array = false)
call-seq:.
-
- (Object) word_wrap!(line_width = 80)
call-seq:.
-
- (Object) word_wrap_paragraph(line_width = 80)
call-seq:.
-
- (Object) word_wrap_paragraph!(line_width = 80)
call-seq:.
Methods included from Nuggets::String::CamelscoreMixin
#camelcase, #camelcase!, #constantize, #underscore, #underscore!
Methods included from Nuggets::String::EvaluateMixin
Methods included from Nuggets::String::XorMixin
Methods included from Nuggets::String::WcMixin
#byte_count, #char_count, #count_by_re, #count_by_re2, #line_count, #wc, #word_count
Class Method Details
+ (Object) gimme_match_data!
call-seq:
gimme_match_data!
Replaces the traditional substitution methods with their MatchData passing equivalents. USE WITH CAUTION!
82 83 84 85 86 87 |
# File 'lib/nuggets/string/sub_with_md.rb', line 82 def self.gimme_match_data! alias_method :sub, :sub_with_md alias_method :sub!, :sub_with_md! alias_method :gsub, :gsub_with_md alias_method :gsub!, :gsub_with_md! end |
Instance Method Details
- (Object) ansicolor2css Also known as: ansicolour2css
119 120 121 |
# File 'lib/nuggets/ansicolor2css.rb', line 119 def ansicolor2css ::Nuggets::ANSIColor2CSS.convert(self) end |
- (Object) capitalize_first
call-seq:
str.capitalize_first => new_string
Capitalizes the first character in str, but without downcasing the rest like String#capitalize does.
35 36 37 38 |
# File 'lib/nuggets/string/capitalize_first.rb', line 35 def capitalize_first return self if empty? self[0..0].upcase << self[1..-1] end |
- (Object) capitalize_first!
call-seq:
str.capitalize_first! => str
Destructive version of #capitalize_first.
44 45 46 |
# File 'lib/nuggets/string/capitalize_first.rb', line 44 def capitalize_first! replace capitalize_first end |
- (Boolean) capitalized?
call-seq:
str.capitalized? => +true+ or +false+
Tell whether str is capitalized.
78 79 80 |
# File 'lib/nuggets/string/case.rb', line 78 def capitalized? self == capitalize end |
- (Object) case
call-seq:
str.case => aSymbol
Returns a symbol indicating the case of str.
42 43 44 45 46 |
# File 'lib/nuggets/string/case.rb', line 42 def case self == downcase ? Case::LOWER : self == upcase ? Case::UPPER : Case::MIXED end |
- (Object) from_dotted_decimal
call-seq:
str.from_dotted_decimal => anInteger
Converts str from dotted-decimal notation to integer.
48 49 50 |
# File 'lib/nuggets/dotted_decimal.rb', line 48 def from_dotted_decimal split('.').map { |i| i.to_i.to_binary_s(8) }.join.to_i(2) end |
- (Object) gsub_with_md(pattern, replacement = nil)
call-seq:
str.gsub_with_md(pattern) { |match_data| ... } => new_str
Just like #gsub, but passes the MatchData object instead of the current match string to the block.
61 62 63 64 65 |
# File 'lib/nuggets/string/sub_with_md.rb', line 61 def gsub_with_md(pattern, replacement = nil) replacement ? gsub_without_md(pattern, replacement) : (_dup = dup).gsub_with_md!(pattern) { |*a| yield(*a) } || _dup end |
- (Object) gsub_with_md!(pattern, replacement = nil)
call-seq:
str.gsub_with_md!(pattern) { |match_data| ... } => str or +nil+
Destructive version of #gsub_with_md.
71 72 73 74 75 |
# File 'lib/nuggets/string/sub_with_md.rb', line 71 def gsub_with_md!(pattern, replacement = nil) replacement ? gsub_without_md!(pattern, replacement) : gsub_without_md!(pattern) { |match| yield $~ } end |
- (Boolean) lower_case? Also known as: downcase?
call-seq:
str.lower_case? => +true+ or +false+
Tell whether str is all lower case.
52 53 54 |
# File 'lib/nuggets/string/case.rb', line 52 def lower_case? self.case == Case::LOWER end |
- (Object) map_diacritics
147 148 149 |
# File 'lib/nuggets/i18n.rb', line 147 def map_diacritics (_dup = dup).map_diacritics! || _dup end |
- (Object) map_diacritics!
151 152 153 154 |
# File 'lib/nuggets/i18n.rb', line 151 def map_diacritics! re, block = ::Nuggets::I18n.args_for_map_diacritics gsub!(re, &block) end |
- (Boolean) mixed_case?
call-seq:
str.mixed_case? => +true+ or +false+
Tell whether str is mixed case.
70 71 72 |
# File 'lib/nuggets/string/case.rb', line 70 def mixed_case? self.case == Case::MIXED end |
- (Object) msub(*substitutions)
call-seq:
str.msub(*substitutions) => new_str
Performs multiple substitutions on str with order being taken into account (thus results of previous substitutions won't be subject to later ones) – inspired by Ruby Cookbook example 1.18.
The substitutions parameter can be an array or a list of [pattern, substitution] pairs, or, simply, a hash. Note that, when using a hash, the ordering of how substitutions are processed might differ from what you intended – instead use an array when order matters. pattern can be a string or a regexp, substitution can be a string (which may contain string expressions; cf. #evaluate), a proc (which will be call()ed), or any object really (which will be converted into a string).
46 47 48 |
# File 'lib/nuggets/string/msub.rb', line 46 def msub(*substitutions) (_dup = dup).msub!(*substitutions) || _dup end |
- (Object) msub!(*substitutions)
call-seq:
str.msub!(*substitutions) => str or +nil+
Destructive version of #msub.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/nuggets/string/msub.rb', line 54 def msub!(*substitutions) = substitutions.last.is_a?(::Hash) ? substitutions.pop : {} binding = .delete(:__binding__) || ::Kernel.binding keys, subs, cache = [], [], {} substitutions.concat(.to_a).each { |key, value| key = ::Regexp.new(::Regexp.escape(key)) unless key.is_a?(::Regexp) keys << key subs << [key, value] } gsub!(::Regexp.union(*keys)) { |match| cache[match] ||= begin value = subs.find { |key, _| key =~ match }.last if value.respond_to?(:evaluate) # make match available for string evaluation eval("__match__ = #{match.inspect}", binding) value.evaluate(binding) elsif value.respond_to?(:call) value.call(match) else value end end } end |
- (Object) nsub(*args)
call-seq:
str.nsub(pattern, replacement, count) => new_str
str.nsub(pattern, count) { |match| ... } => new_str
Returns a copy of str with the first count occurrences of pattern replaced with either replacement or the value of the block.
36 37 38 39 40 41 |
# File 'lib/nuggets/string/nsub.rb', line 36 def nsub(*args) _dup = dup (block_given? ? _dup.nsub!(*args) { |*a| yield(*a) } : _dup.nsub!(*args)) || _dup end |
- (Object) nsub!(*args)
call-seq:
str.nsub!(pattern, replacement, count) => str or +nil+
str.nsub!(pattern, count) { |match| ... } => str or +nil+
Performs the substitutions of #nsub in place, returning str, or nil if no substitutions were performed.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/nuggets/string/nsub.rb', line 49 def nsub!(*args) pattern, i = args.first, 0 case args.size when 2 # Only +count+ given count = args.last gsub!(pattern) { |match| (i += 1) <= count ? yield(match) : match } when 3 # Both +replacement+ and +count+ given; # ignore block (just like String#gsub does) replacement, count = args.values_at(1, 2) gsub!(pattern) { |match| (i += 1) <= count ? replacement : match } else raise ::ArgumentError, "wrong number of arguments (#{args.size} for 2-3)" end end |
- (Object) replace_diacritics
call-seq:
str.replace_diacritics => new_str
Substitutes any diacritics in str with their replacements as per Nuggets::I18n::DIACRITICS.
119 120 121 |
# File 'lib/nuggets/i18n.rb', line 119 def replace_diacritics (_dup = dup).replace_diacritics! || _dup end |
- (Object) replace_diacritics!
call-seq:
str.replace_diacritics! => str or +nil+
Destructive version of #replace_diacritics.
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/nuggets/i18n.rb', line 127 def replace_diacritics! diacritics = ::Nuggets::I18n::DIACRITICS gsub!(/#{::Regexp.union(*diacritics.keys)}/) { |m| s = diacritics[m] # Try to adjust case: # 'Äh' => 'AEh' => 'Aeh' # # But: # 'SÖS' => 'SOES' (not 'SOeS'!) if s.length > 1 t = $'[0..0] s[1..-1] = s[1..-1].downcase if t == t.downcase end s } end |
- (Object) sub_with_md(pattern, replacement = nil)
call-seq:
str.sub_with_md(pattern) { |match_data| ... } => new_str
Just like #sub, but passes the MatchData object instead of the current match string to the block.
40 41 42 43 44 |
# File 'lib/nuggets/string/sub_with_md.rb', line 40 def sub_with_md(pattern, replacement = nil) replacement ? sub_without_md(pattern, replacement) : (_dup = dup).sub_with_md!(pattern) { |*a| yield(*a) } || _dup end |
- (Object) sub_with_md!(pattern, replacement = nil)
call-seq:
str.sub_with_md!(pattern) { |match_data| ... } => str or +nil+
Destructive version of #sub_with_md.
50 51 52 53 54 |
# File 'lib/nuggets/string/sub_with_md.rb', line 50 def sub_with_md!(pattern, replacement = nil) replacement ? sub_without_md!(pattern, replacement) : sub_without_md!(pattern) { |match| yield $~ } end |
- (Boolean) upper_case? Also known as: upcase?
call-seq:
str.upper_case? => +true+ or +false+
Tell whether str is all upper case.
61 62 63 |
# File 'lib/nuggets/string/case.rb', line 61 def upper_case? self.case == Case::UPPER end |
- (Object) word_wrap(line_width = 80, as_array = false)
call-seq:
str.word_wrap(line_width) => new_str
Word wrap a string not exceeding line_width. Based on the Ruby Facets implementation, but preserves paragraphs. Thus str == str.word_wrap(str.split("\n").map { |l| l.length }.max).
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/nuggets/string/word_wrap.rb', line 38 def word_wrap(line_width = 80, as_array = false) wrapped = [] split(/(\n+)/).to_enum(:each_slice, 2).each { |paragraph, linebreaks| wrapped << paragraph.word_wrap_paragraph!(line_width) << linebreaks } wrapped = wrapped.join as_array ? wrapped.split("\n") : wrapped end |
- (Object) word_wrap!(line_width = 80)
call-seq:
str.word_wrap!(line_width) => str
As with #word_wrap, but modifies the string in place.
54 55 56 |
# File 'lib/nuggets/string/word_wrap.rb', line 54 def word_wrap!(line_width = 80) replace word_wrap(line_width) end |
- (Object) word_wrap_paragraph(line_width = 80)
call-seq:
str.word_wrap_paragraph(line_width) => new_str
Similar to #word_wrap, but assumes a single paragraph.
62 63 64 |
# File 'lib/nuggets/string/word_wrap.rb', line 62 def word_wrap_paragraph(line_width = 80) (_dup = dup).word_wrap_paragraph!(line_width) || _dup end |
- (Object) word_wrap_paragraph!(line_width = 80)
call-seq:
str.word_wrap_paragraph!(line_width) => str
Destructive version of #word_wrap_paragraph.
70 71 72 73 74 75 |
# File 'lib/nuggets/string/word_wrap.rb', line 70 def word_wrap_paragraph!(line_width = 80) gsub!(/(.{1,#{line_width}})(?:\s+|$)/, "\\1\n") sub!(/\n$/, '') self end |