Class: Subflag::Rails::FlagAccessor
- Inherits:
-
Object
- Object
- Subflag::Rails::FlagAccessor
- Defined in:
- lib/subflag/rails/flag_accessor.rb,
lib/subflag/rails/test_helpers.rb
Overview
Dynamic flag accessor using method_missing
Provides a clean DSL for accessing flags:
Flag names are automatically converted:
- Underscores become dashes:
new_checkout→new-checkout - Trailing ? is removed for booleans:
enabled?→enabled
Instance Method Summary collapse
-
#[](flag_name, default:) ⇒ Object
Bracket access for exact flag names (no conversion).
-
#evaluate(flag_name, default:) ⇒ EvaluationResult
Get full evaluation details for a flag.
-
#initialize(user: nil, context: nil) ⇒ FlagAccessor
constructor
A new instance of FlagAccessor.
-
#method_missing(method_name, *args, **kwargs, &block) ⇒ Object
Handle dynamic flag access.
- #respond_to_missing?(method_name, include_private = false) ⇒ Boolean
Constructor Details
#initialize(user: nil, context: nil) ⇒ FlagAccessor
Returns a new instance of FlagAccessor.
35 36 37 38 |
# File 'lib/subflag/rails/flag_accessor.rb', line 35 def initialize(user: nil, context: nil) @user = user @context = context end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, **kwargs, &block) ⇒ Object
Handle dynamic flag access
Method names ending in ? are treated as boolean flags (default: false). All other methods require a default: keyword argument.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/subflag/rails/flag_accessor.rb', line 86 def method_missing(method_name, *args, **kwargs, &block) flag_key = normalize_flag_name(method_name) if method_name.to_s.end_with?("?") # Boolean flag - default is optional (false) default = kwargs.fetch(:default, false) client.enabled?(flag_key, user: @user, context: @context, default: default) else # Value flag - default is required unless kwargs.key?(:default) raise ArgumentError, "default is required: Subflag.flags.#{method_name}(default: <value>)" end client.value(flag_key, user: @user, context: @context, default: kwargs[:default]) end end |
Instance Method Details
#[](flag_name, default:) ⇒ Object
Bracket access for exact flag names (no conversion)
50 51 52 53 |
# File 'lib/subflag/rails/flag_accessor.rb', line 50 def [](flag_name, default:) flag_key = flag_name.to_s client.value(flag_key, user: @user, context: @context, default: default) end |
#evaluate(flag_name, default:) ⇒ EvaluationResult
Get full evaluation details for a flag
68 69 70 71 |
# File 'lib/subflag/rails/flag_accessor.rb', line 68 def evaluate(flag_name, default:) flag_key = normalize_flag_name(flag_name) client.evaluate(flag_key, user: @user, context: @context, default: default) end |
#respond_to_missing?(method_name, include_private = false) ⇒ Boolean
102 103 104 |
# File 'lib/subflag/rails/flag_accessor.rb', line 102 def respond_to_missing?(method_name, include_private = false) true end |