Module: Knj::Strings
- Defined in:
- lib/knj/strings.rb
Class Method Summary collapse
-
.const_get_full(str) ⇒ Object
Returns the module from the given string - even if formed as SomeClass::SomeNewClass.
-
.email_str_safe(str) ⇒ Object
Email content may only be 1000 characters long.
-
.float_as_human_logic(floatval) ⇒ Object
Returns a float as human locaically readable.
- .html_links(str, args = {}) ⇒ Object
-
.is_email?(str) ⇒ Boolean
Returns boolean if the strings is a correctly formatted email: [email protected].
-
.is_phonenumber?(str) ⇒ Boolean
Returns boolean if the string is a correctly formatted phonenumber as: +4512345678.
- .js_safe(str, args = {}) ⇒ Object
-
.regex(str) ⇒ Object
Returns a Regexp-object from the string formatted as what you would give to Php’s preg_match.
-
.searchstring(string, &block) ⇒ Object
Partens a string up in blocks for whatever words can be used to search for.
-
.shorten(str, maxlength) ⇒ Object
Shortens a string to maxlength and adds “…” if it was shortened.
- .strip(origstr, args) ⇒ Object
- .unixsafe(string) ⇒ Object
- .UnixSafe(tha_string) ⇒ Object
-
.yn_str(value, str_yes = "Yes", str_no = "No") ⇒ Object
Returns ‘Yes’ or ‘No’ based on a value.
Class Method Details
.const_get_full(str) ⇒ Object
Returns the module from the given string - even if formed as SomeClass::SomeNewClass.
195 196 197 198 199 200 201 202 203 204 |
# File 'lib/knj/strings.rb', line 195 def self.const_get_full(str) raise "Invalid object: '#{str.class.name}'." if !str.is_a?(String) and !str.is_a?(Symbol) module_use = Kernel str.to_s.scan(/(.+?)(::|$)/) do |match| module_use = module_use.const_get(match[0]) end return module_use end |
.email_str_safe(str) ⇒ Object
Email content may only be 1000 characters long. This method shortens them gracefully.
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'lib/knj/strings.rb', line 207 def self.email_str_safe(str) str = str.to_s strcopy = "#{str}" str.each_line("\n") do |substr_orig| substr = "#{substr_orig}" next if substr.length <= 1000 lines = [] while substr.length > 1000 do whitespace_index = substr.rindex(/\s/, 1000) if whitespace_index == nil lines << substr.slice(0, 1000) substr = substr.slice(1000, substr.length) else lines << substr.slice(0, whitespace_index + 1) substr = substr.slice(whitespace_index + 1, substr.length) end end lines << substr strcopy.gsub!(/^#{Regexp.escape(substr_orig)}$/, lines.join("\n")) end return strcopy end |
.float_as_human_logic(floatval) ⇒ Object
Returns a float as human locaically readable. 1.0 will be 1, 1.5 will be 1.5 and so on.
238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/knj/strings.rb', line 238 def self.float_as_human_logic(floatval) raise "Not a float." if !floatval.is_a?(Float) float_s = floatval.to_s parts = float_s.split(".") if parts[1].to_i > 0 return float_s else return parts[0].to_s end end |
.html_links(str, args = {}) ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/knj/strings.rb', line 133 def self.html_links(str, args = {}) str.to_s.html.scan(/(http:\/\/([A-z]+)\S*\.([A-z]{2,4})(\S+))/) do |match| if block_given? str = yield(:str => str, :args => args, :match => match) else if args["target"] html = "<a target=\"#{args["target"]}\"" else html = "<a" end html << " href=\"#{match[0]}\">#{match[0]}</a>" str = str.gsub(match[0], html) end end return str end |
.is_email?(str) ⇒ Boolean
Returns boolean if the strings is a correctly formatted email: [email protected].
83 84 85 86 |
# File 'lib/knj/strings.rb', line 83 def self.is_email?(str) return true if str.to_s.match(/^\S+@\S+\.\S+$/) return false end |
.is_phonenumber?(str) ⇒ Boolean
Returns boolean if the string is a correctly formatted phonenumber as: +4512345678.
89 90 91 92 |
# File 'lib/knj/strings.rb', line 89 def self.is_phonenumber?(str) return true if str.to_s.match(/^\+\d{2}\d+$/) return false end |
.js_safe(str, args = {}) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/knj/strings.rb', line 94 def self.js_safe(str, args = {}) str = "#{str}" if args[:quotes_to_single] str.gsub!('"', "'") end str = str.gsub("\r", "").gsub("\n", "\\n").gsub("'", "\\\\'") if !args.key?(:quotes) or args[:quotes] str.gsub!('"', '\"') end return str end |
.regex(str) ⇒ Object
Returns a Regexp-object from the string formatted as what you would give to Php’s preg_match.
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/knj/strings.rb', line 13 def self.regex(str) first_char = str[0, 1] raise "First char should be '/' but wasnt: '#{first_char}'." if first_char != "/" first_pos = 1 second_pos = str.rindex("/") pattern = str[first_pos, second_pos - 1] flags = str[second_pos + 1, str.length].to_s arg_two = 0 if flags flags.length.times do |i| arg = flags[i, 1] case arg when "i" arg_two |= Regexp::IGNORECASE when "m" arg_two |= Regexp::MULTILINE when "x" arg_two |= Regexp::EXTENDED when "U" raise Knj::Errors::InvalidData, "Ruby does (as far as I know) not support the 'U'-modifier. You should rewrite your regex with non-greedy operators such as '(\d+?)' instead for: '#{str}'." else raise "Unknown argument: '#{arg}'." end end end regex = Regexp.new(pattern, arg_two) return regex end |
.searchstring(string, &block) ⇒ Object
Partens a string up in blocks for whatever words can be used to search for. Supports a block or returns an array.
49 50 51 52 53 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 |
# File 'lib/knj/strings.rb', line 49 def self.searchstring(string, &block) words = [] if !block string = string.to_s matches = string.scan /(\"(.+?)\")/ matches.each do |matcharr| word = matcharr[1] if word and word.length > 0 if block yield(matcharr[1]) else words << matcharr[1] end string = string.gsub(matcharr[0], "") end end string.split(/\s/).each do |word| if word and word.length > 0 if block yield(word) else words << word end end end return nil if block return words end |
.shorten(str, maxlength) ⇒ Object
Shortens a string to maxlength and adds “…” if it was shortened.
127 128 129 130 131 |
# File 'lib/knj/strings.rb', line 127 def self.shorten(str, maxlength) str = str.to_s str = str.slice(0..(maxlength - 1)).strip + "..." if str.length > maxlength return str end |
.strip(origstr, args) ⇒ Object
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/knj/strings.rb', line 152 def self.strip(origstr, args) newstr = "#{origstr}<br>" if !args.key?(:right) or args[:right] loop do changed = false args[:strips].each do |str| len = str.length endstr = newstr.slice(-len, len) next if !endstr if endstr == str changed = true newstr = newstr.slice(0..newstr.length-len-1) end end break if !changed end end if !args.key?(:left) or args[:left] loop do changed = false args[:strips].each do |str| len = str.length endstr = newstr.slice(0, len) next if !endstr if endstr == str changed = true newstr = newstr.slice(len..-1) end end break if !changed end end return newstr end |
.unixsafe(string) ⇒ Object
8 9 10 |
# File 'lib/knj/strings.rb', line 8 def self.unixsafe(string) return Knj::Strings.UnixSafe(string) end |
.UnixSafe(tha_string) ⇒ Object
4 5 6 |
# File 'lib/knj/strings.rb', line 4 def self.UnixSafe(tha_string) return tha_string.to_s.gsub(" ", "\\ ").gsub("&", "\&").gsub("(", "\\(").gsub(")", "\\)").gsub('"', '\"').gsub("\n", "\"\n\"").gsub(":", "\\:").gsub('\'', "\\\\'").gsub("`", "\\\\`") end |
.yn_str(value, str_yes = "Yes", str_no = "No") ⇒ Object
Returns ‘Yes’ or ‘No’ based on a value. The value can be 0, 1, yes, no, true or false.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/knj/strings.rb', line 111 def self.yn_str(value, str_yes = "Yes", str_no = "No") value = value.to_i if Knj::Php.is_numeric(value) if value.is_a?(Integer) if value == 0 return str_no else return str_yes end end return str_no if !value or value == "no" return str_yes end |