Sha256: f6c3cb30e591bcd3407550c952694bf8918966bbea7ceb92b916076e12b3a32d

Contents?: true

Size: 938 Bytes

Versions: 1

Compression:

Stored size: 938 Bytes

Contents

# frozen_string_literal: true

require_relative 'signature'
require_relative 'tags'

module Signore
  class SigFromStream
    def self.sig_from(input, tags: Tags.new)
      new(input, tags: tags).to_sig
    end

    def initialize(input, tags: Tags.new)
      @input = input
      @tags  = tags
    end

    def to_sig
      Signature.new(author: params.author, source: params.source,
                    subject: params.subject, tags: tags.required,
                    text: params.text)
    end

    private

    attr_reader :input, :tags

    Params = Struct.new(*%i(text author subject source))

    def get_param(param)
      puts "#{param}?"
      param == :text ? multiline : input.gets.strip
    end

    def multiline
      value = ''
      value += input.gets until value.lines.to_a.last == "\n"
      value.strip
    end

    def params
      @params ||= Params.new(*Params.members.map(&method(:get_param)))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
signore-0.5.0 lib/signore/sig_from_stream.rb