contacts 1.0.10 → 1.0.11

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.
data/lib/contacts.rb CHANGED
@@ -4,4 +4,5 @@ require 'rubygems'
4
4
  require 'base'
5
5
  require 'gmail'
6
6
  require 'hotmail'
7
- require 'yahoo'
7
+ require 'yahoo'
8
+ require 'plaxo'
data/lib/contacts/base.rb CHANGED
@@ -8,7 +8,7 @@ require "thread"
8
8
 
9
9
  class Contacts
10
10
  TYPES = {}
11
- VERSION = "1.0.10"
11
+ VERSION = "1.0.11"
12
12
 
13
13
  class Base
14
14
  def initialize(login, password)
@@ -1,4 +1,4 @@
1
- require "json"
1
+ require "json/add/rails"
2
2
 
3
3
  class Contacts
4
4
  class Gmail < Base
@@ -53,6 +53,7 @@ class Contacts
53
53
  data.gsub!(/^while \(true\); &&&START&&&/, '')
54
54
  data.gsub!(/ &&&END&&&$/, '')
55
55
  data.gsub!(/\t/, ' ') # tabs in the note field cause errors with JSON.parse
56
+ data.gsub!(/[\t\x00-\x1F]/, " ") # strip control characters
56
57
 
57
58
  @contacts = JSON.parse(data)['Body']['Contacts'] || {}
58
59
 
@@ -63,13 +64,16 @@ class Contacts
63
64
 
64
65
  # Default format.
65
66
  # ['Name', 'Email1', 'Email2', ...]
66
- @contacts = @contacts.delete_if {|c| c["Emails"].nil?}.map do |c|
67
- name, emails = c.values_at "Name", "Emails"
68
- emails = emails.first.values
69
- [name, emails].flatten
67
+ if @contacts != nil
68
+ @contacts = @contacts.delete_if {|c| c["Emails"].nil?}.map do |c|
69
+ name, emails = c.values_at "Name", "Emails"
70
+ emails = emails.first.values
71
+ [name, emails].flatten
72
+ end
73
+ else
74
+ []
70
75
  end
71
- end
72
-
76
+ end
73
77
  end
74
78
 
75
79
  TYPES[:gmail] = Gmail
@@ -103,7 +103,7 @@ class Contacts
103
103
  data = CSV.parse(data.join("\r\n").gsub('"', ''), ';')
104
104
  col_names = data.shift
105
105
 
106
- @contacts = data.map do |person|
106
+ @contacts = data.delete_if{|person|person[0].nil?}.map do |person|
107
107
  person = person[0].split(",")
108
108
  next unless (idx = person.index('SMTP'))
109
109
  [[person[1], person[2], person[3]].delete_if{|i|i.empty?}.join(" "), person[idx - 1]] unless person[idx - 1].nil?
