ppl 1.24.0 → 1.25.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f33a5e4b27cd115dbac2ce3532e4fc81e93635e
4
- data.tar.gz: 1eef11f3f8784fa687c211b9343fe45e914c2cb2
3
+ metadata.gz: 3438ed54b9c4ab282ccc9a9389511777516fee7a
4
+ data.tar.gz: 63d86817042ebf3a768294d394bfc3c77ff60a01
5
5
  SHA512:
6
- metadata.gz: 19c1da0a40163b4e3b37f9ae01ef70b590b312b2dc381cdb5ba35f776261f85fda799736c0e5d0694a4f7d67e3a85f232f7ab961b95f8a2e15fd3f1f72e1ffe1
7
- data.tar.gz: 4798e2a97cdb5daf366d821e8b736d187798ef238a00329aae88d66149379cfad1207d98c8bf4f432099e4756617802c61a307458518876340dfbc386ace4973
6
+ metadata.gz: c789b838676b6d9cd50f0bcd6c0060fdd87287ed3f0dd6088c11ba5a9cd995e0306eb488bc40e2f81fe9c3c7ad91a5206f6cc586cae9f93c09d21f783ff1fec6
7
+ data.tar.gz: f48891ad62cc516d9a69a73ccfe84080b086017d8d307683e4934563786d18163f7e2b5c93ee17b2fbefae67c5485598cefbf8846fb001a5756b9f594da22f55
data/completions/bash CHANGED
@@ -211,7 +211,7 @@ __ppl_commands()
211
211
 
212
212
  __ppl_contact_ids()
213
213
  {
214
- ppl nick --no-color | cut -d ':' -f 1
214
+ ppl ls --format "%i"
215
215
  }
216
216
 
217
217
  __ppl_contact_email_addresses()
@@ -41,6 +41,7 @@ class Ppl::Application::Bootstrap
41
41
  email.storage = storage_adapter
42
42
  email.list_format = format_address_book_email_addresses
43
43
  email.show_format = format_contact_email_addresses
44
+ email.custom_format = format_email_address_custom
44
45
  email
45
46
  end
46
47
 
@@ -59,7 +60,8 @@ class Ppl::Application::Bootstrap
59
60
  register :command_ls do
60
61
  ls = Ppl::Command::Ls.new
61
62
  ls.storage = storage_adapter
62
- ls.format = format_address_book_one_line
63
+ ls.default_format = format_address_book_one_line
64
+ ls.custom_format = format_contact_custom
63
65
  ls
64
66
  end
65
67
 
@@ -278,6 +280,18 @@ class Ppl::Application::Bootstrap
278
280
  Ppl::Format::Contact::Birthday.new(colors)
279
281
  end
280
282
 
283
+ register :format_contact_custom do
284
+ custom = Ppl::Format::Custom::Contact.new
285
+ custom.preset_formats = configuration.pretty
286
+ custom
287
+ end
288
+
289
+ register :format_email_address_custom do
290
+ custom = Ppl::Format::Custom::EmailAddress.new
291
+ custom.preset_formats = configuration.pretty
292
+ custom
293
+ end
294
+
281
295
  register :format_contact_email_addresses do
282
296
  colors = configuration.command_colors("email")
283
297
  Ppl::Format::Contact::EmailAddresses.new(colors)
@@ -44,6 +44,10 @@ class Ppl::Application::Configuration
44
44
  result = config[search]
45
45
  end
46
46
 
47
+ def pretty
48
+ user_configuration["pretty"]
49
+ end
50
+
47
51
  private
48
52
 
49
53
  def default_configuration
@@ -7,6 +7,7 @@ class Ppl::Command::Email < Ppl::Application::Command
7
7
  attr_writer :email_service
8
8
  attr_writer :list_format
9
9
  attr_writer :show_format
10
+ attr_writer :custom_format
10
11
 
11
12
  def options(parser, options)
12
13
  parser.banner = "usage: ppl email <contact> [<email-address>]"
@@ -19,6 +20,9 @@ class Ppl::Command::Email < Ppl::Application::Command
19
20
  parser.on("-P", "--not-preferred", "mark address as not preferred") do
