Class: Togglefy::FeatureQuery

Inherits:
Object
  • Object
show all
Defined in:
lib/togglefy/feature_query.rb

Overview

The FeatureQuery class provides methods to query features based on various filters.

Constant Summary collapse

FILTERS =

A mapping of filter keys to their corresponding query scopes.

{
  identifier: :identifier,
  group: :for_group,
  role: :for_group,
  environment: :for_environment,
  env: :for_environment,
  tenant_id: :for_tenant,
  status: :with_status
}.freeze

Instance Method Summary collapse

Instance Method Details

#feature(identifier) ⇒ Togglefy::Feature, ActiveRecord::Relation

Finds a feature by its identifier.

Parameters:

  • identifier (Symbol, Array<Symbol>, String, Array<String>)

    The identifier(s) of the feature(s).

Returns:

  • (Togglefy::Feature, ActiveRecord::Relation)

    The feature or features matching the identifier(s).



28
29
30
31
32
# File 'lib/togglefy/feature_query.rb', line 28

def feature(identifier)
  return Togglefy::Feature.identifier(identifier) if identifier.is_a?(Array)

  Togglefy::Feature.find_by!(identifier: identifier)
end

#featuresActiveRecord::Relation

Retrieves all features.

Returns:

  • (ActiveRecord::Relation)

    A relation of all features.



20
21
22
# File 'lib/togglefy/feature_query.rb', line 20

def features
  Togglefy::Feature.all
end

#for_environment(environment) ⇒ ActiveRecord::Relation

Retrieves features for a specific environment.

Parameters:

  • environment (Symbol, String)

    The environment to filter by.

Returns:

  • (ActiveRecord::Relation)

    A relation of features for the given environment.



61
62
63
# File 'lib/togglefy/feature_query.rb', line 61

def for_environment(environment)
  Togglefy::Feature.for_environment(environment)
end

#for_filters(filters) ⇒ ActiveRecord::Relation

Applies filters to retrieve features.

Parameters:

  • filters (Hash)

    The filters to apply.

Returns:

  • (ActiveRecord::Relation)

    A relation of features matching the filters.



99
100
101
102
103
104
105
106
# File 'lib/togglefy/feature_query.rb', line 99

def for_filters(filters)
  FILTERS.reduce(Togglefy::Feature) do |query, (key, scope)|
    value = filters[key]
    next query unless filters.key?(key) && nil_or_not_blank?(value)

    query.public_send(scope, value)
  end
end

#for_group(group) ⇒ ActiveRecord::Relation

Retrieves features for a specific group.

Parameters:

  • group (Symbol, String)

    The group to filter by.

Returns:

  • (ActiveRecord::Relation)

    A relation of features for the given group.



46
47
48
# File 'lib/togglefy/feature_query.rb', line 46

def for_group(group)
  Togglefy::Feature.for_group(group)
end

#for_tenant(tenant_id) ⇒ ActiveRecord::Relation

Retrieves features for a specific tenant.

Parameters:

  • tenant_id (String)

    The tenant_id to filter by.

Returns:

  • (ActiveRecord::Relation)

    A relation of features for the given tenant.



76
77
78
# File 'lib/togglefy/feature_query.rb', line 76

def for_tenant(tenant_id)
  Togglefy::Feature.for_tenant(tenant_id)
end

#for_type(klass) ⇒ ActiveRecord::Relation

Retrieves feature assignments for a specific type.

Parameters:

  • klass (Class)

    The class type to filter by.

Returns:

  • (ActiveRecord::Relation)

    A relation of feature assignments for the given type.



38
39
40
# File 'lib/togglefy/feature_query.rb', line 38

def for_type(klass)
  Togglefy::FeatureAssignment.for_type(klass)
end

#with_status(status) ⇒ ActiveRecord::Relation

Retrieves features with a specific status.

Parameters:

  • status (Symbol, String, Integer)

    The status to filter by.

Returns:

  • (ActiveRecord::Relation)

    A relation of features with the given status.



91
92
93
# File 'lib/togglefy/feature_query.rb', line 91

def with_status(status)
  Togglefy::Feature.with_status(status)
end

#without_environmentActiveRecord::Relation

Retrieves features without an environment.

Returns:

  • (ActiveRecord::Relation)

    A relation of features without an environment.



68
69
70
# File 'lib/togglefy/feature_query.rb', line 68

def without_environment
  Togglefy::Feature.without_environment
end

#without_groupActiveRecord::Relation

Retrieves features without a group.

Returns:

  • (ActiveRecord::Relation)

    A relation of features without a group.



53
54
55
# File 'lib/togglefy/feature_query.rb', line 53

def without_group
  Togglefy::Feature.without_group
end

#without_tenantActiveRecord::Relation

Retrieves features without a tenant.

Returns:

  • (ActiveRecord::Relation)

    A relation of features without a tenant.



83
84
85
# File 'lib/togglefy/feature_query.rb', line 83

def without_tenant
  Togglefy::Feature.without_tenant
end