Class: String
Overview
Overloads the String class.
Instance Method Summary collapse
- #binary? ⇒ Boolean
-
#diff_ratio(other) ⇒ Float
Calculates the difference ratio (at a word level) between
selfandother. -
#persistent_hash ⇒ Integer
In integer with the property of:.
-
#rdiff(other) ⇒ String
Gets the reverse diff between self and str on a word level.
- #recode ⇒ Object
- #recode! ⇒ Object
- #repack ⇒ Object
- #substring?(string) ⇒ Boolean
-
#words(strict = false) ⇒ Array<String>
Returns the words in
self.
Instance Method Details
#binary? ⇒ Boolean
127 128 129 130 131 132 |
# File 'lib/arachni/ruby/string.rb', line 127 def binary? # Stolen from YAML. encoding == Encoding::ASCII_8BIT || index("\x00") || count("\x00-\x7F", "^ -~\t\r\n").fdiv(length) > 0.3 end |
#diff_ratio(other) ⇒ Float
Calculates the difference ratio (at a word level) between self and other
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/arachni/ruby/string.rb', line 66 def diff_ratio( other ) return 0.0 if self == other s_words = self.words( true ) o_words = other.words( true ) common = (s_words & o_words).size.to_f union = (s_words | o_words).size.to_f (union - common)/union end |
#persistent_hash ⇒ Integer
Returns In integer with the property of:
If ‘str1 == str2` then `str1.persistent_hash == str2.persistent_hash`.
It basically has the same function as Ruby’s #hash method, but does not use a random seed per Ruby process – making it suitable for use in distributed systems.
100 101 102 |
# File 'lib/arachni/ruby/string.rb', line 100 def persistent_hash Zlib.crc32 self end |
#rdiff(other) ⇒ String
Gets the reverse diff between self and str on a word level.
str = "This is the first test.\nNot really sure what else to put here...\n"
str2 = "This is the second test.\nNot really sure what else to put here...\nBoo-Yah!\n"
str.rdiff( str2 )
# => "This is the test.\nNot really sure what else to put here...\n"
49 50 51 52 53 54 55 56 57 |
# File 'lib/arachni/ruby/string.rb', line 49 def rdiff( other ) return self if self == other # get the words of the first text in an array s_words = words # get what hasn't changed (the rdiff, so to speak) as a string (s_words - (s_words - other.words)).join end |
#recode ⇒ Object
122 123 124 |
# File 'lib/arachni/ruby/string.rb', line 122 def recode dup.recode! end |
#recode! ⇒ Object
117 118 119 120 |
# File 'lib/arachni/ruby/string.rb', line 117 def recode! force_encoding( 'utf-8' ) encode!( 'utf-16be', invalid: :replace, undef: :replace ).encode( 'utf-8' ) end |
#repack ⇒ Object
113 114 115 |
# File 'lib/arachni/ruby/string.rb', line 113 def repack unpack( 'C*' ).pack( 'U*' ) end |
#substring?(string) ⇒ Boolean
104 105 106 107 108 109 110 111 |
# File 'lib/arachni/ruby/string.rb', line 104 def substring?( string ) begin cmatch = match( Regexp.new( Regexp.escape( string ) ) ) cmatch && !cmatch.to_s.empty? rescue nil end end |