Sha256: f2e0f920d71bf59eb4f1bada94159dfdd1d5c245baac5da38c53708a53b858f0

Contents?: true

Size: 1.19 KB

Versions: 4

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

require 'avm/git/auto_commit/rules/base'

module Avm
  module Git
    module AutoCommit
      module Rules
        class Manual < ::Avm::Git::AutoCommit::Rules::Base
          class WithFile < ::Avm::Git::AutoCommit::Rules::Base::WithFile
            enable_speaker

            COMMIT_FORMAT = '%h - %s (%cr)'
            SKIP_OPTION = 's'

            def commit_info
              return nil unless file.commits.any?

              commits_banner
              request_input('Which commit?', list: commits_by_position).if_present do |v|
                new_commit_info.fixup(v)
              end
            end

            def commits_banner
              file.commits.each_with_index do |commit, _index|
                infov "    #{commit.position}", format_commit(commit)
              end
              infov "    #{SKIP_OPTION}", 'skip'
            end

            def commits_by_position
              (file.commits.map { |commit| [commit.position.to_s, commit] } + [[SKIP_OPTION, nil]])
                .to_h
            end

            def format_commit(commit)
              commit.format(COMMIT_FORMAT)
            end
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
avm-tools-0.101.0 lib/avm/git/auto_commit/rules/manual.rb
avm-tools-0.100.0 lib/avm/git/auto_commit/rules/manual.rb
avm-tools-0.99.1 lib/avm/git/auto_commit/rules/manual.rb
avm-tools-0.99.0 lib/avm/git/auto_commit/rules/manual.rb