ppl 1.10.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,6 +18,7 @@ class Ppl::Adapter::Vcard::Vpim
18
18
  encode_name(contact, maker)
19
19
  encode_email_addresses(contact, maker)
20
20
  encode_phone_numbers(contact, maker)
21
+ encode_nicknames(contact, maker)
21
22
  encode_organizations(contact, maker)
22
23
  encode_postal_address(contact, maker)
23
24
  encode_urls(contact, maker)
@@ -32,6 +33,7 @@ class Ppl::Adapter::Vcard::Vpim
32
33
  decode_email_addresses(vcard, contact)
33
34
  decode_phone_numbers(vcard, contact)
34
35
  decode_postal_address(vcard, contact)
36
+ decode_nicknames(vcard, contact)
35
37
  decode_organizations(vcard, contact)
36
38
  decode_name(vcard, contact)
37
39
  decode_urls(vcard, contact)
@@ -89,6 +91,10 @@ class Ppl::Adapter::Vcard::Vpim
89
91
  contact.urls.each { |url| vcard_maker.add_url(url) }
90
92
  end
91
93
 
94
+ def encode_nicknames(contact, vcard_maker)
95
+ vcard_maker.nickname = contact.nicknames
96
+ end
97
+
92
98
  def decode_birthday(vcard, contact)
93
99
  contact.birthday = vcard.birthday unless vcard.birthday.nil?
94
100
  end
@@ -132,5 +138,15 @@ class Ppl::Adapter::Vcard::Vpim
132
138
  vcard.urls.each { |url| contact.urls.push(url.uri) }
133
139
  end
134
140
 
141
+ def decode_nicknames(vcard, contact)
142
+ # There appears to be a minor vpim bug here: vpim allows us to save an array
143
+ # of nicknames but sees it as one big single nickname when decoding. This
144
+ # code is here to work around that issue by "finishing the job".
145
+ nicknames = vcard.nicknames.first
146
+ if !nicknames.nil?
147
+ nicknames.split(";").each{ |nickname| contact.nicknames.push(nickname) }
148
+ end
149
+ end
150
+
135
151
  end
136
152
 
@@ -13,6 +13,7 @@ class Ppl::Application::Bootstrap
13
13
  Ppl::Command::Mv.new,
14
14
  Ppl::Command::Show.new,
15
15
  Ppl::Command::Name.new,
16
+ Ppl::Command::Nick.new,
16
17
  Ppl::Command::Email.new,
17
18
  Ppl::Command::Org.new,
18
19
  Ppl::Command::Phone.new,
@@ -0,0 +1,21 @@
1
+
2
+ class Ppl::Command::Nick < Ppl::Command::Attribute
3
+
4
+ name "nick"
5
+ description "List, show or change nicknames"
6
+
7
+ def initialize
8
+ @attribute = :nicknames
9
+ @show_format = Ppl::Format::Contact::Nicknames.new
10
+ @list_format = Ppl::Format::AddressBook::Nicknames.new
11
+ end
12
+
13
+ def options(parser, options)
14
+ parser.banner = "usage: ppl nick <contact> [<nickname>]"
15
+ parser.on("-d", "--delete", "delete nickname") do
16
+ options[:delete] = true
17
+ end
18
+ end
19
+
20
+ end
21
+
@@ -3,6 +3,7 @@ class Ppl::Entity::Contact
3
3
 
4
4
  attr_accessor :id
5
5
  attr_accessor :name
6
+ attr_accessor :nicknames
6
7
  attr_accessor :email_addresses
7
8
  attr_accessor :birthday
8
9
  attr_accessor :phone_numbers
@@ -12,6 +13,7 @@ class Ppl::Entity::Contact
12
13
 
13
14
  def initialize
14
15
  @email_addresses = []
16
+ @nicknames = []
15
17
  @organizations = []
16
18
  @phone_numbers = []
17
19
  @urls = []
@@ -16,15 +16,12 @@ class Ppl::Format::AddressBook::Birthdays < Ppl::Format::AddressBook
16
16
  private
17
17
 
18
18
  def add_row(contact)
19
- id = sprintf("%s:", contact.id)
20
19
  birthday = nil
21
-
22
20
  if !contact.birthday.nil?
23
21
  birthday = contact.birthday.strftime("%Y-%m-%d")
24
22
  end
25
-
26
23
  @table.add_row({
27
- :id => id,
24
+ :id => sprintf("%s:", contact.id),
28
25
  :birthday => birthday,
29
26
  })
30
27
  end
