ppl 1.10.0 → 1.11.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.
@@ -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