Class: Bridgetown::Paginate::Utils

Inherits:
Object
  • Object
show all
Defined in:
lib/bridgetown-paginate/utils.rb

Overview

Static utility functions that are used in the code and don’t belong in once place in particular

Class Method Summary collapse

Class Method Details

.calculate_number_of_pages(all_posts, per_page) ⇒ Object

Static: Calculate the number of pages.

all_posts - The Array of all Posts. per_page - The Integer of entries per page.

Returns the Integer number of pages.



14
15
16
# File 'lib/bridgetown-paginate/utils.rb', line 14

def self.calculate_number_of_pages(all_posts, per_page)
  (all_posts.size.to_f / per_page.to_i).ceil
end

.ensure_full_path(url, default_index, default_ext) ⇒ Object

Ensures that the passed in url has a index and extension applied



118
119
120
121
122
123
124
125
126
# File 'lib/bridgetown-paginate/utils.rb', line 118

def self.ensure_full_path(url, default_index, default_ext)
  if url.end_with?("/")
    url + default_index + default_ext
  elsif !url.include?(".")
    url + default_index
  else
    url
  end
end

.ensure_leading_dot(path) ⇒ String

Static: Return a String version of the input which has a leading dot.

If the input already has a dot in position zero, it will be
returned unchanged.

Parameters:

  • path (String)

Returns:

  • (String)

    the path with a leading slash



41
42
43
# File 'lib/bridgetown-paginate/utils.rb', line 41

def self.ensure_leading_dot(path)
  path[0..0] == "." ? path : ".#{path}"
end

.ensure_leading_slash(path) ⇒ String

Static: Return a String version of the input which has a leading slash.

If the input already has a forward slash in position zero, it will be
returned unchanged.

Parameters:

  • path (String)

Returns:

  • (String)

    the path with a leading slash



51
52
53
# File 'lib/bridgetown-paginate/utils.rb', line 51

def self.ensure_leading_slash(path)
  path[0..0] == "/" ? path : "/#{path}"
end

.ensure_trailing_slash(path) ⇒ String

Static: Return a String version of the input which has a trailing slash.

If the input already has a forward slash at the end, it will be
returned unchanged.

Parameters:

  • path (String)

Returns:

  • (String)

    the path with a trailing slash



69
70
71
# File 'lib/bridgetown-paginate/utils.rb', line 69

def self.ensure_trailing_slash(path)
  path[-1] == "/" ? path : "#{path}/"
end

.format_page_number(to_format, cur_page_nr, total_page_count = nil) ⇒ Object

Static: returns a fully formatted string with the current (:num) page number and maximum (:max) page count replaced if configured



21
22
23
24
25
26
# File 'lib/bridgetown-paginate/utils.rb', line 21

def self.format_page_number(to_format, cur_page_nr, total_page_count = nil)
  s = to_format.sub(":num", cur_page_nr.to_s)
  s = s.sub(":max", total_page_count.to_s) unless total_page_count.nil?

  s
end

.format_page_title(to_format, title, cur_page_nr = nil, total_page_count = nil) ⇒ Object

Static: returns a fully formatted string with the :title variable and the current (:num) page number and maximum (:max) page count replaced



31
32
33
# File 'lib/bridgetown-paginate/utils.rb', line 31

def self.format_page_title(to_format, title, cur_page_nr = nil, total_page_count = nil)
  format_page_number(to_format.sub(":title", title.to_s), cur_page_nr, total_page_count)
end

.remove_double_slash(path) ⇒ String

Static: Return a String version of the input with only one leading slash.

Parameters:

  • path (String)

Returns:

  • (String)

    the input without the leading slash



59
60
61
# File 'lib/bridgetown-paginate/utils.rb', line 59

def self.remove_double_slash(path)
  path[0..1] == "//" ? path[1..] : path
end

.sort_get_post_data(post_data, sort_field) ⇒ Object

Retrieves the given sort field from the given post the sort_field variable can be a hierarchical value on the form “parent_field:child_field” repeated as many times as needed only the leaf child_field will be retrieved



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/bridgetown-paginate/utils.rb', line 96

def self.sort_get_post_data(post_data, sort_field)
  # Begin by splitting up the sort_field by (;,:.)
  sort_split = sort_field.split(":")
  sort_value = post_data

  sort_split.each do |r_key|
    key = r_key.downcase.strip # Remove any erronious whitespace and convert to lower case
    return nil unless sort_value.key?(key)

    # Work my way through the hash
    sort_value = sort_value[key]
  end

  # If the sort value is a hash then return nil else return the value
  if sort_value.is_a?(Hash)
    nil
  else
    sort_value
  end
end

.sort_values(a, b) ⇒ Object

Sorting routine used for ordering posts by custom fields. Handles Strings separately as we want a case-insenstive sorting

rubocop:disable Naming/MethodParameterName, Metrics/CyclomaticComplexity



78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/bridgetown-paginate/utils.rb', line 78

def self.sort_values(a, b)
  return -1 if a.nil? && !b.nil?
  return 1 if !a.nil? && b.nil?
  return a.downcase <=> b.downcase if a.is_a?(String)

  if a.respond_to?(:to_datetime) && b.respond_to?(:to_datetime)
    return a.to_datetime <=> b.to_datetime
  end

  # By default use the built in sorting for the data type
  a <=> b
end