20
21
  options[:preferred] = false
21
22
  end
23
+ parser.on("--format <format>", "specify a custom output format") do |f|
24
+ options[:format] = f
25
+ end
22
26
  end
23
27
 
24
28
  def execute(input, output)
@@ -48,7 +52,7 @@ class Ppl::Command::Email < Ppl::Application::Command
48
52
 
49
53
  def show_contact_email_addresses(input, output)
50
54
  contact = @storage.require_contact(input.arguments[0])
51
- output.line(@show_format.process(contact))
55
+ output.line(format_contact(contact, input.options))
52
56
  end
53
57
 
54
58
  def remove_email_address_from_contact(input, output)
@@ -69,5 +73,14 @@ class Ppl::Command::Email < Ppl::Application::Command
69
73
  (contact.email_addresses.select { |ea| ea.address == email_address }).empty?
70
74
  end
71
75
 
76
+ def format_contact(contact, options)
77
+ if options[:format].nil?
78
+ @show_format.process(contact)
79
+ else
80
+ @custom_format.format = options[:format]
81
+ contact.email_addresses.map { |e| @custom_format.process(e) }.join("\n")
82
+ end
83
+ end
84
+
72
85
  end
73
86
 
@@ -4,17 +4,47 @@ class Ppl::Command::Ls < Ppl::Application::Command
4
4
  name "ls"
5
5
  description "List all contacts"
6
6
 
7
- attr_writer :format
7
+ attr_writer :default_format
8
+ attr_writer :custom_format
8
9
 
9
10
  def options(parser, options)
10
11
  parser.banner = "usage: ppl ls"
12
+ parser.on("--format <format>", "specify a custom output format") do |format|
13
+ options[:format] = format
14
+ end
15
+ parser.on("--pretty <format>", "specify a custom output format") do |pretty|
16
+ options[:pretty] = pretty
17
+ end
11
18
  end
12
19
 
13
20
  def execute(input, output)
14
21
  address_book = @storage.load_address_book
15
- formatted = @format.process(address_book)
22
+ formatted = format_address_book(address_book, input.options)
16
23
  output.line(formatted)
17
- return true
24
+ true
25
+ end
26
+
27
+ private
28
+
29
+ def format_address_book(address_book, options)
30
+ if custom_formatting? options
31
+ use_custom_format(address_book, options)
32
+ else
33
+ @default_format.process(address_book)
34
+ end
35
+ end
36
+
37
+ def custom_formatting?(options)
38
+ options[:pretty] || options[:format]
39
+ end
40
+
41
+ def use_custom_format(address_book, options)
42
+ if !options[:pretty].nil?
43
+ @custom_format.use_preset options[:pretty]
44
+ elsif !options[:format].nil?
45
+ @custom_format.format = options[:format]
46
+ end
47
+ address_book.contacts.map { |c| @custom_format.process(c) }.join("\n")
18
48
  end
19
49
 
20
50
  end
