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.



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

Returns the escaped String.



119
120
121
# File 'lib/jekyll/filters.rb', line 119

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