sup 0.17.0 → 0.18.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
- data/.gitignore +17 -0
- data/.travis.yml +12 -0
- data/Gemfile +3 -0
- data/HACKING +42 -0
- data/History.txt +8 -0
- data/Rakefile +12 -0
- data/ReleaseNotes +4 -0
- data/bin/sup-sync +1 -1
- data/bin/sup-tweak-labels +6 -1
- data/contrib/colorpicker.rb +100 -0
- data/contrib/completion/_sup.zsh +114 -0
- data/devel/console.sh +3 -0
- data/devel/count-loc.sh +3 -0
- data/devel/load-index.rb +9 -0
- data/devel/profile.rb +12 -0
- data/devel/start-console.rb +5 -0
- data/doc/FAQ.txt +119 -0
- data/doc/Hooks.txt +79 -0
- data/doc/Philosophy.txt +69 -0
- data/lib/sup/colormap.rb +6 -0
- data/lib/sup/modes/thread_index_mode.rb +12 -1
- data/lib/sup/modes/thread_view_mode.rb +20 -0
- data/lib/sup/version.rb +1 -1
- data/sup.gemspec +55 -0
- data/test/dummy_source.rb +61 -0
- data/test/gnupg_test_home/gpg.conf +1 -0
- data/test/gnupg_test_home/pubring.gpg +0 -0
- data/test/gnupg_test_home/receiver_pubring.gpg +0 -0
- data/test/gnupg_test_home/receiver_secring.gpg +0 -0
- data/test/gnupg_test_home/receiver_trustdb.gpg +0 -0
- data/test/gnupg_test_home/secring.gpg +0 -0
- data/test/gnupg_test_home/sup-test-2@foo.bar.asc +20 -0
- data/test/gnupg_test_home/trustdb.gpg +0 -0
- data/test/integration/test_label_service.rb +18 -0
- data/test/messages/bad-content-transfer-encoding-1.eml +8 -0
- data/test/messages/binary-content-transfer-encoding-2.eml +21 -0
- data/test/messages/missing-line.eml +9 -0
- data/test/test_crypto.rb +109 -0
- data/test/test_header_parsing.rb +168 -0
- data/test/test_helper.rb +7 -0
- data/test/test_message.rb +532 -0
- data/test/test_messages_dir.rb +147 -0
- data/test/test_yaml_migration.rb +85 -0
- data/test/test_yaml_regressions.rb +17 -0
- data/test/unit/service/test_label_service.rb +19 -0
- data/test/unit/test_horizontal_selector.rb +40 -0
- data/test/unit/util/test_query.rb +46 -0
- data/test/unit/util/test_string.rb +57 -0
- data/test/unit/util/test_uri.rb +19 -0
- metadata +81 -36
- checksums.yaml.gz.sig +0 -1
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,147 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
require 'sup'
|
5
|
+
require 'stringio'
|
6
|
+
|
7
|
+
require 'dummy_source'
|
8
|
+
|
9
|
+
# override File.exists? to make it work with StringIO for testing.
|
10
|
+
# FIXME: do aliasing to avoid breaking this when sup moves from
|
11
|
+
# File.exists? to File.exist?
|
12
|
+
|
13
|
+
class File
|
14
|
+
|
15
|
+
def File.exists? file
|
16
|
+
# puts "fake File::exists?"
|
17
|
+
|
18
|
+
if file.is_a?(StringIO)
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
# use the different function
|
22
|
+
File.exist?(file)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
module Redwood
|
28
|
+
|
29
|
+
class TestMessagesDir < ::Minitest::Unit::TestCase
|
30
|
+
|
31
|
+
def setup
|
32
|
+
@path = Dir.mktmpdir
|
33
|
+
Redwood::HookManager.init File.join(@path, 'hooks')
|
34
|
+
end
|
35
|
+
|
36
|
+
def teardown
|
37
|
+
Redwood::HookManager.deinstantiate!
|
38
|
+
FileUtils.rm_r @path
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_binary_content_transfer_encoding
|
42
|
+
message = ''
|
43
|
+
File.open 'test/messages/binary-content-transfer-encoding-2.eml' do |f|
|
44
|
+
message = f.read
|
45
|
+
end
|
46
|
+
|
47
|
+
source = DummySource.new("sup-test://test_messages")
|
48
|
+
source.messages = [ message ]
|
49
|
+
source_info = 0
|
50
|
+
|
51
|
+
sup_message = Message.build_from_source(source, source_info)
|
52
|
+
sup_message.load_from_source!
|
53
|
+
|
54
|
+
from = sup_message.from
|
55
|
+
# "from" is just a simple person item
|
56
|
+
|
57
|
+
assert_equal("foo@example.org", from.email)
|
58
|
+
#assert_equal("Fake Sender", from.name)
|
59
|
+
|
60
|
+
subj = sup_message.subj
|
61
|
+
assert_equal("Important", subj)
|
62
|
+
|
63
|
+
chunks = sup_message.load_from_source!
|
64
|
+
indexable_chunks = sup_message.indexable_chunks
|
65
|
+
|
66
|
+
# there should be only one chunk
|
67
|
+
#assert_equal(1, chunks.length)
|
68
|
+
|
69
|
+
lines = chunks[0].lines
|
70
|
+
|
71
|
+
# lines should contain an error message
|
72
|
+
assert (lines.join.include? "An error occurred while loading this message."), "This message should not load successfully"
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_bad_content_transfer_encoding
|
76
|
+
message = ''
|
77
|
+
File.open 'test/messages/bad-content-transfer-encoding-1.eml' do |f|
|
78
|
+
message = f.read
|
79
|
+
end
|
80
|
+
|
81
|
+
source = DummySource.new("sup-test://test_messages")
|
82
|
+
source.messages = [ message ]
|
83
|
+
source_info = 0
|
84
|
+
|
85
|
+
sup_message = Message.build_from_source(source, source_info)
|
86
|
+
sup_message.load_from_source!
|
87
|
+
|
88
|
+
from = sup_message.from
|
89
|
+
# "from" is just a simple person item
|
90
|
+
|
91
|
+
assert_equal("foo@example.org", from.email)
|
92
|
+
#assert_equal("Fake Sender", from.name)
|
93
|
+
|
94
|
+
subj = sup_message.subj
|
95
|
+
assert_equal("Content-Transfer-Encoding:-bug in sup", subj)
|
96
|
+
|
97
|
+
chunks = sup_message.load_from_source!
|
98
|
+
indexable_chunks = sup_message.indexable_chunks
|
99
|
+
|
100
|
+
# there should be only one chunk
|
101
|
+
#assert_equal(1, chunks.length)
|
102
|
+
|
103
|
+
lines = chunks[0].lines
|
104
|
+
|
105
|
+
# lines should contain an error message
|
106
|
+
assert (lines.join.include? "An error occurred while loading this message."), "This message should not load successfully"
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_missing_line
|
110
|
+
message = ''
|
111
|
+
File.open 'test/messages/missing-line.eml' do |f|
|
112
|
+
message = f.read
|
113
|
+
end
|
114
|
+
|
115
|
+
source = DummySource.new("sup-test://test_messages")
|
116
|
+
source.messages = [ message ]
|
117
|
+
source_info = 0
|
118
|
+
|
119
|
+
sup_message = Message.build_from_source(source, source_info)
|
120
|
+
sup_message.load_from_source!
|
121
|
+
|
122
|
+
from = sup_message.from
|
123
|
+
# "from" is just a simple person item
|
124
|
+
|
125
|
+
assert_equal("foo@aol.com", from.email)
|
126
|
+
#assert_equal("Fake Sender", from.name)
|
127
|
+
|
128
|
+
subj = sup_message.subj
|
129
|
+
assert_equal("Encoding bug", subj)
|
130
|
+
|
131
|
+
chunks = sup_message.load_from_source!
|
132
|
+
indexable_chunks = sup_message.indexable_chunks
|
133
|
+
|
134
|
+
# there should be only one chunk
|
135
|
+
#assert_equal(1, chunks.length)
|
136
|
+
|
137
|
+
lines = chunks[0].lines
|
138
|
+
|
139
|
+
badline = lines[0]
|
140
|
+
assert (badline.display_length > 0), "The length of this line should greater than 0: #{badline}"
|
141
|
+
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
# vim:noai:ts=2:sw=2:
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
require "sup"
|
4
|
+
require "psych"
|
5
|
+
|
6
|
+
if RUBY_VERSION < "2.1"
|
7
|
+
describe "Sup's YAML util" do
|
8
|
+
describe "Module#yaml_properties" do
|
9
|
+
def build_class_with_name name, &b
|
10
|
+
Class.new do
|
11
|
+
meta_cls = class << self; self; end
|
12
|
+
meta_cls.send(:define_method, :name) { name }
|
13
|
+
class_exec(&b) unless b.nil?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
after do
|
18
|
+
Psych.load_tags = {}
|
19
|
+
Psych.dump_tags = {}
|
20
|
+
end
|
21
|
+
|
22
|
+
it "defines YAML tag for class" do
|
23
|
+
cls = build_class_with_name 'Cls' do
|
24
|
+
yaml_properties
|
25
|
+
end
|
26
|
+
|
27
|
+
expected_yaml_tag = "!supmua.org,2006-10-01/Cls"
|
28
|
+
|
29
|
+
Psych.load_tags[expected_yaml_tag].must_equal cls
|
30
|
+
Psych.dump_tags[cls].must_equal expected_yaml_tag
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
it "Loads legacy YAML format as well" do
|
35
|
+
cls = build_class_with_name 'Cls' do
|
36
|
+
yaml_properties :id
|
37
|
+
attr_accessor :id
|
38
|
+
def initialize id
|
39
|
+
@id = id
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
Psych.load_tags["!masanjin.net,2006-10-01/Cls"].must_equal cls
|
44
|
+
|
45
|
+
yaml = <<EOF
|
46
|
+
--- !masanjin.net,2006-10-01/Cls
|
47
|
+
id: ID
|
48
|
+
EOF
|
49
|
+
loaded = YAML.load(yaml)
|
50
|
+
|
51
|
+
loaded.id.must_equal 'ID'
|
52
|
+
loaded.must_be_kind_of cls
|
53
|
+
end
|
54
|
+
|
55
|
+
it "Dumps & loads w/ state re-initialized" do
|
56
|
+
cls = build_class_with_name 'Cls' do
|
57
|
+
yaml_properties :id
|
58
|
+
attr_accessor :id
|
59
|
+
attr_reader :flag
|
60
|
+
|
61
|
+
def initialize id
|
62
|
+
@id = id
|
63
|
+
@flag = true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
instance = cls.new 'ID'
|
68
|
+
|
69
|
+
dumped = YAML.dump(instance)
|
70
|
+
loaded = YAML.load(dumped)
|
71
|
+
|
72
|
+
dumped.must_equal <<-EOF
|
73
|
+
--- !supmua.org,2006-10-01/Cls
|
74
|
+
id: ID
|
75
|
+
EOF
|
76
|
+
|
77
|
+
loaded.id.must_equal 'ID'
|
78
|
+
assert loaded.flag
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
else
|
84
|
+
puts "Some YAML tests are skipped on Ruby 2.1.0 and newer."
|
85
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
# Requiring 'yaml' before 'sup' in 1.9.x would get Psych loaded first
|
4
|
+
# and becoming the default yamler.
|
5
|
+
require 'yaml'
|
6
|
+
require 'sup'
|
7
|
+
|
8
|
+
module Redwood
|
9
|
+
class TestYamlRegressions < ::Minitest::Unit::TestCase
|
10
|
+
def test_yamling_hash
|
11
|
+
hsh = {:foo => 42}
|
12
|
+
reloaded = YAML.load(hsh.to_yaml)
|
13
|
+
|
14
|
+
assert_equal reloaded, hsh
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
require "sup/service/label_service"
|
4
|
+
|
5
|
+
describe Redwood::LabelService do
|
6
|
+
describe "#add_labels" do
|
7
|
+
it "add labels to all messages matching the query" do
|
8
|
+
q = 'is:starred'
|
9
|
+
label = 'superstarred'
|
10
|
+
message = mock!.add_label(label).subject
|
11
|
+
index = mock!.find_messages(q){ [message] }.subject
|
12
|
+
mock(index).update_message_state(message)
|
13
|
+
mock(index).save_index
|
14
|
+
|
15
|
+
service = Redwood::LabelService.new(index)
|
16
|
+
service.add_labels q, label
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
require "sup/horizontal_selector"
|
4
|
+
|
5
|
+
describe Redwood::HorizontalSelector do
|
6
|
+
let(:values) { %w[foo@example.com bar@example.com] }
|
7
|
+
let(:strange_value) { "strange@example.com" }
|
8
|
+
|
9
|
+
before do
|
10
|
+
@selector = Redwood::HorizontalSelector.new(
|
11
|
+
'Acc:', values, [])
|
12
|
+
end
|
13
|
+
|
14
|
+
it "init w/ the first value selected" do
|
15
|
+
first_value = values.first
|
16
|
+
@selector.val.must_equal first_value
|
17
|
+
end
|
18
|
+
|
19
|
+
it "stores value for selection" do
|
20
|
+
second_value = values[1]
|
21
|
+
@selector.set_to second_value
|
22
|
+
@selector.val.must_equal second_value
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "for unknown value" do
|
26
|
+
it "cannot select unknown value" do
|
27
|
+
@selector.wont_be :can_set_to?, strange_value
|
28
|
+
end
|
29
|
+
|
30
|
+
it "refuses selecting unknown value" do
|
31
|
+
old_value = @selector.val
|
32
|
+
|
33
|
+
assert_raises Redwood::HorizontalSelector::UnknownValue do
|
34
|
+
@selector.set_to strange_value
|
35
|
+
end
|
36
|
+
|
37
|
+
@selector.val.must_equal old_value
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
require "sup/util/query"
|
6
|
+
require "xapian"
|
7
|
+
|
8
|
+
describe Redwood::Util::Query do
|
9
|
+
describe ".describe" do
|
10
|
+
it "returns a UTF-8 description of query" do
|
11
|
+
query = Xapian::Query.new "テスト"
|
12
|
+
life = "生活: "
|
13
|
+
|
14
|
+
assert_raises Encoding::CompatibilityError do
|
15
|
+
_ = life + query.description
|
16
|
+
end
|
17
|
+
|
18
|
+
desc = Redwood::Util::Query.describe(query)
|
19
|
+
_ = (life + desc) # No exception thrown
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns a valid UTF-8 description of bad input" do
|
23
|
+
msg = "asdfa \xc3\x28 åasdf"
|
24
|
+
query = Xapian::Query.new msg
|
25
|
+
life = 'hæi'
|
26
|
+
|
27
|
+
# this is now possibly UTF-8 string with possibly invalid chars
|
28
|
+
assert_raises Redwood::Util::Query::QueryDescriptionError do
|
29
|
+
desc = Redwood::Util::Query.describe (query)
|
30
|
+
end
|
31
|
+
|
32
|
+
assert_raises Encoding::CompatibilityError do
|
33
|
+
_ = life + query.description
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "returns a valid UTF-8 fallback description of bad input" do
|
38
|
+
msg = "asdfa \xc3\x28 åasdf"
|
39
|
+
query = Xapian::Query.new msg
|
40
|
+
|
41
|
+
desc = Redwood::Util::Query.describe(query, "invalid query")
|
42
|
+
|
43
|
+
assert_equal("invalid query", desc)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
require "sup/util"
|
6
|
+
|
7
|
+
describe "Sup's String extension" do
|
8
|
+
describe "#display_length" do
|
9
|
+
let :data do
|
10
|
+
[
|
11
|
+
['some words', 10,],
|
12
|
+
['中文', 4,],
|
13
|
+
['ä', 1,],
|
14
|
+
]
|
15
|
+
end
|
16
|
+
|
17
|
+
it "calculates display length of a string" do
|
18
|
+
data.each do |(str, length)|
|
19
|
+
str.display_length.must_equal length
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#slice_by_display_length(len)" do
|
25
|
+
let :data do
|
26
|
+
[
|
27
|
+
['some words', 6, 'some w'],
|
28
|
+
['中文', 2, '中'],
|
29
|
+
['älpha', 3, 'älp'],
|
30
|
+
]
|
31
|
+
end
|
32
|
+
|
33
|
+
it "slices string by display length" do
|
34
|
+
data.each do |(str, length, sliced)|
|
35
|
+
str.slice_by_display_length(length).must_equal sliced
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#wrap" do
|
41
|
+
let :data do
|
42
|
+
[
|
43
|
+
['some words', 6, ['some', 'words']],
|
44
|
+
['some words', 80, ['some words']],
|
45
|
+
['中文', 2, ['中', '文']],
|
46
|
+
['中文', 5, ['中文']],
|
47
|
+
['älpha', 3, ['älp', 'ha']],
|
48
|
+
]
|
49
|
+
end
|
50
|
+
|
51
|
+
it "wraps string by display length" do
|
52
|
+
data.each do |(str, length, wrapped)|
|
53
|
+
str.wrap(length).must_equal wrapped
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "test_helper.rb"
|
2
|
+
|
3
|
+
require "sup/util/uri"
|
4
|
+
|
5
|
+
describe Redwood::Util::Uri do
|
6
|
+
describe ".build" do
|
7
|
+
it "builds uri from hash" do
|
8
|
+
components = {:path => "/var/mail/foo", :scheme => "mbox"}
|
9
|
+
uri = Redwood::Util::Uri.build(components)
|
10
|
+
uri.to_s.must_equal "mbox:/var/mail/foo"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "expands ~ in path" do
|
14
|
+
components = {:path => "~/foo", :scheme => "maildir"}
|
15
|
+
uri = Redwood::Util::Uri.build(components)
|
16
|
+
uri.to_s.must_equal "maildir:#{ENV["HOME"]}/foo"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Morgan
|
@@ -10,29 +10,8 @@ authors:
|
|
10
10
|
- Matthieu Rakotojaona
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
|
-
cert_chain:
|
14
|
-
-
|
15
|
-
-----BEGIN CERTIFICATE-----
|
16
|
-
MIIDVDCCAjygAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQDDAJlZzEV
|
17
|
-
MBMGCgmSJomT8ixkARkWBWdhdXRlMRUwEwYKCZImiZPyLGQBGRYFdmV0c2oxEzAR
|
18
|
-
BgoJkiaJk/IsZAEZFgNjb20wHhcNMTMwNTA4MTAzODQ3WhcNMTQwNTA4MTAzODQ3
|
19
|
-
WjBQMQswCQYDVQQDDAJlZzEVMBMGCgmSJomT8ixkARkWBWdhdXRlMRUwEwYKCZIm
|
20
|
-
iZPyLGQBGRYFdmV0c2oxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0GCSqGSIb3
|
21
|
-
DQEBAQUAA4IBDwAwggEKAoIBAQC7sNc5zY4MrYB7eywE/aK2IoDqpM9lq4ZFlHzt
|
22
|
-
Pmq1LG6ah2lu/HfjqxiPoqwY7QkdSOGDLSk7G8YBqDA/tODhkPPSTqxBDzYyCO46
|
23
|
-
haWTtoN5tJkxIDJKp1nVXHi0Mlb4GJVKd9P0q95BeBYBfs8vyPN+y4b4Gebgx9U3
|
24
|
-
KqMDbe5h9MAPZGmtiRFMb3ugmiujDm7v8fACa5EtSvK/lxMkRDglecT/knE99NYI
|
25
|
-
l35SO/Bune1bxYmkwW64mQ4wRlGVeAnX+19msALfS9rdJL26dfW2LgqWi5QoVTBH
|
26
|
-
KNKTl/i3fxK0mzgtnoRCWdMJQFNNonFTnPUUawi1c9Kh4AdPAgMBAAGjOTA3MAkG
|
27
|
-
A1UdEwQCMAAwHQYDVR0OBBYEFJNCOxL0SWcbW2M+DIEUzAMz1bZsMAsGA1UdDwQE
|
28
|
-
AwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAr3QUayd0geBDExO+WwzaEPAuUZ3zWQYG
|
29
|
-
G9vrplCkmJtjS/X/wVAef7Jn/V5MNkXKXsiOgXJXki+n7HulNZUf1rzr7Un96gVJ
|
30
|
-
1hq/ZTuapnPpstBqqdv60RB8HNGydHQeEz6us5z3nj+KchPqJ657Dz8oX/Nm6/24
|
31
|
-
7QSQpCh8xBYdSWEpoIE0zUSY77LtVTRVwIr9uDpWTTr9kCVBINBsOQNjWKruEWjV
|
32
|
-
+JMuDs+iWefpF4R3BySoOc1Q4WoES3+oc0qo37MsAZyfnQIPTZkyLZCMxeL6Mha4
|
33
|
-
hFc2yANBj8voaY5C74Cg2VqExtcnSaxUtW9wC4w5hOlg0AVfb1JWzg==
|
34
|
-
-----END CERTIFICATE-----
|
35
|
-
date: 2014-04-11 00:00:00.000000000 Z
|
13
|
+
cert_chain: []
|
14
|
+
date: 2014-05-19 00:00:00.000000000 Z
|
36
15
|
dependencies:
|
37
16
|
- !ruby/object:Gem::Dependency
|
38
17
|
name: xapian-ruby
|
@@ -245,14 +224,14 @@ dependencies:
|
|
245
224
|
- !ruby/object:Gem::Version
|
246
225
|
version: 2.0.2
|
247
226
|
description: |2
|
248
|
-
|
227
|
+
Sup is a console-based email client for people with a lot of email.
|
249
228
|
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
229
|
+
* GMail-like thread-centered archiving, tagging and muting
|
230
|
+
* Handling mail from multiple mbox and Maildir sources
|
231
|
+
* Blazing fast full-text search with a rich query language
|
232
|
+
* Multiple accounts - pick the right one when sending mail
|
233
|
+
* Ruby-programmable hooks
|
234
|
+
* Automatically tracking recent contacts
|
256
235
|
email: sup-talk@rubyforge.org
|
257
236
|
executables:
|
258
237
|
- sup
|
@@ -260,18 +239,23 @@ executables:
|
|
260
239
|
- sup-config
|
261
240
|
- sup-dump
|
262
241
|
- sup-import-dump
|
242
|
+
- sup-psych-ify-config-files
|
263
243
|
- sup-recover-sources
|
264
244
|
- sup-sync
|
265
245
|
- sup-sync-back-maildir
|
266
246
|
- sup-tweak-labels
|
267
|
-
- sup-psych-ify-config-files
|
268
247
|
extensions: []
|
269
248
|
extra_rdoc_files: []
|
270
249
|
files:
|
250
|
+
- ".gitignore"
|
251
|
+
- ".travis.yml"
|
271
252
|
- CONTRIBUTORS
|
253
|
+
- Gemfile
|
254
|
+
- HACKING
|
272
255
|
- History.txt
|
273
256
|
- LICENSE
|
274
257
|
- README.md
|
258
|
+
- Rakefile
|
275
259
|
- ReleaseNotes
|
276
260
|
- bin/sup
|
277
261
|
- bin/sup-add
|
@@ -283,6 +267,16 @@ files:
|
|
283
267
|
- bin/sup-sync
|
284
268
|
- bin/sup-sync-back-maildir
|
285
269
|
- bin/sup-tweak-labels
|
270
|
+
- contrib/colorpicker.rb
|
271
|
+
- contrib/completion/_sup.zsh
|
272
|
+
- devel/console.sh
|
273
|
+
- devel/count-loc.sh
|
274
|
+
- devel/load-index.rb
|
275
|
+
- devel/profile.rb
|
276
|
+
- devel/start-console.rb
|
277
|
+
- doc/FAQ.txt
|
278
|
+
- doc/Hooks.txt
|
279
|
+
- doc/Philosophy.txt
|
286
280
|
- lib/sup.rb
|
287
281
|
- lib/sup/account.rb
|
288
282
|
- lib/sup/buffer.rb
|
@@ -348,16 +342,42 @@ files:
|
|
348
342
|
- lib/sup/util/query.rb
|
349
343
|
- lib/sup/util/uri.rb
|
350
344
|
- lib/sup/version.rb
|
345
|
+
- sup.gemspec
|
346
|
+
- test/dummy_source.rb
|
347
|
+
- test/gnupg_test_home/gpg.conf
|
348
|
+
- test/gnupg_test_home/pubring.gpg
|
349
|
+
- test/gnupg_test_home/receiver_pubring.gpg
|
350
|
+
- test/gnupg_test_home/receiver_secring.gpg
|
351
|
+
- test/gnupg_test_home/receiver_trustdb.gpg
|
352
|
+
- test/gnupg_test_home/secring.gpg
|
353
|
+
- test/gnupg_test_home/sup-test-2@foo.bar.asc
|
354
|
+
- test/gnupg_test_home/trustdb.gpg
|
355
|
+
- test/integration/test_label_service.rb
|
356
|
+
- test/messages/bad-content-transfer-encoding-1.eml
|
357
|
+
- test/messages/binary-content-transfer-encoding-2.eml
|
358
|
+
- test/messages/missing-line.eml
|
359
|
+
- test/test_crypto.rb
|
360
|
+
- test/test_header_parsing.rb
|
361
|
+
- test/test_helper.rb
|
362
|
+
- test/test_message.rb
|
363
|
+
- test/test_messages_dir.rb
|
364
|
+
- test/test_yaml_migration.rb
|
365
|
+
- test/test_yaml_regressions.rb
|
366
|
+
- test/unit/service/test_label_service.rb
|
367
|
+
- test/unit/test_horizontal_selector.rb
|
368
|
+
- test/unit/util/test_query.rb
|
369
|
+
- test/unit/util/test_string.rb
|
370
|
+
- test/unit/util/test_uri.rb
|
351
371
|
homepage: http://supmua.org
|
352
372
|
licenses:
|
353
373
|
- GPL-2
|
354
374
|
metadata: {}
|
355
375
|
post_install_message: |
|
356
376
|
SUP: If you are upgrading Sup from before version 0.14.0: Please
|
357
|
-
|
377
|
+
run `sup-psych-ify-config-files` to migrate from 0.13.
|
358
378
|
|
359
|
-
|
360
|
-
|
379
|
+
Check https://github.com/sup-heliotrope/sup/wiki/Migration-0.13-to-0.14
|
380
|
+
for more detailed and up-to-date instructions.
|
361
381
|
rdoc_options: []
|
362
382
|
require_paths:
|
363
383
|
- lib
|
@@ -377,4 +397,29 @@ rubygems_version: 2.2.2
|
|
377
397
|
signing_key:
|
378
398
|
specification_version: 4
|
379
399
|
summary: A console-based email client with the best features of GMail, mutt and Emacs
|
380
|
-
test_files:
|
400
|
+
test_files:
|
401
|
+
- test/dummy_source.rb
|
402
|
+
- test/gnupg_test_home/gpg.conf
|
403
|
+
- test/gnupg_test_home/pubring.gpg
|
404
|
+
- test/gnupg_test_home/receiver_pubring.gpg
|
405
|
+
- test/gnupg_test_home/receiver_secring.gpg
|
406
|
+
- test/gnupg_test_home/receiver_trustdb.gpg
|
407
|
+
- test/gnupg_test_home/secring.gpg
|
408
|
+
- test/gnupg_test_home/sup-test-2@foo.bar.asc
|
409
|
+
- test/gnupg_test_home/trustdb.gpg
|
410
|
+
- test/integration/test_label_service.rb
|
411
|
+
- test/messages/bad-content-transfer-encoding-1.eml
|
412
|
+
- test/messages/binary-content-transfer-encoding-2.eml
|
413
|
+
- test/messages/missing-line.eml
|
414
|
+
- test/test_crypto.rb
|
415
|
+
- test/test_header_parsing.rb
|
416
|
+
- test/test_helper.rb
|
417
|
+
- test/test_message.rb
|
418
|
+
- test/test_messages_dir.rb
|
419
|
+
- test/test_yaml_migration.rb
|
420
|
+
- test/test_yaml_regressions.rb
|
421
|
+
- test/unit/service/test_label_service.rb
|
422
|
+
- test/unit/test_horizontal_selector.rb
|
423
|
+
- test/unit/util/test_query.rb
|
424
|
+
- test/unit/util/test_string.rb
|
425
|
+
- test/unit/util/test_uri.rb
|