@@ -0,0 +1,55 @@
1
+
2
+ class Ppl::Format::Custom::Contact < Ppl::Format::Custom
3
+
4
+ format :n do |anything|
5
+ "\n"
6
+ end
7
+
8
+ format :i do |contact|
9
+ contact.id
10
+ end
11
+
12
+ format :N do |contact|
13
+ contact.name
14
+ end
15
+
16
+ format :a do |contact|
17
+ contact.age(Date.today)
18
+ end
19
+
20
+ format :b do |contact|
21
+ unless contact.birthday.nil?
22
+ contact.birthday.strftime("%Y-%m-%d")
23
+ end
24
+ end
25
+
26
+ format :k do |contact|
27
+ contact.nicknames.first
28
+ end
29
+
30
+ format :e do |contact|
31
+ preferred = contact.email_addresses.find { |e| e.preferred }
32
+ first = contact.email_addresses.first
33
+ if !preferred.nil?
34
+ preferred.address
35
+ elsif !first.nil?
36
+ first.address
37
+ end
38
+ end
39
+
40
+ format :o do |contact|
41
+ contact.organizations.first
42
+ end
43
+
44
+ format :p do |contact|
45
+ preferred = contact.phone_numbers.find { |p| p.preferred }
46
+ first = contact.phone_numbers.first
47
+ if !preferred.nil?
48
+ preferred.number
49
+ elsif !first.nil?
50
+ first.number
51
+ end
52
+ end
53
+
54
+ end
55
+
@@ -0,0 +1,15 @@
1
+
2
+ class Ppl::Format::Custom::EmailAddress < Ppl::Format::Custom
3
+
4
+ format :a do |email_adddress|
5
+ email_adddress.address
6
+ end
7
+
8
+ format :f do |email_adddress|
9
+ if email_adddress.preferred
10
+ "*"
11
+ end
12
+ end
13
+
14
+ end
15
+
@@ -0,0 +1,19 @@
1
+
2
+ class Ppl::Format::Custom::PhoneNumber < Ppl::Format::Custom
3
+
4
+ format :n do |phone_number|
5
+ phone_number.number
6
+ end
7
+
8
+ format :t do |phone_number|
9
+ phone_number.type
10
+ end
11
+
12
+ format :f do |phone_number|
13
+ if phone_number.preferred
14
+ "*"
15
+ end
16
+ end
17
+
18
+ end
19
+
@@ -0,0 +1,61 @@
1
+
2
+ class Ppl::Format::Custom
3
+
4
+ attr_accessor :format
5
+ attr_accessor :preset_formats
6
+
7
+ def self.format(symbol, &block)
8
+ @format_blocks ||= {}
9
+ @format_blocks[symbol] = block
10
+ end
11
+
12
+ def self.process(key, object)
13
+ if @format_blocks[key]
14
+ @format_blocks[key][object]
15
+ else
16
+ key
17
+ end
18
+ end
19
+
20
+ def initialize(format = nil)
21
+ @format = format
22
+ end
23
+
24
+ def process(object)
25
+ @object = object
26
+ string_pieces = @format.scan(/[^%]+|%-?\d*./)
27
+ string_pieces.map(&method(:process_piece)).join
28
+ end
29
+
30
+ def use_preset(format_name)
31
+ @format = @preset_formats[format_name]
32
+ end
33
+
34
+ private
35
+
36
+ def process_piece(string)
37
+ matches = string.scan(/^%(-?\d+)?([a-z])$/i)
38
+ if !matches.empty?
39
+ output = generate_output(matches[0][1].to_sym)
40
+ pad_output(output, matches[0][0].to_i)
41
+ else
42
+ string
43
+ end
44
+ end
45
+
46
+ def generate_output(symbol)
47
+ self.class.process(symbol, @object)
48
+ end
49
+
50
+ def pad_output(output, padding)
51
+ if padding > 0
52
+ output.to_s.rjust(padding, " ")
53
+ elsif padding < 0
54
+ output.to_s.ljust(padding.abs, " ")
55
+ else
56
+ output
57
+ end
58
+ end
59
+
60
+ end
61
+
data/lib/ppl.rb CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Ppl
3
3
 
4
- Version = "1.24.0"
4
+ Version = "1.25.0"
5
5
 
6
6
  module Adapter
7
7
  end
@@ -104,6 +104,10 @@ require "ppl/format/contact/organization"
104
104
  require "ppl/format/contact/phone_number"
105
105
  require "ppl/format/contact/postal_address"
106
106
  require "ppl/format/contact/urls"
107
+ require "ppl/format/custom"
108
+ require "ppl/format/custom/contact"
109
+ require "ppl/format/custom/email_address"
110
+ require "ppl/format/custom/phone_number"
107
111
  require "ppl/format/postal_address"
108
112
  require "ppl/format/postal_address/one_line"
109
113
  require "ppl/format/table"
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.24.0"
6
- spec.date = "2013-04-23"
5
+ spec.version = "1.25.0"
6
+ spec.date = "2013-04-24"
7
7
 
8
8
  spec.required_ruby_version = ">= 1.9.3"
9
9
 
@@ -21,12 +21,14 @@ describe Ppl::Command::Email do
21
21
  @output = double(Ppl::Application::Output)
22
22
  @list_format = double(Ppl::Format::AddressBook)
23
23
  @show_format = double(Ppl::Format::Contact)
