class Vanity::Configuration
This class holds the “how” Vanity
operates. For the “what”, please see Vanity::Playground
.
Constants
- DEFAULTS
- LEGACY_CONNECTION_KEY
- LEGACY_REDIS_CONFIG_FILE
Attributes
URL to the add_participant action.
True if saving results to the datastore (participants and conversions).
By default the vanity.yml file in the config_path
variable. Variables scoped under the key for the current environment are extracted for the connection parameters. If there is no config/vanity.yml file, tries the configuration from config/redis.yml.
Uses ./config by default.
In order of precedence, RACK_ENV, RAILS_ENV or `development`.
Path to load experiment files from.
By default experiments start enabled. If you want experiments to be explicitly enabled after a production release, then set to false.
Turns on passing of errors to the Proc returned by on_datastore_error
. Set `config.failover_on_datastore_error` to `true` to turn this on.
@since 2.0.0
Path to Vanity
locales. Set this to override those in the gem.
Logger. The default logs to STDOUT.
Must return a Proc that accepts as parameters: the thrown error, the calling Class, the calling method, and an array of arguments passed to the calling method. The return value is ignored.
@example
Proc.new do |error, klass, method, arguments| ... end
The default implementation logs this information to Playground#logger
.
Set a custom action by calling config.on_datastore_error = Proc.new { … }.
@since 2.0.0
Must return a Proc that accepts as a parameter the request object, if made available by the implement framework. The return value should be a boolean whether to ignore the request. This is called only for the JS callback action.
@example
Proc.new do |request| ... end
The default implementation does a simple test of whether the request's HTTP_USER_AGENT header contains a URI, or the words 'bot', 'crawler', or 'spider' since well behaved bots typically include a reference URI in their user agent strings. (Original idea: stackoverflow.com/a/9285889.)
Alternatively, one could filter an explicit list of IPs, add additional user agent strings to filter, or any custom test. Set a custom filter by calling config.request_filter = Proc.new { … }.
@since 2.0.0
Path to Vanity
templates. Set this to override those in the gem.
Call to indicate that participants should be added via js. This helps keep robots from participating in the A/B test and skewing results.
If you want to use this:
-
Add <%= vanity_js %> to any page that needs uses an ab_test. vanity_js needs to be included after your call to ab_test so that it knows which version of the experiment the participant is a member of. The helper will render nothing if the there are no ab_tests running on the current page, so adding vanity_js to the bottom of your layouts is a good option. Keep in mind that if you set config.use_js = true and don't include vanity_js in your view no participants will be recorded.
Note that a custom JS callback path can be set using:
-
Set config.add_participant_route = '/path/to/vanity/action', this should point to the add_participant path that is added with
Vanity::Rails::Dashboard
, make sure that this action is available to all users.
Public Instance Methods
# File lib/vanity/configuration.rb, line 193 def [](arg) if instance_variable_defined?("@#{arg}") instance_variable_get("@#{arg}") else DEFAULTS[arg] end end
@return nil or a hash of symbolized keys for connection settings
# File lib/vanity/configuration.rb, line 207 def connection_params(file_name=nil) file_name ||= config_file file_path = File.join(config_path, file_name) if File.exist?(file_path) config = YAML.load(ERB.new(File.read(file_path)).result) config ||= {} params_for_environment = config[environment.to_s] unless params_for_environment raise MissingEnvironment.new("No configuration for #{environment}") end # Symbolize keys if it's a hash. if params_for_environment.respond_to?(:inject) params_for_environment.inject({}) { |h,kv| h[kv.first.to_sym] = kv.last ; h } else params_for_environment end end end
@deprecated
# File lib/vanity/configuration.rb, line 230 def connection_url connection_config = connection_params return unless connection_config && connection_config.respond_to?(:has_key?) connection_url = connection_config[LEGACY_CONNECTION_KEY] if connection_url logger.warn(%q{Deprecated: Please specify connection urls using the `url` key with a protocol prefix instead of `connection`. This fallback will be removed in a future version.}) # Legacy lack of protocol handling if connection_url =~ /^\w+:/ connection_url else "redis://" + connection_url end end end
@deprecated
# File lib/vanity/configuration.rb, line 250 def redis_url_from_file connection_url = connection_params(LEGACY_REDIS_CONFIG_FILE) if connection_url logger.warn(%q{Deprecated: Please specify the vanity config file, the default fallback to "config/redis.yml" may be removed in a future version.}) if connection_url =~ /^\w+:/ connection_url else "redis://" + connection_url end end end
# File lib/vanity/configuration.rb, line 201 def setup_locales locales = Dir[File.join(locales_path, '*.{rb,yml}')] I18n.load_path += locales end