@@ -4,7 +4,7 @@ class Ppl::Format::AddressBook::EmailAddresses < Ppl::Format::AddressBook
4
4
  attr_writer :table
5
5
 
6
6
  def initialize
7
- @table = Ppl::Format::Table.new([:id, :email_addresses])
7
+ @table = Ppl::Format::Table.new([:contact_id, :email_addresses])
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -16,16 +16,9 @@ class Ppl::Format::AddressBook::EmailAddresses < Ppl::Format::AddressBook
16
16
  private
17
17
 
18
18
  def add_row(contact)
19
- id = sprintf("%s:", contact.id)
20
- email_addresses = nil
21
-
22
- if !contact.email_addresses.empty?
23
- email_addresses = contact.email_addresses.join(", ")
24
- end
25
-
26
19
  @table.add_row({
27
- :id => id,
28
- :email_addresses => email_addresses,
20
+ :contact_id => sprintf("%s:", contact.id),
21
+ :email_addresses => contact.email_addresses.join(", "),
29
22
  })
30
23
  end
31
24
 
@@ -0,0 +1,27 @@
1
+
2
+ class Ppl::Format::AddressBook::Nicknames < Ppl::Format::AddressBook
3
+
4
+ attr_writer :table
5
+
6
+ def initialize
7
+ @table = Ppl::Format::Table.new([:id, :nicknames])
8
+ end
9
+
10
+ def process(address_book)
11
+ address_book.contacts.each { |contact| add_row(contact) }
12
+ @table.to_s
13
+ end
14
+
15
+
16
+ private
17
+
18
+ def add_row(contact)
19
+ @table.add_row({
20
+ :id => sprintf("%s:", contact.id),
21
+ :nicknames => contact.nicknames.join(", "),
22
+ })
23
+ end
24
+
25
+
26
+ end
27
+
@@ -16,16 +16,9 @@ class Ppl::Format::AddressBook::Urls < Ppl::Format::AddressBook
16
16
  private
17
17
 
18
18
  def add_row(contact)
19
- id = sprintf("%s:", contact.id)
20
- urls = nil
21
-
22
- if !contact.urls.empty?
23
- urls = contact.urls.join(", ")
24
- end
25
-
26
19
  @table.add_row({
27
- :id => id,
28
- :urls => urls,
20
+ :id => sprintf("%s:", contact.id),
21
+ :urls => contact.urls.join(", "),
29
22
  })
30
23
  end
31
24
 
@@ -0,0 +1,9 @@
1
+
2
+ class Ppl::Format::Contact::Nicknames < Ppl::Format::Contact
3
+
4
+ def process(contact)
5
+ contact.nicknames.join("\n")
6
+ end
7
+
8
+ end
9
+
data/lib/ppl.rb CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Ppl
3
3
 
4
- Version = "1.10.0"
4
+ Version = "1.11.0"
5
5
 
6
6
  module Adapter
7
7
  end
@@ -50,6 +50,7 @@ require "ppl/command/help"
50
50
  require "ppl/command/show"
51
51
  require "ppl/command/mv"
52
52
  require "ppl/command/name"
53
+ require "ppl/command/nick"
53
54
  require "ppl/command/email"
54
55
  require "ppl/command/org"
55
56
  require "ppl/command/phone"
@@ -72,6 +73,7 @@ require "ppl/format/address_book/email_addresses"
72
73
  require "ppl/format/address_book/mutt_query"
73
74
  require "ppl/format/address_book/names"
74
75
  require "ppl/format/address_book/one_line"
76
+ require "ppl/format/address_book/nicknames"
75
77
  require "ppl/format/address_book/organizations"
76
78
  require "ppl/format/address_book/phone_numbers"
77
79
  require "ppl/format/address_book/postal_addresses"
@@ -81,6 +83,7 @@ require "ppl/format/contact/birthday"
81
83
  require "ppl/format/contact/email_addresses"
82
84
  require "ppl/format/contact/full"
83
85
  require "ppl/format/contact/name"
86
+ require "ppl/format/contact/nicknames"
84
87
  require "ppl/format/contact/organization"
85
88
  require "ppl/format/contact/phone_number"
86
89
  require "ppl/format/contact/postal_address"
data/ppl.gemspec CHANGED
@@ -2,8 +2,8 @@
2
2
  Gem::Specification.new do |spec|
3
3
 
4
4
  spec.name = "ppl"
5
- spec.version = "1.10.0"
6
- spec.date = "2013-01-10"
5
+ spec.version = "1.11.0"
6
+ spec.date = "2013-01-20"
7
7
 
8
8
  spec.required_ruby_version = ">= 1.9.3"
