ppl 1.14.1 → 1.15.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 (63) hide show
  1. data/Gemfile +2 -1
  2. data/Gemfile.lock +3 -1
  3. data/lib/ppl/adapter/color/colored.rb +15 -0
  4. data/lib/ppl/adapter/color.rb +9 -0
  5. data/lib/ppl/application/bootstrap.rb +309 -61
  6. data/lib/ppl/application/configuration.rb +15 -0
  7. data/lib/ppl/command/age.rb +0 -5
  8. data/lib/ppl/command/bday.rb +0 -5
  9. data/lib/ppl/command/email.rb +1 -3
  10. data/lib/ppl/command/ls.rb +0 -5
  11. data/lib/ppl/command/mutt.rb +0 -4
  12. data/lib/ppl/command/name.rb +0 -5
  13. data/lib/ppl/command/nick.rb +1 -3
  14. data/lib/ppl/command/org.rb +1 -3
  15. data/lib/ppl/command/phone.rb +1 -3
  16. data/lib/ppl/command/post.rb +0 -5
  17. data/lib/ppl/command/url.rb +1 -3
  18. data/lib/ppl/format/address_book/ages.rb +2 -4
  19. data/lib/ppl/format/address_book/birthdays.rb +2 -2
  20. data/lib/ppl/format/address_book/email_addresses.rb +3 -3
  21. data/lib/ppl/format/address_book/names.rb +2 -2
  22. data/lib/ppl/format/address_book/nicknames.rb +2 -2
  23. data/lib/ppl/format/address_book/one_line.rb +2 -2
  24. data/lib/ppl/format/address_book/organizations.rb +2 -2
  25. data/lib/ppl/format/address_book/phone_numbers.rb +2 -2
  26. data/lib/ppl/format/address_book/postal_addresses.rb +2 -2
  27. data/lib/ppl/format/address_book/urls.rb +2 -2
  28. data/lib/ppl/format/contact/age.rb +13 -1
  29. data/lib/ppl/format/contact/birthday.rb +11 -0
  30. data/lib/ppl/format/contact/email_addresses.rb +19 -1
  31. data/lib/ppl/format/contact/name.rb +18 -2
  32. data/lib/ppl/format/contact/nicknames.rb +19 -1
  33. data/lib/ppl/format/contact/organization.rb +19 -1
  34. data/lib/ppl/format/contact/phone_number.rb +19 -1
  35. data/lib/ppl/format/contact/urls.rb +19 -1
  36. data/lib/ppl/format/table.rb +15 -6
  37. data/lib/ppl.rb +3 -1
  38. data/ppl.gemspec +4 -2
  39. data/spec/ppl/adapter/color/colored_spec.rb +24 -0
  40. data/spec/ppl/adapter/color_spec.rb +15 -0
  41. data/spec/ppl/application/bootstrap_spec.rb +403 -25
  42. data/spec/ppl/application/configuration_spec.rb +46 -0
  43. data/spec/ppl/command/mutt_spec.rb +4 -0
  44. data/spec/ppl/format/address_book/ages_spec.rb +10 -0
  45. data/spec/ppl/format/address_book/birthdays_spec.rb +10 -0
  46. data/spec/ppl/format/address_book/email_addresses_spec.rb +12 -2
  47. data/spec/ppl/format/address_book/names_spec.rb +10 -0
  48. data/spec/ppl/format/address_book/nicknames_spec.rb +10 -0
  49. data/spec/ppl/format/address_book/one_line_spec.rb +10 -0
  50. data/spec/ppl/format/address_book/organizations_spec.rb +10 -0
  51. data/spec/ppl/format/address_book/phone_numbers_spec.rb +10 -0
  52. data/spec/ppl/format/address_book/postal_addresses_spec.rb +10 -0
  53. data/spec/ppl/format/address_book/urls_spec.rb +10 -0
  54. data/spec/ppl/format/contact/age_spec.rb +10 -0
  55. data/spec/ppl/format/contact/birthday_spec.rb +8 -0
  56. data/spec/ppl/format/contact/email_addresses_spec.rb +8 -0
  57. data/spec/ppl/format/contact/name_spec.rb +8 -0
  58. data/spec/ppl/format/contact/nicknames_spec.rb +8 -0
  59. data/spec/ppl/format/contact/organization_spec.rb +8 -0
  60. data/spec/ppl/format/contact/phone_number_spec.rb +8 -0
  61. data/spec/ppl/format/contact/urls_spec.rb +8 -0
  62. data/spec/ppl/format/table_spec.rb +20 -0
  63. metadata +38 -2
@@ -3,8 +3,8 @@ class Ppl::Format::AddressBook::EmailAddresses < Ppl::Format::AddressBook
3
3
 