@@ -0,0 +1,123 @@
1
+ require 'rexml/document'
2
+
3
+ class Contacts
4
+ class Plaxo < Base
5
+ URL = "http://www.plaxo.com/"
6
+ LOGIN_URL = "https://www.plaxo.com/signin"
7
+ ADDRESS_BOOK_URL = "http://www.plaxo.com/po3/?module=ab&operation=viewFull&mode=normal"
8
+ CONTACT_LIST_URL = "http://www.plaxo.com/axis/soap/contact?_action=getContacts&_format=xml"
9
+ PROTOCOL_ERROR = "Plaxo has changed its protocols, please upgrade this library first. If that does not work, contact lucas@rufy.com with this error"
10
+
11
+ def real_connect
12
+
13
+ end # real_connect
14
+
15
+ def contacts
16
+ getdata = "&authInfo.authByEmail.email=%s" % CGI.escape(login)
17
+ getdata += "&authInfo.authByEmail.password=%s" % CGI.escape(password)
18
+ data, resp, cookies, forward = get(CONTACT_LIST_URL + getdata)
19
+
20
+ if resp.code_type != Net::HTTPOK
21
+ raise ConnectionError, PROTOCOL_ERROR
22
+ end
23
+
24
+ parse data
25
+ end # contacts
26
+
27
+ private
28
+ def parse(data, options={})
29
+ doc = REXML::Document.new(data)
30
+ code = doc.elements['//response/code'].text
31
+
32
+ if code == '401'
33
+ raise AuthenticationError, "Username and password do not match"
34
+ elsif code == '200'
35
+ @contacts = []
36
+ doc.elements.each('//contact') do |cont|
37
+ name = cont.elements['fullName'].text #rescue nil
38
+ email = cont.elements['email1'].text #rescue nil
39
+ @contacts << [name, email]
40
+ end.compact
41
+ @contacts
42
+ else
43
+ raise ConnectionError, PROTOCOL_ERROR
44
+ end
45
+
46
+ end # parse
47
+
48
+ end # Plaxo
49
+
50
+ TYPES[:plaxo] = Plaxo
51
+
52
+ end # Contacts
53
+
54
+
55
+ # sample contacts responses
56
+ '
57
+ Bad email
58
+ =========
59
+ <?xml version="1.0" encoding="utf-8" ?>
60
+ <ns1:GetContactsResponse xmlns:ns1="Plaxo">
61
+ <response>
62
+ <code>401</code>
63
+ <subCode>1</subCode>
64
+ <message>User not found.</message>
65
+ </response>
66
+ </ns1:GetContactsResponse>
67
+
68
+
69
+ Bad password
70
+ ============
71
+ <?xml version="1.0" encoding="utf-8" ?>
72
+ <ns1:GetContactsResponse xmlns:ns1="Plaxo">
73
+ <response>
74
+ <code>401</code>
75
+ <subCode>4</subCode>
76
+ <message>Bad password or security token.</message>
77
+ </response>
78
+ </ns1:GetContactsResponse>
79
+
80
+
81
+ Success
82
+ =======
83
+ <?xml version="1.0" encoding="utf-8" ?>
84
+ <ns1:GetContactsResponse xmlns:ns1="Plaxo">
85
+
86
+ <response>
87
+ <code>200</code>
88
+ <message>OK</message>
89
+ <userId>77311236242</userId>
90
+ </response>
91
+
92
+ <contacts>
93
+
94
+ <contact>
95
+ <itemId>61312569</itemId>
96
+ <displayName>Joe Blow1</displayName>
97
+ <fullName>Joe Blow1</fullName>
98
+ <firstName>Joe</firstName>
99
+ <lastName>Blow1</lastName>
100
+ <homeEmail1>joeblow1@mailinator.com</homeEmail1>
101
+ <email1>joeblow1@mailinator.com</email1>
102
+ <folderId>5291351</folderId>
103
+ </contact>
104
+
105
+ <contact>
106
+ <itemId>61313159</itemId>
107
+ <displayName>Joe Blow2</displayName>
108
+ <fullName>Joe Blow2</fullName>
109
+ <firstName>Joe</firstName>
110
+ <lastName>Blow2</lastName>
111
+ <homeEmail1>joeblow2@mailinator.com</homeEmail1>
112
+ <email1>joeblow2@mailinator.com</email1>
113
+ <folderId>5291351</folderId>
114
+ </contact>
115
+
116
+ </contacts>
117
+
118
+ <totalCount>2</totalCount>
119
+ <editCounter>3</editCounter>
120
+
121
+ </ns1:GetContactsResponse>
122
+
123
+ '
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contacts
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
5
- platform: ruby
4
+ version: 1.0.11
5
+ platform: ""
6
6
  authors:
7
7
  - Lucas Carlson
8
8
  autorequire: contacts
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-02-28 00:00:00 -05:00
12
+ date: 2008-03-07 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -34,6 +34,7 @@ files:
34
34
  - lib/contacts/base.rb
35
35
  - lib/contacts/gmail.rb
36
36
  - lib/contacts/hotmail.rb
37
+ - lib/contacts/plaxo.rb
37
38
  - lib/contacts/yahoo.rb
38
39
  - lib/contacts.rb
39
40
  - LICENSE
@@ -62,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
63
  requirements:
63
64
  - A json parser
64
65
  rubyforge_project:
65
- rubygems_version: 1.0.1
66
+ rubygems_version: 0.9.5
66
67
  signing_key:
67
68
  specification_version: 2
68
69
  summary: Ridiculously easy contact list information from various providers including Yahoo, Gmail, and Hotmail