ppl 0.3.0 → 0.9.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.
Files changed (97) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +4 -0
  4. data/README.md +1 -3
  5. data/lib/ppl/adapter/storage/disk.rb +27 -7
  6. data/lib/ppl/adapter/storage/factory.rb +26 -0
  7. data/lib/ppl/adapter/storage/git.rb +101 -0
  8. data/lib/ppl/adapter/storage.rb +4 -0
  9. data/lib/ppl/adapter/vcard/vpim.rb +16 -0
  10. data/lib/ppl/application/bootstrap.rb +23 -10
  11. data/lib/ppl/application/command.rb +3 -0
  12. data/lib/ppl/application/command_suite.rb +8 -0
  13. data/lib/ppl/application/configuration.rb +50 -0
  14. data/lib/ppl/application/output.rb +1 -0
  15. data/lib/ppl/application/shell.rb +21 -0
  16. data/lib/ppl/command/add.rb +34 -0
  17. data/lib/ppl/command/bday.rb +72 -0
  18. data/lib/ppl/command/email.rb +55 -0
  19. data/lib/ppl/command/help.rb +43 -0
  20. data/lib/ppl/command/init.rb +26 -0
  21. data/lib/ppl/command/ls.rb +26 -0
  22. data/lib/ppl/command/mv.rb +42 -0
  23. data/lib/ppl/command/name.rb +54 -0
  24. data/lib/ppl/command/org.rb +55 -0
  25. data/lib/ppl/command/phone.rb +55 -0
  26. data/lib/ppl/command/rm.rb +26 -0
  27. data/lib/ppl/command/show.rb +31 -0
  28. data/lib/ppl/entity/contact.rb +2 -0
  29. data/lib/ppl/format/address_book/birthdays.rb +34 -0
  30. data/lib/ppl/format/address_book/email_addresses.rb +34 -0
  31. data/lib/ppl/format/address_book/names.rb +34 -0
  32. data/lib/ppl/format/address_book/one_line.rb +34 -0
  33. data/lib/ppl/format/address_book/organizations.rb +34 -0
  34. data/lib/ppl/format/address_book/phone_numbers.rb +34 -0
  35. data/lib/ppl/format/address_book.rb +9 -0
  36. data/lib/ppl/format/contact/birthday.rb +13 -0
  37. data/lib/ppl/format/contact/email_address.rb +13 -0
  38. data/lib/ppl/format/contact/full.rb +55 -0
  39. data/lib/ppl/format/contact/name.rb +15 -0
  40. data/lib/ppl/format/contact/organization.rb +13 -0
  41. data/lib/ppl/format/contact/phone_number.rb +13 -0
  42. data/lib/ppl/format/contact.rb +9 -0
  43. data/lib/ppl/format/table.rb +48 -0
  44. data/lib/ppl.rb +33 -11
  45. data/ppl.gemspec +1 -1
  46. data/spec/ppl/adapter/storage/disk_spec.rb +57 -10
  47. data/spec/ppl/adapter/storage/factory_spec.rb +34 -0
  48. data/spec/ppl/adapter/storage/git_spec.rb +114 -0
  49. data/spec/ppl/adapter/storage_spec.rb +6 -0
  50. data/spec/ppl/adapter/vcard/vpim_spec.rb +34 -0
  51. data/spec/ppl/application/bootstrap_spec.rb +42 -4
  52. data/spec/ppl/application/command_suite_spec.rb +8 -0
  53. data/spec/ppl/application/configuration_spec.rb +32 -0
  54. data/spec/ppl/application/shell_spec.rb +4 -0
  55. data/spec/ppl/command/{contact_add_spec.rb → add_spec.rb} +2 -2
  56. data/spec/ppl/command/bday_spec.rb +56 -0
  57. data/spec/ppl/command/email_spec.rb +56 -0
  58. data/spec/ppl/command/help_spec.rb +79 -0
  59. data/spec/ppl/command/init_spec.rb +40 -0
  60. data/spec/ppl/command/ls_spec.rb +32 -0
  61. data/spec/ppl/command/mv_spec.rb +62 -0
  62. data/spec/ppl/command/name_spec.rb +59 -0
  63. data/spec/ppl/command/org_spec.rb +57 -0
  64. data/spec/ppl/command/phone_spec.rb +55 -0
  65. data/spec/ppl/command/{contact_delete_spec.rb → rm_spec.rb} +8 -2
  66. data/spec/ppl/command/{contact_show_spec.rb → show_spec.rb} +12 -6
  67. data/spec/ppl/format/address_book/birthdays_spec.rb +38 -0
  68. data/spec/ppl/format/address_book/email_addresses_spec.rb +38 -0
  69. data/spec/ppl/format/address_book/names_spec.rb +38 -0
  70. data/spec/ppl/format/address_book/one_line_spec.rb +41 -0
  71. data/spec/ppl/format/address_book/organizations_spec.rb +38 -0
  72. data/spec/ppl/format/address_book/phone_numbers_spec.rb +38 -0
  73. data/spec/ppl/format/address_book_spec.rb +18 -0
  74. data/spec/ppl/format/contact/birthday_spec.rb +23 -0
  75. data/spec/ppl/format/contact/email_address_spec.rb +23 -0
  76. data/spec/ppl/format/contact/full_spec.rb +44 -0
  77. data/spec/ppl/format/contact/name_spec.rb +23 -0
  78. data/spec/ppl/format/contact/organization_spec.rb +23 -0
  79. data/spec/ppl/format/contact/phone_number_spec.rb +23 -0
  80. data/spec/ppl/format/contact_spec.rb +17 -0
  81. data/spec/ppl/format/table_spec.rb +72 -0
  82. metadata +61 -19
  83. data/lib/ppl/command/command_list.rb +0 -21
  84. data/lib/ppl/command/contact_add.rb +0 -26
  85. data/lib/ppl/command/contact_delete.rb +0 -16
  86. data/lib/ppl/command/contact_list.rb +0 -24
  87. data/lib/ppl/command/contact_rename.rb +0 -23
  88. data/lib/ppl/command/contact_show.rb +0 -20
  89. data/lib/ppl/command/set_birthday.rb +0 -30
  90. data/lib/ppl/command/set_email.rb +0 -23
  91. data/lib/ppl/command/set_name.rb +0 -28
  92. data/spec/ppl/command/command_list_spec.rb +0 -37
  93. data/spec/ppl/command/contact_list_spec.rb +0 -15
  94. data/spec/ppl/command/contact_rename_spec.rb +0 -42
  95. data/spec/ppl/command/set_birthday_spec.rb +0 -50
  96. data/spec/ppl/command/set_email_spec.rb +0 -38
  97. data/spec/ppl/command/set_name_spec.rb +0 -45
