Sha256: f39e405ef475e3f24a38d8800bce9f2e4ea117c35969439f530a938d7cf9618a

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

# rubocop: disable all

require 'yaml'
require 'doit'

What = Object.new
class << What

  attr_reader :matrix
  attr_reader :where
  attr_reader :env

  def init(config)
    @matrix = nil
    @yml   = (config && YAML.load(config)) || {}

    @where = @yml.delete('where')
    @env   = @yml.delete('env')
    @env ||= ['']
    @env   = [@env].flatten.compact

    remote = Doit.options[:remote]
    @where   = remote  if remote && remote != '---'
    @where ||= Dir.pwd   # default is current directory
    @where   = [@where].flatten.compact

    build_matrix
    @matrix ||= []
    @matrix = [@matrix]  unless @matrix.first.is_a?(Array)
    @matrix.map! { |m| m.flatten.inject({}) { |hsh, h| hsh.merge(h) } }
    info
  end

  def to_env(hsh)
    arr = hsh.collect { |key, value| "#{key.to_s.upcase}=#{value}" }
    arr.join ' '
  end

  def info
    return  unless Doit.options[:verbose]

    My.verbose 'where',  @where
    My.verbose 'matrix', @matrix
    My.verbose 'env',    @env
  end

 private
  def build_matrix
    return  if @yml.empty?

    key, value = @yml.first
    @yml.delete(key)
    add_to_matrix(key, value)
    build_matrix
  end

  def add_to_matrix(key, val)
    arr = val.is_a?(Array) ?
      val.collect { |v| [{ key => v }] } :
      [{ key => val }]
    @matrix = @matrix ? @matrix.product(arr) : arr
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
doit-1.0.2 lib/what.rb
doit-1.0.1 lib/what.rb
doit-0.3.9 lib/what.rb