Module: Jekyll::Filters

Defined in:
lib/jekyll/filters.rb

Instance Method Summary collapse

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)
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) == value }
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 &quot;bar&quot; &lt;baz&gt;"

Returns the escaped String.



108
109
110
# File 'lib/jekyll/filters.rb', line 108

def xml_escape(input)
  CGI.escapeHTML(input.to_s)
end