signore 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 574592e64de19564735c0cb34ed8176d4a2c2ef2
4
- data.tar.gz: e2c9d9a4e3ca171b214f936865fabbaf675a1786
3
+ metadata.gz: eba6ae8ca7d28dd0e9ab1ba802d3c123cac60ea8
4
+ data.tar.gz: 863b5bf72e37a144dab17cbb4f4e0b81b993471a
5
5
  SHA512:
6
- metadata.gz: 7789db08a85ae9121a8764d677297c3f165b163804edf4819fe60619e5614c5c36709ef9bedf469d613294d4ffc5e9f8251a0f1c7874a0395520cd8a0d4dd242
7
- data.tar.gz: ec717cbde5846a0aea3dc693b76edbfee3f2f85bece044452c9eec4b39acb92be1e9a5d021c6c3cf3dc7af58a35c4a99f1854735b60e23a57c4f3d4fd5e9e31e
6
+ metadata.gz: 33ec2292285973a2bf1b2e906088b593005108d38dcbc6217ff4e7e8b961303fdc99109d2c63ad099f89cddd9276c59e4280f44a7e4a10ed9da59f4b786a494c
7
+ data.tar.gz: a9eca84ec42b8cbc4a9790c2e30a0f815d54f18955f92e4675e08feb1761da4ed1d9088cff407fe6c833c8f6fe5aeed221b76496ec35eeef9cbf0332283fbfba
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- signore (0.2.4)
4
+ signore (0.3.0)
5
5
  lovely_rufus (~> 0.2.0)
6
6
 
7
7
  GEM
@@ -25,7 +25,7 @@ GEM
25
25
  minitest (5.4.2)
26
26
  minitest-focus (1.1.0)
27
27
  minitest (>= 4, < 6)
28
- parser (2.2.0.pre.5)
28
+ parser (2.2.0.pre.7)
29
29
  ast (>= 1.1, < 3.0)
30
30
  slop (~> 3.4, >= 3.4.5)
31
31
  powerpack (0.0.9)
@@ -41,13 +41,13 @@ GEM
41
41
  sexp_processor
42
42
  rerun (0.10.0)
43
43
  listen (~> 2.7, >= 2.7.3)
44
- rubocop (0.26.1)
44
+ rubocop (0.27.0)
45
45
  astrolabe (~> 1.3)
46
- parser (>= 2.2.0.pre.4, < 3.0)
46
+ parser (>= 2.2.0.pre.6, < 3.0)
47
47
  powerpack (~> 0.0.6)
48
48
  rainbow (>= 1.99.1, < 3.0)
49
49
  ruby-progressbar (~> 1.4)
50
- ruby-progressbar (1.6.0)
50
+ ruby-progressbar (1.7.0)
51
51
  ruby2ruby (2.1.3)
52
52
  ruby_parser (~> 3.1)
53
53
  sexp_processor (~> 4.0)
@@ -68,5 +68,5 @@ DEPENDENCIES
68
68
  rake (~> 10.1)
69
69
  reek (~> 1.3)
70
70
  rerun (~> 0.10.0)
71
- rubocop (~> 0.26.0)
71
+ rubocop (~> 0.27.0)
72
72
  signore!
data/bin/signore CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require_relative '../lib/signore'
4
+ trap(:INT) { exit }
4
5
  Signore::CLI.new.run
data/config/reek.yml CHANGED
@@ -4,6 +4,8 @@ DuplicateMethodCall:
4
4
 
5
5
  FeatureEnvy:
6
6
  exclude:
7
+ - Signore::Mapper#from_h
8
+ - Signore::Mapper#to_h
7
9
  - Signore::Settings#forbidden
8
10
 
9
11
  IrresponsibleModule:
@@ -14,4 +16,5 @@ NestedIterators:
14
16
 
15
17
  UtilityFunction:
16
18
  exclude:
19
+ - Signore::Mapper#from_h
17
20
  - Signore::Settings#db_path
data/lib/signore/cli.rb CHANGED
@@ -15,7 +15,6 @@ module Signore
15
15
  end
16
16
 
17
17
  def run(input: $stdin)