24
+ @custom_format = double(Ppl::Format::Custom)
24
25
  @storage.stub(:require_contact).and_return(@contact)
25
26
  @storage.stub(:save_contact)
26
27
  @command.storage = @storage
27
28
  @command.email_service = @service
28
29
  @command.list_format = @list_format
29
30
  @command.show_format = @show_format
31
+ @command.custom_format = @custom_format
30
32
  end
31
33
 
32
34
  it "should list all email addresses by default" do
@@ -43,6 +45,17 @@ describe Ppl::Command::Email do
43
45
  @output.should_receive(:line).with("imagine this is a list")
44
46
  @command.execute(@input, @output)
45
47
  end
48
+
49
+ it "should output addresses in a custom format if one is given" do
50
+ @input.arguments << "jdoe"
51
+ @input.options[:format] = "%e"
52
+ @contact.email_addresses << Ppl::Entity::EmailAddress.new("jdoe@example.org")
53
+ @storage.should_receive(:require_contact).and_return(@contact)
54
+ @custom_format.should_receive(:format=).with("%e")
55
+ @custom_format.should_receive(:process).and_return("")
56
+ @output.should_receive(:line).with("")
57
+ @command.execute(@input, @output)
58
+ end
46
59
 
47
60
  it "should delegate to the service layer to add a new email address" do
48
61
  @input.arguments = ["jdoe", "jdoe@example.org"]
@@ -7,10 +7,12 @@ describe Ppl::Command::Ls do
7
7
  @output = double(Ppl::Application::Output)
8
8
  @storage = double(Ppl::Adapter::Storage)
9
9
  @format = double(Ppl::Format::AddressBook)
10
+ @custom = double(Ppl::Format::Custom)
10
11
  @address_book = double(Ppl::Entity::AddressBook)
11
12
 
12
- @command.format = @format
13
- @command.storage = @storage
13
+ @command.custom_format = @custom
14
+ @command.default_format = @format
15
+ @command.storage = @storage
14
16
  end
15
17
 
16
18
  describe "#name" do
@@ -20,12 +22,36 @@ describe Ppl::Command::Ls do
20
22
  end
21
23
 
22
24
  describe "#execute" do
23
- it "should show the list of contacts in the address book" do
25
+
26
+ before(:each) do
24
27
  @storage.should_receive(:load_address_book).and_return(@address_book)
28
+ end
29
+
30
+ after(:each) do
31
+ @command.execute(@input, @output)
32
+ end
33
+
34
+ it "should show the list of contacts in the address book" do
25
35
  @format.should_receive(:process).and_return("list of contacts")
26
36
  @output.should_receive(:line).with("list of contacts")
27
- @command.execute(@input, @output)
28
37
  end
38
+
39
+ it "should let the user specify a preset pretty format" do
40
+ @input.options[:pretty] = "test"
41
+ @address_book.should_receive(:contacts).and_return([1])
42
+ @custom.should_receive(:use_preset).with("test")
43
+ @custom.should_receive(:process).and_return("list of contacts")
44
+ @output.should_receive(:line).with("list of contacts")
45
+ end
46
+
47
+ it "should let the user specify a custom format" do
48
+ @input.options[:format] = "%n"
49
+ @address_book.should_receive(:contacts).and_return([1])
50
+ @custom.should_receive(:format=).with("%n")
51
+ @custom.should_receive(:process).and_return("list of contacts")
52
+ @output.should_receive(:line).with("list of contacts")
53
+ end
54
+
29
55
  end
30
56
 
31
57
  end
