Sha256: 7940f2bebd64d9e9039c6ab9b19338b605aad1b86ca0b83fce5093218437c845

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

module Rake
  module Funnel
    module Support
      module ArgumentMapper
        module Styles
          class MSDeploy
            attr_reader :prefix, :separator, :value_separator, :value_list_separator

            def initialize
              @prefix = '-'
              @separator = ':'
              @value_separator = '='
              @value_list_separator = ','
            end

            def generate_from(model)
              model.flat_map do |switch|
                switch.values.map do |item|
                  values = if item.is_a?(Enumerable)
                             item.map.with_index { |nested, index| nested(nested, index) }
                           else
                             nested(item)
                           end

                  (top_level(switch) + values).flatten
                end
              end
            end

            private

            def top_level(switch)
              [prefix, quote(switch.switch)]
            end

            def nested(value, index = 0) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
              res = []
              res << value_list_separator unless index.zero?
              res << separator unless value.key.nil? && value.value.nil? || index != 0
              res << quote(value.key)
              res << value_separator unless value.key.nil? || value.value.nil?
              res << quote(value.value)
              res.compact
            end

            def quote(value)
              value = value.gsub(/"/, '""') if value.is_a?(String)
              return %("#{value}") if value =~ /\s/

              value
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rake-funnel-0.22.3 lib/rake/funnel/support/argument_mapper/styles/msdeploy.rb