signore 1.0.0 → 1.1.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
  SHA256:
3
- metadata.gz: 53a6bf3a2bc72020cf26754484238b4efb83028f771c395386e857a1916aea59
4
- data.tar.gz: 278acaae1aee55674c1b736367f77b848bdad91d70d9fd47ba103d1fd55a19be
3
+ metadata.gz: 3836fca9879726bbdd969adeb450e296799c3bbcbce890d3f00bae4381ae0fde
4
+ data.tar.gz: 5bbe4c90bd1f80dd63d6062a89f2708f9f92be3f4f69917c0f8fa00cb08454a3
5
5
  SHA512:
6
- metadata.gz: 3e5cce22deca6ff0ff82cda5297a301075a7549059849f26d993caf97c7cca1e265f89d02307ef90c748f0c390d78e07f7b70080e64810095caa196e3eab9c37
7
- data.tar.gz: 15abbffeb0e9cd013381dfc273c451c9630738d459dd1fab35d0268aa94ccbfba207676ecb04f2532e3fafc01d5aa4c9f234df6d478264b7cabe551efc8efde9
6
+ metadata.gz: e5e6381cb3b0067c61c8f8951528c166deeca50b2cdaf00aff640f42b3ab203fe4366925948cf20f0506a8b2a432028933020d1918d46548c9fe90e5a3a4a1b0
7
+ data.tar.gz: 72170f9b4ae8a52d92ac780fa2a581b87cdc5202cd613ea440506c582b5aefd69515c55f784da530b34201febb915b65e0780c18221bc8242c660ba63a6a6070
data/.rubocop.yml CHANGED
@@ -1,6 +1,10 @@
1
+ plugins:
2
+ - rubocop-minitest
3
+ - rubocop-rake
4
+
1
5
  AllCops:
2
6
  NewCops: enable
3
- TargetRubyVersion: 3.2
7
+ TargetRubyVersion: 3.4
4
8
 
5
9
  Bundler/GemFilename:
6
10
  Enabled: false
data/gems.locked CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- signore (0.7.0)
4
+ signore (1.0.0)
5
5
  lovely_rufus (~> 1.0)
6
+ pstore (~> 0.2.0)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -52,6 +53,7 @@ GEM
52
53
  ast (~> 2.4.1)
53
54
  racc
54
55
  prism (1.4.0)
56
+ pstore (0.2.0)
55
57
  racc (1.8.1)
56
58
  rainbow (3.1.1)
57
59
  rake (13.2.1)
@@ -77,11 +79,18 @@ GEM
77
79
  rubocop-ast (1.44.1)
78
80
  parser (>= 3.3.7.2)
79
81
  prism (~> 1.4)
82
+ rubocop-minitest (0.38.0)
83
+ lint_roller (~> 1.1)
84
+ rubocop (>= 1.75.0, < 2.0)
85
+ rubocop-ast (>= 1.38.0, < 2.0)
86
+ rubocop-rake (0.7.1)
87
+ lint_roller (~> 1.1)
88
+ rubocop (>= 1.72.1)
80
89
  ruby-progressbar (1.13.0)
81
90
  unicode-display_width (3.1.4)
82
91
  unicode-emoji (~> 4.0, >= 4.0.4)
83
92
  unicode-emoji (4.0.4)
84
- zeitwerk (2.7.2)
93
+ zeitwerk (2.7.3)
85
94
 
86
95
  PLATFORMS
87
96
  ruby
@@ -92,6 +101,8 @@ DEPENDENCIES
92
101
  rake (~> 13.0)
93
102
  reek (~> 6.0)
94
103
  rubocop (~> 1.0)
104
+ rubocop-minitest (~> 0.38.0)
105
+ rubocop-rake (~> 0.7.0)
95
106
  signore!
96
107
 
97
108
  BUNDLED WITH
data/lib/signore/repo.rb CHANGED
@@ -17,7 +17,6 @@ module Signore
17
17
 
18
18
  def initialize(path: self.class.default_path)
19
19
  @path = path
20
- convert if legacy?
21
20
  end
22
21
 
23
22
  def <<(signature)
@@ -34,14 +33,6 @@ module Signore
34
33
 
35
34
  attr_reader :path
36
35
 
37
- def convert
38
- self.hashes = hashes.map(&:to_h)
39
- end
40
-
41
- def legacy?
42
- path.exist? and path.read.include?('Signore::Signature')
43
- end
44
-
45
36
  def hashes
46
37
  store.transaction(true) { store.fetch('signatures', []) }
47
38
  end
@@ -3,9 +3,7 @@ require_relative 'tags'
3
3
 
4
4
  module Signore
5
5
  class SigFromStream
6
- def self.call(input, tags: Tags.new)
7
- new(input, tags: tags).call
8
- end
6
+ def self.call(input, tags: Tags.new) = new(input, tags:).call
9
7
 
10
8
  def initialize(input, tags: Tags.new)
11
9
  @input = input
@@ -27,7 +25,7 @@ module Signore
27
25
  def get_param(param)
28
26
  puts "\n#{param}?"
29
27
  separator = param == :text ? "\n\n" : "\n"
