Module: Jekyll::Filters
- Defined in:
- lib/jekyll/filters.rb
Instance Method Summary collapse
-
#array_to_sentence_string(array) ⇒ Object
Join an array of things into a string by separating with commas and the word “and” for the last one.
-
#cgi_escape(input) ⇒ Object
CGI escape a string for use in a URL.
-
#date_to_long_string(date) ⇒ Object
Format a date in long format e.g.
-
#date_to_rfc822(date) ⇒ Object
Format a date according to RFC-822.
-
#date_to_string(date) ⇒ Object
Format a date in short format e.g.
-
#date_to_xmlschema(date) ⇒ Object
Format a date for use in XML.
-
#group_by(input, property) ⇒ Object
Group an array of items by a property.
-
#inspect(input) ⇒ Object
Convert an object into its String representation for debugging.
-
#jsonify(input) ⇒ Object
Convert the input into json string.
-
#markdownify(input) ⇒ Object
Convert a Markdown string into HTML output.
-
#number_of_words(input) ⇒ Object
Count the number of words in the input string.
- #pop(array, input = 1) ⇒ Object
- #push(array, input) ⇒ Object
-
#sassify(input) ⇒ Object
Convert a Sass string into CSS output.
-
#scssify(input) ⇒ Object
Convert a Scss string into CSS output.
- #shift(array, input = 1) ⇒ Object
-
#slugify(input, mode = nil) ⇒ Object
Slugify a filename or title.
-
#sort(input, property = nil, nils = "first") ⇒ Object
Sort an array of objects.
- #unshift(array, input) ⇒ Object
-
#uri_escape(input) ⇒ Object
URI escape a string.
-
#where(input, property, value) ⇒ Object
Filter an array of objects.
-
#xml_escape(input) ⇒ Object
XML escape a string for use.
Instance Method Details
#array_to_sentence_string(array) ⇒ Object
Join an array of things into a string by separating with commas and the word “and” for the last one.
array - The Array of Strings to join.
Examples
array_to_sentence_string(["apples", "oranges", "grapes"])
# => "apples, oranges, and grapes"
Returns the formatted String.
161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/jekyll/filters.rb', line 161 def array_to_sentence_string(array) connector = "and" case array.length when 0 "" when 1 array[0].to_s when 2 "#{array[0]} #{connector} #{array[1]}" else "#{array[0...-1].join(', ')}, #{connector} #{array[-1]}" end end |
#cgi_escape(input) ⇒ Object
CGI escape a string for use in a URL. Replaces any special characters with appropriate %XX replacements.
input - The String to escape.
Examples
cgi_escape('foo,bar;baz?')
# => "foo%2Cbar%3Bbaz%3F"
Returns the escaped String.
123 124 125 |
# File 'lib/jekyll/filters.rb', line 123 def cgi_escape(input) CGI::escape(input) end |
#date_to_long_string(date) ⇒ Object
Format a date in long format e.g. “27 January 2011”.
date - The Time to format.
Returns the formatted String.
65 66 67 |
# File 'lib/jekyll/filters.rb', line 65 def date_to_long_string(date) time(date).strftime("%d %B %Y") end |
#date_to_rfc822(date) ⇒ Object
Format a date according to RFC-822
date - The Time to format.
Examples
date_to_rfc822(Time.now)
# => "Sun, 24 Apr 2011 12:34:46 +0000"
Returns the formatted String.
93 94 95 |
# File 'lib/jekyll/filters.rb', line 93 def date_to_rfc822(date) time(date).rfc822 end |
#date_to_string(date) ⇒ Object
Format a date in short format e.g. “27 Jan 2011”.
date - the Time to format.
Returns the formatting String.
56 57 58 |
# File 'lib/jekyll/filters.rb', line 56 def date_to_string(date) time(date).strftime("%d %b %Y") end |
#date_to_xmlschema(date) ⇒ Object
Format a date for use in XML.
date - The Time to format.
Examples
date_to_xmlschema(Time.now)
# => "2011-04-24T20:34:46+08:00"
Returns the formatted String.
79 80 81 |
# File 'lib/jekyll/filters.rb', line 79 def date_to_xmlschema(date) time(date).xmlschema end |
#group_by(input, property) ⇒ Object
Group an array of items by a property
input - the inputted Enumerable property - the property
Returns an array of Hashes, each looking something like this:
{"name" => "larry"
"items" => [...] } # all the items where `property` == "larry"
192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/jekyll/filters.rb', line 192 def group_by(input, property) if groupable?(input) input.group_by do |item| item_property(item, property).to_s end.inject([]) do |memo, i| memo << {"name" => i.first, "items" => i.last} end else input end end |
#inspect(input) ⇒ Object
Convert an object into its String representation for debugging
input - The Object to be converted
Returns a String representation of the object.
289 290 291 |
# File 'lib/jekyll/filters.rb', line 289 def inspect(input) CGI.escapeHTML(input.inspect) end |
#jsonify(input) ⇒ Object
Convert the input into json string
input - The Array or Hash to be converted
Returns the converted json string
180 181 182 |
# File 'lib/jekyll/filters.rb', line 180 def jsonify(input) as_liquid(input).to_json end |
#markdownify(input) ⇒ Object
Convert a Markdown string into HTML output.
input - The Markdown String to convert.
Returns the HTML formatted String.
12 13 14 15 16 |
# File 'lib/jekyll/filters.rb', line 12 def markdownify(input) site = @context.registers[:site] converter = site.find_converter_instance(Jekyll::Converters::Markdown) converter.convert(input) end |
#number_of_words(input) ⇒ Object
Count the number of words in the input string.
input - The String on which to operate.
Returns the Integer word count.
146 147 148 |
# File 'lib/jekyll/filters.rb', line 146 def number_of_words(input) input.split.length end |
#pop(array, input = 1) ⇒ Object
256 257 258 259 260 261 |
# File 'lib/jekyll/filters.rb', line 256 def pop(array, input = 1) return array unless array.is_a?(Array) new_ary = array.dup new_ary.pop(input.to_i || 1) new_ary end |
#push(array, input) ⇒ Object
263 264 265 266 267 268 |
# File 'lib/jekyll/filters.rb', line 263 def push(array, input) return array unless array.is_a?(Array) new_ary = array.dup new_ary.push(input) new_ary end |
#sassify(input) ⇒ Object
Convert a Sass string into CSS output.
input - The Sass String to convert.
Returns the CSS formatted String.
23 24 25 26 27 |
# File 'lib/jekyll/filters.rb', line 23 def sassify(input) site = @context.registers[:site] converter = site.find_converter_instance(Jekyll::Converters::Sass) converter.convert(input) end |
#scssify(input) ⇒ Object
Convert a Scss string into CSS output.
input - The Scss String to convert.
Returns the CSS formatted String.
34 35 36 37 38 |
# File 'lib/jekyll/filters.rb', line 34 def scssify(input) site = @context.registers[:site] converter = site.find_converter_instance(Jekyll::Converters::Scss) converter.convert(input) end |
#shift(array, input = 1) ⇒ Object
270 271 272 273 274 275 |
# File 'lib/jekyll/filters.rb', line 270 def shift(array, input = 1) return array unless array.is_a?(Array) new_ary = array.dup new_ary.shift(input.to_i || 1) new_ary end |
#slugify(input, mode = nil) ⇒ Object
Slugify a filename or title.
input - The filename or title to slugify. mode - how string is slugified
Returns the given filename or title as a lowercase URL String. See Utils.slugify for more detail.
47 48 49 |
# File 'lib/jekyll/filters.rb', line 47 def slugify(input, mode=nil) Utils.slugify(input, mode: mode) end |
#sort(input, property = nil, nils = "first") ⇒ Object
Sort an array of objects
input - the object array property - property within each object to filter by nils (‘first’ | ‘last’) - nils appear before or after non-nil values
Returns the filtered array of objects
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
# File 'lib/jekyll/filters.rb', line 224 def sort(input, property = nil, nils = "first") if input.nil? raise ArgumentError.new("Cannot sort a null object.") end if property.nil? input.sort else case when nils == "first" order = - 1 when nils == "last" order = + 1 else raise ArgumentError.new("Invalid nils order: " + "'#{nils}' is not a valid nils order. It must be 'first' or 'last'.") end input.sort { |apple, orange| apple_property = item_property(apple, property) orange_property = item_property(orange, property) if !apple_property.nil? && orange_property.nil? - order elsif apple_property.nil? && !orange_property.nil? + order else apple_property <=> orange_property end } end end |
#unshift(array, input) ⇒ Object
277 278 279 280 281 282 |
# File 'lib/jekyll/filters.rb', line 277 def unshift(array, input) return array unless array.is_a?(Array) new_ary = array.dup new_ary.unshift(input) new_ary end |
#uri_escape(input) ⇒ Object
URI escape a string.
input - The String to escape.
Examples
uri_escape('foo, bar \\baz?')
# => "foo,%20bar%20%5Cbaz?"
Returns the escaped String.
137 138 139 |
# File 'lib/jekyll/filters.rb', line 137 def uri_escape(input) URI.escape(input) end |
#where(input, property, value) ⇒ Object
Filter an array of objects
input - the object array property - property within each object to filter by value - desired value
Returns the filtered array of objects
211 212 213 214 215 |
# File 'lib/jekyll/filters.rb', line 211 def where(input, property, value) return input unless input.is_a?(Enumerable) input = input.values if input.is_a?(Hash) input.select { |object| item_property(object, property).to_s == value.to_s } end |
#xml_escape(input) ⇒ Object
XML escape a string for use. Replaces any special characters with appropriate HTML entity replacements.
input - The String to escape.
Examples
xml_escape('foo "bar" <baz>')
# => "foo "bar" <baz>"
Returns the escaped String.
108 109 110 |
# File 'lib/jekyll/filters.rb', line 108 def xml_escape(input) CGI.escapeHTML(input.to_s) end |