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_url: request.path) ⇒ String

Parameters:

  • params (Hash, Array)
  • base_url: (String) (defaults to: request.path)

Returns:

  • (String)


128
129
130
131
132
133
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 128

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

  "#{base_url}?#{encoded_params}"
end

Parameters:

  • starting_id (String, Integer, nil)

Returns:

  • (String)


120
121
122
123
124
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 120

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

  build_path(params.merge(starting_id:))
end

#empty_characters_fallback(str) ⇒ String

Parameters:

  • str (String)

Returns:

  • (String)


110
111
112
113
114
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 110

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

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

#event_marker_path(marker) ⇒ String

Parameters:

  • marker (String)

Returns:

  • (String)


104
105
106
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 104

def event_marker_path(marker)
  build_path({ filter: { markers: [escape_empty_string(marker)] } }, base_url: '/')
end

Returns:

  • (String)


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

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

Parameters:

Returns:

  • (String)


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'
  <<~HTML
    <li class="page-item #{disabled}">
      <a class="page-link" href="#{build_starting_id_link(id)}" tabindex="-1">Next</a>
    </li>
  HTML
end

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

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

Parameters:

  • number (Integer)
  • delimiter (String) (defaults to: ',')
  • delimiter: (String) (defaults to: ',')

Returns:

  • (String)

    number with delimiters



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

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

Parameters:

  • per_page (String)

    string representation of items per page. E.g. "10", "20", etc.

Returns:

  • (String)


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

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

Parameters:

Returns:

  • (String)


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'
  <<~HTML
    <li class="page-item #{disabled}">
      <a class="page-link" href="#{build_starting_id_link(id)}" tabindex="-1">Previous</a>
    </li>
  HTML
end


53
54
55
# File 'lib/pg_eventstore/web/paginator/helpers.rb', line 53

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

#sort_url(order) ⇒ String

Parameters:

  • order (String)

    "asc"/"desc"

Returns:

  • (String)


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

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

#stream_path(stream) ⇒ String

Parameters:

Returns:

  • (String)


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

def stream_path(stream)
  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_url: '/'
  )
end

#total_count(number) ⇒ String

Parameters:

  • number (Integer)

    total number of events by the current filter

Returns:

  • (String)


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

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