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
- #sample(input, num = 1) ⇒ 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.
-
#smartify(input) ⇒ Object
Convert a Markdown string into HTML output.
-
#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.
172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/jekyll/filters.rb', line 172 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.
134 135 136 |
# File 'lib/jekyll/filters.rb', line 134 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.
76 77 78 |
# File 'lib/jekyll/filters.rb', line 76 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.
104 105 106 |
# File 'lib/jekyll/filters.rb', line 104 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.
67 68 69 |
# File 'lib/jekyll/filters.rb', line 67 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.
90 91 92 |
# File 'lib/jekyll/filters.rb', line 90 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"
203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/jekyll/filters.rb', line 203 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.
310 311 312 |
# File 'lib/jekyll/filters.rb', line 310 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
191 192 193 |
# File 'lib/jekyll/filters.rb', line 191 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.
157 158 159 |
# File 'lib/jekyll/filters.rb', line 157 def number_of_words(input) input.split.length end |
#pop(array, input = 1) ⇒ Object
267 268 269 270 271 272 |
# File 'lib/jekyll/filters.rb', line 267 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
274 275 276 277 278 279 |
# File 'lib/jekyll/filters.rb', line 274 def push(array, input) return array unless array.is_a?(Array) new_ary = array.dup new_ary.push(input) new_ary end |
#sample(input, num = 1) ⇒ Object
295 296 297 298 299 300 301 302 303 |
# File 'lib/jekyll/filters.rb', line 295 def sample(input, num = 1) return input unless input.respond_to?(:sample) n = num.to_i rescue 1 if n == 1 input.sample else input.sample(n) end end |
#sassify(input) ⇒ Object
Convert a Sass string into CSS output.
input - The Sass String to convert.
Returns the CSS formatted String.
34 35 36 37 38 |
# File 'lib/jekyll/filters.rb', line 34 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.
45 46 47 48 49 |
# File 'lib/jekyll/filters.rb', line 45 def scssify(input) site = @context.registers[:site] converter = site.find_converter_instance(Jekyll::Converters::Scss) converter.convert(input) end |
#shift(array, input = 1) ⇒ Object
281 282 283 284 285 286 |
# File 'lib/jekyll/filters.rb', line 281 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.
58 59 60 |
# File 'lib/jekyll/filters.rb', line 58 def slugify(input, mode=nil) Utils.slugify(input, :mode => mode) end |
#smartify(input) ⇒ Object
Convert a Markdown string into HTML output.
input - The Markdown String to convert.
Returns the HTML formatted String.
23 24 25 26 27 |
# File 'lib/jekyll/filters.rb', line 23 def smartify(input) site = @context.registers[:site] converter = site.find_converter_instance(Jekyll::Converters::SmartyPants) converter.convert(input) 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
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/jekyll/filters.rb', line 235 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 do |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 end |
#unshift(array, input) ⇒ Object
288 289 290 291 292 293 |
# File 'lib/jekyll/filters.rb', line 288 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.
148 149 150 |
# File 'lib/jekyll/filters.rb', line 148 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
222 223 224 225 226 |
# File 'lib/jekyll/filters.rb', line 222 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.
119 120 121 |
# File 'lib/jekyll/filters.rb', line 119 def xml_escape(input) CGI.escapeHTML(input.to_s) end |