Module: Subflag::Rails

Defined in:
lib/subflag/rails.rb,
lib/subflag/rails/client.rb,
lib/subflag/rails/engine.rb,
lib/subflag/rails/helpers.rb,
lib/subflag/rails/railtie.rb,
lib/subflag/rails/version.rb,
lib/subflag/rails/targeting.rb,
lib/subflag/rails/models/flag.rb,
lib/subflag/rails/test_helpers.rb,
lib/subflag/rails/test_helpers.rb,
lib/subflag/rails/configuration.rb,
lib/subflag/rails/flag_accessor.rb,
lib/subflag/rails/request_cache.rb,
lib/subflag/rails/context_builder.rb,
lib/subflag/rails/targeting_engine.rb,
lib/subflag/rails/evaluation_result.rb,
lib/subflag/rails/backends/memory_provider.rb,
lib/subflag/rails/backends/subflag_provider.rb,
app/controllers/subflag/rails/flags_controller.rb,
lib/subflag/rails/backends/active_record_provider.rb,
app/controllers/subflag/rails/application_controller.rb

Defined Under Namespace

Modules: Backends, Helpers, RequestCache, Targeting, TargetingEngine, TestHelpers Classes: ApplicationController, Client, Configuration, ContextBuilder, Engine, EvaluationResult, Flag, FlagAccessor, FlagsController, PrefetchedFlag, Railtie, StubbedClient

Constant Summary collapse

VERSION =
"0.6.6"

Class Method Summary collapse

Class Method Details

.clientClient

Access the client for flag evaluation

Returns:



58
59
60
# File 'lib/subflag/rails.rb', line 58

def client
  @client ||= Client.new
end

.configurationConfiguration

Access the configuration

Returns:



24
25
26
# File 'lib/subflag/rails.rb', line 24

def configuration
  @configuration ||= Configuration.new
end

.configure {|Configuration| ... } ⇒ Object

Configure Subflag for Rails

Examples:

Using Subflag Cloud (SaaS)

Subflag::Rails.configure do |config|
  config.backend = :subflag
  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.plan }
  end
end

Using ActiveRecord (self-hosted)

Subflag::Rails.configure do |config|
  config.backend = :active_record
end

Using Memory (testing)

Subflag::Rails.configure do |config|
  config.backend = :memory
end

Yields:



50
51
52
53
# File 'lib/subflag/rails.rb', line 50

def configure
  yield(configuration)
  setup_provider
end

.prefetch_flags(user: nil, context: nil) ⇒ Array<Hash>

Prefetch all flags for a user/context in a single API call

Call this early in a request to fetch all flags at once. Subsequent flag lookups will use the cached values.

Examples:

Prefetch in a controller

before_action :prefetch_flags

def prefetch_flags
  Subflag::Rails.prefetch_flags(user: current_user)
end

Parameters:

  • user (Object, nil) (defaults to: nil)

    The user object for targeting

  • context (Hash, nil) (defaults to: nil)

    Additional context attributes

Returns:

  • (Array<Hash>)

    Array of prefetched flag results (for inspection)



88
89
90
# File 'lib/subflag/rails.rb', line 88

def prefetch_flags(user: nil, context: nil)
  client.prefetch_all(user: user, context: context)
end

.providerObject

Access the current provider instance

Useful for the Memory backend where you can set flags directly:

Subflag::Rails.provider.set(:my_flag, true)

Returns:

  • (Object)

    The current OpenFeature provider



68
69
70
# File 'lib/subflag/rails.rb', line 68

def provider
  @provider
end

.reset!Object

Reset configuration (primarily for testing)



93
94
95
96
97
# File 'lib/subflag/rails.rb', line 93

def reset!
  @configuration = Configuration.new
  @client = nil
  @provider = nil
end