@@ -0,0 +1,38 @@
1
+
2
+ describe Ppl::Format::AddressBook::Organizations do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::AddressBook::Organizations.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.add_contact(@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
+ :organization => nil,
22
+ })
23
+ @format.process(@address_book)
24
+ end
25
+
26
+ it "should show the organization if it's available" do
27
+ @contact.organization = "Example Ltd"
28
+ @table.should_receive(:add_row).with({
29
+ :id => "test:",
30
+ :organization => "Example Ltd",
31
+ })
32
+ @format.process(@address_book)
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
@@ -0,0 +1,38 @@
1
+
2
+ describe Ppl::Format::AddressBook::PhoneNumbers do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::AddressBook::PhoneNumbers.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.add_contact(@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
+ :phone_number => nil,
22
+ })
23
+ @format.process(@address_book)
24
+ end
25
+
26
+ it "should show the phone number if it's available" do
27
+ @contact.phone_number = "01234567890"
28
+ @table.should_receive(:add_row).with({
29
+ :id => "test:",
30
+ :phone_number => "01234567890",
31
+ })
32
+ @format.process(@address_book)
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
@@ -0,0 +1,18 @@
1
+
2
+ describe Ppl::Format::AddressBook do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::AddressBook.new
6
+ end
7
+
8
+ describe "#process" do
9
+
10
+ it "should raise a NotImplementedError" do
11
+ expect{@format.process(nil)}.to raise_error(NotImplementedError)
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+
18
+
@@ -0,0 +1,23 @@
1
+
2
+ describe Ppl::Format::Contact::Birthday do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Contact::Birthday.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 birthday" do
12
+ @format.process(Ppl::Entity::Contact.new).should eq ""
13
+ end
14
+
15
+ it "should return the contact's birthday if it is set" do
16
+ @contact.birthday = Date.parse("1970-01-01")
17
+ @format.process(@contact).should eq "1970-01-01"
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,23 @@
1
+
2
+ describe Ppl::Format::Contact::EmailAddress do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Contact::EmailAddress.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 an email address" do
12
+ @format.process(Ppl::Entity::Contact.new).should eq ""
13
+ end
14
+
15
+ it "should return the contact's email address if it is set" do
16
+ @contact.email_address = "jdoe@example.org"
17
+ @format.process(@contact).should eq "jdoe@example.org"
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,44 @@
1
+
2
+ describe Ppl::Format::Contact::Full do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Contact::Full.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 any properties" do
12
+ @format.process(Ppl::Entity::Contact.new).should eq ""
13
+ end
14
+
15
+ it "should start with the contact's name" do
16
+ @contact.name = "John Doe"
17
+ @format.process(@contact).should eq "John Doe"
18
+ end
19
+
20
+ it "should include their email address in brackets" do
21
+ @contact.name = "John Doe"
22
+ @contact.email_address = "john@example.org"
23
+ @format.process(@contact).should eq "John Doe <john@example.org>"
24
+ end
25
+
26
+ it "should show their birthday if available" do
27
+ @contact.birthday = Date.parse("1980-01-01")
28
+ @format.process(@contact).should include "1980-01-01"
29
+ end
30
+
31
+ it "should show their phone number if available" do
32
+ @contact.phone_number = "01234567890"
33
+ @format.process(@contact).should include "01234567890"
34
+ end
35
+
36
+ it "should show their organization if available" do
37
+ @contact.organization = "Example Ltd"
38
+ @format.process(@contact).should include "Example Ltd"
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+
@@ -0,0 +1,23 @@
1
+
2
+ describe Ppl::Format::Contact::Name do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Contact::Name.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 name" do
12
+ @format.process(Ppl::Entity::Contact.new).should eq ""
13
+ end
14
+
15
+ it "should return the contact's name if it is set" do
16
+ @contact.name = "John Doe"
17
+ @format.process(@contact).should eq "John Doe"
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,23 @@
1
+
2
+ describe Ppl::Format::Contact::Organization do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Contact::Organization.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 an organization" do
12
+ @format.process(Ppl::Entity::Contact.new).should eq ""
13
+ end
14
+
15
+ it "should return the contact's organization if it is set" do
16
+ @contact.organization = "Example Ltd"
17
+ @format.process(@contact).should eq "Example Ltd"
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,23 @@
1
+
2
+ describe Ppl::Format::Contact::PhoneNumber do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Contact::PhoneNumber.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 phone number" do
12
+ @format.process(Ppl::Entity::Contact.new).should eq ""
13
+ end
14
+
15
+ it "should return the contact's phone number if it is set" do
16
+ @contact.phone_number = "0123456789"
17
+ @format.process(@contact).should eq "0123456789"
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+
@@ -0,0 +1,17 @@
1
+
2
+ describe Ppl::Format::Contact do
3
+
4
+ before(:each) do
5
+ @format = Ppl::Format::Contact.new
6
+ end
7
+
8
+ describe "#process" do
9
+
10
+ it "should raise a NotImplementedError" do
11
+ expect{@format.process(nil)}.to raise_error(NotImplementedError)
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+
@@ -0,0 +1,72 @@
1
+
2
+ describe Ppl::Format::Table do
3
+
4
+ describe "#initialize" do
5
+ it "should accept an array of columns" do
6
+ @table = Ppl::Format::Table.new([
7
+ :id,
8
+ :name,
9
+ :email,
10
+ ])
11
+ @table.columns.length.should eq 3
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ describe Ppl::Format::Table do
18
+
19
+ before(:each) do
20
+ @table = Ppl::Format::Table.new([
21
+ :id,
22
+ :name,
23
+ :email,
24
+ ])
25
+ end
26
+
27
+ describe "#add_row" do
28
+ it "should accept a hash" do
29
+ @table.add_row({
30
+ :id => 12345,
31
+ :name => "John Doe",
32
+ :email => "jdoe@example.org",
33
+ })
34
+ @table.rows.length.should eq 1
35
+ end
36
+ end
37
+
38
+ describe "#to_s" do
39
+
40
+ it "should return an empty string if the table is empty" do
41
+ @table.to_s.should eq ""
42
+ end
43
+
44
+ it "should return a string represenation of its rows" do
45
+ @table.add_row({
46
+ :id => 12345,
47
+ :name => "John Doe",
48
+ :email => "jdoe@example.org",
49
+ })
50
+ @table.to_s.should eq "12345 John Doe jdoe@example.org"
51
+ end
52
+
53
+ it "should align multiple rows into neat columns" do
54
+ @table.add_row({
55
+ :id => 12345,
56
+ :name => "John Doe",
57
+ :email => "jdoe@example.org",
58
+ })
59
+ @table.add_row({
60
+ :id => 123,
61
+ :name => "Luis Ignacio Lula da Silva",
62
+ :email => "lula@planalto.biz",
63
+ })
64
+
65
+ @table.to_s.should include "12345 John Doe jdoe@example.org"
66
+ @table.to_s.should include "123 Luis Ignacio Lula da Silva lula@planalto.biz"
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+
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: 0.3.0
4
+ version: 0.9.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -29,51 +29,93 @@ files:
29
29
  - lib/ppl.rb
