Sha256: dbf55079fdfe37930c1dec25d5a727cda405b9738152748117fee83f7ac5d2ae

Contents?: true

Size: 1.53 KB

Versions: 5

Compression:

Stored size: 1.53 KB

Contents

module TerraspaceBundler::Mod::Concerns
  module StackConcern
    def stacks
      stacks = @props[:stacks] || @props[:stack]
      return unless stacks
      if all_stacks?(stacks)
        stacks = all_stacks
      elsif stacks.is_a?(Array)
        stacks = array_stacks(stacks)
      end
      normalize_stacks(stacks)
    end
    alias_method :stack, :stacks # important to have alias for VersionCheck

    def all_stacks?(*stacks)
      stacks.flatten == [:all]
    end

    def all_stacks
      stack = TerraspaceBundler::Exporter::Stacks::Stack.new(self) # to get the mod src path
      expr = "#{stack.examples_folder}/*"
      dirs = Dir.glob(expr).select { |path| File.directory?(path) }
      dirs.map do |dir|
        example = File.basename(dir)
        # Set name so multiple app/stacks are created instead of just one app/stack/MOD
        {
          name: example,
          src: example,
        }
      end
    end

    def array_stacks(stacks)
      stacks.map do |example|
        if example.is_a?(Hash)
          example
        else
          {
            name: example,
            src: example,
          }
        end
      end
    end

    # Normalizes stack options to an Array of Hashes or just a single Hash
    def normalize_stacks(option)
      defaults = TB.config.stack_options.dup
      result = case option
      when String
        [defaults.merge(src: option)]
      when Array
        option.map! {|s| normalize_stacks(s) }
      else # Hash
        [defaults.merge!(option)]
      end
      result.flatten
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
terraspace-bundler-0.5.0 lib/terraspace_bundler/mod/concerns/stack_concern.rb
terraspace-bundler-0.4.4 lib/terraspace_bundler/mod/concerns/stack_concern.rb
terraspace-bundler-0.4.3 lib/terraspace_bundler/mod/concerns/stack_concern.rb
terraspace-bundler-0.4.2 lib/terraspace_bundler/mod/concerns/stack_concern.rb
terraspace-bundler-0.4.1 lib/terraspace_bundler/mod/concerns/stack_concern.rb