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