Sha256: bc2761197bcfa92b5b557920ebe28b0db7757a5a4326b4c3ddbb99d26f32bfca

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

require 'pathname'
require 'yaml/store'

module Jenkins
  module Build
    class Configuration

      CONFIG = Pathname('.jenkins-build').freeze

      CONFIG_KEYS = [:server, :project, :api_key, :user]

      class << self
        extend Forwardable

        def current
          new(Dir.pwd)
        end

        def_delegators :current, *CONFIG_KEYS
      end

      def initialize(folder)
        @config = Pathname(CONFIG).expand_path(folder).freeze
        @store = YAML::Store.new(@config)
      end

      CONFIG_KEYS.each do |key|
        define_method(key) do
          options.fetch(key)
        end
      end

      def exists?
        @config.exist?
      end

      def merge!(opts)
        CONFIG_KEYS.each do |key|
          options[key] = opts[key]
        end
      end

      def options
        @options ||= read
      end

      def read
        @store.transaction(true) do
          @options = CONFIG_KEYS.map do |key|
            [ key, @store[key] ]
          end.to_h
        end
      end

      def write(options = @options)
        @store.transaction do
          CONFIG_KEYS.each do |key|
            @store[key] = options.fetch(key)
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jenkins-build-0.2.0.pre1 lib/jenkins/build/configuration.rb