class String
Public Instance Methods
Sample:
'/var/www/media/132/logo.png'.cama_add_postfix_file_name('_2') ==> /var/www/media/132/logo_2.png
# File lib/ext/string.rb, line 131 def cama_add_postfix_file_name(postfix) File.join(File.dirname(self), "#{File.basename(self, File.extname(self))}#{postfix}#{File.extname(self)}") end
convert url into custom url with postfix, sample: “localhost/company/rack_multipart20160124_2288_8xcdjs.jpg”.cama_add_postfix_url(‘thumbs/') into
# File lib/ext/string.rb, line 125 def cama_add_postfix_url(postfix) File.join(File.dirname(self), "#{postfix}#{File.basename(self)}") end
# File lib/ext/string.rb, line 104 def cama_fix_filename # Sanitize the filename, to prevent hacking # https://github.com/carrierwaveuploader/carrierwave/blob/6a1445e0daef29a5d4f799a016359b62d82dbc24/lib/carrierwave/sanitized_file.rb#L322 sanitize_regexp = /[^[:word:]\.\-\+]/ name = self.tr("\\", "/") # work-around for IE name = File.basename(name) name = name.gsub(sanitize_regexp, "_") name = "_#{name}" if name =~ /\A\.+\z/ name = "unnamed" if name.size == 0 name.mb_chars.to_s end
fix file media keys: avoid duplicated slashes and force to start with slash
# File lib/ext/string.rb, line 97 def cama_fix_media_key res = self.gsub('../', '/').gsub('./', '/').gsub(/(\/){2,}/, "/") res = "/#{res}" unless res.start_with?('/') res = res.slice(0...-1) if res.end_with?('/') && res.length > 1 res end
remove double or more secuencial slashes, like: '/a//b/c/d///abs'.cama_fix_slash => /a/b/c/d/abs
# File lib/ext/string.rb, line 92 def cama_fix_slash self.gsub(/(\/){2,}/, "/") end
Colorized Ruby output color: (:red, :green, :blue, :pink, :light_blue, :yellow)
# File lib/ext/string.rb, line 158 def cama_log_style(color = :red) colors = {red: 31, green: 32, blue: 34, pink: 35, light_blue: 36, yellow: 33} "\e[#{colors[color]}m#{self}\e[0m" end
Parse the url to get the image version
version_name: (String, default empty) version name, if this is empty, this will return the image version for thumb of the image, sample: 'http://localhost/my_image.png'.cama_parse_image_version('') => http://localhost/thumb/my_image.png if this is present, this will return the image version generated, sample: , sample: 'http://localhost/my_image.png'.cama_parse_image_version('200x200') => http://localhost/thumb/my_image_200x200.png check_url: (boolean, default false) if true the image version will be verified, i.e. if the url exist will return version url, if not will return current url
# File lib/ext/string.rb, line 140 def cama_parse_image_version(version_name = '', check_url = false) res = File.join(File.dirname(self), 'thumb', "#{File.basename(self).parameterize}#{File.extname(self)}") res = res.cama_add_postfix_file_name("_#{version_name}") if version_name.present? return self if check_url && !res.cama_url_exist? res end
parse all codes in current text to replace with values sample: “Hello [c1]”.cama_replace_codes({c1: 'World'}) ==> Hello World
# File lib/ext/string.rb, line 80 def cama_replace_codes(values, format_code = '[') res = self values.each do |k, v| v = v.join(',') if v.is_a?(Array) res = res.gsub("[#{k}]", v.to_s) if format_code == '[' res = res.gsub("{#{k}}", v.to_s) if format_code == '{' res = res.gsub("%{#{k}}", v.to_s) if format_code == '%{' end res end
check if current string is true or false cases for true: '1' | 'true' cases for false: '0' | 'false' | '' return boolean
# File lib/ext/string.rb, line 28 def cama_true? self == 'true' || self == '1' end
check if the url exist sample: “mydomain.com/myimg.png”.cama_url_exist? return (Boolean) true if the url exist
# File lib/ext/string.rb, line 150 def cama_url_exist? Net::HTTP.get_response(URI.parse(self)).is_a?(Net::HTTPSuccess) rescue false end
# File lib/ext/string.rb, line 20 def is_bool? self == 'false' || self == 'true' end
# File lib/ext/string.rb, line 12 def is_float? self.to_f.to_s == self.to_s end
# File lib/ext/string.rb, line 16 def is_number? self.to_f.to_s == self.to_s || self.to_i.to_s == self.to_s end
return cleaned model class name remove decorate remove Cama prefix
# File lib/ext/string.rb, line 119 def parseCamaClass self.gsub("Decorator","").gsub("CamaleonCms::","") end
parse string into domain owem.tuzitio.com into owem.tuzitio.com
# File lib/ext/string.rb, line 69 def parse_domain url = self uri = URI.parse(url) uri = URI.parse("http://#{url}") if uri.scheme.nil? host = (uri.host || self).downcase h = host.start_with?('www.') ? host[4..-1] : host "#{h}#{":#{uri.port}" unless [80, 443].include?(uri.port)}" end
parse string into slug format
# File lib/ext/string.rb, line 45 def slug #strip the string ret = self.strip #blow away apostrophes ret.gsub! /['`]/,"" # @ --> at, and & --> and ret.gsub! /\s*@\s*/, " at " ret.gsub! /\s*&\s*/, " and " #replace all non alphanumeric, underscore or periods with underscore ret.gsub! /\s*[^A-Za-z0-9\.\-]\s*/, '_' #convert double underscores to single ret.gsub! /_+/,"_" #strip off leading/trailing underscore ret.gsub! /\A[_\.]+|[_\.]+\z/,"" ret end
# File lib/ext/string.rb, line 2 def to_bool return true if self == true || self =~ (/(true|t|yes|y|1)$/i) return false if self == false || self.blank? || self =~ (/(false|f|no|n|0)$/i) raise ArgumentError.new("invalid value for Boolean: \"#{self}\"") end
# File lib/ext/string.rb, line 32 def to_var if is_float? self.to_f elsif is_number? self.to_i elsif is_bool? self.to_bool else self end end
Usage The default value if translation is not provided is all text
$ WpPost.post_title $ => "<!--:en-->And this is how the Universe ended.<!--:--><!--:fr-->Et c'est ainsi que l'univers connu cessa d'exister.<!--:-->" $ I18n.locale = :en $ WpPost.post_title.translate $ => "And this is how the Universe ended." $ WpPost.post_title.translate(:en) $ => "And this is how the Universe ended." Spits the same text out if no translation tags are applied $ WpPost.post_title $ => "And this is how the Universe ended." $ WpPost.post_title.translate(:fr) $ => "And this is how the Universe ended."
# File lib/ext/translator.rb, line 23 def translate(locale = nil) locale ||= I18n.locale locale = locale.to_sym return self if !self.squish.starts_with?("<!--") or self.blank? return translations[locale] if translations.has_key?(locale) return translations[I18n.default_locale] if translations.has_key?(I18n.default_locale) return '' if translations.keys.any? self end
return hash of translations for this string sample: {es: “hola mundo”, en: “Hello World”}
# File lib/ext/translator.rb, line 35 def translations @translations ||= split_locales @translations end
return aray of translations for this string sample: [“hola mundo”, “Hello World”]
# File lib/ext/translator.rb, line 42 def translations_array r = translations.map{|key, value| value} return r.present? ? r : [self] end
Protected Instance Methods
# File lib/ext/translator.rb, line 48 def split_locales translations_per_locale = {} return translations_per_locale if !self.squish.starts_with?("<!--") or self.blank? self.split('<!--:-->').each do |t| t.match(/^<!--:([\w||-]{2,5})/) do |lang| lt = lang[1].sub("--", "") translations_per_locale[lt.to_sym] = t.gsub(/<!--:#{lt}-->(.*)/, '\1') end end translations_per_locale end