signore 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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