@@ -0,0 +1,102 @@
1
+
2
+ describe Ppl::Format::Custom::Contact do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Custom::Contact.new
6
+ @contact = Ppl::Entity::Contact.new
7
+ end
8
+
9
+ describe "%n" do
10
+ it "should be replaced with a newlines" do
11
+ @format.format = "%n"
12
+ @format.process(@contact).should eq "\n"
13
+ end
14
+ end
15
+
16
+ describe "%i" do
17
+ it "should output the contact's ID" do
18
+ @contact.id = "test"
19
+ @format.format = "%i"
20
+ @format.process(@contact).should eq "test"
21
+ end
22
+ end
23
+
24
+ describe "%N" do
25
+ it "should output the contact's name" do
26
+ @contact.name = "John Doe"
27
+ @format.format = "%N"
28
+ @format.process(@contact).should eq "John Doe"
29
+ end
30
+ end
31
+
32
+ describe "%k" do
33
+ it "should output the contact's nickname" do
34
+ @contact.nicknames << "Johnny"
35
+ @format.format = "%k"
36
+ @format.process(@contact).should eq "Johnny"
37
+ end
38
+ end
39
+
40
+ describe "%a" do
41
+ it "should output the contact's age" do
42
+ @contact.birthday = Date.parse("2000-01-01")
43
+ Date.stub(:today).and_return(Date.parse("2010-01-02"))
44
+ @format.format = "%a"
45
+ @format.process(@contact).should eq "10"
46
+ end
47
+ end
48
+
49
+ describe "%b" do
50
+ it "should output the contact's birthday" do
51
+ @contact.birthday = Date.parse("1985-06-07")
52
+ @format.format = "%b"
53
+ @format.process(@contact).should eq "1985-06-07"
54
+ end
55
+ it "should cause no errors if there's no birthday" do
56
+ @contact.birthday = nil
57
+ @format.format = "%b"
58
+ @format.process(@contact).should eq ""
59
+ end
60
+ end
61
+
62
+ describe "%e" do
63
+ before(:each) do
64
+ @format.format = "%e"
65
+ @contact.email_addresses << Ppl::Entity::EmailAddress.new("a@example.org")
66
+ @contact.email_addresses << Ppl::Entity::EmailAddress.new("b@example.org")
67
+ end
68
+ it "should output the first email address" do
69
+ @format.process(@contact).should eq "a@example.org"
70
+ end
71
+ it "should output the preferred email address" do
72
+ @contact.email_addresses[1].preferred = true
73
+ @format.process(@contact).should eq "b@example.org"
74
+ end
75
+ end
76
+
77
+ describe "%p" do
78
+ before(:each) do
79
+ @format.format = "%p"
80
+ @contact.phone_numbers << Ppl::Entity::PhoneNumber.new("0123456789")
81
+ @contact.phone_numbers << Ppl::Entity::PhoneNumber.new("1098765432")
82
+ end
83
+ it "should output the first phone number" do
84
+ @format.process(@contact).should eq "0123456789"
85
+ end
86
+ it "should output the preferred phone number" do
87
+ @contact.phone_numbers[1].preferred = true
88
+ @format.process(@contact).should eq "1098765432"
89
+ end
90
+ end
91
+
92
+ describe "%o" do
93
+ it "should output the contact's organization" do
94
+ @contact.organizations << "WTF Inc"
95
+ @format.format = "%o"
96
+ @format.process(@contact).should eq "WTF Inc"
97
+ end
98
+ end
99
+
100
+ end
101
+
102
+
@@ -0,0 +1,33 @@
1
+
2
+ describe Ppl::Format::Custom::EmailAddress do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Custom::EmailAddress.new
6
+ @address = Ppl::Entity::EmailAddress.new
7
+ end
8
+
9
+ describe "%a" do
10
+ it "should output the address" do
11
+ @address.address = "test@example.org"
12
+ @format.format = "<%a>"
13
+ @format.process(@address).should eq "<test@example.org>"
14
+ end
15
+ end
16
+
17
+ describe "%f" do
18
+ before(:each) do
19
+ @format.format = "%f"
20
+ end
21
+ it "should output a star if the address is preferred" do
22
+ @address.preferred = true
23
+ @format.process(@address).should eq "*"
24
+ end
25
+ it "should output nothing if the address is not preferred" do
26
+ @address.preferred = false
27
+ @format.process(@address).should eq ""
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+
@@ -0,0 +1,41 @@
1
+
2
+ describe Ppl::Format::Custom::PhoneNumber do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Custom::PhoneNumber.new
6
+ @number = Ppl::Entity::PhoneNumber.new
7
+ end
8
+
9
+ describe "%n" do
10
+ it "should output the number itself" do
11
+ @number.number = "1234567890"
12
+ @format.format = "tel: %n"
13
+ @format.process(@number).should eq "tel: 1234567890"
14
+ end
15
+ end
16
+
17
+ describe "%t" do
18
+ it "should output the type of the number" do
19
+ @number.type = "cell"
20
+ @format.format = "(%t)"
21
+ @format.process(@number).should eq "(cell)"
22
+ end
23
+ end
24
+
25
+ describe "%f" do
26
+ before(:each) do
27
+ @format.format = "%f"
28
+ end
29
+ it "should output a star if the number is preferred" do
30
+ @number.preferred = true
31
+ @format.process(@number).should eq "*"
32
+ end
33
+ it "should output nothing if the number is not preferred" do
34
+ @number.preferred = false
35
+ @format.process(@number).should eq ""
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+
@@ -0,0 +1,50 @@
1
+
2
+ describe "Ppl::Format::Custom" do
3
+
4
+ describe "::format" do
5
+ it "should accept a symbol and a block" do
6
+ Ppl::Format::Custom::format :N do |h| h[:name] end
7
+ end
8
+ end
9
+
10
+ describe "::process" do
11
+ it "should use the block passed to ::format to process the object" do
12
+ Ppl::Format::Custom::process(:N, {:name => "jdoe"}).should eq "jdoe"
13
+ end
14
+ end
15
+
16
+ describe "#initialize" do
17
+ it "should accept a format string" do
18
+ Ppl::Format::Custom.new("%N").format.should eq "%N"
19
+ end
20
+ end
21
+
22
+ describe "#process" do
23
+ it "should convert the given object into a string based on the format" do
24
+ custom = Ppl::Format::Custom.new("%N %N %N")
25
+ object = { :name => "jdoe" }
26
+ custom.process(object).should eq "jdoe jdoe jdoe"
27
+ end
28
+ it "should pad with leading spaces if a positive width is given" do
29
+ custom = Ppl::Format::Custom.new("%10N")
30
+ object = { :name => "jdoe" }
31
+ custom.process(object).should eq " jdoe"
32
+ end
33
+ it "should pad with trailing spaces if a negative width is given" do
34
+ custom = Ppl::Format::Custom.new("%-10N")
35
+ object = { :name => "jdoe" }
36
+ custom.process(object).should eq "jdoe "
37
+ end
38
+ end
39
+
40
+ describe "#use_preset" do
41
+ it "should set the format string to the preset with the given name" do
42
+ custom = Ppl::Format::Custom.new
43
+ custom.preset_formats = { "example" => "%N (%N)" }
44
+ custom.use_preset "example"
45
+ custom.process({:name => "a"}).should eq "a (a)"
46
+ end
47
+ end
48
+
49
+ end
50
+
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.24.0
4
+ version: 1.25.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-23 00:00:00.000000000 Z
11
+ date: 2013-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colored
@@ -255,6 +255,10 @@ files:
255
255
  - lib/ppl/format/contact/phone_number.rb
256
256
  - lib/ppl/format/contact/postal_address.rb
257
257
  - lib/ppl/format/contact/urls.rb
258
+ - lib/ppl/format/custom.rb
259
+ - lib/ppl/format/custom/contact.rb
260
+ - lib/ppl/format/custom/email_address.rb
261
+ - lib/ppl/format/custom/phone_number.rb
258
262
  - lib/ppl/format/postal_address.rb
259
263
  - lib/ppl/format/postal_address/one_line.rb
260
264
  - lib/ppl/format/table.rb
@@ -330,6 +334,10 @@ files:
330
334
  - spec/ppl/format/contact/postal_address_spec.rb
331
335
  - spec/ppl/format/contact/urls_spec.rb
332
336
  - spec/ppl/format/contact_spec.rb
337
+ - spec/ppl/format/custom/contact_spec.rb
338
+ - spec/ppl/format/custom/email_address_spec.rb
339
+ - spec/ppl/format/custom/phone_number_spec.rb
340
+ - spec/ppl/format/custom_spec.rb
333
341
  - spec/ppl/format/postal_address/one_line_spec.rb
334
342
  - spec/ppl/format/postal_address_spec.rb
335
343
  - spec/ppl/format/table_spec.rb