Module: PgEventstore::Web::Paginator::Helpers

Defined in:
lib/pg_eventstore/web/paginator/helpers.rb,
sig/pg_eventstore/web/paginator/helpers.rbs

Instance Method Summary collapse

Instance Method Details

#build_path(params, base_path: request.path_info) ⇒ String



132
133
134
135
136
137
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 132

def build_path(params, base_path: request.path_info)
  encoded_params = Rack::Utils.build_nested_query(params)
  return base_path if encoded_params.empty?

  "#{base_path}?#{encoded_params}"
end


124
125
126
127
128
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 124

def build_starting_id_link(starting_id)
  return 'javascript: void(0);' unless starting_id

  url(build_path(params.merge(starting_id:)))
end

#empty_characters_fallback(str) ⇒ String



114
115
116
117
118
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 114

def empty_characters_fallback(str)
  return str unless str.strip == ''

  '<i>Non-printable characters</i>'
end

#event_marker_url(marker) ⇒ String



108
109
110
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 108

def event_marker_url(marker)
  url(build_path({ filter: { markers: [escape_empty_string(marker)] } }, base_path: '/'))
end


32
33
34
35
36
37
38
39
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 32

def first_page_link
  path = url(build_path(params.slice(*(params.keys - ['starting_id']))))
  "    <li class=\"page-item\">\n      <a class=\"page-link\" href=\"\#{path}\" tabindex=\"-1\">First</a>\n    </li>\n  HTML\nend\n"


21
22
23
24
25
26
27
28
29
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 21

def next_page_link(collection)
  id = collection.next_page_starting_id
  disabled = id ? '' : 'disabled'
  "    <li class=\"page-item \#{disabled}\">\n      <a class=\"page-link\" href=\"\#{build_starting_id_link(id)}\" tabindex=\"-1\">Next</a>\n    </li>\n  HTML\nend\n"

#number_with_delimiter(number, delimiter: ',') ⇒ String

Takes an integer and adds delimiters in there. E.g 1002341 becomes this "1,002,341"



76
77
78
79
80
81
82
83
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 76

def number_with_delimiter(number, delimiter: ',')
  number = number.to_s
  symbols_to_skip = number.size % 3
  parts = []
  parts.push(number[0...symbols_to_skip]) unless symbols_to_skip == 0
  parts.push(*number[symbols_to_skip..].scan(/\d{3}/))
  parts.join(delimiter)
end

#per_page_url(per_page) ⇒ String



43
44
45
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 43

def per_page_url(per_page)
  url(build_path(params.merge(per_page:)))
end


9
10
11
12
13
14
15
16
17
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 9

def previous_page_link(collection)
  id = collection.prev_page_starting_id
  disabled = id ? '' : 'disabled'
  "    <li class=\"page-item \#{disabled}\">\n      <a class=\"page-link\" href=\"\#{build_starting_id_link(id)}\" tabindex=\"-1\">Previous</a>\n    </li>\n  HTML\nend\n"


55
56
57
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 55

def resolve_link_tos_url(should_resolve)
  url(build_path(params.merge(resolve_link_tos: should_resolve)))
end

#sort_url(order) ⇒ String



49
50
51
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 49

def sort_url(order)
  url(build_path(params.merge(order:)))
end

#stream_url(stream) ⇒ String



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 87

def stream_url(stream)
  url(
    build_path(
      {
        filter: {
          streams: [
            {
              context: escape_empty_string(stream.context),
              stream_name: escape_empty_string(stream.stream_name),
              stream_id: escape_empty_string(stream.stream_id),
            },
          ],
        },
      },
      base_path: '/'
    )
  )
end

#total_count(number) ⇒ String



61
62
63
64
65
66
67
68
69
70
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 61

def total_count(number)
  prefix =
    if number > Paginator::EventsCollection::MAX_NUMBER_TO_COUNT
      'Estimate count: '
    else
      'Total count: '
    end
  number = number_with_delimiter(number)
  prefix + number
end