Class: Shiboru::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/shiboru/registry.rb

Overview

Usage:

Shiboru::Registry.for_model(User) # => UserFilter (if UserFilter exists)
Shiboru::Registry.for_model(Post) # => PostFilter (if PostFilter exists)
Shiboru::Registry.for_model(Admin::User) # => Admin::UserFilter (if it exists)
Shiboru::Registry.for_model(NonExistentModel) # => nil (if NonExistentModelFilter doesn't exist)

Class Method Summary collapse

Class Method Details

.for_model(klass) ⇒ Class?

Given a model class, find its corresponding FilterSet class. Automatically maps model names to filter class names by appending “Filter”. Results are cached to improve performance on subsequent calls.

Examples:

User -> UserFilter
Profiles::User -> Profiles::UserFilter

Parameters:

  • klass (Class)

    The model class to find a FilterSet for

Returns:

  • (Class, nil)

    The corresponding FilterSet class, or nil if not found



24
25
26
27
28
29
30
# File 'lib/shiboru/registry.rb', line 24

def for_model(klass)
  return @cache[klass] if @cache.key?(klass)

  filter_const_name = "#{klass.name}Filter"
  filter_klass = constantize_safe(filter_const_name)
  @cache[klass] = filter_klass
end