9
9
 
@@ -73,6 +73,11 @@ describe Ppl::Adapter::Vcard::Vpim, "#encode" do
73
73
  @adapter.encode(@contact).should include("URL:http://google.com")
74
74
  end
75
75
 
76
+ it "should encode the contact's nickname" do
77
+ @contact.nicknames.push "Sleepy"
78
+ @adapter.encode(@contact).should include("NICKNAME:Sleepy")
79
+ end
80
+
76
81
  end
77
82
 
78
83
 
@@ -237,5 +242,17 @@ describe Ppl::Adapter::Vcard::Vpim, "#decode" do
237
242
  contact.urls.first.should eq "http://google.com"
238
243
  end
239
244
 
245
+ it "should decode the contact's nickame" do
246
+ vcard = [
247
+ "BEGIN:VCARD",
248
+ "N:,test",
249
+ "VERSION:3.0",
250
+ "NICKNAME:Happy;Cheerful",
251
+ "END:VCARD",
252
+ ].join("\n")
253
+ contact = @adapter.decode(vcard)
254
+ contact.nicknames.first.should eq "Happy"
255
+ end
256
+
240
257
  end
241
258
 
@@ -57,6 +57,9 @@ describe Ppl::Application::Bootstrap do
57
57
  it "should contain the 'name' command" do
58
58
  @bootstrap.command_suite.find_command("name").should_not be nil
59
59
  end
60
+ it "should contain the 'nick' command" do
61
+ @bootstrap.command_suite.find_command("nick").should_not be nil
62
+ end
60
63
  it "should contain the 'org' command" do
61
64
  @bootstrap.command_suite.find_command("org").should_not be nil
62
65
  end
@@ -0,0 +1,15 @@
1
+
2
+ describe Ppl::Command::Nick do
3
+
4
+ before(:each) do
5
+ @command = Ppl::Command::Nick.new
6
+ end
7
+
8
+ describe "#name" do
9
+ it "should be 'nick'" do
10
+ @command.name.should eq "nick"
11
+ end
12
+ end
13
+
14
+ end
15
+
@@ -52,6 +52,12 @@ describe Ppl::Entity::Contact do
52
52
  end
53
53
  end
54
54
 
55
+ describe "#nicknames" do
56
+ it "should return an array" do
57
+ @contact.nicknames.should be_a(Array)
58
+ end
59
+ end
60
+
55
61
  describe "#organizations" do
56
62
  it "should return an array" do
57
63
  @contact.organizations.should be_a(Array)
@@ -17,8 +17,8 @@ describe Ppl::Format::AddressBook::EmailAddresses do
17
17
 
18
18
  it "should at least show the contact's id" do
19
19
  @table.should_receive(:add_row).with({
20
- :id => "test:",
21
- :email_addresses => nil,
20
+ :contact_id => "test:",
21
+ :email_addresses => "",
22
22
  })
23
23
  @format.process(@address_book)
24
24
  end
@@ -26,7 +26,7 @@ describe Ppl::Format::AddressBook::EmailAddresses do
26
26
  it "should show an email address if it's available" do
27
27
  @contact.email_addresses.push "jdoe@example.org"
28
28
  @table.should_receive(:add_row).with({
29
- :id => "test:",
29
+ :contact_id => "test:",
30
30
  :email_addresses => "jdoe@example.org",
31
31
  })
32
32
  @format.process(@address_book)
@@ -0,0 +1,38 @@
1
+
2
+ describe Ppl::Format::AddressBook::Nicknames do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::AddressBook::Nicknames.new
6
+ @address_book = Ppl::Entity::AddressBook.new
7
+ @contact = Ppl::Entity::Contact.new
8
+ @table = double(Ppl::Format::Table)
9
+
10
+ @contact.id = "test"
11
+ @format.table = @table
12
+
13
+ @address_book.contacts.push(@contact)
14
+ end
15
+
16
+ describe "#process" do
17
+
18
+ it "should at least show the contact's id" do
19
+ @table.should_receive(:add_row).with({
20
+ :id => "test:",
21
+ :nicknames => "",
22
+ })
23
+ @format.process(@address_book)
24
+ end
25
+
26
+ it "should show a nickname if it's available" do
27
+ @contact.nicknames.push("Stupid")
28
+ @table.should_receive(:add_row).with({
29
+ :id => "test:",
30
+ :nicknames => "Stupid",
31
+ })
32
+ @format.process(@address_book)
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
@@ -18,7 +18,7 @@ describe Ppl::Format::AddressBook::Urls do
18
18
  it "should at least show the contact's id" do