30
30
  - lib/ppl/adapter/storage.rb
31
31
  - lib/ppl/adapter/storage/disk.rb
32
+ - lib/ppl/adapter/storage/factory.rb
33
+ - lib/ppl/adapter/storage/git.rb
32
34
  - lib/ppl/adapter/vcard.rb
33
35
  - lib/ppl/adapter/vcard/vpim.rb
34
36
  - lib/ppl/application/bootstrap.rb
35
37
  - lib/ppl/application/command.rb
36
38
  - lib/ppl/application/command_suite.rb
39
+ - lib/ppl/application/configuration.rb
37
40
  - lib/ppl/application/input.rb
38
41
  - lib/ppl/application/output.rb
39
42
  - lib/ppl/application/router.rb
40
43
  - lib/ppl/application/shell.rb
41
- - lib/ppl/command/command_list.rb
42
- - lib/ppl/command/contact_add.rb
43
- - lib/ppl/command/contact_delete.rb
44
- - lib/ppl/command/contact_list.rb
45
- - lib/ppl/command/contact_rename.rb
46
- - lib/ppl/command/contact_show.rb
47
- - lib/ppl/command/set_birthday.rb
48
- - lib/ppl/command/set_email.rb
49
- - lib/ppl/command/set_name.rb
44
+ - lib/ppl/command/add.rb
45
+ - lib/ppl/command/bday.rb
46
+ - lib/ppl/command/email.rb
47
+ - lib/ppl/command/help.rb
48
+ - lib/ppl/command/init.rb
49
+ - lib/ppl/command/ls.rb
50
+ - lib/ppl/command/mv.rb
51
+ - lib/ppl/command/name.rb
52
+ - lib/ppl/command/org.rb
53
+ - lib/ppl/command/phone.rb
54
+ - lib/ppl/command/rm.rb
55
+ - lib/ppl/command/show.rb
50
56
  - lib/ppl/entity/address_book.rb
