Module: Refiner::ViewHelpers

Defined in:
lib/refiner.rb

Constant Summary collapse

REFINER_VALUE =
{ 
  remove:  -> (query, scope, slug) { (query[scope].split(/,/) - [slug.to_s]).join(',')  },
  merge:   -> (query, scope, slug) { (query[scope] || "").split(/,/).push(slug.to_s).uniq.join(',') },
  replace: -> (query, scope, slug) { slug.to_s }
}

Instance Method Summary collapse

Instance Method Details

#refiner_active?(scope, slug) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/refiner.rb', line 19

def refiner_active? scope, slug
  (refiner_query[scope.to_s] || "").split(/,/).include?(slug.to_s) ? 'active' : nil
end

#refiner_path(scope, slug, type, search: nil, fallback: nil) ⇒ Object



13
14
15
16
17
# File 'lib/refiner.rb', line 13

def refiner_path(scope, slug, type, search: nil, fallback: nil)
  merged_query = refiners type, scope.to_s, slug
  filter_path = merged_query.keys.map { |key| [key, merged_query[key]] }.join('/')
  merged_query.present? ? self.send(search, filter_path) : self.send(fallback)
end

#refiner_value(action, scope, slug) ⇒ Object



23
24
25
# File 'lib/refiner.rb', line 23

def refiner_value action, scope, slug
  REFINER_VALUE[refiner_value_selector(action, scope, slug)].call(refiner_query, scope, slug)
end

#refiner_value_selector(action, scope, slug) ⇒ Object



27
28
29
# File 'lib/refiner.rb', line 27

def refiner_value_selector action, scope, slug
  refiner_active?(scope, slug).nil? ? action : :remove
end

#refiners(action, scope, slug) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/refiner.rb', line 31

def refiners action, scope, slug
  merge_values = refiner_value action, scope, slug
  if merge_values.present?
    refiner_query.merge({ scope => merge_values })
  else
    refiner_query.delete_if { |k, v| k == scope }
  end
end