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



134
135
136
# File 'lib/ext/string.rb', line 134

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



128
129
130
# File 'lib/ext/string.rb', line 128

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 /\A\.+\z/.match?(name)
  name = 'unnamed' if name.empty?
  name
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)



165
166
167
168
# File 'lib/ext/string.rb', line 165

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: '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



146
147
148
149
150
151
152
# File 'lib/ext/string.rb', line 146

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: "https://mydomain.com/myimg.png".cama_url_exist? return (Boolean) true if the url exist

Returns:

  • (Boolean)


157
158
159
160
161
# File 'lib/ext/string.rb', line 157

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 https://owen.camaleon.website into owen.camaleon.website



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("https://#{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 $ => "And this is how the Universe ended."
"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."



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

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"



36
37
38
39
40
41
42
43
44
45
# File 'lib/ext/translator.rb', line 36

def translations
  # A frozen receiver cannot carry the memo: Ruby 3.4's nil.to_s returns a frozen —
  # and process-wide shared — empty string, and every literal in a file with the
  # frozen_string_literal magic comment is frozen too. Parse without memoizing for
  # those rather than raising FrozenError (memoizing on a shared instance would be
  # wrong even where it is permitted).
  return split_locales if frozen?

  @translations ||= split_locales
end

#translations_arrayObject

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



49
50
51
52
# File 'lib/ext/translator.rb', line 49

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