51
57
  - lib/ppl/entity/contact.rb
52
58
  - lib/ppl/error/contact_not_found.rb
53
59
  - lib/ppl/error/incorrect_usage.rb
60
+ - lib/ppl/format/address_book.rb
61
+ - lib/ppl/format/address_book/birthdays.rb
62
+ - lib/ppl/format/address_book/email_addresses.rb
63
+ - lib/ppl/format/address_book/names.rb
64
+ - lib/ppl/format/address_book/one_line.rb
65
+ - lib/ppl/format/address_book/organizations.rb
66
+ - lib/ppl/format/address_book/phone_numbers.rb
67
+ - lib/ppl/format/contact.rb
68
+ - lib/ppl/format/contact/birthday.rb
69
+ - lib/ppl/format/contact/email_address.rb
70
+ - lib/ppl/format/contact/full.rb
71
+ - lib/ppl/format/contact/name.rb
72
+ - lib/ppl/format/contact/organization.rb
73
+ - lib/ppl/format/contact/phone_number.rb
74
+ - lib/ppl/format/table.rb
54
75
  - ppl.gemspec
55
76
  - spec/ppl/adapter/output_spec.rb
56
77
  - spec/ppl/adapter/storage/disk_spec.rb
78
+ - spec/ppl/adapter/storage/factory_spec.rb
79
+ - spec/ppl/adapter/storage/git_spec.rb
57
80
  - spec/ppl/adapter/storage_spec.rb
