Class: Subflag::Rails::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/subflag/rails/configuration.rb

Overview

Configuration for Subflag Rails integration

Examples:

Basic configuration

Subflag::Rails.configure do |config|
  config.api_key = Rails.application.credentials.subflag_api_key
end

With user context

Subflag::Rails.configure do |config|
  config.api_key = Rails.application.credentials.subflag_api_key
  config.user_context do |user|
    {
      targeting_key: user.id.to_s,
      email: user.email,
      plan: user.subscription&.plan_name,
      admin: user.admin?
    }
  end
end

Constant Summary collapse

VALID_BACKENDS =
%i[subflag active_record memory].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



54
55
56
57
58
59
60
61
62
63
# File 'lib/subflag/rails/configuration.rb', line 54

def initialize
  @backend = :subflag
  @api_key = nil
  @api_url = "https://api.subflag.com"
  @user_context_block = nil
  @logging_enabled = false
  @log_level = :debug
  @cache_ttl = nil
  @admin_auth_callback = nil
end

Instance Attribute Details

#admin_auth_callbackProc? (readonly)

Returns Admin authentication callback for the admin UI.

Returns:

  • (Proc, nil)

    Admin authentication callback for the admin UI



52
53
54
# File 'lib/subflag/rails/configuration.rb', line 52

def admin_auth_callback
  @admin_auth_callback
end

#api_keyString?

Returns The Subflag API key.

Returns:

  • (String, nil)

    The Subflag API key



35
36
37
# File 'lib/subflag/rails/configuration.rb', line 35

def api_key
  @api_key
end

#api_urlString

Returns The Subflag API URL (defaults to production).

Returns:

  • (String)

    The Subflag API URL (defaults to production)



38
39
40
# File 'lib/subflag/rails/configuration.rb', line 38

def api_url
  @api_url
end

#backendSymbol

Returns Backend to use (:subflag, :active_record, :memory)

  • :subflag — Subflag Cloud SaaS (default)
  • :active_record — Self-hosted, flags stored in your database
  • :memory — In-memory store for testing.

Returns:

  • (Symbol)

    Backend to use (:subflag, :active_record, :memory)

    • :subflag — Subflag Cloud SaaS (default)
    • :active_record — Self-hosted, flags stored in your database
    • :memory — In-memory store for testing


32
33
34
# File 'lib/subflag/rails/configuration.rb', line 32

def backend
  @backend
end

#cache_ttlInteger, ...

Returns TTL for cross-request caching When set, prefetched flags are cached in Rails.cache for this duration. Set to nil to disable cross-request caching (default).

Returns:

  • (Integer, ActiveSupport::Duration, nil)

    TTL for cross-request caching When set, prefetched flags are cached in Rails.cache for this duration. Set to nil to disable cross-request caching (default).



49
50
51
# File 'lib/subflag/rails/configuration.rb', line 49

def cache_ttl
  @cache_ttl
end

#log_levelSymbol

Returns Log level for flag evaluations (:debug, :info, :warn).

Returns:

  • (Symbol)

    Log level for flag evaluations (:debug, :info, :warn)



44
45
46
# File 'lib/subflag/rails/configuration.rb', line 44

def log_level
  @log_level
end

#logging_enabledBoolean

Returns Whether to log flag evaluations.

Returns:

  • (Boolean)

    Whether to log flag evaluations



41
42
43
# File 'lib/subflag/rails/configuration.rb', line 41

def logging_enabled
  @logging_enabled
end

Instance Method Details

#admin_auth {|controller| ... } ⇒ Object

Configure authentication for the admin UI

Examples:

Require admin role

config.admin_auth do
  redirect_to main_app.root_path unless current_user&.admin?
end

Use Devise authenticate

config.admin_auth do
  authenticate_user!
end

Yields:

  • (controller)

    Block called before each admin action

Yield Parameters:

  • controller (ActionController::Base)

    The controller instance



138
139
140
141
# File 'lib/subflag/rails/configuration.rb', line 138

def admin_auth(&block)
  @admin_auth_callback = block if block_given?
  @admin_auth_callback
end

#build_user_context(user) ⇒ Hash?

Build context from a user object using the configured block

Parameters:

  • user (Object)

    The user object

Returns:

  • (Hash, nil)

    The context hash or nil if no user/block



118
119
120
121
122
# File 'lib/subflag/rails/configuration.rb', line 118

def build_user_context(user)
  return nil unless user && @user_context_block

  @user_context_block.call(user)
end

#rails_cache_enabled?Boolean

Check if cross-request caching via Rails.cache is enabled

Returns:

  • (Boolean)


81
82
83
84
85
86
# File 'lib/subflag/rails/configuration.rb', line 81

def rails_cache_enabled?
  return false unless @cache_ttl && @cache_ttl.to_i > 0
  return false unless defined?(::Rails.cache) && ::Rails.cache.present?

  true
end

#user_context {|user| ... } ⇒ Object

Configure how to extract context from a user object

Examples:

config.user_context do |user|
  {
    targeting_key: user.id.to_s,
    email: user.email,
    plan: user.plan
  }
end

Yields:

  • (user)

    Block that receives a user object and returns context hash

Yield Parameters:

  • user (Object)

    The user object passed to flag methods

Yield Returns:

  • (Hash)

    Context hash with targeting_key and attributes



102
103
104
105
# File 'lib/subflag/rails/configuration.rb', line 102

def user_context(&block)
  @user_context_block = block if block_given?
  @user_context_block
end

#user_context_configured?Boolean

Check if user context is configured

Returns:

  • (Boolean)


110
111
112
# File 'lib/subflag/rails/configuration.rb', line 110

def user_context_configured?
  !@user_context_block.nil?
end