lib/signore/signature.rb in signore-0.2.2 vs lib/signore/signature.rb in signore-0.2.3

- old
+ new

@@ -1,39 +1,37 @@ -module Signore Signature = Struct.new(*%i(text author source subject tags)) do - class << self - undef :[] - end +require 'lovely_rufus' - def self.[] author: nil, source: nil, subject: nil, tags: nil, text: nil - new text, author, source, subject, tags - end +module Signore + Signature = Struct.new(*%i(text author source subject tags)) do + def initialize(text = '', author: nil, source: nil, subject: nil, tags: nil) + super text, author, source, subject, tags + each_pair { |key, value| self[key] = nil if value and value.empty? } + end - def tagged_with? tag - tags and tags.include? tag - end + def tagged_with?(tag) + tags and tags.include?(tag) + end - def to_s - wrapped = LovelyRufus::TextWrapper.wrap text.gsub("\n", "\n\n"), width: 80 - squeezed = wrapped.gsub("\n\n", "\n").chomp - squeezed + meta_for(squeezed) - end + def to_s + spaced = text.gsub("\n", "\n\n") + wrapped = LovelyRufus.wrap(spaced, width: 80) + squeezed = wrapped.gsub("\n\n", "\n").chomp + squeezed + meta_for(squeezed) + end - private + private - def indent_size_for text - indent = text_width(text) - meta.size - 2 - indent < 0 ? 0 : indent - end + def indent_size_for(text) + indent = text.split("\n").map(&:size).max - meta.size - 2 + indent < 0 ? 0 : indent + end - def meta - stem = [author, subject].compact.join ' ' - stem.empty? ? "#{source}" : [stem, source].compact.join(', ') - end + def meta + stem = [author, subject].compact.join(' ') + stem.empty? ? "#{source}" : [stem, source].compact.join(', ') + end - def meta_for text - meta.empty? ? '' : "\n#{' ' * indent_size_for(text)}[#{meta}]" + def meta_for(text) + meta.empty? ? '' : "\n#{' ' * indent_size_for(text)}[#{meta}]" + end end - - def text_width text - text.split("\n").map(&:size).max - end -end end +end