4
4
  attr_writer :table
5
5
 
6
- def initialize
7
- @table = Ppl::Format::Table.new([:contact_id, :email_addresses])
6
+ def initialize(colors={})
7
+ @table = Ppl::Format::Table.new([:id, :email_addresses], colors)
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -17,7 +17,7 @@ class Ppl::Format::AddressBook::EmailAddresses < Ppl::Format::AddressBook
17
17
 
18
18
  def add_row(contact)
19
19
  @table.add_row({
20
- :contact_id => sprintf("%s:", contact.id),
20
+ :id => sprintf("%s:", contact.id),
21
21
  :email_addresses => contact.email_addresses.join(", "),
22
22
  })
23
23
  end
@@ -3,8 +3,8 @@ class Ppl::Format::AddressBook::Names < Ppl::Format::AddressBook
3
3
 
4
4
  attr_writer :table
5
5
 
6
- def initialize
7
- @table = Ppl::Format::Table.new([:id, :name])
6
+ def initialize(colors={})
7
+ @table = Ppl::Format::Table.new([:id, :name], colors)
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -3,8 +3,8 @@ class Ppl::Format::AddressBook::Nicknames < Ppl::Format::AddressBook
3
3
 
4
4
  attr_writer :table
5
5
 
6
- def initialize
7
- @table = Ppl::Format::Table.new([:id, :nicknames])
6
+ def initialize(colors={})
7
+ @table = Ppl::Format::Table.new([:id, :nicknames], colors)
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -3,8 +3,8 @@ class Ppl::Format::AddressBook::OneLine < Ppl::Format::AddressBook
3
3
 
4
4
  attr_writer :table
5
5
 
6
- def initialize
7
- @table = Ppl::Format::Table.new([:id, :name, :email])
6
+ def initialize(colors={})
7
+ @table = Ppl::Format::Table.new([:id, :name, :email], colors)
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -3,8 +3,8 @@ class Ppl::Format::AddressBook::Organizations < Ppl::Format::AddressBook
3
3
 
4
4
  attr_writer :table
5
5
 
6
- def initialize
7
- @table = Ppl::Format::Table.new([:id, :organizations])
6
+ def initialize(colors={})
7
+ @table = Ppl::Format::Table.new([:id, :organizations], colors)
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -3,8 +3,8 @@ class Ppl::Format::AddressBook::PhoneNumbers < Ppl::Format::AddressBook
3
3
 
4
4
  attr_writer :table
5
5
 
6
- def initialize
7
- @table = Ppl::Format::Table.new([:id, :phone_numbers])
6
+ def initialize(colors={})
7
+ @table = Ppl::Format::Table.new([:id, :phone_numbers], colors)
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -3,8 +3,8 @@ class Ppl::Format::AddressBook::PostalAddresses < Ppl::Format::AddressBook
3
3
 
4
4
  attr_writer :table
5
5
 
6
- def initialize
7
- @table = Ppl::Format::Table.new([:id, :postal_address])
6
+ def initialize(colors={})
7
+ @table = Ppl::Format::Table.new([:id, :postal_address], colors)
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -3,8 +3,8 @@ class Ppl::Format::AddressBook::Urls < Ppl::Format::AddressBook
3
3
 
4
4
  attr_writer :table
5
5
 
6
- def initialize
7
- @table = Ppl::Format::Table.new([:id, :urls])
6
+ def initialize(colors={})
7
+ @table = Ppl::Format::Table.new([:id, :urls], colors)
8
8
  end
9
9
 
10
10
  def process(address_book)
@@ -1,8 +1,20 @@
1
1
 
2
2
  class Ppl::Format::Contact::Age < Ppl::Format::Contact
3
3
 
4
+ attr_writer :color_adapter
5
+ attr_writer :colors
6
+
7
+ def initialize(colors={})
8
+ @colors = colors
9
+ @color_adapter = Ppl::Adapter::Color::Colored.new
10
+ end
11
+
4
12
  def process(contact)
5
- contact.age(Date.today).to_s
13
+ age = contact.age(Date.today).to_s
14
+ if @colors["age"]
15
+ age = @color_adapter.colorize(age, @colors["age"])
16
+ end
17
+ age
6
18
  end
7
19
 
8
20
  end
@@ -1,11 +1,22 @@
1
1
 
2
2
  class Ppl::Format::Contact::Birthday < Ppl::Format::Contact
3
3
 
4
+ attr_writer :color_adapter
5
+ attr_writer :colors
6
+
7
+ def initialize(colors={})
8
+ @colors = colors
9
+ @color_adapter = Ppl::Adapter::Color::Colored.new
10
+ end
11
+
4
12
  def process(contact)
5
13
  output = ""
