ppl 1.23.0 → 1.24.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/Rakefile +6 -0
- data/features/email.feature +38 -1
- data/features/phone.feature +21 -0
- data/features/step_definitions/ppl_steps.rb +31 -1
- data/lib/ppl/adapter/vcard/greencard.rb +8 -2
- data/lib/ppl/application/bootstrap.rb +14 -0
- data/lib/ppl/command/email.rb +58 -4
- data/lib/ppl/command/mutt.rb +2 -2
- data/lib/ppl/command/phone.rb +46 -31
- data/lib/ppl/entity/email_address.rb +13 -0
- data/lib/ppl/entity/phone_number.rb +2 -0
- data/lib/ppl/format/address_book/email_addresses.rb +4 -1
- data/lib/ppl/format/address_book/mutt_query.rb +1 -1
- data/lib/ppl/format/address_book/one_line.rb +10 -1
- data/lib/ppl/format/contact/email_addresses.rb +7 -17
- data/lib/ppl/format/contact/full.rb +27 -8
- data/lib/ppl/format/contact/phone_number.rb +6 -1
- data/lib/ppl/format/table.rb +2 -2
- data/lib/ppl/service/email_address.rb +37 -0
- data/lib/ppl/service/phone_number.rb +40 -0
- data/lib/ppl.rb +8 -1
- data/ppl.gemspec +2 -2
- data/spec/ppl/adapter/vcard/greencard_spec.rb +40 -2
- data/spec/ppl/command/email_spec.rb +58 -0
- data/spec/ppl/command/mutt_spec.rb +10 -10
- data/spec/ppl/command/phone_spec.rb +30 -26
- data/spec/ppl/entity/email_address_spec.rb +28 -0
- data/spec/ppl/entity/phone_number_spec.rb +6 -0
- data/spec/ppl/format/address_book/email_addresses_spec.rb +1 -1
- data/spec/ppl/format/address_book/mutt_query_spec.rb +2 -2
- data/spec/ppl/format/address_book/one_line_spec.rb +11 -1
- data/spec/ppl/format/contact/email_addresses_spec.rb +27 -13
- data/spec/ppl/format/contact/full_spec.rb +25 -13
- data/spec/ppl/format/contact/phone_number_spec.rb +13 -1
- data/spec/ppl/service/email_address_spec.rb +73 -0
- data/spec/ppl/service/phone_number_spec.rb +75 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f33a5e4b27cd115dbac2ce3532e4fc81e93635e
|
4
|
+
data.tar.gz: 1eef11f3f8784fa687c211b9343fe45e914c2cb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19c1da0a40163b4e3b37f9ae01ef70b590b312b2dc381cdb5ba35f776261f85fda799736c0e5d0694a4f7d67e3a85f232f7ab961b95f8a2e15fd3f1f72e1ffe1
|
7
|
+
data.tar.gz: 4798e2a97cdb5daf366d821e8b736d187798ef238a00329aae88d66149379cfad1207d98c8bf4f432099e4756617802c61a307458518876340dfbc386ace4973
|
data/Rakefile
CHANGED
data/features/email.feature
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
|
2
2
|
Feature: ppl email
|
3
3
|
|
4
|
+
Scenario: Add a preferred email address to a contact
|
5
|
+
Given I am in an address book with a blank contact called bob
|
6
|
+
And I run "ppl email bob --preferred bob@example.org"
|
7
|
+
Then it should succeed
|
8
|
+
And bob should have 1 email address
|
9
|
+
And the 1st email address should be "* bob@example.org"
|
10
|
+
|
4
11
|
Scenario: Add an email address to a contact
|
5
12
|
Given I am in an address book with a blank contact called bob
|
6
13
|
And I run "ppl email bob bob@example.org"
|
@@ -8,9 +15,39 @@ Feature: ppl email
|
|
8
15
|
And bob should have 1 email address
|
9
16
|
And the 1st email address should be "bob@example.org"
|
10
17
|
|
11
|
-
Scenario:
|
18
|
+
Scenario: Add a second email address to a contact
|
19
|
+
Given I am in the same address book as before
|
20
|
+
And I run "ppl email bob rob@testing.com"
|
21
|
+
Then it should succeed
|
22
|
+
And bob should have 2 email addresses
|
23
|
+
And the 1st email address should be "bob@example.org"
|
24
|
+
And the 2nd email address should be "rob@testing.com"
|
25
|
+
|
26
|
+
Scenario: Set an existing email address as the preferred address
|
27
|
+
Given I am in the same address book as before
|
28
|
+
And I run "ppl email bob --preferred rob@testing.com"
|
29
|
+
Then it should succeed
|
30
|
+
And bob should have 2 email addresses
|
31
|
+
And "rob@testing.com" should be the favourite email address
|
32
|
+
|
33
|
+
Scenario: Choose a different preferred email address
|
34
|
+
Given I am in the same address book as before
|
35
|
+
And I run "ppl email bob --preferred bob@example.org"
|
36
|
+
Then it should succeed
|
37
|
+
And bob should have 2 email addresses
|
38
|
+
And "bob@example.org" should be the favourite email address
|
39
|
+
|
40
|
+
Scenario: Remove the preferred flag from an email address
|
41
|
+
Given I am in the same address book as before
|
42
|
+
And I run "ppl email bob --not-preferred bob@example.org"
|
43
|
+
Then it should succeed
|
44
|
+
And bob should have 2 email addresses
|
45
|
+
And there should be no favourite email address
|
46
|
+
|
47
|
+
Scenario: Remove email addresses from a contact
|
12
48
|
Given I am in the same address book as before
|
13
49
|
And I run "ppl email bob --delete bob@example.org"
|
50
|
+
And I run "ppl email bob --d rob@testing.com"
|
14
51
|
Then it should succeed
|
15
52
|
And bob should have 0 email addresses
|
16
53
|
|
data/features/phone.feature
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
|
2
2
|
Feature: ppl phone
|
3
3
|
|
4
|
+
Scenario: Add a preferred phone number with a type
|
5
|
+
Given I am in an address book with a blank contact called bob
|
6
|
+
And I run "ppl phone bob 123 --type cell --preferred"
|
7
|
+
Then it should succeed
|
8
|
+
And bob should have 1 phone number
|
9
|
+
And the 1st phone number should be "* 123 (cell)"
|
10
|
+
|
4
11
|
Scenario: Add a phone number to a contact
|
5
12
|
Given I am in an address book with a blank contact called bob
|
6
13
|
And I run "ppl phone bob 01234567890"
|
@@ -22,6 +29,20 @@ Feature: ppl phone
|
|
22
29
|
And bob should have 1 phone number
|
23
30
|
And the 1st phone number should be "01234567890"
|
24
31
|
|
32
|
+
Scenario: Set an existing phone number as the preferred number
|
33
|
+
Given I am in the same address book as before
|
34
|
+
And I run "ppl phone bob 01234567890 --preferred"
|
35
|
+
Then it should succeed
|
36
|
+
And bob should have 1 phone number
|
37
|
+
And "01234567890" should be the preferred phone number
|
38
|
+
|
39
|
+
Scenario: Remove the preferred flag from a phone number
|
40
|
+
Given I am in the same address book as before
|
41
|
+
And I run "ppl phone bob -P 01234567890"
|
42
|
+
Then it should succeed
|
43
|
+
And bob should have 1 phone number
|
44
|
+
And there should be no preferred phone number
|
45
|
+
|
25
46
|
Scenario: Remove a phone number from a contact
|
26
47
|
Given I am in the same address book as before
|
27
48
|
And I run "ppl phone bob --delete 01234567890"
|
@@ -60,7 +60,7 @@ And /^its name should be "([^"]+)"$/ do |name|
|
|
60
60
|
end
|
61
61
|
|
62
62
|
Then(/^the (\d+).. email address should be "([^"]+)"$/) do |nth, address|
|
63
|
-
@email_addresses[nth.to_i - 1].should eq address
|
63
|
+
@email_addresses[nth.to_i - 1].strip.should eq address
|
64
64
|
end
|
65
65
|
|
66
66
|
Then /^running "ppl ([^"]+)" should output (\d+) lines?$/ do |command, lines|
|
@@ -88,6 +88,36 @@ Then(/^the (\d+).. URL should be "([^"]+)"$/) do |nth, url|
|
|
88
88
|
@urls[nth.to_i - 1].should eq url
|
89
89
|
end
|
90
90
|
|
91
|
+
And /^"([^"]+)" should be the favourite email address$/ do |email_address|
|
92
|
+
@email_addresses.should include "* #{email_address}"
|
93
|
+
@email_addresses.each do |line|
|
94
|
+
if line.include? "*"
|
95
|
+
line.should eq "* #{email_address}"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
And /^"([^"]+)" should be the preferred phone number$/ do |phone_number|
|
101
|
+
@phone_numbers.should include "* #{phone_number}"
|
102
|
+
@phone_numbers.each do |line|
|
103
|
+
if line.include? "*"
|
104
|
+
line.should eq "* #{phone_number}"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
And /^there should be no favourite email address$/ do
|
110
|
+
@email_addresses.each do |line|
|
111
|
+
line.should_not include "*"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
And /^there should be no preferred phone number$/ do
|
116
|
+
@phone_numbers.each do |line|
|
117
|
+
line.should_not include "*"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
91
121
|
Then /^(bob)'s birthday should be "([^"]+)"$/ do |id, birthday|
|
92
122
|
ppl("bday #{id}").should eq birthday
|
93
123
|
end
|
@@ -58,7 +58,9 @@ class Ppl::Adapter::Vcard::GreenCard
|
|
58
58
|
|
59
59
|
def encode_email_addresses(contact, vcard_maker)
|
60
60
|
contact.email_addresses.each do |email_address|
|
61
|
-
vcard_maker.add_email(email_address)
|
61
|
+
vcard_maker.add_email(email_address.address) do |vcard_email|
|
62
|
+
vcard_email.preferred = email_address.preferred
|
63
|
+
end
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
@@ -66,6 +68,7 @@ class Ppl::Adapter::Vcard::GreenCard
|
|
66
68
|
contact.phone_numbers.each do |phone_number|
|
67
69
|
vcard_maker.add_tel(phone_number.number) do |tel|
|
68
70
|
tel.location = phone_number.type
|
71
|
+
tel.preferred = phone_number.preferred
|
69
72
|
end
|
70
73
|
end
|
71
74
|
end
|
@@ -117,7 +120,9 @@ class Ppl::Adapter::Vcard::GreenCard
|
|
117
120
|
|
118
121
|
def decode_email_addresses(vcard, contact)
|
119
122
|
vcard.emails.each do |email|
|
120
|
-
|
123
|
+
email_address = Ppl::Entity::EmailAddress.new(email.to_s)
|
124
|
+
email_address.preferred = email.preferred
|
125
|
+
contact.email_addresses << email_address
|
121
126
|
end
|
122
127
|
end
|
123
128
|
|
@@ -137,6 +142,7 @@ class Ppl::Adapter::Vcard::GreenCard
|
|
137
142
|
phone_number = Ppl::Entity::PhoneNumber.new
|
138
143
|
phone_number.number = tel.to_s
|
139
144
|
phone_number.type = (tel.location | tel.nonstandard).join
|
145
|
+
phone_number.preferred = tel.preferred
|
140
146
|
contact.phone_numbers << phone_number
|
141
147
|
end
|
142
148
|
end
|
@@ -37,6 +37,7 @@ class Ppl::Application::Bootstrap
|
|
37
37
|
|
38
38
|
register :command_email do
|
39
39
|
email = Ppl::Command::Email.new
|
40
|
+
email.email_service = email_service
|
40
41
|
email.storage = storage_adapter
|
41
42
|
email.list_format = format_address_book_email_addresses
|
42
43
|
email.show_format = format_contact_email_addresses
|
@@ -101,6 +102,7 @@ class Ppl::Application::Bootstrap
|
|
101
102
|
|
102
103
|
register :command_phone do
|
103
104
|
phone = Ppl::Command::Phone.new
|
105
|
+
phone.phone_service = phone_service
|
104
106
|
phone.storage = storage_adapter
|
105
107
|
phone.list_format = format_address_book_phone_numbers
|
106
108
|
phone.show_format = format_contact_phone_numbers
|
@@ -349,5 +351,17 @@ class Ppl::Application::Bootstrap
|
|
349
351
|
Ppl::Adapter::EmailScraper::Mail.new
|
350
352
|
end
|
351
353
|
|
354
|
+
register :email_service do
|
355
|
+
email_service = Ppl::Service::EmailAddress.new
|
356
|
+
email_service.storage = storage_adapter
|
357
|
+
email_service
|
358
|
+
end
|
359
|
+
|
360
|
+
register :phone_service do
|
361
|
+
phone_service = Ppl::Service::PhoneNumber.new
|
362
|
+
phone_service.storage = storage_adapter
|
363
|
+
phone_service
|
364
|
+
end
|
365
|
+
|
352
366
|
end
|
353
367
|
|
data/lib/ppl/command/email.rb
CHANGED
@@ -1,18 +1,72 @@
|
|
1
1
|
|
2
|
-
class Ppl::Command::Email < Ppl::Command
|
2
|
+
class Ppl::Command::Email < Ppl::Application::Command
|
3
3
|
|
4
4
|
name "email"
|
5
5
|
description "Show or change a contact's email address"
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
attr_writer :email_service
|
8
|
+
attr_writer :list_format
|
9
|
+
attr_writer :show_format
|
10
10
|
|
11
11
|
def options(parser, options)
|
12
12
|
parser.banner = "usage: ppl email <contact> [<email-address>]"
|
13
13
|
parser.on("-d", "--delete", "delete email address") do
|
14
14
|
options[:delete] = true
|
15
15
|
end
|
16
|
+
parser.on("-p", "--preferred", "mark address as preferred") do
|
17
|
+
options[:preferred] = true
|
18
|
+
end
|
19
|
+
parser.on("-P", "--not-preferred", "mark address as not preferred") do
|
20
|
+
options[:preferred] = false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute(input, output)
|
25
|
+
action = determine_action(input)
|
26
|
+
send(action, input, output)
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def determine_action(input)
|
33
|
+
if input.arguments.length < 1
|
34
|
+
:list_address_book_email_addresses
|
35
|
+
elsif input.arguments.length < 2
|
36
|
+
:show_contact_email_addresses
|
37
|
+
elsif input.options[:delete]
|
38
|
+
:remove_email_address_from_contact
|
39
|
+
else
|
40
|
+
:update_contact_email_addresses
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def list_address_book_email_addresses(input, output)
|
45
|
+
address_book = @storage.load_address_book
|
46
|
+
output.line(@list_format.process(address_book))
|
47
|
+
end
|
48
|
+
|
49
|
+
def show_contact_email_addresses(input, output)
|
50
|
+
contact = @storage.require_contact(input.arguments[0])
|
51
|
+
output.line(@show_format.process(contact))
|
52
|
+
end
|
53
|
+
|
54
|
+
def remove_email_address_from_contact(input, output)
|
55
|
+
contact = @storage.require_contact(input.arguments[0])
|
56
|
+
@email_service.remove(contact, input.arguments[1])
|
57
|
+
end
|
58
|
+
|
59
|
+
def update_contact_email_addresses(input, output)
|
60
|
+
contact = @storage.require_contact(input.arguments[0])
|
61
|
+
if new_email_address?(contact, input.arguments[1])
|
62
|
+
@email_service.add(contact, input.arguments[1], input.options)
|
63
|
+
else
|
64
|
+
@email_service.update(contact, input.arguments[1], input.options)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def new_email_address?(contact, email_address)
|
69
|
+
(contact.email_addresses.select { |ea| ea.address == email_address }).empty?
|
16
70
|
end
|
17
71
|
|
18
72
|
end
|
data/lib/ppl/command/mutt.rb
CHANGED
@@ -62,9 +62,9 @@ class Ppl::Command::Mutt < Ppl::Application::Command
|
|
62
62
|
def match_by_email_address(contact, query)
|
63
63
|
matches = contact.email_addresses.select do |email_address|
|
64
64
|
if @options[:ignore_case]
|
65
|
-
email_address.downcase.include? query.downcase
|
65
|
+
email_address.address.downcase.include? query.downcase
|
66
66
|
else
|
67
|
-
email_address.include? query
|
67
|
+
email_address.address.include? query
|
68
68
|
end
|
69
69
|
end
|
70
70
|
if matches.length > 0
|
data/lib/ppl/command/phone.rb
CHANGED
@@ -1,61 +1,76 @@
|
|
1
1
|
|
2
|
-
class Ppl::Command::Phone < Ppl::Command
|
2
|
+
class Ppl::Command::Phone < Ppl::Application::Command
|
3
3
|
|
4
4
|
name "phone"
|
5
5
|
description "List, show or change phone numbers"
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
attr_writer :phone_service
|
8
|
+
attr_writer :list_format
|
9
|
+
attr_writer :show_format
|
10
10
|
|
11
11
|
def options(parser, options)
|
12
12
|
parser.banner = "usage: ppl phone <contact> [<number>]"
|
13
13
|
parser.on("-d", "--delete", "delete phone number") do
|
14
14
|
options[:delete] = true
|
15
15
|
end
|
16
|
-
parser.on("-t", "--type <type>") do |type|
|
16
|
+
parser.on("-t", "--type <type>", "set the phone number's type") do |type|
|
17
17
|
options[:type] = type
|
18
18
|
end
|
19
|
+
parser.on("-p", "--preferred", "mark phone number as preferred") do
|
20
|
+
options[:preferred] = true
|
21
|
+
end
|
22
|
+
parser.on("-P", "--not-preferred", "mark phone number as not preferred") do
|
23
|
+
options[:preferred] = false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def execute(input, output)
|
28
|
+
action = determine_action(input)
|
29
|
+
send(action, input, output)
|
30
|
+
true
|
19
31
|
end
|
20
32
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
33
|
+
private
|
34
|
+
|
35
|
+
def determine_action(input)
|
36
|
+
if input.arguments.length < 1
|
37
|
+
:list_address_book_phone_numbers
|
38
|
+
elsif input.arguments.length < 2
|
39
|
+
:show_contact_phone_numbers
|
40
|
+
elsif input.options[:delete]
|
41
|
+
:remove_phone_number_from_contact
|
25
42
|
else
|
26
|
-
|
43
|
+
:update_contact_phone_numbers
|
27
44
|
end
|
28
|
-
@storage.save_contact(contact)
|
29
|
-
true
|
30
45
|
end
|
31
46
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
@storage.save_contact(contact)
|
47
|
+
def list_address_book_phone_numbers(input, output)
|
48
|
+
address_book = @storage.load_address_book
|
49
|
+
output.line(@list_format.process(address_book))
|
36
50
|
end
|
37
51
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
matching_numbers.length < 1
|
52
|
+
def show_contact_phone_numbers(input, output)
|
53
|
+
contact = @storage.require_contact(input.arguments[0])
|
54
|
+
output.line(@show_format.process(contact))
|
43
55
|
end
|
44
56
|
|
45
|
-
def
|
46
|
-
|
47
|
-
|
48
|
-
phone_number.type = input.options[:type]
|
49
|
-
contact.phone_numbers << phone_number
|
57
|
+
def remove_phone_number_from_contact(input, output)
|
58
|
+
contact = @storage.require_contact(input.arguments[0])
|
59
|
+
@phone_service.remove(contact, input.arguments[1])
|
50
60
|
end
|
51
61
|
|
52
|
-
def
|
53
|
-
contact.
|
54
|
-
|
55
|
-
|
56
|
-
|
62
|
+
def update_contact_phone_numbers(input, output)
|
63
|
+
contact = @storage.require_contact(input.arguments[0])
|
64
|
+
if new_phone_number?(contact, input.arguments[1])
|
65
|
+
@phone_service.add(contact, input.arguments[1], input.options)
|
66
|
+
else
|
67
|
+
@phone_service.update(contact, input.arguments[1], input.options)
|
57
68
|
end
|
58
69
|
end
|
59
70
|
|
71
|
+
def new_phone_number?(contact, number)
|
72
|
+
(contact.phone_numbers.select { |pn| pn.number == number }).empty?
|
73
|
+
end
|
74
|
+
|
60
75
|
end
|
61
76
|
|
@@ -18,10 +18,13 @@ class Ppl::Format::AddressBook::EmailAddresses < Ppl::Format::AddressBook
|
|
18
18
|
def add_row(contact)
|
19
19
|
@table.add_row({
|
20
20
|
:id => sprintf("%s:", contact.id),
|
21
|
-
:email_addresses => contact.email_addresses
|
21
|
+
:email_addresses => stringify_email_addresses(contact.email_addresses),
|
22
22
|
})
|
23
23
|
end
|
24
24
|
|
25
|
+
def stringify_email_addresses(email_addresses)
|
26
|
+
email_addresses.map { |em| em.address }.join(", ")
|
27
|
+
end
|
25
28
|
|
26
29
|
end
|
27
30
|
|
@@ -20,7 +20,7 @@ class Ppl::Format::AddressBook::OneLine < Ppl::Format::AddressBook
|
|
20
20
|
email = nil
|
21
21
|
|
22
22
|
if !contact.email_addresses.empty?
|
23
|
-
email = sprintf("<%s>", contact.
|
23
|
+
email = sprintf("<%s>", choose_email_address(contact).address)
|
24
24
|
end
|
25
25
|
|
26
26
|
@table.add_row({
|
@@ -30,5 +30,14 @@ class Ppl::Format::AddressBook::OneLine < Ppl::Format::AddressBook
|
|
30
30
|
})
|
31
31
|
end
|
32
32
|
|
33
|
+
def choose_email_address(contact)
|
34
|
+
preferred = contact.email_addresses.find { |e| e.preferred }
|
35
|
+
if preferred.nil?
|
36
|
+
contact.email_addresses.first
|
37
|
+
else
|
38
|
+
preferred
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
33
42
|
end
|
34
43
|
|
@@ -1,30 +1,20 @@
|
|
1
1
|
|
2
2
|
class Ppl::Format::Contact::EmailAddresses < Ppl::Format::Contact
|
3
3
|
|
4
|
-
attr_writer :
|
5
|
-
attr_writer :colors
|
4
|
+
attr_writer :table
|
6
5
|
|
7
6
|
def initialize(colors={})
|
8
|
-
@
|
9
|
-
@color_adapter = Ppl::Adapter::Color::Colored.new
|
7
|
+
@table = Ppl::Format::Table.new([:star, :email_addresses], colors)
|
10
8
|
end
|
11
9
|
|
12
10
|
def process(contact)
|
13
|
-
lines = []
|
14
11
|
contact.email_addresses.each do |email_address|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def colorize_output(string)
|
23
|
-
if @colors["email_addresses"]
|
24
|
-
@color_adapter.colorize(string, @colors["email_addresses"])
|
25
|
-
else
|
26
|
-
string
|
12
|
+
@table.add_row({
|
13
|
+
:star => email_address.preferred ? "*" : " ",
|
14
|
+
:email_addresses => email_address.address,
|
15
|
+
})
|
27
16
|
end
|
17
|
+
@table.to_s
|
28
18
|
end
|
29
19
|
|
30
20
|
end
|
@@ -1,9 +1,13 @@
|
|
1
1
|
|
2
2
|
class Ppl::Format::Contact::Full < Ppl::Format::Contact
|
3
3
|
|
4
|
+
attr_writer :email_address_format
|
5
|
+
attr_writer :phone_number_format
|
4
6
|
attr_writer :postal_address_format
|
5
7
|
|
6
8
|
def initialize
|
9
|
+
@email_address_format = Ppl::Format::Contact::EmailAddresses.new
|
10
|
+
@phone_number_format = Ppl::Format::Contact::PhoneNumber.new
|
7
11
|
@postal_address_format = Ppl::Format::PostalAddress::OneLine.new
|
8
12
|
end
|
9
13
|
|
@@ -37,12 +41,22 @@ class Ppl::Format::Contact::Full < Ppl::Format::Contact
|
|
37
41
|
if !contact.name.nil?
|
38
42
|
line += contact.name
|
39
43
|
end
|
40
|
-
|
41
|
-
|
44
|
+
email_address = choose_first_line_address(contact)
|
45
|
+
unless email_address.nil?
|
46
|
+
line += " <#{email_address.address}>"
|
42
47
|
end
|
43
48
|
return line
|
44
49
|
end
|
45
50
|
|
51
|
+
def choose_first_line_address(contact)
|
52
|
+
preferred = contact.email_addresses.find { |e| e.preferred }
|
53
|
+
if preferred.nil?
|
54
|
+
contact.email_addresses.first
|
55
|
+
else
|
56
|
+
preferred
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
46
60
|
def vitals(contact)
|
47
61
|
vitals = []
|
48
62
|
if !contact.birthday.nil?
|
@@ -60,16 +74,18 @@ class Ppl::Format::Contact::Full < Ppl::Format::Contact
|
|
60
74
|
end
|
61
75
|
|
62
76
|
def format_email_addresses(contact)
|
63
|
-
|
77
|
+
unless contact.email_addresses.empty?
|
78
|
+
@lines << ""
|
79
|
+
@lines << "Email Addresses:"
|
80
|
+
@lines << @email_address_format.process(contact)
|
81
|
+
end
|
64
82
|
end
|
65
83
|
|
66
84
|
def format_phone_numbers(contact)
|
67
85
|
unless contact.phone_numbers.empty?
|
68
86
|
@lines << ""
|
69
87
|
@lines << "Phone Numbers"
|
70
|
-
|
71
|
-
@lines << " #{pn.number}"
|
72
|
-
end
|
88
|
+
@lines << @phone_number_format.process(contact)
|
73
89
|
end
|
74
90
|
end
|
75
91
|
|
@@ -86,12 +102,15 @@ class Ppl::Format::Contact::Full < Ppl::Format::Contact
|
|
86
102
|
push_list("URLs", contact.urls)
|
87
103
|
end
|
88
104
|
|
89
|
-
def push_list(label, list)
|
105
|
+
def push_list(label, list, property = nil)
|
90
106
|
return if list.empty?
|
91
107
|
@lines.push("")
|
92
108
|
@lines.push("#{label}:")
|
93
109
|
if list.kind_of?(Array)
|
94
|
-
list.each
|
110
|
+
list.each do |item|
|
111
|
+
string = property.nil? ? item : item.send(property)
|
112
|
+
@lines << " #{string}"
|
113
|
+
end
|
95
114
|
else
|
96
115
|
@lines.push(" #{list}")
|
97
116
|
end
|
@@ -4,7 +4,7 @@ class Ppl::Format::Contact::PhoneNumber < Ppl::Format::Contact
|
|
4
4
|
attr_writer :table
|
5
5
|
|
6
6
|
def initialize(colors={})
|
7
|
-
@table = Ppl::Format::Table.new([:phone_numbers, :type], colors)
|
7
|
+
@table = Ppl::Format::Table.new([:star, :phone_numbers, :type], colors)
|
8
8
|
end
|
9
9
|
|
10
10
|
def process(contact)
|
@@ -16,11 +16,16 @@ class Ppl::Format::Contact::PhoneNumber < Ppl::Format::Contact
|
|
16
16
|
|
17
17
|
def add_row(phone_number)
|
18
18
|
@table.add_row({
|
19
|
+
:star => format_star(phone_number),
|
19
20
|
:phone_numbers => phone_number.number,
|
20
21
|
:type => format_type(phone_number.type),
|
21
22
|
})
|
22
23
|
end
|
23
24
|
|
25
|
+
def format_star(phone_number)
|
26
|
+
phone_number.preferred ? "*" : " "
|
27
|
+
end
|
28
|
+
|
24
29
|
def format_type(type)
|
25
30
|
unless type.nil? || type == ""
|
26
31
|
"(#{type})"
|
data/lib/ppl/format/table.rb
CHANGED