Module: RDBr::Web::NavigationHelpers
- Included in:
- Helpers
- Defined in:
- lib/rdbr/web/navigation_helpers.rb
Instance Method Summary collapse
- #add_filter_url(column, value) ⇒ Object
- #clear_filters_url ⇒ Object
- #filter_entries ⇒ Object
- #filter_operators(column) ⇒ Object
- #fixed_filter_columns ⇒ Object
- #group_url(namespace, relation, column) ⇒ Object
- #page_url(number) ⇒ Object
- #query_url(path, parameters) ⇒ Object
- #record_url(namespace, relation, row, primary_key) ⇒ Object
- #relation_url(namespace, relation, extra = {}) ⇒ Object
- #remove_filter_url(column, operator) ⇒ Object
- #remove_search_url ⇒ Object
- #sort_indicator(column) ⇒ Object
- #sort_url(column) ⇒ Object
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_url ⇒ Object
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_entries ⇒ Object
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_columns ⇒ Object
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_url ⇒ Object
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 |