Sha256: 114b11a9c640257f1e755ae00711c19f51fb7b1cf3e50a7d44dab21c7397a019

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

module Stairs
  class InteractiveConfiguration < Stairs::Step
    title 'Configuration'
    description 'Interactive prompt for configuring Stairs'

    def run!
      if Stairs.configuration.use_defaults
        use_recommended_adapter!
      else
        configure_env_adapter
      end
    end

    private

    def configure_env_adapter
      require_installed_adapter!

      choice prompt do |yes|
        if yes
          use_recommended_adapter!
        else
          select_env_adapter
        end
      end
    end

    def select_env_adapter
      choice 'Which would you prefer?', adapter_names do |name|
        adapter_class = Stairs::EnvAdapters::ADAPTERS[name.to_sym]
        Stairs.configuration.env_adapter = adapter_class.new
      end
    end

    def use_recommended_adapter!
      Stairs.configuration.env_adapter = recommended_adapter.new
    end

    def recommended_adapter
      @recommended_adapter ||= Stairs::EnvAdapters.recommended_adapter
    end

    def recommended_adapter_name
      Stairs::EnvAdapters.name_for_adapter_class(recommended_adapter)
    end

    def prompt
      ''.tap do |message|
        message << "Looks like you're using #{recommended_adapter_name} to "
        message << 'manage environment variables. Is this correct?'
      end
    end

    def adapter_names
      @adapter_names ||= Stairs::EnvAdapters::ADAPTERS.map { |n, _a| n.to_s }
    end

    def require_installed_adapter!
      return if recommended_adapter

      abort <<-MSG
        Please install a supported ENV variable manager:
        #{adapter_names.join(', ')}
      MSG
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
stairs-0.10.0 lib/stairs/interactive_configuration.rb