Module: MetaTags::TextNormalizer
- Extended by:
- TextNormalizer
- Included in:
- TextNormalizer
- Defined in:
- lib/meta_tags/text_normalizer.rb
Overview
Module contains helpers that normalize text meta tag values.
Instance Method Summary collapse
-
#cleanup_string(string, strip: true) ⇒ String
Removes HTML tags and squashes down all the spaces.
-
#cleanup_strings(strings, strip: true) ⇒ Array<String>
Cleans multiple strings up.
-
#helpers ⇒ ActionView::Base
Easy way to get access to Rails helpers.
-
#normalize_description(description) ⇒ String
Normalize description value.
-
#normalize_keywords(keywords) ⇒ String
Normalize keywords value.
-
#normalize_title(site_title, title, separator, reverse = false) ⇒ String
Normalize title value.
-
#safe_join(array, sep = $OFS) ⇒ String
This method returns a html safe string similar to what
Array#join
would return. -
#strip_tags(string) ⇒ String
Strips all HTML tags from the
html
, including comments. -
#truncate(string, limit = nil) ⇒ String
Truncates a string to a specific limit.
-
#truncate_array(string_array, limit = nil, separator = "") ⇒ Array<String>
Truncates an array of strings to a specific limit.
Instance Method Details
#cleanup_string(string, strip: true) ⇒ String
Removes HTML tags and squashes down all the spaces.
space characters squashed into a single space.
109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/meta_tags/text_normalizer.rb', line 109 def cleanup_string(string, strip: true) return "" if string.nil? raise ArgumentError, "Expected a string or an object that implements #to_str" unless string.respond_to?(:to_str) s = (string.to_str) s = s.dup if s.frozen? s.gsub!(/\s+/, " ") s.strip! if strip s end |
#cleanup_strings(strings, strip: true) ⇒ Array<String>
Cleans multiple strings up.
127 128 129 130 131 |
# File 'lib/meta_tags/text_normalizer.rb', line 127 def cleanup_strings(strings, strip: true) strings = Array(strings).flatten.map! { |s| cleanup_string(s, strip: strip) } strings.reject!(&:blank?) strings end |
#helpers ⇒ ActionView::Base
Easy way to get access to Rails helpers.
72 73 74 |
# File 'lib/meta_tags/text_normalizer.rb', line 72 def helpers ActionController::Base.helpers end |
#normalize_description(description) ⇒ String
Normalize description value.
to 200 characters.
42 43 44 45 46 47 48 49 50 |
# File 'lib/meta_tags/text_normalizer.rb', line 42 def normalize_description(description) # description could be another object not a string, but since it probably # serves the same purpose we could just as it to convert itself to str # and continue from there description = cleanup_string(description) return "" if description.blank? truncate(description, MetaTags.config.description_limit) end |
#normalize_keywords(keywords) ⇒ String
Normalize keywords value.
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/meta_tags/text_normalizer.rb', line 57 def normalize_keywords(keywords) keywords = cleanup_strings(keywords) return "" if keywords.blank? keywords.each(&:downcase!) if MetaTags.config.keywords_lowercase separator = cleanup_string MetaTags.config.keywords_separator, strip: false keywords = truncate_array(keywords, MetaTags.config.keywords_limit, separator) safe_join(keywords, separator) end |
#normalize_title(site_title, title, separator, reverse = false) ⇒ String
Normalize title value.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/meta_tags/text_normalizer.rb', line 16 def normalize_title(site_title, title, separator, reverse = false) clean_title = cleanup_strings(title) clean_title.reverse! if reverse site_title = cleanup_string(site_title) separator = cleanup_string(separator, strip: false) # Truncate title and site title site_title, clean_title = truncate_title(site_title, clean_title, separator) if site_title.present? if reverse clean_title.push(site_title) else clean_title.unshift(site_title) end end safe_join(clean_title, separator) end |
#safe_join(array, sep = $OFS) ⇒ String
This method returns a html safe string similar to what Array#join
would return. All items in the array, including the supplied separator, are html escaped unless they are html safe, and the returned string is marked as html safe.
99 100 101 |
# File 'lib/meta_tags/text_normalizer.rb', line 99 def safe_join(array, sep = $OFS) helpers.safe_join(array, sep) end |
#strip_tags(string) ⇒ String
Strips all HTML tags from the html
, including comments.
81 82 83 84 85 86 87 88 |
# File 'lib/meta_tags/text_normalizer.rb', line 81 def (string) if defined?(Loofah) # Instead of strip_tags we will use Loofah to strip tags from now on Loofah.fragment(string).text(encode_special_chars: false) else helpers.(string) end end |
#truncate(string, limit = nil) ⇒ String
Truncates a string to a specific limit. Return string without truncation when limit 0 or nil
139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/meta_tags/text_normalizer.rb', line 139 def truncate(string, limit = nil) return string if limit.to_i == 0 helpers.truncate( string, length: limit, separator: MetaTags.config.truncate_on_natural_separator, omission: "", escape: true ) end |
#truncate_array(string_array, limit = nil, separator = "") ⇒ Array<String>
Truncates an array of strings to a specific limit.
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/meta_tags/text_normalizer.rb', line 158 def truncate_array(string_array, limit = nil, separator = "") return string_array if limit.nil? || limit <= 0 length = 0 result = [] string_array.each do |string| limit_left = calculate_limit_left(limit, length, result, separator) if string.length > limit_left result << truncate(string, limit_left) break string_array end length += (result.any? ? separator.length : 0) + string.length result << string # No more strings will fit break string_array if length + separator.length >= limit end result end |