6
14
  if !contact.birthday.nil?
7
15
  output += contact.birthday.strftime("%Y-%m-%d")
8
16
  end
17
+ if @colors["birthday"]
18
+ output = @color_adapter.colorize(output, @colors["birthday"])
19
+ end
9
20
  return output
10
21
  end
11
22
 
@@ -1,12 +1,30 @@
1
1
 
2
2
  class Ppl::Format::Contact::EmailAddresses < Ppl::Format::Contact
3
3
 
4
+ attr_writer :color_adapter
5
+ attr_writer :colors
6
+
7
+ def initialize(colors={})
8
+ @colors = colors
9
+ @color_adapter = Ppl::Adapter::Color::Colored.new
10
+ end
11
+
4
12
  def process(contact)
5
13
  lines = []
6
14
  contact.email_addresses.each do |email_address|
7
15
  lines.push email_address
8
16
  end
9
- lines.join("\n")
17
+ colorize_output(lines.join("\n"))
18
+ end
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
27
+ end
10
28
  end
11
29
 
12
30
  end
@@ -1,14 +1,30 @@
1
1
 
2
2
  class Ppl::Format::Contact::Name < Ppl::Format::Contact
3
3
 
4
+ attr_writer :color_adapter
5
+ attr_writer :colors
6
+
7
+ def initialize(colors={})
8
+ @colors = colors
9
+ @color_adapter = Ppl::Adapter::Color::Colored.new
10
+ end
11
+
4
12
  def process(contact)
5
13
  output = ""
6
-
7
14
  if !contact.name.nil?
8
15
  output += contact.name
9
16
  end
17
+ colorize_output(output)
18
+ end
19
+
20
+ private
10
21
 
11
- return output
22
+ def colorize_output(string)
23
+ if @colors["name"]
24
+ @color_adapter.colorize(string, @colors["name"])
25
+ else
26
+ string
27
+ end
12
28
  end
13
29
 
14
30
  end
@@ -1,8 +1,26 @@
1
1
 
2
2
  class Ppl::Format::Contact::Nicknames < Ppl::Format::Contact
3
3
 
4
+ attr_writer :color_adapter
5
+ attr_writer :colors
6
+
7
+ def initialize(colors={})
8
+ @colors = colors
9
+ @color_adapter = Ppl::Adapter::Color::Colored.new
10
+ end
11
+
4
12
  def process(contact)
5
- contact.nicknames.join("\n")
13
+ colorize_output(contact.nicknames.join("\n"))
14
+ end
15
+
16
+ private
17
+
18
+ def colorize_output(string)
19
+ if @colors["nicknames"]
20
+ @color_adapter.colorize(string, @colors["nicknames"])
21
+ else
22
+ string
23
+ end
6
24
  end
7
25
 
8
26
  end
@@ -1,8 +1,26 @@
1
1
 
2
2
  class Ppl::Format::Contact::Organization < Ppl::Format::Contact
3
3
 
4
+ attr_writer :color_adapter
5
+ attr_writer :colors
6
+
7
+ def initialize(colors={})
8
+ @colors = colors
9
+ @color_adapter = Ppl::Adapter::Color::Colored.new
10
+ end
11
+
4
12
  def process(contact)
5
- contact.organizations.join("\n")
13
+ colorize_output(contact.organizations.join("\n"))
14
+ end
15
+
16
+ private
17
+
18
+ def colorize_output(string)
19
+ if @colors["organizations"]
20
+ @color_adapter.colorize(string, @colors["organizations"])
21
+ else
22
+ string
23
+ end
6
24
  end
7
25
 
8
26
  end
@@ -1,8 +1,26 @@
1
1
 
2
2
  class Ppl::Format::Contact::PhoneNumber < Ppl::Format::Contact
3
3
 
4
+ attr_writer :color_adapter
5
+ attr_writer :colors
6
+
7
+ def initialize(colors={})
8
+ @colors = colors
9
+ @color_adapter = Ppl::Adapter::Color::Colored.new
10
+ end
11
+
4
12
  def process(contact)
5
- contact.phone_numbers.join("\n")
13
+ colorize_output(contact.phone_numbers.join("\n"))
14
+ end
15
+
16
+ private
17
+
18
+ def colorize_output(string)
19
+ if @colors["phone_numbers"]
20
+ @color_adapter.colorize(string, @colors["phone_numbers"])
21
+ else
22
+ string
23
+ end
6
24
  end
7
25
 
8
26
  end
@@ -1,8 +1,26 @@
1
1
 
2
2
  class Ppl::Format::Contact::Urls < Ppl::Format::Contact
3
3
 
