Sha256: fb2a6c4234aa1a25c4fe37cc2dc640a09d8fe5bf030f211ec31cb593a36b7362

Contents?: true

Size: 1.63 KB

Versions: 8

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

module Remocon
  module Command
    class Push
      attr_reader :config, :cmd_opts

      def initialize(opts)
        @config = Remocon::Config.new(opts)
        @cmd_opts = { validate_only: false }
      end

      def run
        do_request
      end

      private

      def do_request
        response, response_body = Remocon::Request.push(config)

        (response.kind_of?(Net::HTTPOK) && parse_success_body(response, response_body)).tap do |result|
          unless result
            if response_body.blank?
              STDERR.puts "No error body"
            else
              parse_error_body(response, response_body)
            end
          end
        end
      end

      def parse_success_body(response, _success_body)
        etag = response.header["etag"]

        return unless etag

        File.open(config.etag_file_path, "w+") do |f|
          f.write(etag)
          f.flush
        end

        STDOUT.puts(etag)
        true
      end

      def parse_error_body(_response, error_body)
        STDERR.puts error_body[:error][:status]
        STDERR.puts error_body[:error][:message]

        error_body.dig(:error, :details)&.each do |k|
          # for now, see only errors below
          next unless k["@type"] == "type.googleapis.com/google.rpc.BadRequest"

          k[:fieldViolations].each do |e|
            if e[:field].start_with?("remote_config.conditions")
              STDERR.puts "CONDITION DEFINITION ERROR"
            else
              STDERR.puts "PARAMETER DEFINITION ERROR"
            end

            STDERR.puts e[:description]
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
remocon-0.5.1 lib/remocon/command/push_command.rb
remocon-0.5.0 lib/remocon/command/push_command.rb
remocon-0.4.4 lib/remocon/command/push_command.rb
remocon-0.4.3 lib/remocon/command/push_command.rb
remocon-0.4.2 lib/remocon/command/push_command.rb
remocon-0.4.1 lib/remocon/command/push_command.rb
remocon-0.4.0 lib/remocon/command/push_command.rb
remocon-0.4.0.pre.1 lib/remocon/command/push_command.rb