Sha256: b616b9c37505c5b61813cef436819029eaa7fa8e50455888e5c7d3a303bd0076

Contents?: true

Size: 1.59 KB

Versions: 4

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

require 'rails'
require 'typedjs-rails'
require 'demo_mode/version'
require 'demo_mode/clever_sequence'
require 'demo_mode/config'
require 'demo_mode/engine'
require 'demo_mode/persona'

module DemoMode
  class << self
    delegate(*Config.configurations, to: :configuration)

    def enabled?
      ActiveModel::Type::Boolean::FALSE_VALUES.exclude?(ENV.fetch('DEMO_MODE', false)).tap do |enabled|
        webvalve_check! if enabled && defined?(WebValve)
      end
    end

    def table_name_prefix
      'demo_mode_'
    end

    def configure(&block)
      configuration.instance_eval(&block)
    end

    def add_persona(name = default_name, &block)
      configuration.persona(name, &block)
    end

    def callout_personas
      personas.select(&:callout?)
    end

    def standard_personas
      personas - callout_personas
    end

    def current_password
      Thread.current[:_demo_mode_password] ||= password.call
    end

    def current_password=(value)
      Thread.current[:_demo_mode_password] = value
    end

    private

    def configuration
      @configuration ||= Config.new
    end

    def webvalve_check!
      raise 'Demo Mode cannot be enabled unless WebValve is enabled.' unless WebValve.enabled?
    end

    def default_name
      persona_file = Pathname.new(caller_locations(2..2).first.path).relative_path_from(Rails.root.join(personas_path)).to_s
      raise "`add_persona` with no args only works from within '#{personas_path}'" if persona_file.start_with?('..')

      persona_file.delete_suffix('.rb').sub('/', ': ').gsub('/', ' — ')
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
demo_mode-1.3.0 lib/demo_mode.rb
demo_mode-1.2.3 lib/demo_mode.rb
demo_mode-1.2.2 lib/demo_mode.rb
demo_mode-1.2.1 lib/demo_mode.rb