signore 0.4.2 → 0.5.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.reek +0 -8
- data/.rubocop.yml +7 -1
- data/.ruby-version +1 -1
- data/.travis.yml +6 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +48 -60
- data/README.md +1 -8
- data/Rakefile +3 -0
- data/bin/signore +1 -0
- data/certs/chastell.pem +21 -0
- data/lib/signore/cli.rb +14 -7
- data/lib/signore/mapper.rb +2 -0
- data/lib/signore/repo.rb +22 -11
- data/lib/signore/settings.rb +6 -10
- data/lib/signore/sig_finder.rb +11 -3
- data/lib/signore/sig_from_stream.rb +14 -8
- data/lib/signore/signature.rb +13 -6
- data/lib/signore/tags.rb +6 -1
- data/lib/signore.rb +2 -1
- data/signore.gemspec +16 -7
- data/test/fixtures/nosignatures.yml +2 -0
- data/test/fixtures/signatures.legacy.yml +4 -4
- data/test/fixtures/signatures.yml +3 -3
- data/test/signore/cli_test.rb +18 -0
- data/test/signore/mapper_test.rb +2 -0
- data/test/signore/repo_test.rb +30 -7
- data/test/signore/settings_test.rb +2 -0
- data/test/signore/sig_finder_test.rb +14 -10
- data/test/signore/sig_from_stream_test.rb +5 -4
- data/test/signore/signature_test.rb +22 -11
- data/test/signore/tags_test.rb +14 -2
- data/test/test_helper.rb +2 -0
- data.tar.gz.sig +1 -0
- metadata +38 -29
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c1a5292cb375e7c9e5a675459999789ef30c0dfd
|
|
4
|
+
data.tar.gz: b8c56a2de499328fd5eda249ba20f88f2ddb89db
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bb841f115b6c3368e4c26871e98873dfb344f708f81a7cdf644cd0a8a098559ed702e744ffd8938b748d7ba6e4db74d459124a8ecfbdec27f77a94b10861300a
|
|
7
|
+
data.tar.gz: 1c5e087bd48151c54c9c118c1d7e44f42c1f8f20abdf6f79e230d98c0de27aedbdee6f6419952d06d829365692e525f28c82283ae9b5a2cdfa0dd8507eaf3e77
|
checksums.yaml.gz.sig
ADDED
|
Binary file
|
data/.reek
CHANGED
data/.rubocop.yml
CHANGED
|
@@ -4,8 +4,14 @@ Style/AndOr:
|
|
|
4
4
|
Style/Documentation:
|
|
5
5
|
Enabled: false
|
|
6
6
|
|
|
7
|
+
Style/EmptyCaseCondition:
|
|
8
|
+
Enabled: false
|
|
9
|
+
|
|
7
10
|
Style/Not:
|
|
8
11
|
Enabled: false
|
|
9
12
|
|
|
10
|
-
Style/
|
|
13
|
+
Style/TrailingCommaInArguments:
|
|
14
|
+
EnforcedStyleForMultiline: comma
|
|
15
|
+
|
|
16
|
+
Style/TrailingCommaInLiteral:
|
|
11
17
|
EnforcedStyleForMultiline: comma
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.3
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -2,77 +2,65 @@ PATH
|
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
4
|
signore (0.4.2)
|
|
5
|
-
lovely_rufus (~>
|
|
6
|
-
private_attr (~> 1.1)
|
|
5
|
+
lovely_rufus (~> 1.0)
|
|
7
6
|
|
|
8
7
|
GEM
|
|
9
8
|
remote: https://rubygems.org/
|
|
10
9
|
specs:
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
ast (2.3.0)
|
|
11
|
+
axiom-types (0.1.1)
|
|
12
|
+
descendants_tracker (~> 0.0.4)
|
|
13
13
|
ice_nine (~> 0.11.0)
|
|
14
|
-
|
|
15
|
-
ast (2.0.0)
|
|
16
|
-
astrolabe (1.3.1)
|
|
17
|
-
parser (~> 2.2)
|
|
14
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
|
18
15
|
bogus (0.1.6)
|
|
19
16
|
dependor (>= 0.0.4)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
equalizer (~> 0.0.9)
|
|
17
|
+
codeclimate-engine-rb (0.3.1)
|
|
18
|
+
virtus (~> 1.0)
|
|
19
|
+
coercible (1.0.0)
|
|
20
|
+
descendants_tracker (~> 0.0.1)
|
|
25
21
|
dependor (1.0.1)
|
|
26
|
-
|
|
27
|
-
equalizer (0.0.11)
|
|
28
|
-
ffi (1.9.10)
|
|
29
|
-
hitimes (1.2.2)
|
|
30
|
-
ice_nine (0.11.1)
|
|
31
|
-
listen (2.10.1)
|
|
32
|
-
celluloid (~> 0.16.0)
|
|
33
|
-
rb-fsevent (>= 0.9.3)
|
|
34
|
-
rb-inotify (>= 0.9)
|
|
35
|
-
lovely_rufus (0.3.1)
|
|
36
|
-
private_attr (~> 1.0)
|
|
37
|
-
memoizable (0.4.2)
|
|
22
|
+
descendants_tracker (0.0.4)
|
|
38
23
|
thread_safe (~> 0.3, >= 0.3.1)
|
|
39
|
-
|
|
40
|
-
|
|
24
|
+
equalizer (0.0.11)
|
|
25
|
+
ffi (1.9.14)
|
|
26
|
+
ice_nine (0.11.2)
|
|
27
|
+
listen (3.1.5)
|
|
28
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
29
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
|
30
|
+
ruby_dep (~> 1.2)
|
|
31
|
+
lovely_rufus (1.0.1)
|
|
32
|
+
minitest (5.9.0)
|
|
33
|
+
minitest-focus (1.1.2)
|
|
41
34
|
minitest (>= 4, < 6)
|
|
42
|
-
parser (2.
|
|
43
|
-
ast (
|
|
35
|
+
parser (2.3.1.2)
|
|
36
|
+
ast (~> 2.2)
|
|
44
37
|
powerpack (0.1.1)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
rb-fsevent (0.9.5)
|
|
50
|
-
rb-inotify (0.9.5)
|
|
38
|
+
rainbow (2.1.0)
|
|
39
|
+
rake (11.2.2)
|
|
40
|
+
rb-fsevent (0.9.7)
|
|
41
|
+
rb-inotify (0.9.7)
|
|
51
42
|
ffi (>= 0.5.0)
|
|
52
|
-
reek (
|
|
53
|
-
|
|
43
|
+
reek (4.4.0)
|
|
44
|
+
codeclimate-engine-rb (~> 0.3.1)
|
|
45
|
+
parser (~> 2.3.1, >= 2.3.1.2)
|
|
54
46
|
rainbow (~> 2.0)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
astrolabe (~> 1.3)
|
|
60
|
-
parser (>= 2.2.2.5, < 3.0)
|
|
47
|
+
rerun (0.11.0)
|
|
48
|
+
listen (~> 3.0)
|
|
49
|
+
rubocop (0.42.0)
|
|
50
|
+
parser (>= 2.3.1.1, < 3.0)
|
|
61
51
|
powerpack (~> 0.1)
|
|
62
52
|
rainbow (>= 1.99.1, < 3.0)
|
|
63
|
-
ruby-progressbar (~> 1.
|
|
64
|
-
|
|
53
|
+
ruby-progressbar (~> 1.7)
|
|
54
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
55
|
+
ruby-progressbar (1.8.1)
|
|
56
|
+
ruby_dep (1.4.0)
|
|
65
57
|
thread_safe (0.3.5)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
diff-lcs (~> 1.2.5)
|
|
73
|
-
equalizer (~> 0.0.9)
|
|
74
|
-
parser (~> 2.2.2)
|
|
75
|
-
procto (~> 0.0.2)
|
|
58
|
+
unicode-display_width (1.1.0)
|
|
59
|
+
virtus (1.0.5)
|
|
60
|
+
axiom-types (~> 0.1)
|
|
61
|
+
coercible (~> 1.0)
|
|
62
|
+
descendants_tracker (~> 0.0, >= 0.0.3)
|
|
63
|
+
equalizer (~> 0.0, >= 0.0.9)
|
|
76
64
|
|
|
77
65
|
PLATFORMS
|
|
78
66
|
ruby
|
|
@@ -81,11 +69,11 @@ DEPENDENCIES
|
|
|
81
69
|
bogus (~> 0.1.3)
|
|
82
70
|
minitest (~> 5.6)
|
|
83
71
|
minitest-focus (~> 1.1)
|
|
84
|
-
rake (~>
|
|
85
|
-
reek (~>
|
|
86
|
-
rerun (~> 0.
|
|
87
|
-
rubocop (~> 0.
|
|
72
|
+
rake (~> 11.0)
|
|
73
|
+
reek (~> 4.0)
|
|
74
|
+
rerun (~> 0.11.0)
|
|
75
|
+
rubocop (~> 0.42.0)
|
|
88
76
|
signore!
|
|
89
77
|
|
|
90
78
|
BUNDLED WITH
|
|
91
|
-
1.
|
|
79
|
+
1.12.1
|
data/README.md
CHANGED
|
@@ -84,13 +84,6 @@ signore stores the signatures in a YAML file (for ease of editing, if such a nee
|
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
|
|
87
|
-
Requirements
|
|
88
|
-
------------
|
|
89
|
-
|
|
90
|
-
signore requires Ruby 1.9 and works best with Ruby 1.9.2 compiled with Psych (for sanity when hand-editing the YAML file, if it happens to sport non-US-ASCII characters).
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
87
|
---
|
|
95
88
|
|
|
96
|
-
© MMIX-
|
|
89
|
+
© MMIX-MMXV Piotr Szotkowski <chastell@chastell.net>, licensed under AGPL-3.0 (see LICENCE)
|
data/Rakefile
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'rake/testtask'
|
|
2
4
|
require 'reek/rake/task'
|
|
3
5
|
require 'rubocop/rake_task'
|
|
@@ -11,6 +13,7 @@ end
|
|
|
11
13
|
|
|
12
14
|
Reek::Rake::Task.new do |task|
|
|
13
15
|
task.fail_on_error = false
|
|
16
|
+
task.reek_opts = '--no-wiki-links'
|
|
14
17
|
end
|
|
15
18
|
|
|
16
19
|
RuboCop::RakeTask.new do |task|
|
data/bin/signore
CHANGED
data/certs/chastell.pem
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDfDCCAmSgAwIBAgIBATANBgkqhkiG9w0BAQUFADBCMREwDwYDVQQDDAhjaGFz
|
|
3
|
+
dGVsbDEYMBYGCgmSJomT8ixkARkWCGNoYXN0ZWxsMRMwEQYKCZImiZPyLGQBGRYD
|
|
4
|
+
bmV0MB4XDTE1MTEwOTIxMTMwOVoXDTE2MTEwODIxMTMwOVowQjERMA8GA1UEAwwI
|
|
5
|
+
Y2hhc3RlbGwxGDAWBgoJkiaJk/IsZAEZFghjaGFzdGVsbDETMBEGCgmSJomT8ixk
|
|
6
|
+
ARkWA25ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcf6OF3mi6D
|
|
7
|
+
UedwY2A6fYEQF2bJVYQxV8fWHA5Q2R6y7Eg0hM80Q0yod7pJxlJTpnAPzuIl1u4y
|
|
8
|
+
hhfa/Vz0u6PVRhBYQ/Bcj9UEwgiXcy3P4ybINDeDt7GRVs3R9rRoT1aAsb5RCS0z
|
|
9
|
+
u/JKS2RcAS5XPpFow3Cfs5A/pM2NLsR/zeiaKg8rRB59A/tWw26F+YTaWfPAPFGv
|
|
10
|
+
d6af29NKWQh+EPkX1JwwtSwjKfVOeFr0csC6QLWKpp1z/7Lla8d3px426Ccjca0I
|
|
11
|
+
5VwtQeZ5LClTjqaYyH7vSojpOtgRuvVKspZ2jfe1KZq9jz//a/rSUrFcPlEQuXQp
|
|
12
|
+
i8E3TKoJrW0CAwEAAaN9MHswCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
|
|
13
|
+
BBYEFLi/J921Nb53s8GKtKptC08QmHnwMCAGA1UdEQQZMBeBFWNoYXN0ZWxsQGNo
|
|
14
|
+
YXN0ZWxsLm5ldDAgBgNVHRIEGTAXgRVjaGFzdGVsbEBjaGFzdGVsbC5uZXQwDQYJ
|
|
15
|
+
KoZIhvcNAQEFBQADggEBAA+rUbXujzqDv8WE7kkiJadQhxldq/cRhaJDMKSWF3/H
|
|
16
|
+
6PL/Me8zq8Ok7/pQtxBvAhKcy3DdsH0q5pyPHoMrYySxEo9lNXLvwCPsi21rR53b
|
|
17
|
+
2w5rBytYCxrhsXISKwCkBYwVwtICafZ8VtRbD3pgnsPv+9NYJJ/rN4Z34doWM7oK
|
|
18
|
+
CAfY6o0LcY+qmvqLvqpweyoO73wkfKGUSz1a09dJfAP5aIREQDvpYrWx2ZoDrAct
|
|
19
|
+
srwnZ6g5uTvNbd0I1SnvnCJJ5y5iPvJIBlnGb3QZ77y2XXCOy3Yc0rjK7A8bQt5t
|
|
20
|
+
xOlyYMPKhWx2IqEip+J7PBpBwMnxIPhTcNlFOj8mSa0=
|
|
21
|
+
-----END CERTIFICATE-----
|
data/lib/signore/cli.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'forwardable'
|
|
2
4
|
require_relative 'repo'
|
|
3
5
|
require_relative 'settings'
|
|
@@ -16,22 +18,27 @@ module Signore
|
|
|
16
18
|
|
|
17
19
|
def run(input: $stdin)
|
|
18
20
|
case action
|
|
19
|
-
when 'prego' then
|
|
21
|
+
when 'prego' then prego
|
|
20
22
|
when 'pronto' then puts create_sig_from(input)
|
|
21
23
|
else abort 'usage: signore prego|pronto [tag, …]'
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
|
|
25
|
-
private_attr_reader :repo, :settings
|
|
26
|
-
|
|
27
27
|
private
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
attr_reader :repo, :settings
|
|
30
|
+
|
|
31
|
+
def prego
|
|
32
|
+
sig = repo.find(tags: tags)
|
|
33
|
+
puts case
|
|
34
|
+
when repo.empty? then 'No signatures found.'
|
|
35
|
+
when sig.empty? then "Sadly no signatures are tagged #{tags}."
|
|
36
|
+
else sig
|
|
37
|
+
end
|
|
31
38
|
end
|
|
32
39
|
|
|
33
|
-
def
|
|
34
|
-
|
|
40
|
+
def create_sig_from(input)
|
|
41
|
+
SigFromStream.sig_from(input, tags: tags).tap { |sig| repo << sig }
|
|
35
42
|
end
|
|
36
43
|
end
|
|
37
44
|
end
|
data/lib/signore/mapper.rb
CHANGED
data/lib/signore/repo.rb
CHANGED
|
@@ -1,40 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'forwardable'
|
|
1
4
|
require 'yaml/store'
|
|
2
5
|
require_relative 'mapper'
|
|
3
6
|
require_relative 'settings'
|
|
4
7
|
require_relative 'sig_finder'
|
|
5
|
-
require_relative 'signature'
|
|
6
8
|
require_relative 'tags'
|
|
7
9
|
|
|
8
10
|
module Signore
|
|
9
11
|
class Repo
|
|
10
|
-
|
|
12
|
+
extend Forwardable
|
|
13
|
+
|
|
14
|
+
def initialize(path: Settings.new.repo_path, sig_finder: SigFinder.new)
|
|
11
15
|
@path = path
|
|
12
16
|
@sig_finder = sig_finder
|
|
17
|
+
convert if legacy?
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
def <<(sig)
|
|
16
|
-
|
|
17
|
-
persist
|
|
21
|
+
store.transaction { (store['signatures'] ||= []) << Mapper.to_h(sig) }
|
|
18
22
|
end
|
|
19
23
|
|
|
24
|
+
delegate empty?: :sigs
|
|
25
|
+
|
|
20
26
|
def find(tags: Tags.new)
|
|
21
27
|
sig_finder.find(sigs, tags: tags)
|
|
22
28
|
end
|
|
23
29
|
|
|
24
30
|
def sigs
|
|
25
31
|
@sigs ||= begin
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
hashes = store.transaction(true) { store.fetch('signatures', []) }
|
|
33
|
+
hashes.map(&Mapper.method(:from_h))
|
|
28
34
|
end
|
|
29
35
|
end
|
|
30
36
|
|
|
31
|
-
private_attr_reader :path, :sig_finder
|
|
32
|
-
|
|
33
37
|
private
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
attr_reader :path, :sig_finder
|
|
40
|
+
|
|
41
|
+
def convert
|
|
42
|
+
store.transaction do
|
|
43
|
+
store['signatures'] = store.fetch('signatures', []).map(&:to_h)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def legacy?
|
|
48
|
+
path.exist? and path.read.include?('Signore::Signature')
|
|
38
49
|
end
|
|
39
50
|
|
|
40
51
|
def store
|
data/lib/signore/settings.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'pathname'
|
|
2
4
|
require_relative 'tags'
|
|
3
5
|
|
|
@@ -11,26 +13,20 @@ module Signore
|
|
|
11
13
|
args.first
|
|
12
14
|
end
|
|
13
15
|
|
|
16
|
+
# :reek:UtilityFunction
|
|
14
17
|
def repo_path
|
|
15
18
|
dir = ENV.fetch('XDG_DATA_HOME') { File.expand_path('~/.local/share') }
|
|
16
19
|
Pathname.new("#{dir}/signore/signatures.yml")
|
|
17
20
|
end
|
|
18
21
|
|
|
19
22
|
def tags
|
|
20
|
-
|
|
23
|
+
negated, required = tag_names.partition { |name| name.start_with?('~') }
|
|
24
|
+
Tags.new(forbidden: negated.map { |neg| neg[1..-1] }, required: required)
|
|
21
25
|
end
|
|
22
26
|
|
|
23
|
-
private_attr_reader :args
|
|
24
|
-
|
|
25
27
|
private
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
tag_names.select { |tag| tag.start_with?('~') }.map { |tag| tag[1..-1] }
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def required
|
|
32
|
-
tag_names.reject { |tag| tag.start_with?('~') }
|
|
33
|
-
end
|
|
29
|
+
attr_reader :args
|
|
34
30
|
|
|
35
31
|
def tag_names
|
|
36
32
|
args[1..-1] or []
|
data/lib/signore/sig_finder.rb
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require_relative 'signature'
|
|
2
4
|
require_relative 'tags'
|
|
3
5
|
|
|
4
6
|
module Signore
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
class SigFinder
|
|
8
|
+
def initialize(random: Random.new)
|
|
9
|
+
@random = random
|
|
10
|
+
end
|
|
7
11
|
|
|
8
|
-
def find(sigs,
|
|
12
|
+
def find(sigs, tags: Tags.new)
|
|
9
13
|
shuffled = sigs.shuffle(random: random)
|
|
10
14
|
shuffled.find(-> { Signature.new }) { |sig| tags.match?(sig.tags) }
|
|
11
15
|
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
attr_reader :random
|
|
12
20
|
end
|
|
13
21
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require_relative 'signature'
|
|
2
4
|
require_relative 'tags'
|
|
3
5
|
|
|
4
6
|
module Signore
|
|
5
7
|
class SigFromStream
|
|
6
|
-
Params = Struct.new(*%i(text author subject source))
|
|
7
|
-
|
|
8
8
|
def self.sig_from(input, tags: Tags.new)
|
|
9
9
|
new(input, tags: tags).to_sig
|
|
10
10
|
end
|
|
@@ -20,19 +20,25 @@ module Signore
|
|
|
20
20
|
text: params.text)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
private_attr_reader :input, :tags
|
|
24
|
-
|
|
25
23
|
private
|
|
26
24
|
|
|
25
|
+
attr_reader :input, :tags
|
|
26
|
+
|
|
27
|
+
Params = Struct.new(*%i(text author subject source))
|
|
28
|
+
|
|
27
29
|
def get_param(param)
|
|
28
30
|
puts "#{param}?"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
param == :text ? multiline : input.gets.strip
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def multiline
|
|
35
|
+
value = ''
|
|
36
|
+
value += input.gets until value.lines.to_a.last == "\n"
|
|
37
|
+
value.strip
|
|
32
38
|
end
|
|
33
39
|
|
|
34
40
|
def params
|
|
35
|
-
@params ||= Params.new(*Params.members.map
|
|
41
|
+
@params ||= Params.new(*Params.members.map(&method(:get_param)))
|
|
36
42
|
end
|
|
37
43
|
end
|
|
38
44
|
end
|
data/lib/signore/signature.rb
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'lovely_rufus'
|
|
2
4
|
|
|
3
5
|
module Signore
|
|
4
6
|
Signature = Struct.new(*%i(text author source subject tags)) do
|
|
5
|
-
def initialize(author:
|
|
7
|
+
def initialize(author: '', source: '', subject: '', tags: [], text: '')
|
|
6
8
|
super text, author, source, subject, tags
|
|
7
|
-
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def empty?
|
|
12
|
+
to_s.empty?
|
|
8
13
|
end
|
|
9
14
|
|
|
10
15
|
undef text if defined?(:text)
|
|
@@ -13,7 +18,9 @@ module Signore
|
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
def to_h
|
|
16
|
-
super.map { |key, val| [key.to_s, val] }.to_h.keep_if
|
|
21
|
+
super.map { |key, val| [key.to_s, val] }.to_h.keep_if do |_, value|
|
|
22
|
+
value and not value.empty?
|
|
23
|
+
end
|
|
17
24
|
end
|
|
18
25
|
|
|
19
26
|
def to_s
|
|
@@ -27,12 +34,12 @@ module Signore
|
|
|
27
34
|
|
|
28
35
|
def indent_size_for(text)
|
|
29
36
|
indent = text.split("\n").map(&:size).max - meta.size - 2
|
|
30
|
-
indent
|
|
37
|
+
indent.negative? ? 0 : indent
|
|
31
38
|
end
|
|
32
39
|
|
|
33
40
|
def meta
|
|
34
|
-
stem = [author, subject].
|
|
35
|
-
|
|
41
|
+
stem = [author, subject].reject(&:empty?).join(' ')
|
|
42
|
+
[stem, source].reject(&:empty?).join(', ')
|
|
36
43
|
end
|
|
37
44
|
|
|
38
45
|
def meta_for(text)
|
data/lib/signore/tags.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Signore
|
|
2
4
|
Tags = Struct.new(:forbidden, :required) do
|
|
3
5
|
def initialize(forbidden: [], required: [])
|
|
@@ -5,8 +7,11 @@ module Signore
|
|
|
5
7
|
end
|
|
6
8
|
|
|
7
9
|
def match?(sig_tags)
|
|
8
|
-
sig_tags ||= []
|
|
9
10
|
(required & sig_tags) == required and (forbidden & sig_tags).empty?
|
|
10
11
|
end
|
|
12
|
+
|
|
13
|
+
def to_s
|
|
14
|
+
(required + forbidden.map { |tag| '~' + tag }).join(' ')
|
|
15
|
+
end
|
|
11
16
|
end
|
|
12
17
|
end
|
data/lib/signore.rb
CHANGED
data/signore.gemspec
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'English'
|
|
4
|
+
require 'pathname'
|
|
5
|
+
|
|
1
6
|
Gem::Specification.new do |gem|
|
|
2
7
|
gem.author = 'Piotr Szotkowski'
|
|
3
8
|
gem.description = 'signore helps manage email signatures and select ' \
|
|
@@ -7,7 +12,7 @@ Gem::Specification.new do |gem|
|
|
|
7
12
|
gem.license = 'AGPL-3.0'
|
|
8
13
|
gem.name = 'signore'
|
|
9
14
|
gem.summary = 'signore: an email signature manager/randomiser'
|
|
10
|
-
gem.version = '0.
|
|
15
|
+
gem.version = '0.5.0'
|
|
11
16
|
|
|
12
17
|
gem.required_ruby_version = '~> 2.1'
|
|
13
18
|
|
|
@@ -15,14 +20,18 @@ Gem::Specification.new do |gem|
|
|
|
15
20
|
gem.executables = gem.files.grep(%r{^bin/}).map { |path| File.basename(path) }
|
|
16
21
|
gem.test_files = gem.files.grep(%r{^test/.*\.rb$})
|
|
17
22
|
|
|
18
|
-
gem.
|
|
19
|
-
|
|
23
|
+
gem.cert_chain = ['certs/chastell.pem']
|
|
24
|
+
if Pathname.new($PROGRAM_NAME).basename == Pathname.new('gem')
|
|
25
|
+
gem.signing_key = Pathname.new('~/.ssh/gem-private_key.pem').expand_path
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
gem.add_dependency 'lovely_rufus', '~> 1.0'
|
|
20
29
|
|
|
21
30
|
gem.add_development_dependency 'bogus', '~> 0.1.3'
|
|
22
31
|
gem.add_development_dependency 'minitest', '~> 5.6'
|
|
23
32
|
gem.add_development_dependency 'minitest-focus', '~> 1.1'
|
|
24
|
-
gem.add_development_dependency 'rake', '~>
|
|
25
|
-
gem.add_development_dependency 'reek', '~>
|
|
26
|
-
gem.add_development_dependency 'rerun', '~> 0.
|
|
27
|
-
gem.add_development_dependency 'rubocop', '~> 0.
|
|
33
|
+
gem.add_development_dependency 'rake', '~> 11.0'
|
|
34
|
+
gem.add_development_dependency 'reek', '~> 4.0'
|
|
35
|
+
gem.add_development_dependency 'rerun', '~> 0.11.0'
|
|
36
|
+
gem.add_development_dependency 'rubocop', '~> 0.42.0'
|
|
28
37
|
end
|
|
@@ -1,13 +1,13 @@
|
|
|
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.
|
|
4
|
-
author: Clive James
|
|
5
|
-
subject: on Marilyn Monroe
|
|
6
2
|
- !ruby/struct:Signore::Signature
|
|
7
3
|
text: You do have to be mad to work here, but it doesn’t help.
|
|
8
4
|
author: Gary Barnes
|
|
9
5
|
source: asr
|
|
10
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
11
|
- !ruby/struct:Signore::Signature
|
|
12
12
|
text: // sometimes I believe compiler ignores all my comments
|
|
13
13
|
tags: [programming, tech]
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
signatures:
|
|
2
|
-
- text: She was good at playing abstract confusion in the same way a midget is good at being short.
|
|
3
|
-
author: Clive James
|
|
4
|
-
subject: on Marilyn Monroe
|
|
5
2
|
- text: You do have to be mad to work here, but it doesn’t help.
|
|
6
3
|
author: Gary Barnes
|
|
7
4
|
source: asr
|
|
8
5
|
tags: [tech, work]
|
|
6
|
+
- text: More gangland camp than neo-noir.
|
|
7
|
+
author: Nicholas Christopher
|
|
8
|
+
subject: on Pulp Fiction
|
|
9
9
|
- text: // sometimes I believe compiler ignores all my comments
|
|
10
10
|
tags: [programming, tech]
|
|
11
11
|
- text: Bruce Schneier knows Alice and Bob’s shared secret.
|
data/test/signore/cli_test.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'pathname'
|
|
2
4
|
require 'stringio'
|
|
3
5
|
require 'tempfile'
|
|
@@ -37,6 +39,22 @@ module Signore
|
|
|
37
39
|
[Gary Barnes, asr]
|
|
38
40
|
end
|
|
39
41
|
end
|
|
42
|
+
|
|
43
|
+
it 'tells the user if no signatures are found' do
|
|
44
|
+
path = Pathname.new('test/fixtures/nosignatures.yml')
|
|
45
|
+
repo = Repo.new(path: path)
|
|
46
|
+
args = %w(prego)
|
|
47
|
+
out = capture_io { CLI.new(args, repo: repo).run }.first
|
|
48
|
+
_(out).must_include 'No signatures found.'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'tells the user if no signatures with selected tag are found' do
|
|
52
|
+
path = Pathname.new('test/fixtures/signatures.yml')
|
|
53
|
+
repo = Repo.new(path: path)
|
|
54
|
+
args = %w(prego esse ~percipi)
|
|
55
|
+
out = capture_io { CLI.new(args, repo: repo).run }.first
|
|
56
|
+
_(out).must_include 'Sadly no signatures are tagged esse ~percipi.'
|
|
57
|
+
end
|
|
40
58
|
end
|
|
41
59
|
|
|
42
60
|
describe 'pronto' do
|
data/test/signore/mapper_test.rb
CHANGED
data/test/signore/repo_test.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'fileutils'
|
|
2
4
|
require 'pathname'
|
|
3
5
|
require 'tempfile'
|
|
@@ -9,8 +11,17 @@ require_relative '../../lib/signore/tags'
|
|
|
9
11
|
|
|
10
12
|
module Signore
|
|
11
13
|
describe Repo do
|
|
14
|
+
let(:path) { Pathname.new(Tempfile.new('').path) }
|
|
15
|
+
|
|
16
|
+
describe '.new' do
|
|
17
|
+
it 'rewrites legacy file to hashes on first access' do
|
|
18
|
+
FileUtils.cp Pathname.new('test/fixtures/signatures.legacy.yml'), path
|
|
19
|
+
Repo.new(path: path)
|
|
20
|
+
_(path.read).wont_include 'Signore::Signature'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
12
24
|
describe '#<<' do
|
|
13
|
-
let(:path) { Pathname.new(Tempfile.new('').path) }
|
|
14
25
|
let(:sig) { Signature.new(text: text) }
|
|
15
26
|
let(:text) { 'Normaliser Unix c’est comme pasteuriser le camembert.' }
|
|
16
27
|
|
|
@@ -26,10 +37,21 @@ module Signore
|
|
|
26
37
|
end
|
|
27
38
|
end
|
|
28
39
|
|
|
40
|
+
describe '#empty?' do
|
|
41
|
+
it 'is true when a repo is empty' do
|
|
42
|
+
assert Repo.new(path: path).empty?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'is false when a repo is not empty' do
|
|
46
|
+
FileUtils.cp Pathname.new('test/fixtures/signatures.legacy.yml'), path
|
|
47
|
+
refute Repo.new(path: path).empty?
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
29
51
|
describe '#find' do
|
|
30
52
|
let(:path) { Pathname.new('test/fixtures/signatures.yml') }
|
|
31
53
|
let(:repo) { Repo.new(path: path, sig_finder: sig_finder) }
|
|
32
|
-
let(:sig_finder) { fake(
|
|
54
|
+
let(:sig_finder) { fake(SigFinder) }
|
|
33
55
|
let(:sigs) { repo.sigs }
|
|
34
56
|
let(:store) { YAML::Store.new(path) }
|
|
35
57
|
|
|
@@ -39,9 +61,9 @@ module Signore
|
|
|
39
61
|
end
|
|
40
62
|
|
|
41
63
|
it 'returns a random signature based on required and forbidden tags' do
|
|
42
|
-
tags = Tags.new(forbidden: %w(
|
|
43
|
-
stub(sig_finder).find(sigs, tags: tags) { sigs.
|
|
44
|
-
_(repo.find(tags: tags)).must_equal sigs.
|
|
64
|
+
tags = Tags.new(forbidden: %w(programming security), required: %w(tech))
|
|
65
|
+
stub(sig_finder).find(sigs, tags: tags) { sigs.first }
|
|
66
|
+
_(repo.find(tags: tags)).must_equal sigs.first
|
|
45
67
|
end
|
|
46
68
|
|
|
47
69
|
it 'doesn’t blow up if the path is missing' do
|
|
@@ -55,7 +77,8 @@ module Signore
|
|
|
55
77
|
end
|
|
56
78
|
|
|
57
79
|
it 'keeps working with legacy YAML files' do
|
|
58
|
-
path = Pathname.new(
|
|
80
|
+
path = Pathname.new(Tempfile.new('').path)
|
|
81
|
+
FileUtils.cp Pathname.new('test/fixtures/signatures.legacy.yml'), path
|
|
59
82
|
repo = Repo.new(path: path, sig_finder: sig_finder)
|
|
60
83
|
stub(sig_finder).find(sigs, tags: Tags.new) { sigs.last }
|
|
61
84
|
_(repo.find).must_equal sigs.last
|
|
@@ -67,7 +90,7 @@ module Signore
|
|
|
67
90
|
path = Pathname.new('test/fixtures/signatures.yml')
|
|
68
91
|
sigs = Repo.new(path: path).sigs
|
|
69
92
|
_(sigs.size).must_equal 6
|
|
70
|
-
_(sigs.first.author).must_equal '
|
|
93
|
+
_(sigs.first.author).must_equal 'Gary Barnes'
|
|
71
94
|
_(sigs.last.subject).must_equal 'Star Wars ending explained'
|
|
72
95
|
end
|
|
73
96
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'yaml/store'
|
|
2
4
|
require_relative '../test_helper'
|
|
3
5
|
require_relative '../../lib/signore/sig_finder'
|
|
@@ -5,40 +7,42 @@ require_relative '../../lib/signore/tags'
|
|
|
5
7
|
|
|
6
8
|
module Signore
|
|
7
9
|
describe SigFinder do
|
|
10
|
+
verify_contract SigFinder
|
|
11
|
+
|
|
8
12
|
let(:sigs) do
|
|
9
13
|
Repo.new(path: Pathname.new('test/fixtures/signatures.yml')).sigs
|
|
10
14
|
end
|
|
11
15
|
|
|
12
|
-
let(:sig_finder) { SigFinder.new
|
|
16
|
+
let(:sig_finder) { SigFinder.new }
|
|
13
17
|
|
|
14
|
-
describe '
|
|
18
|
+
describe '#find' do
|
|
15
19
|
it 'returns a random Signature by default' do
|
|
16
|
-
_(SigFinder.
|
|
20
|
+
_(SigFinder.new(random: Random.new(0)).find(sigs).text)
|
|
17
21
|
.must_include 'Amateur fighter pilot ignores orders'
|
|
18
|
-
_(SigFinder.
|
|
22
|
+
_(SigFinder.new(random: Random.new(1)).find(sigs).text)
|
|
19
23
|
.must_equal '// sometimes I believe compiler ignores all my comments'
|
|
20
24
|
end
|
|
21
25
|
|
|
22
26
|
it 'returns a random signature if the tags are empty' do
|
|
23
|
-
_(SigFinder.find(sigs, tags: Tags.new
|
|
24
|
-
.
|
|
27
|
+
_(SigFinder.new(random: Random.new(0)).find(sigs, tags: Tags.new).text)
|
|
28
|
+
.must_include 'Amateur fighter pilot ignores orders'
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
it 'returns a random signature based on provided tags' do
|
|
28
|
-
_(
|
|
32
|
+
_(sig_finder.find(sigs, tags: Tags.new(required: %w(programming))).text)
|
|
29
33
|
.must_equal '// sometimes I believe compiler ignores all my comments'
|
|
30
|
-
_(
|
|
34
|
+
_(sig_finder.find(sigs, tags: Tags.new(required: %w(work))).text)
|
|
31
35
|
.must_equal 'You do have to be mad to work here, but it doesn’t help.'
|
|
32
36
|
end
|
|
33
37
|
|
|
34
38
|
it 'returns a random signature based on required and forbidden tags' do
|
|
35
39
|
tags = Tags.new(forbidden: %w(programming security), required: %w(tech))
|
|
36
|
-
_(
|
|
40
|
+
_(sig_finder.find(sigs, tags: tags).text)
|
|
37
41
|
.must_equal 'You do have to be mad to work here, but it doesn’t help.'
|
|
38
42
|
end
|
|
39
43
|
|
|
40
44
|
it 'returns a null object if there are no results' do
|
|
41
|
-
_(
|
|
45
|
+
_(sig_finder.find([])).must_equal Signature.new
|
|
42
46
|
end
|
|
43
47
|
end
|
|
44
48
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'stringio'
|
|
2
4
|
require_relative '../test_helper'
|
|
3
5
|
require_relative '../../lib/signore/sig_from_stream'
|
|
@@ -21,9 +23,7 @@ module Signore
|
|
|
21
23
|
|
|
22
24
|
Gary Barnes
|
|
23
25
|
|
|
24
|
-
|
|
25
26
|
asr
|
|
26
|
-
|
|
27
27
|
end
|
|
28
28
|
sig = nil
|
|
29
29
|
capture_io { sig = SigFromStream.sig_from input }
|
|
@@ -37,9 +37,10 @@ module Signore
|
|
|
37
37
|
‘You’ve got an interesting accent. Subtle. I can’t place it.’
|
|
38
38
|
‘It’s text-to-speech… I was raised by smartphones.’
|
|
39
39
|
|
|
40
|
-
Patrick Ewing
|
|
41
|
-
|
|
40
|
+
Patrick Ewing
|
|
41
|
+
|
|
42
42
|
|
|
43
|
+
end
|
|
43
44
|
sig = nil
|
|
44
45
|
capture_io { sig = SigFromStream.sig_from input }
|
|
45
46
|
text = <<-end.dedent.strip
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'yaml'
|
|
2
4
|
require_relative '../test_helper'
|
|
5
|
+
require_relative '../../lib/signore/mapper'
|
|
3
6
|
require_relative '../../lib/signore/signature'
|
|
4
7
|
|
|
5
|
-
module Signore
|
|
8
|
+
module Signore # rubocop:disable Metrics/ModuleLength
|
|
6
9
|
describe Signature do
|
|
7
10
|
describe '.new' do
|
|
8
11
|
it 'instantiates Signatures via parameters' do
|
|
@@ -22,8 +25,18 @@ module Signore
|
|
|
22
25
|
it 'nils empty parameters' do
|
|
23
26
|
new = Signature.new(author: '', source: '', subject: '', tags: [],
|
|
24
27
|
text: '')
|
|
25
|
-
_(new).must_equal Signature.new(author:
|
|
26
|
-
tags:
|
|
28
|
+
_(new).must_equal Signature.new(author: '', source: '', subject: '',
|
|
29
|
+
tags: [], text: '')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe '#empty?' do
|
|
34
|
+
it 'is true when the Signature is a null object' do
|
|
35
|
+
assert Signature.new.empty?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'is false when the Signature has some text' do
|
|
39
|
+
refute Signature.new(text: 'Node.jk').empty?
|
|
27
40
|
end
|
|
28
41
|
end
|
|
29
42
|
|
|
@@ -82,14 +95,12 @@ module Signore
|
|
|
82
95
|
end
|
|
83
96
|
|
|
84
97
|
it 'shows author and subject, space separated' do
|
|
85
|
-
text = '
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
text: text)
|
|
98
|
+
text = 'More gangland camp than neo-noir.'
|
|
99
|
+
sig = Signature.new(author: 'Nicholas Christopher',
|
|
100
|
+
subject: 'on Pulp Fiction', text: text)
|
|
89
101
|
_(sig.to_s).must_equal <<-end.dedent.strip
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
[Clive James on Marilyn Monroe]
|
|
102
|
+
More gangland camp than neo-noir.
|
|
103
|
+
[Nicholas Christopher on Pulp Fiction]
|
|
93
104
|
end
|
|
94
105
|
end
|
|
95
106
|
|
|
@@ -106,7 +117,7 @@ module Signore
|
|
|
106
117
|
|
|
107
118
|
it 'handles edge cases properly' do
|
|
108
119
|
YAML.load_file('test/fixtures/wrapper.yml').each do |sig, wrapped|
|
|
109
|
-
_(sig.to_s).must_equal wrapped
|
|
120
|
+
_(Mapper.from_h(sig.to_h).to_s).must_equal wrapped
|
|
110
121
|
end
|
|
111
122
|
end
|
|
112
123
|
end
|
data/test/signore/tags_test.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require_relative '../test_helper'
|
|
2
4
|
require_relative '../../lib/signore/tags'
|
|
3
5
|
|
|
@@ -6,8 +8,8 @@ module Signore
|
|
|
6
8
|
describe '#match?' do
|
|
7
9
|
it 'is a predicate whether the Tags match the given list of tags' do
|
|
8
10
|
tags = %w(programming tech)
|
|
9
|
-
assert Tags.new.match?(
|
|
10
|
-
assert Tags.new(forbidden: %w(fnord)).match?(
|
|
11
|
+
assert Tags.new.match?([])
|
|
12
|
+
assert Tags.new(forbidden: %w(fnord)).match?([])
|
|
11
13
|
assert Tags.new.match?(tags)
|
|
12
14
|
assert Tags.new(required: %w(programming)).match?(tags)
|
|
13
15
|
assert Tags.new(required: %w(programming tech)).match?(tags)
|
|
@@ -16,5 +18,15 @@ module Signore
|
|
|
16
18
|
refute Tags.new(forbidden: %w(tech), required: %w(tech)).match?(tags)
|
|
17
19
|
end
|
|
18
20
|
end
|
|
21
|
+
|
|
22
|
+
describe '#to_s' do
|
|
23
|
+
it 'returns a CLI-like representation of the Tags' do
|
|
24
|
+
_(Tags.new.to_s).must_equal ''
|
|
25
|
+
_(Tags.new(required: %w(tech)).to_s).must_equal 'tech'
|
|
26
|
+
_(Tags.new(forbidden: %w(fnord)).to_s).must_equal '~fnord'
|
|
27
|
+
_(Tags.new(forbidden: %w(fnord), required: %w(tech)).to_s)
|
|
28
|
+
.must_equal 'tech ~fnord'
|
|
29
|
+
end
|
|
30
|
+
end
|
|
19
31
|
end
|
|
20
32
|
end
|
data/test/test_helper.rb
CHANGED
data.tar.gz.sig
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
+9b�fS���Y������?�N��i�+>p����㇈mM��5@�.��5,y�d��'����*w�Rg�^�㌵� zYx/�q]�/|�� �A�������>`�����ޡb�!��T��hV��JN/ �U7�ST`vv�B�_*��68�G��->��\������fs�� �f��mJ;���s��^"i�:�^Ca*��@��5 5j!ύu[�vn�2�*P��(���
|
metadata
CHANGED
|
@@ -1,14 +1,36 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: signore
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Piotr Szotkowski
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
|
-
cert_chain:
|
|
11
|
-
|
|
10
|
+
cert_chain:
|
|
11
|
+
- |
|
|
12
|
+
-----BEGIN CERTIFICATE-----
|
|
13
|
+
MIIDfDCCAmSgAwIBAgIBATANBgkqhkiG9w0BAQUFADBCMREwDwYDVQQDDAhjaGFz
|
|
14
|
+
dGVsbDEYMBYGCgmSJomT8ixkARkWCGNoYXN0ZWxsMRMwEQYKCZImiZPyLGQBGRYD
|
|
15
|
+
bmV0MB4XDTE1MTEwOTIxMTMwOVoXDTE2MTEwODIxMTMwOVowQjERMA8GA1UEAwwI
|
|
16
|
+
Y2hhc3RlbGwxGDAWBgoJkiaJk/IsZAEZFghjaGFzdGVsbDETMBEGCgmSJomT8ixk
|
|
17
|
+
ARkWA25ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcf6OF3mi6D
|
|
18
|
+
UedwY2A6fYEQF2bJVYQxV8fWHA5Q2R6y7Eg0hM80Q0yod7pJxlJTpnAPzuIl1u4y
|
|
19
|
+
hhfa/Vz0u6PVRhBYQ/Bcj9UEwgiXcy3P4ybINDeDt7GRVs3R9rRoT1aAsb5RCS0z
|
|
20
|
+
u/JKS2RcAS5XPpFow3Cfs5A/pM2NLsR/zeiaKg8rRB59A/tWw26F+YTaWfPAPFGv
|
|
21
|
+
d6af29NKWQh+EPkX1JwwtSwjKfVOeFr0csC6QLWKpp1z/7Lla8d3px426Ccjca0I
|
|
22
|
+
5VwtQeZ5LClTjqaYyH7vSojpOtgRuvVKspZ2jfe1KZq9jz//a/rSUrFcPlEQuXQp
|
|
23
|
+
i8E3TKoJrW0CAwEAAaN9MHswCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
|
|
24
|
+
BBYEFLi/J921Nb53s8GKtKptC08QmHnwMCAGA1UdEQQZMBeBFWNoYXN0ZWxsQGNo
|
|
25
|
+
YXN0ZWxsLm5ldDAgBgNVHRIEGTAXgRVjaGFzdGVsbEBjaGFzdGVsbC5uZXQwDQYJ
|
|
26
|
+
KoZIhvcNAQEFBQADggEBAA+rUbXujzqDv8WE7kkiJadQhxldq/cRhaJDMKSWF3/H
|
|
27
|
+
6PL/Me8zq8Ok7/pQtxBvAhKcy3DdsH0q5pyPHoMrYySxEo9lNXLvwCPsi21rR53b
|
|
28
|
+
2w5rBytYCxrhsXISKwCkBYwVwtICafZ8VtRbD3pgnsPv+9NYJJ/rN4Z34doWM7oK
|
|
29
|
+
CAfY6o0LcY+qmvqLvqpweyoO73wkfKGUSz1a09dJfAP5aIREQDvpYrWx2ZoDrAct
|
|
30
|
+
srwnZ6g5uTvNbd0I1SnvnCJJ5y5iPvJIBlnGb3QZ77y2XXCOy3Yc0rjK7A8bQt5t
|
|
31
|
+
xOlyYMPKhWx2IqEip+J7PBpBwMnxIPhTcNlFOj8mSa0=
|
|
32
|
+
-----END CERTIFICATE-----
|
|
33
|
+
date: 2016-09-04 00:00:00.000000000 Z
|
|
12
34
|
dependencies:
|
|
13
35
|
- !ruby/object:Gem::Dependency
|
|
14
36
|
name: lovely_rufus
|
|
@@ -16,28 +38,14 @@ dependencies:
|
|
|
16
38
|
requirements:
|
|
17
39
|
- - "~>"
|
|
18
40
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
41
|
+
version: '1.0'
|
|
20
42
|
type: :runtime
|
|
21
43
|
prerelease: false
|
|
22
44
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
45
|
requirements:
|
|
24
46
|
- - "~>"
|
|
25
47
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: private_attr
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '1.1'
|
|
34
|
-
type: :runtime
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '1.1'
|
|
48
|
+
version: '1.0'
|
|
41
49
|
- !ruby/object:Gem::Dependency
|
|
42
50
|
name: bogus
|
|
43
51
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -86,56 +94,56 @@ dependencies:
|
|
|
86
94
|
requirements:
|
|
87
95
|
- - "~>"
|
|
88
96
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
97
|
+
version: '11.0'
|
|
90
98
|
type: :development
|
|
91
99
|
prerelease: false
|
|
92
100
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
101
|
requirements:
|
|
94
102
|
- - "~>"
|
|
95
103
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
104
|
+
version: '11.0'
|
|
97
105
|
- !ruby/object:Gem::Dependency
|
|
98
106
|
name: reek
|
|
99
107
|
requirement: !ruby/object:Gem::Requirement
|
|
100
108
|
requirements:
|
|
101
109
|
- - "~>"
|
|
102
110
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
111
|
+
version: '4.0'
|
|
104
112
|
type: :development
|
|
105
113
|
prerelease: false
|
|
106
114
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
115
|
requirements:
|
|
108
116
|
- - "~>"
|
|
109
117
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
118
|
+
version: '4.0'
|
|
111
119
|
- !ruby/object:Gem::Dependency
|
|
112
120
|
name: rerun
|
|
113
121
|
requirement: !ruby/object:Gem::Requirement
|
|
114
122
|
requirements:
|
|
115
123
|
- - "~>"
|
|
116
124
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: 0.
|
|
125
|
+
version: 0.11.0
|
|
118
126
|
type: :development
|
|
119
127
|
prerelease: false
|
|
120
128
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
129
|
requirements:
|
|
122
130
|
- - "~>"
|
|
123
131
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: 0.
|
|
132
|
+
version: 0.11.0
|
|
125
133
|
- !ruby/object:Gem::Dependency
|
|
126
134
|
name: rubocop
|
|
127
135
|
requirement: !ruby/object:Gem::Requirement
|
|
128
136
|
requirements:
|
|
129
137
|
- - "~>"
|
|
130
138
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: 0.
|
|
139
|
+
version: 0.42.0
|
|
132
140
|
type: :development
|
|
133
141
|
prerelease: false
|
|
134
142
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
143
|
requirements:
|
|
136
144
|
- - "~>"
|
|
137
145
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: 0.
|
|
146
|
+
version: 0.42.0
|
|
139
147
|
description: signore helps manage email signatures and select random ones based on
|
|
140
148
|
their tags
|
|
141
149
|
email: chastell@chastell.net
|
|
@@ -154,6 +162,7 @@ files:
|
|
|
154
162
|
- README.md
|
|
155
163
|
- Rakefile
|
|
156
164
|
- bin/signore
|
|
165
|
+
- certs/chastell.pem
|
|
157
166
|
- lib/signore.rb
|
|
158
167
|
- lib/signore/cli.rb
|
|
159
168
|
- lib/signore/mapper.rb
|
|
@@ -164,6 +173,7 @@ files:
|
|
|
164
173
|
- lib/signore/signature.rb
|
|
165
174
|
- lib/signore/tags.rb
|
|
166
175
|
- signore.gemspec
|
|
176
|
+
- test/fixtures/nosignatures.yml
|
|
167
177
|
- test/fixtures/signatures.legacy.yml
|
|
168
178
|
- test/fixtures/signatures.yml
|
|
169
179
|
- test/fixtures/wrapper.yml
|
|
@@ -196,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
196
206
|
version: '0'
|
|
197
207
|
requirements: []
|
|
198
208
|
rubyforge_project:
|
|
199
|
-
rubygems_version: 2.4
|
|
209
|
+
rubygems_version: 2.6.4
|
|
200
210
|
signing_key:
|
|
201
211
|
specification_version: 4
|
|
202
212
|
summary: 'signore: an email signature manager/randomiser'
|
|
@@ -210,4 +220,3 @@ test_files:
|
|
|
210
220
|
- test/signore/signature_test.rb
|
|
211
221
|
- test/signore/tags_test.rb
|
|
212
222
|
- test/test_helper.rb
|
|
213
|
-
has_rdoc:
|
metadata.gz.sig
ADDED
|
Binary file
|