18
- trap(:INT) { exit }
19
18
  case action
20
19
  when 'prego' then puts retrieve_sig
21
20
  when 'pronto' then puts create_sig_from(input)
@@ -1,7 +1,9 @@
1
1
  require 'fileutils'
2
2
  require 'yaml/store'
3
+ require_relative 'mapper'
3
4
  require_relative 'settings'
4
5
  require_relative 'sig_finder'
6
+ require_relative 'signature'
5
7
  require_relative 'tags'
6
8
 
7
9
  module Signore
@@ -14,14 +16,20 @@ module Signore
14
16
  end
15
17
 
16
18
  def <<(sig)
17
- store.transaction { store['signatures'] << sig }
19
+ sigs << sig
20
+ persist
18
21
  end
19
22
 
20
23
  def find(tags: Tags.new)
21
- sigs = store.transaction(true) { store['signatures'] }
22
24
  sig_finder.find(sigs, tags: tags)
23
25
  end
24
26
 
27
+ def sigs
28
+ @sigs ||= store.transaction(true) { store['signatures'] }.map do |elem|
29
+ elem.is_a?(Signature) ? elem : Mapper.from_h(elem)
30
+ end
31
+ end
32
+
25
33
  attr_reader :path, :sig_finder, :store
26
34
  private :path, :sig_finder, :store
27
35
 
@@ -32,5 +40,10 @@ module Signore
32
40
  FileUtils.touch path
33
41
  YAML::Store.new(path).transaction { |store| store['signatures'] = [] }
34
42
  end
43
+
44
+ def persist
45
+ hashes = sigs.map { |sig| Mapper.to_h(sig) }
46
+ store.transaction { store['signatures'] = hashes }
47
+ end
35
48
  end
36
49
  end
@@ -0,0 +1,15 @@
1
+ require_relative 'signature'
2
+
3
+ module Signore
4
+ module Mapper
5
+ module_function
6
+
7
+ def from_h(hash)
8
+ Signature.new(hash.map { |key, value| [key.to_sym, value] }.to_h)
9
+ end
10
+
11
+ def to_h(signature)
12
+ signature.to_h
13
+ end
14
+ end
15
+ end
@@ -15,8 +15,9 @@ module Signore
15
15
  end
16
16
 
17
17
  def to_sig
18
- Signature.new(params.text, author: params.author, source: params.source,
19
- subject: params.subject, tags: tags.required)
18
+ Signature.new(author: params.author, source: params.source,
19
+ subject: params.subject, tags: tags.required,
20
+ text: params.text)
20
21
  end
21
22
 
22
23
  attr_reader :input, :tags
@@ -1,9 +1,9 @@
1
1
  require 'lovely_rufus'
2
2
 
3
3
  module Signore
4
- Signature = Struct.new(*%i(text author source subject tags)) do
5
- def initialize(text = '', author: nil, source: nil, subject: nil, tags: nil)
6
- super text, author, source, subject, tags
4
+ Signature = Struct.new(*%i(author source subject tags text)) do
5
+ def initialize(author: nil, source: nil, subject: nil, tags: nil, text: nil)
6
+ super author, source, subject, tags, text
7
7
  each_pair { |key, value| self[key] = nil if value and value.empty? }
8
8
  end
9
9
 
@@ -11,6 +11,10 @@ module Signore
11
11
  tags and tags.include?(tag)
12
12
  end
13
13
 
14
+ def to_h
15
+ super.map { |key, val| [key.to_s, val] }.to_h.keep_if { |_, value| value }
16
+ end
17
+
14
18
  def to_s
15
19
  spaced = text.gsub("\n", "\n\n")
16
20
  wrapped = LovelyRufus.wrap(spaced, width: 80)
data/signore.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |gem|
7
7
  gem.license = 'AGPL-3.0'
8
8
  gem.name = 'signore'
9
9
  gem.summary = 'signore: an email signature manager/randomiser'
10
- gem.version = '0.2.4'
10
+ gem.version = '0.3.0'
11
11
 
12
12
  gem.files = `git ls-files -z`.split "\0"