19
19
  @table.should_receive(:add_row).with({
20
20
  :id => "test:",
21
- :urls => nil,
21
+ :urls => "",
22
22
  })
23
23
  @format.process(@address_book)
24
24
  end
@@ -0,0 +1,23 @@
1
+
2
+ describe Ppl::Format::Contact::Nicknames do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Contact::Nicknames.new
6
+ @contact = Ppl::Entity::Contact.new
7
+ end
8
+
9
+ describe "#process" do
10
+
11
+ it "should return an empty string if the contact lacks a nickname" do
12
+ @format.process(Ppl::Entity::Contact.new).should eq ""
13
+ end
14
+
15
+ it "should return the contact's nickname if one is set" do
16
+ @contact.nicknames.push("Dopey")
17
+ @format.process(@contact).should eq "Dopey"
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ppl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-10 00:00:00.000000000 Z
12
+ date: 2013-01-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: inifile
16
- requirement: &3232880 !ruby/object:Gem::Requirement
16
+ requirement: &12830980 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.0.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *3232880
24
+ version_requirements: *12830980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rugged
27
- requirement: &3230760 !ruby/object:Gem::Requirement
27
+ requirement: &12830520 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - =
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.17.0.b6
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *3230760
35
+ version_requirements: *12830520
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: vpim
38
- requirement: &3228280 !ruby/object:Gem::Requirement
38
+ requirement: &12830060 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0.695'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *3228280
46
+ version_requirements: *12830060
47
47
  description: CLI Address Book
48
48
  email: henry@henrysmith.org
49
49
  executables:
@@ -84,6 +84,7 @@ files:
84
84
  - lib/ppl/command/mutt.rb
85
85
  - lib/ppl/command/mv.rb
86
86
  - lib/ppl/command/name.rb
87
+ - lib/ppl/command/nick.rb
87
88
  - lib/ppl/command/org.rb
88
89
  - lib/ppl/command/phone.rb
89
90
  - lib/ppl/command/post.rb
@@ -102,6 +103,7 @@ files:
102
103
  - lib/ppl/format/address_book/email_addresses.rb
103
104
  - lib/ppl/format/address_book/mutt_query.rb
104
105
  - lib/ppl/format/address_book/names.rb
106
+ - lib/ppl/format/address_book/nicknames.rb
105
107
  - lib/ppl/format/address_book/one_line.rb
106
108
  - lib/ppl/format/address_book/organizations.rb
107
109
  - lib/ppl/format/address_book/phone_numbers.rb
@@ -112,6 +114,7 @@ files:
112
114
  - lib/ppl/format/contact/email_addresses.rb
113
115
  - lib/ppl/format/contact/full.rb
114
116
  - lib/ppl/format/contact/name.rb
117
+ - lib/ppl/format/contact/nicknames.rb
115
118
  - lib/ppl/format/contact/organization.rb
116
119
  - lib/ppl/format/contact/phone_number.rb
117
120
  - lib/ppl/format/contact/postal_address.rb
@@ -144,6 +147,7 @@ files:
144
147
  - spec/ppl/command/mutt_spec.rb
145
148
  - spec/ppl/command/mv_spec.rb
146
149
  - spec/ppl/command/name_spec.rb
150
+ - spec/ppl/command/nick_spec.rb
147
151
  - spec/ppl/command/org_spec.rb
148
152
  - spec/ppl/command/phone_spec.rb
149
153
  - spec/ppl/command/post_spec.rb
@@ -159,6 +163,7 @@ files:
159
163
  - spec/ppl/format/address_book/email_addresses_spec.rb
160
164
  - spec/ppl/format/address_book/mutt_query_spec.rb
161
165
  - spec/ppl/format/address_book/names_spec.rb
166
+ - spec/ppl/format/address_book/nicknames_spec.rb
162
167
  - spec/ppl/format/address_book/one_line_spec.rb
163
168
  - spec/ppl/format/address_book/organizations_spec.rb
164
169
  - spec/ppl/format/address_book/phone_numbers_spec.rb
@@ -169,6 +174,7 @@ files:
169
174
  - spec/ppl/format/contact/email_addresses_spec.rb
170
175
  - spec/ppl/format/contact/full_spec.rb
171
176
  - spec/ppl/format/contact/name_spec.rb
177
+ - spec/ppl/format/contact/nicknames_spec.rb
172
178
  - spec/ppl/format/contact/organization_spec.rb
173
179
  - spec/ppl/format/contact/phone_number_spec.rb
174
180
  - spec/ppl/format/contact/postal_address_spec.rb