58
81
  - spec/ppl/adapter/vcard/vpim_spec.rb
59
82
  - spec/ppl/adapter/vcard_spec.rb
60
83
  - spec/ppl/application/bootstrap_spec.rb
61
84
  - spec/ppl/application/command_spec.rb
62
85
  - spec/ppl/application/command_suite_spec.rb
86
+ - spec/ppl/application/configuration_spec.rb
63
87
  - spec/ppl/application/input_spec.rb
64
88
  - spec/ppl/application/router_spec.rb
65
89
  - spec/ppl/application/shell_spec.rb
66
- - spec/ppl/command/command_list_spec.rb
67
- - spec/ppl/command/contact_add_spec.rb
68
- - spec/ppl/command/contact_delete_spec.rb
69
- - spec/ppl/command/contact_list_spec.rb
70
- - spec/ppl/command/contact_rename_spec.rb
71
- - spec/ppl/command/contact_show_spec.rb
72
- - spec/ppl/command/set_birthday_spec.rb
73
- - spec/ppl/command/set_email_spec.rb
74
- - spec/ppl/command/set_name_spec.rb
90
+ - spec/ppl/command/add_spec.rb
91
+ - spec/ppl/command/bday_spec.rb
92
+ - spec/ppl/command/email_spec.rb
93
+ - spec/ppl/command/help_spec.rb
94
+ - spec/ppl/command/init_spec.rb
95
+ - spec/ppl/command/ls_spec.rb
96
+ - spec/ppl/command/mv_spec.rb
97
+ - spec/ppl/command/name_spec.rb
98
+ - spec/ppl/command/org_spec.rb
99
+ - spec/ppl/command/phone_spec.rb
100
+ - spec/ppl/command/rm_spec.rb
101
+ - spec/ppl/command/show_spec.rb
75
102
  - spec/ppl/entity/address_book_spec.rb
76
103
  - spec/ppl/entity/contact_spec.rb
104
+ - spec/ppl/format/address_book/birthdays_spec.rb
105
+ - spec/ppl/format/address_book/email_addresses_spec.rb
106
+ - spec/ppl/format/address_book/names_spec.rb
107
+ - spec/ppl/format/address_book/one_line_spec.rb
108
+ - spec/ppl/format/address_book/organizations_spec.rb
109
+ - spec/ppl/format/address_book/phone_numbers_spec.rb
110
+ - spec/ppl/format/address_book_spec.rb
111
+ - spec/ppl/format/contact/birthday_spec.rb
112
+ - spec/ppl/format/contact/email_address_spec.rb
113
+ - spec/ppl/format/contact/full_spec.rb
114
+ - spec/ppl/format/contact/name_spec.rb
115
+ - spec/ppl/format/contact/organization_spec.rb
116
+ - spec/ppl/format/contact/phone_number_spec.rb
117
+ - spec/ppl/format/contact_spec.rb
118
+ - spec/ppl/format/table_spec.rb
77
119
  - spec/spec_helper.rb
78
120
  homepage: https://github.com/h2s/ppl
79
121
  licenses:
