Module: Bunto::Filters
- Defined in:
- lib/bunto/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.
-
#normalize_whitespace(input) ⇒ Object
Replace any whitespace in the input string with a single space.
-
#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 quotes into smart quotes.
-
#sort(input, property = nil, nils = "first") ⇒ Object
Sort an array of objects.
-
#to_integer(input) ⇒ Object
Convert the input into integer.
- #unshift(array, input) ⇒ Object
-
#uri_escape(input) ⇒ Object
URI escape a string.
-
#where(input, property, value) ⇒ Object
Filter an array of objects.
-
#where_exp(input, variable, expression) ⇒ Object
Filters an array of objects against an expression.
-
#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.
182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/bunto/filters.rb', line 182 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.
135 136 137 |
# File 'lib/bunto/filters.rb', line 135 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.
77 78 79 |
# File 'lib/bunto/filters.rb', line 77 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.
105 106 107 |
# File 'lib/bunto/filters.rb', line 105 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.
68 69 70 |
# File 'lib/bunto/filters.rb', line 68 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.
91 92 93 |
# File 'lib/bunto/filters.rb', line 91 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"
213 214 215 216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/bunto/filters.rb', line 213 def group_by(input, property) if groupable?(input) input.group_by { |item| item_property(item, property).to_s } .each_with_object([]) do |item, array| array << { "name" => item.first, "items" => item.last, "size" => item.last.size } 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.
344 345 346 |
# File 'lib/bunto/filters.rb', line 344 def inspect(input) xml_escape(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
201 202 203 |
# File 'lib/bunto/filters.rb', line 201 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.
13 14 15 16 17 |
# File 'lib/bunto/filters.rb', line 13 def markdownify(input) site = @context.registers[:site] converter = site.find_converter_instance(Bunto::Converters::Markdown) converter.convert(input.to_s) end |
#normalize_whitespace(input) ⇒ Object
Replace any whitespace in the input string with a single space
input - The String on which to operate.
Returns the formatted String
158 159 160 |
# File 'lib/bunto/filters.rb', line 158 def normalize_whitespace(input) input.to_s.gsub(%r!\s+!, " ").strip 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.
167 168 169 |
# File 'lib/bunto/filters.rb', line 167 def number_of_words(input) input.split.length end |
#pop(array, input = 1) ⇒ Object
301 302 303 304 305 306 |
# File 'lib/bunto/filters.rb', line 301 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
308 309 310 311 312 313 |
# File 'lib/bunto/filters.rb', line 308 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
329 330 331 332 333 334 335 336 337 |
# File 'lib/bunto/filters.rb', line 329 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.
35 36 37 38 39 |
# File 'lib/bunto/filters.rb', line 35 def sassify(input) site = @context.registers[:site] converter = site.find_converter_instance(Bunto::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.
46 47 48 49 50 |
# File 'lib/bunto/filters.rb', line 46 def scssify(input) site = @context.registers[:site] converter = site.find_converter_instance(Bunto::Converters::Scss) converter.convert(input) end |
#shift(array, input = 1) ⇒ Object
315 316 317 318 319 320 |
# File 'lib/bunto/filters.rb', line 315 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.
59 60 61 |
# File 'lib/bunto/filters.rb', line 59 def slugify(input, mode = nil) Utils.slugify(input, :mode => mode) end |
#smartify(input) ⇒ Object
Convert quotes into smart quotes.
input - The String to convert.
Returns the smart-quotified String.
24 25 26 27 28 |
# File 'lib/bunto/filters.rb', line 24 def smartify(input) site = @context.registers[:site] converter = site.find_converter_instance(Bunto::Converters::SmartyPants) converter.convert(input.to_s) 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
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 |
# File 'lib/bunto/filters.rb', line 281 def sort(input, property = nil, nils = "first") if input.nil? raise ArgumentError, "Cannot sort a null object." end if property.nil? input.sort else if nils == "first" order = - 1 elsif nils == "last" order = + 1 else raise ArgumentError, "Invalid nils order: " \ "'#{nils}' is not a valid nils order. It must be 'first' or 'last'." end sort_input(input, property, order) end end |
#to_integer(input) ⇒ Object
Convert the input into integer
input - the object string
Returns the integer value
268 269 270 271 272 |
# File 'lib/bunto/filters.rb', line 268 def to_integer(input) return 1 if input == true return 0 if input == false input.to_i end |
#unshift(array, input) ⇒ Object
322 323 324 325 326 327 |
# File 'lib/bunto/filters.rb', line 322 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.
149 150 151 |
# File 'lib/bunto/filters.rb', line 149 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
235 236 237 238 239 240 241 |
# File 'lib/bunto/filters.rb', line 235 def where(input, property, value) return input unless input.respond_to?(:select) input = input.values if input.is_a?(Hash) input.select do |object| Array(item_property(object, property)).map(&:to_s).include?(value.to_s) end || [] end |
#where_exp(input, variable, expression) ⇒ Object
Filters an array of objects against an expression
input - the object array variable - the variable to assign each item to in the expression expression - a Liquid comparison expression passed in as a string
Returns the filtered array of objects
250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/bunto/filters.rb', line 250 def where_exp(input, variable, expression) return input unless input.respond_to?(:select) input = input.values if input.is_a?(Hash) # FIXME condition = parse_condition(expression) @context.stack do input.select do |object| @context[variable] = object condition.evaluate(@context) end end || [] 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.
120 121 122 |
# File 'lib/bunto/filters.rb', line 120 def xml_escape(input) input.to_s.encode(:xml => :attr).gsub(%r!\A"|"\Z!, "") end |