Module: RDBr::Web::NavigationHelpers

Included in:
Helpers
Defined in:
lib/rdbr/web/navigation_helpers.rb

Instance Method Summary collapse

Instance Method Details

#add_filter_url(column, value) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/rdbr/web/navigation_helpers.rb', line 56

def add_filter_url(column, value)
  parameters = mutable_request_params
  filters = requested_filter_hash
  filters[column.name] = value.nil? ? { 'is_null' => true } : { 'eq' => value }
  parameters.merge!('filter' => filters, 'page' => 1)
  query_url('/data', parameters)
end

#clear_filters_urlObject



79
80
81
82
83
84
# File 'lib/rdbr/web/navigation_helpers.rb', line 79

def clear_filters_url
  parameters = mutable_request_params
  parameters.delete('filter')
  parameters.delete('search')
  query_url('/data', parameters.merge('page' => 1))
end

#filter_entriesObject



42
43
44
45
46
# File 'lib/rdbr/web/navigation_helpers.rb', line 42

def filter_entries
  requested_filter_hash.flat_map do |column, conditions|
    conditions.to_h.map{|operator, value| { column: column, operator: operator, value: value } }
  end
end

#filter_operators(column) ⇒ Object



38
39
40
# File 'lib/rdbr/web/navigation_helpers.rb', line 38

def filter_operators(column)
  settings.query_service.filter_operators(column).map(&:to_s)
end

#fixed_filter_columnsObject



48
49
50
51
52
53
54
# File 'lib/rdbr/web/navigation_helpers.rb', line 48

def fixed_filter_columns
  requested_filter_hash.filter_map do |column, conditions|
    condition = conditions.to_h
    operator, value = condition.first
    column if condition.length == 1 && (operator == 'eq' || (operator == 'is_null' && truthy?(value)))
  end
end

#group_url(namespace, relation, column) ⇒ Object



13
14
15
16
17
18
# File 'lib/rdbr/web/navigation_helpers.rb', line 13

def group_url(namespace, relation, column)
  query_url(
    '/group', namespace: namespace, relation: relation, column: column,
    filter: request.params['filter'], search: params['search'], per_page: params['per_page']
  )
end

#page_url(number) ⇒ Object



20
21
22
# File 'lib/rdbr/web/navigation_helpers.rb', line 20

def page_url(number)
  query_url(request.path, request.params.merge('page' => number))
end

#query_url(path, parameters) ⇒ Object



86
87
88
89
# File 'lib/rdbr/web/navigation_helpers.rb', line 86

def query_url(path, parameters)
  query = Rack::Utils.build_nested_query(parameters.reject{|_key, value| value.nil? || value == '' })
  query.empty? ? path : "#{path}?#{query}"
end

#record_url(namespace, relation, row, primary_key) ⇒ Object



8
9
10
11
# File 'lib/rdbr/web/navigation_helpers.rb', line 8

def record_url(namespace, relation, row, primary_key)
  key = primary_key.columns.to_h{|column| [ column, row[column]] }
  query_url('/record', namespace: namespace, relation: relation, key: key)
end

#relation_url(namespace, relation, extra = {}) ⇒ Object



4
5
6
# File 'lib/rdbr/web/navigation_helpers.rb', line 4

def relation_url(namespace, relation, extra = {})
  query_url('/data', { namespace: namespace, relation: relation }.merge(extra))
end

#remove_filter_url(column, operator) ⇒ Object



64
65
66
67
68
69
70
71
# File 'lib/rdbr/web/navigation_helpers.rb', line 64

def remove_filter_url(column, operator)
  parameters = mutable_request_params
  filters = requested_filter_hash
  filters.fetch(column, {}).delete(operator)
  filters.delete(column) if filters.fetch(column, {}).empty?
  parameters.merge!('filter' => filters, 'page' => 1)
  query_url('/data', parameters)
end

#remove_search_urlObject



73
74
75
76
77
# File 'lib/rdbr/web/navigation_helpers.rb', line 73

def remove_search_url
  parameters = mutable_request_params
  parameters.delete('search')
  query_url('/data', parameters.merge('page' => 1))
end

#sort_indicator(column) ⇒ Object



31
32
33
34
35
36
# File 'lib/rdbr/web/navigation_helpers.rb', line 31

def sort_indicator(column)
  return '' if params['sort'] == column
  return '' if params['sort'] == "-#{column}"

  ''
end

#sort_url(column) ⇒ Object



24
25
26
27
28
29
# File 'lib/rdbr/web/navigation_helpers.rb', line 24

def sort_url(column)
  parameters = mutable_request_params
  current = parameters['sort'].to_s
  next_sort = current == column ? "-#{column}" : column
  query_url(request.path, parameters.merge('sort' => next_sort, 'page' => 1))
end