@@ -1,21 +0,0 @@
1
-
2
- class Ppl::Command::CommandList < Ppl::Application::Command
3
-
4
- attr_accessor :command_suite
5
-
6
- def initialize
7
- @name = "help"
8
- @description = "Show a list of commands"
9
- end
10
-
11
- def execute(input, output)
12
- @command_suite.each do |command|
13
- name = command.name
14
- description = command.description
15
- output.line("#{name}: #{description}")
16
- end
17
- return true
18
- end
19
-
20
- end
21
-
@@ -1,26 +0,0 @@
1
-
2
- class Ppl::Command::ContactAdd < Ppl::Application::Command
3
-
4
- def initialize
5
- @name = "add"
6
- @description = "Add a new contact"
7
- end
8
-
9
- def execute(input, output)
10
- contact_id = input.arguments.shift
11
- contact_name = input.arguments.shift
12
-
13
- if contact_id.nil? || contact_name.nil?
14
- raise Ppl::Error::IncorrectUsage
15
- end
16
-
17
- contact = Ppl::Entity::Contact.new
18
- contact.id = contact_id
19
- contact.name = contact_name
20
-
21
- @storage.save_contact(contact)
22
- return true
23
- end
24
-
25
- end
26
-
@@ -1,16 +0,0 @@
1
-
2
- class Ppl::Command::ContactDelete < Ppl::Application::Command
3
-
4
- def initialize
5
- @name = "rm"
6
- @description = "Delete a contact"
7
- end
8
-
9
- def execute(input, output)
10
- contact_id = input.arguments.first
11
- contact = @storage.require_contact(contact_id)
12
- @storage.delete_contact(contact)
13
- end
14
-
15
- end
16
-
@@ -1,24 +0,0 @@
1
-
2
- class Ppl::Command::ContactList < Ppl::Application::Command
3
-
4
- def initialize
5
- @name = "ls"
6
- @description = "List all contacts"
7
- end
8
-
9
- def execute(input, output)
10
- address_book = @storage.load_address_book
11
-
12
- address_book.each do |contact|
13
- line = sprintf("%s: %s",
14
- contact.id,
15
- contact.email_address
16
- )
17
- output.line(line)
18
- end
19
-
20
- return true
21
- end
22
-
23
- end
24
-
@@ -1,23 +0,0 @@
1
-
2
- class Ppl::Command::ContactRename < Ppl::Application::Command
3
-
4
- def initialize
5
- @name = "mv"
6
- @description = "Rename a contact"
7
- end
8
-
9
- def execute(input, output)
10
- old_id = input.arguments.shift
11
- new_id = input.arguments.shift
12
- contact = @storage.require_contact(old_id)
13
-
14
- @storage.delete_contact(contact)
15
-
16
- contact.id = new_id
17
- @storage.save_contact(contact)
18
-
19
- return true
20
- end
21
-
22
- end
23
-
@@ -1,20 +0,0 @@
1
-
2
- class Ppl::Command::ContactShow < Ppl::Application::Command
3
-
4
- def initialize
5
- @name = "show"
6
- @description = "Display the full details of a contact"
7
- end
8
-
9
- def execute(input, output)
10
- contact_id = input.arguments.shift
11
- contact = @storage.require_contact(contact_id)
12
-
13
- output.line(contact.name)
14
- output.line(contact.email_address)
15
-
16
- return true
17
- end
18
-
19
- end
20
-
@@ -1,30 +0,0 @@
1
-
2
- class Ppl::Command::SetBirthday < Ppl::Application::Command
3
-
4
- def initialize
5
- @name = "birthday"
6
- @description = "Change a contact's birthday"
7
- end
8
-
9
- def execute(input, output)
10
-
11
- contact_id = input.arguments.shift
12
- birthday = input.arguments.shift
13
-
14
- if contact_id.nil? || birthday.nil?
15
- raise Ppl::Error::IncorrectUsage
16
- end
17
-
18
- birthday = Date.parse birthday
19
-
20
- contact = @storage.require_contact(contact_id)
21
-
22
- contact.birthday = birthday
23
-
24
- storage.save_contact(contact)
25
-
26
- return true
27
- end
28
-
29
- end
30
-
@@ -1,23 +0,0 @@
1
-
2
- class Ppl::Command::SetEmail < Ppl::Application::Command
3
-
4
- def initialize
5
- @name = "email"
6
- @description = "Change a contact's email address"
7
- end
8
-
9
- def execute(input, output)
10
-
11
- contact_id = input.arguments.shift
12
- email_address = input.arguments.shift
13
-
14
- contact = @storage.require_contact(contact_id)
15
- contact.email_address = email_address
16
-
17
- storage.save_contact(contact)
18
-
19
- return true
20
- end
21
-
22
- end
23
-