ppl 1.15.1 → 1.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ppl/command/mutt.rb +35 -11
- data/lib/ppl/format/address_book/mutt_query.rb +7 -8
- data/lib/ppl.rb +1 -1
- data/ppl.gemspec +2 -2
- data/spec/ppl/command/mutt_spec.rb +46 -0
- data/spec/ppl/format/address_book/mutt_query_spec.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0078cdc91873e6cbc509e8ab7688372fef43c7b
|
4
|
+
data.tar.gz: 4c5005c26f11a26b11a6adf4e99195f358c8f438
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 814ba206fc2673082c196aceaea8cb26d9bbfb47e6b7db8d4784d8fd5c5c63fabfd0bdc0d9727ed5ad25313d1d7a276799f98e5df02ea66607c0719a3bbd5d65
|
7
|
+
data.tar.gz: 59952d9c2d48c6395290c922126c06fc958760ffd17fc4911a869dbc8d12829af7ca169a8edf1f7bde3b4e2d4daeadbcf8a1d60847986d60cb7ac618f7f9c4ef
|
data/lib/ppl/command/mutt.rb
CHANGED
@@ -8,9 +8,13 @@ class Ppl::Command::Mutt < Ppl::Application::Command
|
|
8
8
|
|
9
9
|
def options(parser, options)
|
10
10
|
parser.banner = "usage: ppl mutt <query>"
|
11
|
+
parser.on("-i", "--ignore-case", "Turn off case sensitivity") do |i|
|
12
|
+
options[:ignore_case] = i
|
13
|
+
end
|
11
14
|
end
|
12
15
|
|
13
16
|
def execute(input, output)
|
17
|
+
@options = input.options
|
14
18
|
query = require_query(input)
|
15
19
|
matches = mutt_search(query)
|
16
20
|
output.line(describe_result(matches))
|
@@ -29,23 +33,43 @@ class Ppl::Command::Mutt < Ppl::Application::Command
|
|
29
33
|
|
30
34
|
def mutt_search(query)
|
31
35
|
@address_book = @storage.load_address_book
|
36
|
+
select_matching_contacts(@address_book, query)
|
37
|
+
end
|
38
|
+
|
39
|
+
def select_matching_contacts(address_book, query)
|
32
40
|
matches = Ppl::Entity::AddressBook.new
|
41
|
+
address_book.contacts.each do |contact|
|
42
|
+
if contact.email_addresses.empty?
|
43
|
+
next
|
44
|
+
elsif match_by_name(contact, query)
|
45
|
+
matches.contacts << contact
|
46
|
+
elsif match_by_email_address(contact, query)
|
47
|
+
matches.contacts << contact
|
48
|
+
end
|
49
|
+
end
|
50
|
+
matches
|
51
|
+
end
|
33
52
|
|
34
|
-
|
35
|
-
|
53
|
+
def match_by_name(contact, query)
|
54
|
+
if @options[:ignore_case]
|
55
|
+
contact.name.downcase.include? query.downcase
|
56
|
+
else
|
57
|
+
contact.name.include? query
|
58
|
+
end
|
59
|
+
end
|
36
60
|
|
37
|
-
|
61
|
+
def match_by_email_address(contact, query)
|
62
|
+
matches = contact.email_addresses.select do |email_address|
|
63
|
+
if @options[:ignore_case]
|
64
|
+
email_address.downcase.include? query.downcase
|
65
|
+
else
|
38
66
|
email_address.include? query
|
39
67
|
end
|
40
|
-
|
41
|
-
if matching_emails.length > 0
|
42
|
-
matches.contacts.push(contact)
|
43
|
-
elsif !contact.name.nil? && contact.name.include?(query)
|
44
|
-
matches.contacts.push(contact)
|
45
|
-
end
|
46
68
|
end
|
47
|
-
|
48
|
-
|
69
|
+
if matches.length > 0
|
70
|
+
contact.email_addresses = matches
|
71
|
+
true
|
72
|
+
end
|
49
73
|
end
|
50
74
|
|
51
75
|
def describe_result(matches)
|
@@ -9,25 +9,24 @@ class Ppl::Format::AddressBook::MuttQuery < Ppl::Format::AddressBook
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def process(address_book)
|
12
|
-
address_book.contacts.each { |contact|
|
12
|
+
address_book.contacts.each { |contact| add_contact(contact) }
|
13
13
|
@table.to_s
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
16
|
private
|
18
17
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
name = contact.name
|
18
|
+
def add_contact(contact)
|
19
|
+
contact.email_addresses.each do |email_address|
|
20
|
+
add_email_address(email_address, contact.name)
|
23
21
|
end
|
22
|
+
end
|
24
23
|
|
24
|
+
def add_email_address(email_address, name)
|
25
25
|
@table.add_row({
|
26
|
-
:email =>
|
26
|
+
:email => email_address,
|
27
27
|
:name => name,
|
28
28
|
})
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
31
|
end
|
33
32
|
|
data/lib/ppl.rb
CHANGED
data/ppl.gemspec
CHANGED
@@ -51,6 +51,22 @@ describe Ppl::Command::Mutt do
|
|
51
51
|
@command.execute(@input, @output).should eq true
|
52
52
|
end
|
53
53
|
|
54
|
+
it "should only return matching email addresses" do
|
55
|
+
@input.arguments.push "prova"
|
56
|
+
@contact.name = "Test User"
|
57
|
+
|
58
|
+
@contact.email_addresses.push "test@test.org"
|
59
|
+
@contact.email_addresses.push "prova@prova.org"
|
60
|
+
@address_book.contacts.push(@contact)
|
61
|
+
@storage.stub(:load_address_book).and_return(@address_book)
|
62
|
+
@format.should_receive(:process) do |address_book|
|
63
|
+
address_book.contacts[0].email_addresses.length.should eq 1
|
64
|
+
address_book.contacts[0].email_addresses[0].should eq "prova@prova.org"
|
65
|
+
end
|
66
|
+
@output.stub(:line)
|
67
|
+
@command.execute(@input, @output)
|
68
|
+
end
|
69
|
+
|
54
70
|
it "should return name matches" do
|
55
71
|
|
56
72
|
@contact.name = "Test User"
|
@@ -68,6 +84,36 @@ describe Ppl::Command::Mutt do
|
|
68
84
|
@command.execute(@input, @output).should eq true
|
69
85
|
end
|
70
86
|
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "#execute (case-insensitive)" do
|
90
|
+
|
91
|
+
before(:each) do
|
92
|
+
@input.options[:ignore_case] = true
|
93
|
+
@contact.name = "Joe Schmoe"
|
94
|
+
@contact.email_addresses.push "joe@somewhere.com"
|
95
|
+
@contact.email_addresses.push "LOUD@SHOUTING.COM"
|
96
|
+
@address_book.contacts << @contact
|
97
|
+
@storage.stub(:load_address_book).and_return(@address_book)
|
98
|
+
@output.stub(:line)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should ignore case when matching names" do
|
102
|
+
@input.arguments.push "joe schmoe"
|
103
|
+
@format.should_receive(:process) do |address_book|
|
104
|
+
address_book.contacts[0].email_addresses.length.should eq 2
|
105
|
+
end
|
106
|
+
@command.execute(@input, @output)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should ignore case when matching email addresses" do
|
110
|
+
@input.arguments.push "loud"
|
111
|
+
@format.should_receive(:process) do |address_book|
|
112
|
+
address_book.contacts[0].email_addresses.length.should eq 1
|
113
|
+
address_book.contacts[0].email_addresses[0].should eq "LOUD@SHOUTING.COM"
|
114
|
+
end
|
115
|
+
@command.execute(@input, @output)
|
116
|
+
end
|
71
117
|
|
72
118
|
end
|
73
119
|
|
@@ -24,6 +24,19 @@ describe Ppl::Format::AddressBook::MuttQuery do
|
|
24
24
|
@format.process(@address_book)
|
25
25
|
end
|
26
26
|
|
27
|
+
it "should list all of each contact's email addresses" do
|
28
|
+
@contact.email_addresses.push "test2@example.com"
|
29
|
+
@table.should_receive(:add_row).with({
|
30
|
+
:email => "test@example.org",
|
31
|
+
:name => "Test Contact",
|
32
|
+
})
|
33
|
+
@table.should_receive(:add_row).with({
|
34
|
+
:email => "test2@example.com",
|
35
|
+
:name => "Test Contact",
|
36
|
+
})
|
37
|
+
@format.process(@address_book)
|
38
|
+
end
|
39
|
+
|
27
40
|
end
|
28
41
|
|
29
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ppl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henry Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colored
|