Class: Avo::Filters::BaseFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/avo/filters/base_filter.rb

Constant Summary collapse

PARAM_KEY =
:encoded_filters

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(arguments: {}) ⇒ BaseFilter

Returns a new instance of BaseFilter.



37
38
39
# File 'lib/avo/filters/base_filter.rb', line 37

def initialize(arguments: {})
  @arguments = arguments
end

Instance Attribute Details

#argumentsObject (readonly)

Returns the value of attribute arguments.



13
14
15
# File 'lib/avo/filters/base_filter.rb', line 13

def arguments
  @arguments
end

Class Method Details

.decode_filters(filter_params) ⇒ Object



24
25
26
# File 'lib/avo/filters/base_filter.rb', line 24

def decode_filters(filter_params)
  JSON.parse(Base64.decode64(filter_params))
end

.encode_filters(filter_params) ⇒ Object



28
29
30
# File 'lib/avo/filters/base_filter.rb', line 28

def encode_filters(filter_params)
  Base64.encode64(filter_params.to_json)
end

.get_empty_messageObject



32
33
34
# File 'lib/avo/filters/base_filter.rb', line 32

def get_empty_message
  empty_message || I18n.t("avo.no_options_available")
end

Instance Method Details

#applied_filtersObject

Fetch the applied filters from the params



67
68
69
70
71
72
73
74
75
76
# File 'lib/avo/filters/base_filter.rb', line 67

def applied_filters
  # Return empty hash if no filters are present
  return {} if (filters_from_params = params[PARAM_KEY]).blank?

  # Return empty hash if the filters are not a string, decode_filters method expects a Base64 encoded string
  # Dynamic filters also use the "filters" param key, but they are not Base64 encoded, they are a hash
  return {} if !filters_from_params.is_a?(String)

  self.class.decode_filters filters_from_params
end

#applied_or_default_value(applied_filters) ⇒ Object

Get the applied value this filter. If it’s not present return the default value.



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/avo/filters/base_filter.rb', line 53

def applied_or_default_value(applied_filters)
  # Get the values for this particular filter
  applied_value = applied_filters[self.class.to_s]

  # Return that value if present
  return applied_value unless applied_value.nil?

  # Return that default
  default
rescue
  default
end

#apply_query(request, query, value) ⇒ Object



41
42
43
44
45
# File 'lib/avo/filters/base_filter.rb', line 41

def apply_query(request, query, value)
  value.stringify_keys! if value.is_a? Hash

  apply(request, query, value)
end

#current_userObject



19
20
21
# File 'lib/avo/filters/base_filter.rb', line 19

def current_user
  Avo::Current.user
end

#idObject



47
48
49
# File 'lib/avo/filters/base_filter.rb', line 47

def id
  self.class.name.underscore.tr("/", "_")
end

#visible_in_view(resource: nil, parent_resource: nil) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/avo/filters/base_filter.rb', line 78

def visible_in_view(resource: nil, parent_resource: nil)
  return true if visible.blank?

  # Run the visible block if available
  Avo::ExecutionContext.new(
    target: visible,
    params: params,
    parent_resource: parent_resource,
    resource: resource,
    arguments: arguments
  ).handle
end