Class: String

Inherits:
Object
  • Object
show all
Defined in:
lib/ext/string.rb,
lib/ext/translator.rb

Instance Method Summary collapse

Instance Method Details

#cama_add_postfix_file_name(postfix) ⇒ Object

Sample:

'/var/www/media/132/logo.png'.cama_add_postfix_file_name('_2') ==> /var/www/media/132/logo_2.png


132
133
134
# File 'lib/ext/string.rb', line 132

def cama_add_postfix_file_name(postfix)
  File.join(File.dirname(self), "#{File.basename(self, File.extname(self))}#{postfix}#{File.extname(self)}")
end

#cama_add_postfix_url(postfix) ⇒ Object

convert url into custom url with postfix, sample: “”.cama_add_postfix_url(‘thumbs/’) into



126
127
128
# File 'lib/ext/string.rb', line 126

def cama_add_postfix_url(postfix)
  File.join(File.dirname(self), "#{postfix}#{File.basename(self)}")
end

#cama_fix_filenameObject



105
106
107
108
109
110
111
112
113
114
115
# File 'lib/ext/string.rb', line 105

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 = tr('\\', '/') # work-around for IE
  name = File.basename(name)
  name = name.gsub(sanitize_regexp, '_')
  name = "_#{name}" if name =~ /\A\.+\z/
  name = 'unnamed' if name.empty?
  name.mb_chars.to_s
end

#cama_fix_media_keyObject

fix file media keys: avoid duplicated slashes and force to start with slash



98
99
100
101
102
103
# File 'lib/ext/string.rb', line 98

def cama_fix_media_key
  res = gsub('../', '/').gsub('./', '/').gsub(%r{(/){2,}}, '/')
  res = "/#{res}" unless res.start_with?('/')
  res = res.slice(0...-1) if res.end_with?('/') && res.length > 1
  res
end

#cama_fix_slashObject

remove double or more secuencial slashes, like: ‘/a//b/c/d///abs’.cama_fix_slash => /a/b/c/d/abs



93
94
95
# File 'lib/ext/string.rb', line 93

def cama_fix_slash
  gsub(%r{(/){2,}}, '/')
end

#cama_log_style(color = :red) ⇒ Object

Colorized Ruby output color: (:red, :green, :blue, :pink, :light_blue, :yellow)



160
161
162
163
# File 'lib/ext/string.rb', line 160

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

#cama_parse_image_version(version_name = '', check_url = false) ⇒ Object

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


141
142
143
144
145
146
147
# File 'lib/ext/string.rb', line 141

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

#cama_replace_codes(values, format_code = '[') ⇒ Object

parse all codes in current text to replace with values sample: “Hello [c1]”.cama_replace_codes(‘World’) ==> Hello World



81
82
83
84
85
86
87
88
89
90
# File 'lib/ext/string.rb', line 81

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

#cama_true?Boolean

check if current string is true or false cases for true: ‘1’ | ‘true’ cases for false: ‘0’ | ‘false’ | ” return boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/ext/string.rb', line 29

def cama_true?
  self == 'true' || self == '1'
end

#cama_url_exist?Boolean

check if the url exist sample: “”.cama_url_exist? return (Boolean) true if the url exist

Returns:

  • (Boolean)


152
153
154
155
156
# File 'lib/ext/string.rb', line 152

def cama_url_exist?
  Net::HTTP.get_response(URI.parse(self)).is_a?(Net::HTTPSuccess)
rescue StandardError
  false
end

#is_bool?Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/ext/string.rb', line 21

def is_bool?
  self == 'false' || self == 'true'
end

#is_float?Boolean

Returns:

  • (Boolean)


13
14
15
# File 'lib/ext/string.rb', line 13

def is_float?
  to_f.to_s == to_s
end

#is_number?Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/ext/string.rb', line 17

def is_number?
  to_f.to_s == to_s || to_i.to_s == to_s
end

#parse_domainObject

parse string into domain owem.tuzitio.com into owem.tuzitio.com



70
71
72
73
74
75
76
77
# File 'lib/ext/string.rb', line 70

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..] : host
  "#{h}#{":#{uri.port}" unless [80, 443].include?(uri.port)}"
end

#parseCamaClassObject

return cleaned model class name remove decorate remove Cama prefix



120
121
122
# File 'lib/ext/string.rb', line 120

def parseCamaClass
  gsub('Decorator', '').gsub('CamaleonCms::', '')
end

#slugObject

parse string into slug format



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/ext/string.rb', line 46

def slug
  # strip the string
  ret = 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

#strip_tagsObject



9
10
11
# File 'lib/ext/string.rb', line 9

def strip_tags
  ActionController::Base.helpers.strip_tags(self)
end

#to_boolObject

Raises:

  • (ArgumentError)


2
3
4
5
6
7
# 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 || blank? || self =~ (/(false|f|no|n|0)$/i)

  raise ArgumentError, "invalid value for Boolean: \"#{self}\""
end

#to_varObject



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ext/string.rb', line 33

def to_var
  if is_float?
    to_f
  elsif is_number?
    to_i
  elsif is_bool?
    to_bool
  else
    self
  end
end

#translate(locale = nil) ⇒ Object

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."


22
23
24
25
26
27
28
29
30
31
# File 'lib/ext/translator.rb', line 22

def translate(locale = nil)
  locale ||= I18n.locale
  locale = locale.to_sym
  return self if !squish.starts_with?('<!--') || blank?
  return translations[locale] if translations.key?(locale)
  return translations[I18n.default_locale] if translations.key?(I18n.default_locale)
  return '' if translations.keys.any?

  self
end

#translationsObject

return hash of translations for this string sample: “hola mundo”, en: “Hello World”



35
36
37
# File 'lib/ext/translator.rb', line 35

def translations
  @translations ||= split_locales
end

#translations_arrayObject

return array of translations for this string sample: [“hola mundo”, “Hello World”]



41
42
43
44
# File 'lib/ext/translator.rb', line 41

def translations_array
  r = translations.map { |_key, value| value }
  r.present? ? r : [self]
end