13
13
  gem.executables = gem.files.grep(/^bin\//).map { |path| File.basename(path) }
@@ -21,5 +21,5 @@ Gem::Specification.new do |gem|
21
21
  gem.add_development_dependency 'rake', '~> 10.1'
22
22
  gem.add_development_dependency 'reek', '~> 1.3'
23
23
  gem.add_development_dependency 'rerun', '~> 0.10.0'
24
- gem.add_development_dependency 'rubocop', '~> 0.26.0'
24
+ gem.add_development_dependency 'rubocop', '~> 0.27.0'
25
25
  end
@@ -0,0 +1,23 @@
1
+ signatures:
2
+ - !ruby/struct:Signore::Signature
3
+ text: She was good at playing abstract confusion in the same way a midget is good at being short.
4
+ author: Clive James
5
+ subject: on Marilyn Monroe
6
+ - !ruby/struct:Signore::Signature
7
+ text: You do have to be mad to work here, but it doesn’t help.
8
+ author: Gary Barnes
9
+ source: asr
10
+ tags: [tech, work]
11
+ - !ruby/struct:Signore::Signature
12
+ text: // sometimes I believe compiler ignores all my comments
13
+ tags: [programming, tech]
14
+ - !ruby/struct:Signore::Signature
15
+ text: Bruce Schneier knows Alice and Bob’s shared secret.
16
+ source: Bruce Schneier Facts
17
+ tags: [security, tech]
18
+ - !ruby/struct:Signore::Signature
19
+ text: stay-at-home executives vs. wallstreet dads
20
+ author: kodz
21
+ - !ruby/struct:Signore::Signature
22
+ text: Amateur fighter pilot ignores orders, listens to the voices in his head and slaughters thousands.
23
+ subject: Star Wars ending explained
@@ -1,23 +1,17 @@
1
1
  signatures:
2
- - !ruby/struct:Signore::Signature
3
- text: She was good at playing abstract confusion in the same way a midget is good at being short.
2
+ - text: She was good at playing abstract confusion in the same way a midget is good at being short.
4
3
  author: Clive James
5
4
  subject: on Marilyn Monroe
6
- - !ruby/struct:Signore::Signature
7
- text: You do have to be mad to work here, but it doesn’t help.
5
+ - text: You do have to be mad to work here, but it doesn’t help.
8
6
  author: Gary Barnes
9
7
  source: asr
10
8
  tags: [tech, work]
11
- - !ruby/struct:Signore::Signature
12
- text: // sometimes I believe compiler ignores all my comments
9
+ - text: // sometimes I believe compiler ignores all my comments
13
10
  tags: [programming, tech]
14
- - !ruby/struct:Signore::Signature
15
- text: Bruce Schneier knows Alice and Bob’s shared secret.
11
+ - text: Bruce Schneier knows Alice and Bob’s shared secret.
16
12
  source: Bruce Schneier Facts
17
13
  tags: [security, tech]
18
- - !ruby/struct:Signore::Signature
19
- text: stay-at-home executives vs. wallstreet dads
14
+ - text: stay-at-home executives vs. wallstreet dads
20
15
  author: kodz
21
- - !ruby/struct:Signore::Signature
22
- text: Amateur fighter pilot ignores orders, listens to the voices in his head and slaughters thousands.
16
+ - text: Amateur fighter pilot ignores orders, listens to the voices in his head and slaughters thousands.
23
17
  subject: Star Wars ending explained
@@ -10,20 +10,27 @@ require_relative '../../lib/signore/tags'
10
10
  module Signore
11
11
  describe Database do
12
12
  describe '#<<' do
13
+ let(:path) { Pathname.new(Tempfile.new('').path) }
14
+ let(:sig) { Signature.new(text: text) }
15
+ let(:text) { 'Normaliser Unix c’est comme pasteuriser le camembert.' }
16
+
13
17
  it 'saves the provided signature to disk' do
14
- text = 'Normaliser Unix c’est comme pasteuriser le camembert.'
15
- sig = Signature.new(text)
16
- path = Pathname.new(Tempfile.new('').path)
17
18
  Database.new(path: path) << sig
18
19
  path.read.must_include text
19
20
  end
21
+
22
+ it 'rewrites legacy YAML files on save' do
23
+ FileUtils.cp Pathname.new('spec/fixtures/signatures.legacy.yml'), path
24
+ Database.new(path: path) << sig
25
+ path.read.wont_include 'Signore::Signature'
26
+ end
20
27
  end
21
28
 
22
29
  describe '#find' do
23
30
  let(:database) { Database.new(path: path, sig_finder: sig_finder) }
24
31
  let(:path) { Pathname.new('spec/fixtures/signatures.yml') }
25
32
  let(:sig_finder) { fake(:sig_finder, as: :class) }
26
- let(:sigs) { store.transaction(true) { store['signatures'] } }
33
+ let(:sigs) { database.sigs }
27
34
  let(:store) { YAML::Store.new(path) }
28
35
 
29
36
  it 'returns a random signature by default' do
@@ -46,6 +53,23 @@ module Signore
46
53
  FileUtils.rmtree tempdir
47
54
  end
48
55
  end
56
+
57
+ it 'keeps working with legacy YAML files' do
58
+ path = Pathname.new('spec/fixtures/signatures.legacy.yml')
59
+ database = Database.new(path: path, sig_finder: sig_finder)
60
+ stub(sig_finder).find(sigs, tags: Tags.new) { sigs.last }
61
+ database.find.must_equal sigs.last
62
+ end
63
+ end
64
+
65
+ describe '#sigs' do
66
+ it 'returns all the Signatures from the Database' do
67
+ path = Pathname.new('spec/fixtures/signatures.yml')
68
+ sigs = Database.new(path: path).sigs
69
+ sigs.size.must_equal 6
70
+ sigs.first.author.must_equal 'Clive James'
71
+ sigs.last.subject.must_equal 'Star Wars ending explained'
72
+ end
49
73
  end
50
74
  end
51
75
  end
@@ -0,0 +1,37 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../../lib/signore/mapper'
3
+ require_relative '../../lib/signore/signature'
4
+
5
+ module Signore
6
+ describe Mapper do
7
+ let(:sig_hash) do
8
+ {
9
+ 'author' => 'Anonymous Coward',
10
+ 'source' => '/.',
11
+ 'subject' => 'on ‘Monty Wants to Save MySQL’',
12
+ 'tags' => %w(/. MySQL),
13
+ 'text' => text,
14
+ }
15
+ end
16
+ let(:signature) do
17
+ Signature.new(author: 'Anonymous Coward', source: '/.',
18
+ subject: 'on ‘Monty Wants to Save MySQL’',
19
+ tags: %w(/. MySQL), text: text)
20
+ end
21
+ let(:text) do
22
+ 'For the sake of topic titles, I’d rather if Monty saved Python.'
23
+ end
24
+
25
+ describe '.from_h' do
26
+ it 'deserializes a Signature from a Hash' do
27
+ Mapper.from_h(sig_hash).must_equal signature
28
+ end
29
+ end
30
+
31
+ describe '.to_h' do
32
+ it 'serialises a Signature to a Hash' do
33
+ Mapper.to_h(signature).must_equal sig_hash
34
+ end
35
+ end
36
+ end
37
+ end
@@ -6,8 +6,7 @@ require_relative '../../lib/signore/tags'
6
6
  module Signore
7
7
  describe SigFinder do
8
8
  let(:sigs) do
9
- store = YAML::Store.new('spec/fixtures/signatures.yml')
10
- store.transaction(true) { store['signatures'] }
9
+ Database.new(path: Pathname.new('spec/fixtures/signatures.yml')).sigs
11
10
  end
12
11
 
13
12
  let(:sig_finder) { SigFinder.new(sigs) }
@@ -30,7 +30,8 @@ module Signore
30
30
  sig = nil
31
31
  capture_io { sig = SigFromStream.sig_from input }
32
32
  text = 'You do have to be mad to work here, but it doesn’t help.'
33
- sig.must_equal Signature.new(text, author: 'Gary Barnes', source: 'asr')
33
+ sig.must_equal Signature.new(author: 'Gary Barnes', source: 'asr',
34
+ text: text)
34
35
  end
35
36
 
36
37
  it 'handles multi-line signatures' do
@@ -47,7 +48,7 @@ module Signore
47
48
  ‘You’ve got an interesting accent. Subtle. I can’t place it.’
48
49
  ‘It’s text-to-speech… I was raised by smartphones.’
49
50
  end
50
- sig.must_equal Signature.new(text, author: 'Patrick Ewing')
51
+ sig.must_equal Signature.new(author: 'Patrick Ewing', text: text)
51
52
  end
52
53
  end
53
54
  end
@@ -9,9 +9,9 @@ module Signore
9
9
  source = 'A History of Modern Computing'
10
10
  text = 'In 1940 he summarized his work in an influential book, ' \
11
11
  '‘Punched Card Methods in Scientific Computation’.'
12
- sig = Signature.new(text, author: 'Paul E. Ceruzzi', source: source,
13
- subject: 'on Wallace Eckert',
14
- tags: ['punched cards'])
12
+ sig = Signature.new(author: 'Paul E. Ceruzzi', source: source,
13
+ subject: 'on Wallace Eckert',
14
+ tags: ['punched cards'], text: text)
15
15
  sig.author.must_equal 'Paul E. Ceruzzi'
16
16
  sig.source.must_equal source
17
17
  sig.subject.must_equal 'on Wallace Eckert'
@@ -20,15 +20,16 @@ module Signore
20
20
  end
21
21
 
22
22
  it 'nils empty parameters' do
23
- new = Signature.new('', author: '', source: '', subject: '', tags: [])
24
- new.must_equal Signature.new(nil, author: nil, source: nil,
25
- subject: nil, tags: nil)
23
+ new = Signature.new(author: '', source: '', subject: '', tags: [],
24
+ text: '')
25
+ new.must_equal Signature.new(author: nil, source: nil, subject: nil,
26
+ tags: nil, text: nil)
26
27
  end
27
28
  end
28
29
 
29
30
  describe '#tagged_with?' do
30
31
  it 'says whether a tagged signature is tagged with a given tag' do
31
- sig = Signature.new('', tags: %w(programming tech))
32
+ sig = Signature.new(tags: %w(programming tech), text: '')
32
33
  refute sig.tagged_with?('fnord')
33
34
  assert sig.tagged_with?('programming')
34
35
  assert sig.tagged_with?('tech')
@@ -39,16 +40,33 @@ module Signore
39
40
  end
40
41
  end
41
42
 
43
+ describe '#to_h' do
44
+ it 'returns a String-keyed Hash representation of the Signature' do
45
+ text = 'For the sake of topic titles, I’d rather if Monty saved Python.'
46
+ sig = Signature.new(author: 'Anonymous Coward', source: '/.',
47
+ subject: 'on ‘Monty Wants to Save MySQL’',
48
+ tags: %w(/. MySQL), text: text)
49
+ sig.to_h.must_equal 'author' => 'Anonymous Coward', 'source' => '/.',
50
+ 'subject' => 'on ‘Monty Wants to Save MySQL’',
51
+ 'tags' => %w(/. MySQL), 'text' => text
52
+
53
+ end
54
+
55
+ it 'removes non-existing keys' do
56
+ assert Signature.new.to_h.empty?
57
+ end
58
+ end
59
+
42
60
  describe '#to_s' do
43
61
  it 'does not show meta if there’s nothing to show' do
44
62
  text = '// sometimes I believe compiler ignores all my comments'
45
- sig = Signature.new(text)
63
+ sig = Signature.new(text: text)
46
64
  sig.to_s.must_equal text
47
65
  end
48
66
 
49
67
  it 'shows author on its own' do
50
- sig = Signature.new('stay-at-home executives vs. wallstreet dads',
51
- author: 'kodz')
68
+ sig = Signature.new(author: 'kodz',
69
+ text: 'stay-at-home executives vs. wallstreet dads')
52
70
  sig.to_s.must_equal <<-end.dedent.strip
53
71
  stay-at-home executives vs. wallstreet dads
54
72
  [kodz]
@@ -57,7 +75,7 @@ module Signore
57
75
 
58
76
  it 'shows author and source, comma-separated' do
59
77
  text = 'You do have to be mad to work here, but it doesn’t help.'
60
- sig = Signature.new(text, author: 'Gary Barnes', source: 'asr')
78
+ sig = Signature.new(author: 'Gary Barnes', source: 'asr', text: text)
61
79
  sig.to_s.must_equal <<-end.dedent.strip
62
80
  You do have to be mad to work here, but it doesn’t help.
63
81
  [Gary Barnes, asr]
@@ -66,7 +84,7 @@ module Signore
66
84
 
67
85
  it 'shows source on its own' do
68
86
  text = 'Bruce Schneier knows Alice and Bob’s shared secret.'
69
- sig = Signature.new(text, source: 'Bruce Schneier Facts')
87
+ sig = Signature.new(source: 'Bruce Schneier Facts', text: text)
70
88
  sig.to_s.must_equal <<-end.dedent.strip
71
89
  Bruce Schneier knows Alice and Bob’s shared secret.
72
90
  [Bruce Schneier Facts]
@@ -76,8 +94,8 @@ module Signore
76
94
  it 'shows author and subject, space separated' do
77
95
  text = 'She was good at playing abstract confusion ' \
78
96
  'in the same way a midget is good at being short.'
79
- sig = Signature.new(text, author: 'Clive James',
80
- subject: 'on Marilyn Monroe')
97
+ sig = Signature.new(author: 'Clive James', subject: 'on Marilyn Monroe',
98
+ text: text)
81
99
  sig.to_s.must_equal <<-end.dedent.strip
82
100
  She was good at playing abstract confusion in
83
101
  the same way a midget is good at being short.
@@ -88,7 +106,7 @@ module Signore
88
106
  it 'shows subject on its own' do
89
107
  text = 'Amateur fighter pilot ignores orders, listens ' \
90
108
  'to the voices in his head and slaughters thousands.'
91
- sig = Signature.new(text, subject: 'Star Wars ending explained')
109
+ sig = Signature.new(subject: 'Star Wars ending explained', text: text)
92
110
  sig.to_s.must_equal <<-end.dedent.strip
93
111
  Amateur fighter pilot ignores orders, listens to
94
112
  the voices in his head and slaughters thousands.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Szotkowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-18 00:00:00.000000000 Z
11
+ date: 2014-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lovely_rufus
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.26.0
117
+ version: 0.27.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.26.0
124
+ version: 0.27.0
125
125
  description: signore helps manage email signatures and select random ones based on
126
126
  their tags
127
127
  email: chastell@chastell.net
@@ -142,16 +142,19 @@ files:
142
142
  - lib/signore.rb
143
143
  - lib/signore/cli.rb
144
144
  - lib/signore/database.rb
145
+ - lib/signore/mapper.rb
145
146
  - lib/signore/settings.rb
146
147
  - lib/signore/sig_finder.rb
147
148
  - lib/signore/sig_from_stream.rb
148
149
  - lib/signore/signature.rb
149
150
  - lib/signore/tags.rb
150
151
  - signore.gemspec
152
+ - spec/fixtures/signatures.legacy.yml
151
153
  - spec/fixtures/signatures.yml
152
154
  - spec/fixtures/wrapper.yml
153
155
  - spec/signore/cli_spec.rb
154
156
  - spec/signore/database_spec.rb
157
+ - spec/signore/mapper_spec.rb
155
158
  - spec/signore/settings_spec.rb
156
159
  - spec/signore/sig_finder_spec.rb
157
160
  - spec/signore/sig_from_stream_spec.rb
@@ -184,6 +187,7 @@ summary: 'signore: an email signature manager/randomiser'
184
187
  test_files:
185
188
  - spec/signore/cli_spec.rb
186
189
  - spec/signore/database_spec.rb
190
+ - spec/signore/mapper_spec.rb
187
191
  - spec/signore/settings_spec.rb
188
192
  - spec/signore/sig_finder_spec.rb
189
193
  - spec/signore/sig_from_stream_spec.rb