4
+ attr_writer :color_adapter
5
+ attr_writer :colors
6
+
7
+ def initialize(colors={})
8
+ @colors = colors
9
+ @color_adapter = Ppl::Adapter::Color::Colored.new
10
+ end
11
+
4
12
  def process(contact)
5
- contact.urls.join("\n")
13
+ colorize_output(contact.urls.join("\n"))
14
+ end
15
+
16
+ private
17
+
18
+ def colorize_output(string)
19
+ if @colors["urls"]
20
+ @color_adapter.colorize(string, @colors["urls"])
21
+ else
22
+ string
23
+ end
6
24
  end
7
25
 
8
26
  end
@@ -1,4 +1,6 @@
1
1
 
2
+ require "colored"
3
+
2
4
  class Ppl::Format::Table
3
5
 
4
6
  SEPARATOR_SPACES = 0
@@ -7,12 +9,14 @@ class Ppl::Format::Table
7
9
  attr_accessor :columns
8
10
  attr_accessor :rows
9
11
  attr_accessor :separator
12
+ attr_accessor :colors
10
13
 
11
- def initialize(columns=[])
14
+ def initialize(columns=[], colors={})
12
15
  @columns = columns
13
16
  @rows = []
14
17
  @separator = SEPARATOR_SPACES
15
-
18
+ @colors = colors
19
+ @color_adapter = Ppl::Adapter::Color::Colored.new
16
20
  @column_widths = {}
17
21
  @columns.each { |c| @column_widths[c] = 0 }
18
22
  end
@@ -44,13 +48,18 @@ class Ppl::Format::Table
44
48
  end
45
49
 
46
50
  def format_cell(row, column)
47
- width = @column_widths[column]
51
+ width = @column_widths[column]
52
+ string = row[column].to_s
48
53
  if @separator == SEPARATOR_SPACES
49
- string = sprintf("%-#{width}s ", row[column])
54
+ string = sprintf("%-#{width}s ", string)
50
55
  else
51
- string = sprintf("%s\t", row[column])
56
+ string = sprintf("%s\t", string)
52
57
  end
53
- return string
58
+ colorize_string(string, column)
59
+ end
60
+
61
+ def colorize_string(string, column)
62
+ @color_adapter.colorize(string, @colors[column.to_s])
54
63
  end
55
64
 
56
65
  end
data/lib/ppl.rb CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Ppl
3
3
 
4
- Version = "1.14.1"
4
+ Version = "1.15.0"
5
5
 
6
6
  module Adapter
7
7
  end
@@ -24,6 +24,8 @@ module Ppl
24
24
  end
25
25
 
26
26
 
27
+ require "ppl/adapter/color"
28
+ require "ppl/adapter/color/colored"
27
29
  require "ppl/adapter/storage"
28
30
  require "ppl/adapter/storage/disk"
29
31
  require "ppl/adapter/storage/factory"
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.14.1"
6
- spec.date = "2013-02-17"
5
+ spec.version = "1.15.0"
6
+ spec.date = "2013-03-16"
7
7
 
8
8
  spec.required_ruby_version = ">= 1.9.3"
9
9
 
@@ -11,7 +11,9 @@ Gem::Specification.new do |spec|
11
11
  spec.description = "CLI Address Book"
12
12
  spec.license = "GPL-2"
13
13
 
14
+ spec.add_dependency("colored", "1.2")
14
15
  spec.add_dependency("inifile", "2.0.2")
16
+ spec.add_dependency("morphine", "0.1.1")
15
17
  spec.add_dependency("rugged", "0.17.0.b6")
16
18
  spec.add_dependency("vpim", "0.695")
17
19
 
@@ -0,0 +1,24 @@
1
+
2
+ describe Ppl::Adapter::Color::Colored do
3
+
4
+ before(:each) do
5
+ @adapter = Ppl::Adapter::Color::Colored.new
6
+ end
7
+
8
+ describe "#colorize" do
9
+
10
+ it "should colorize the string using the monkeypatched String method" do
11
+ string = "example"
12
+ string.should_receive(:red).and_return("red example")
13
+ @adapter.colorize(string, "red").should eq "red example"
14
+ end
15
+
16
+ it "should only attempt to colorize the string if the color exists" do
17
+ string = "example"
18
+ @adapter.colorize(string, "neon").should eq "example"
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
@@ -0,0 +1,15 @@
1
+
2
+ describe Ppl::Adapter::Color do
3
+
4
+ before(:each) do
5
+ @adapter = Ppl::Adapter::Color.new
6
+ end
7
+
8
+ describe "#colorize" do
9
+ it "should raise not implemented error" do
10
+ expect{@adapter.colorize(nil, nil)}.to raise_error(NotImplementedError)
11
+ end
12
+ end
13
+
14
+ end
15
+