30
- input.gets(separator).strip
28
+ input.gets(separator).strip.gsub(/(?<=\p{L})'/, '’').tr("'", '‘')
31
29
  end
32
30
 
33
31
  def params
data/signore.gemspec CHANGED
@@ -10,20 +10,23 @@ Gem::Specification.new do |gem|
10
10
  gem.license = 'AGPL-3.0-or-later'
11
11
  gem.name = 'signore'
12
12
  gem.summary = 'signore: an email signature manager/randomiser'
13
- gem.version = '1.0.0'
13
+ gem.version = '1.1.0'
14
14
 
15
- gem.required_ruby_version = '~> 3.2'
15
+ gem.required_ruby_version = '~> 3.4'
16
16
 
17
17
  gem.files = `git ls-files -z`.split "\0"
18
18
  gem.executables = gem.files.grep(%r{^bin/}).map { |path| File.basename(path) }
19
19
 
20
20
  gem.add_dependency 'lovely_rufus', '~> 1.0'
21
+ gem.add_dependency 'pstore', '~> 0.2.0'
21
22
 
22
- gem.add_development_dependency 'minitest', '~> 5.6'
23
- gem.add_development_dependency 'minitest-focus', '~> 1.1'
24
- gem.add_development_dependency 'rake', '~> 13.0'
25
- gem.add_development_dependency 'reek', '~> 6.0'
26
- gem.add_development_dependency 'rubocop', '~> 1.0'
23
+ gem.add_development_dependency 'minitest', '~> 5.6'
24
+ gem.add_development_dependency 'minitest-focus', '~> 1.1'
25
+ gem.add_development_dependency 'rake', '~> 13.0'
26
+ gem.add_development_dependency 'reek', '~> 6.0'
27
+ gem.add_development_dependency 'rubocop', '~> 1.0'
28
+ gem.add_development_dependency 'rubocop-minitest', '~> 0.38.0'
29
+ gem.add_development_dependency 'rubocop-rake', '~> 0.7.0'
27
30
 
28
31
  gem.metadata['rubygems_mfa_required'] = 'true'
29
32
  end
@@ -31,14 +31,6 @@ module Signore
31
31
  end
32
32
  end
33
33
 
34
- describe '.new' do
35
- it 'rewrites legacy file to hashes on first access' do
36
- FileUtils.cp Pathname.new('test/fixtures/signatures.legacy.yml'), path
37
- Repo.new(path: path)
38
- _(path.read).wont_include 'Signore::Signature'
39
- end
40
- end
41
-
42
34
  describe '#<<' do
43
35
  let(:sig) { Signature.new(text: text) }
44
36
  let(:text) { 'Normaliser Unix c’est comme pasteuriser le camembert.' }
@@ -48,12 +40,6 @@ module Signore
48
40
  _(path.read).must_include text
49
41
  end
50
42
 
51
- it 'rewrites legacy YAML files on save' do
52
- FileUtils.cp Pathname.new('test/fixtures/signatures.legacy.yml'), path
53
- Repo.new(path: path) << sig
54
- _(path.read).wont_include 'Signore::Signature'
55
- end
56
-
57
43
  it 'handles edge cases' do
58
44
  sig = Signature.new(author: '000___000')
59
45
  Repo.new(path: path) << sig
@@ -62,12 +48,13 @@ module Signore
62
48
 
63
49
  describe '#empty?' do
64
50
  it 'is true when a repo is empty' do
65
- assert Repo.new(path: path).empty?
51
+ assert_predicate Repo.new(path: path), :empty?
66
52
  end
67
53
 
68
54
  it 'is false when a repo is not empty' do
69
- FileUtils.cp Pathname.new('test/fixtures/signatures.legacy.yml'), path
70
- refute Repo.new(path: path).empty?
55
+ FileUtils.cp Pathname.new('test/fixtures/signatures.yml'), path
56
+
57
+ refute_predicate Repo.new(path: path), :empty?
71
58
  end
72
59
  end
73
60
 
@@ -80,15 +67,6 @@ module Signore
80
67
  _(sigs.last.subject).must_equal 'Star Wars ending explained'
81
68
  end
82
69
 
83
- it 'keeps working with legacy YAML files' do
84
- legacy_path = Pathname.new('test/fixtures/signatures.legacy.yml')
85
- temp_path = Pathname.new(Tempfile.new.path)
86
- FileUtils.cp legacy_path, temp_path
87
- legacy_repo = Repo.new(path: temp_path)
88
- new_repo = Repo.new(path: Pathname.new('test/fixtures/signatures.yml'))
89
- _(legacy_repo.sigs).must_equal new_repo.sigs
90
- end
91
-
92
70
  it 'doesn’t blow up if the path is missing' do
93
71
  tempdir = Dir.mktmpdir
94
72
  path = Pathname.new("#{tempdir}/some_intermediate_dir/sigs.yml")
@@ -51,6 +51,16 @@ module Signore
51
51
  end
52
52
  _(sig).must_equal Signature.new(author: 'Patrick Ewing', text: text)
53
53
  end
54
+
55
+ it 'replaces apostrophes with proper quotation marks' do
56
+ simple = "There's no 'i' in 'denial'."
57
+ author = 'ʎoɟ ʎɹoɔ'
58
+ input = StringIO.new("#{simple}\n\n#{author}\n\n\n")
59
+ sig = nil
60
+ capture_io { sig = SigFromStream.call input }
61
+ text = 'There’s no ‘i’ in ‘denial’.'
62
+ _(sig).must_equal Signature.new(author:, text:)
63
+ end
54
64
  end
55
65
  end
56
66
  end
@@ -42,11 +42,11 @@ module Signore # rubocop:disable Metrics/ModuleLength
42
42
 
43
43
  describe '#empty?' do
44
44
  it 'is true when the Signature is a null object' do
45
- assert Signature.new.empty?
45
+ assert_predicate Signature.new, :empty?
46
46
  end
47
47
 
48
48
  it 'is false when the Signature has some text' do
49
- refute Signature.new(text: 'Node.jk').empty?
49
+ refute_predicate Signature.new(text: 'Node.jk'), :empty?
50
50
  end
51
51
  end
52
52
 
@@ -62,7 +62,7 @@ module Signore # rubocop:disable Metrics/ModuleLength
62
62
  end
63
63
 
64
64
  it 'removes non-existing keys' do
65
- assert Signature.new.to_h.empty?
65
+ assert_predicate Signature.new.to_h, :empty?
66
66
  end
67
67
  end
68
68
 
@@ -3,9 +3,11 @@ require_relative '../../lib/signore/tags'
3
3
 
4
4
  module Signore
5
5
  describe Tags do
6
+ # rubocop:disable Minitest/AssertMatch, Minitest/RefuteMatch
6
7
  describe '#match?' do
7
8
  it 'is a predicate whether the Tags match the given list of tags' do
8
9
  tags = %w[programming tech]
10
+
9
11
  assert Tags.new.match?([])
10
12
  assert Tags.new(forbidden: %w[fnord]).match?([])
11
13
  assert Tags.new.match?(tags)
@@ -16,6 +18,7 @@ module Signore
16
18
  refute Tags.new(forbidden: %w[tech], required: %w[tech]).match?(tags)
17
19
  end
18
20
  end
21
+ # rubocop:enable Minitest/AssertMatch, Minitest/RefuteMatch
19
22
 
20
23
  describe '#to_s' do
21
24
  it 'returns a CLI-like representation of the Tags' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: signore
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Szotkowski
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '1.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: pstore
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 0.2.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.2.0
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: minitest
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -93,6 +107,34 @@ dependencies:
93
107
  - - "~>"
94
108
  - !ruby/object:Gem::Version
95
109
  version: '1.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rubocop-minitest
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 0.38.0
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 0.38.0
124
+ - !ruby/object:Gem::Dependency
125
+ name: rubocop-rake
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 0.7.0
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 0.7.0
96
138
  description: signore helps manage email signatures and select random ones based on
97
139
  their tags
98
140
  email: chastell@chastell.net
@@ -101,11 +143,8 @@ executables:
101
143
  extensions: []
102
144
  extra_rdoc_files: []
103
145
  files:
104
- - ".overcommit.yml"
105
146
  - ".reek.yml"
106
147
  - ".rubocop.yml"
107
- - ".tool-versions"
108
- - ".travis.yml"
109
148
  - LICENCE
110
149
  - README.md
111
150
  - Rakefile
@@ -122,7 +161,6 @@ files:
122
161
  - lib/signore/tags.rb
123
162
  - signore.gemspec
124
163
  - test/fixtures/nosignatures.yml
125
- - test/fixtures/signatures.legacy.yml
126
164
  - test/fixtures/signatures.yml
127
165
  - test/fixtures/wrapper.yml
128
166
  - test/signore/cli_test.rb
@@ -145,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
183
  requirements:
146
184
  - - "~>"
147
185
  - !ruby/object:Gem::Version
148
- version: '3.2'
186
+ version: '3.4'
149
187
  required_rubygems_version: !ruby/object:Gem::Requirement
150
188
  requirements:
151
189
  - - ">="
data/.overcommit.yml DELETED
@@ -1,4 +0,0 @@
1
- PreCommit:
2
- RakeTarget:
3
- enabled: true
4
- targets: [default]
data/.tool-versions DELETED
@@ -1 +0,0 @@
1
- ruby 2.6.1
data/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- before_install:
2
- - gem update --system
3
- - gem install bundler
4
- - bundle
5
- language: ruby
6
- matrix:
7
- allow_failures:
8
- - rvm: ruby-head
9
- rvm:
10
- - 2.5
11
- - 2.6
12
- - ruby-head
@@ -1,23 +0,0 @@
1
- signatures:
2
- - !ruby/struct:Signore::Signature
3
- text: You do have to be mad to work here, but it doesn’t help.
4
- author: Gary Barnes
5
- source: asr
6
- tags: [tech, work]
7
- - !ruby/struct:Signore::Signature
8
- text: More gangland camp than neo-noir.
9
- author: Nicholas Christopher
10
- subject: on Pulp Fiction
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