contact-list 0.2.0 → 0.2.1
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/README.md +27 -0
- data/lib/contact_list.rb +0 -10
- data/lib/contacts/contact/google.rb +1 -1
- data/lib/contacts/contact/yahoo.rb +1 -1
- data/lib/contacts/provider/base.rb +25 -21
- data/lib/contacts/provider/facebook.rb +1 -1
- data/lib/contacts/provider/google.rb +1 -1
- data/lib/contacts/provider/linkedin.rb +1 -1
- data/lib/contacts/provider/oauth.rb +6 -2
- data/lib/contacts/provider/oauth2.rb +5 -1
- data/lib/contacts/provider/twitter.rb +1 -1
- data/lib/contacts/provider/yahoo.rb +1 -1
- metadata +42 -31
- data/README +0 -0
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Contact List
|
2
|
+
|
3
|
+
A small gem for fetching a user's contacts from various social providers. Now with 100% less ActiveSupport!
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
Instantiate a provider with your API key and the OAuth token for the user:
|
8
|
+
|
9
|
+
provider = Contacts[:linkedin].new(consumer_key: 'foo', consumer_secret: 'bar', token: 'moo', secret: 'oink')
|
10
|
+
|
11
|
+
Fetch the contacts:
|
12
|
+
|
13
|
+
provider.contacts.first.name
|
14
|
+
# => "Joe Bloggs"
|
15
|
+
|
16
|
+
## Todo
|
17
|
+
|
18
|
+
Improve the API. Seriously. It's awful.
|
19
|
+
|
20
|
+
## Contribootin'
|
21
|
+
|
22
|
+
* Fork the project.
|
23
|
+
* Make your feature addition or bug fix.
|
24
|
+
* Add specs for it. This is important so I don't break it in a future version unintentionally.
|
25
|
+
* Commit, do not mess with rakefile, version, or history
|
26
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
27
|
+
* Send me a pull request. Bonus points for topic branches.
|
data/lib/contact_list.rb
CHANGED
@@ -1,13 +1,3 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
-
require 'active_support/core_ext/hash/slice'
|
4
|
-
require 'active_support/core_ext/class/inheritable_attributes'
|
5
|
-
require 'active_support/core_ext/module/delegation'
|
6
|
-
require 'active_support/core_ext/object/blank'
|
7
|
-
require 'active_support/inflector'
|
8
|
-
|
9
|
-
class Hash
|
10
|
-
alias_method :only, :slice
|
11
|
-
alias_method :only!, :slice!
|
12
|
-
end
|
13
3
|
require File.expand_path('../contacts', __FILE__)
|
@@ -3,7 +3,7 @@ class Contacts::Contact::Google < Struct.new(:email, :name)
|
|
3
3
|
def self.parse xml
|
4
4
|
name = xml.css("title").text
|
5
5
|
email_node = xml.xpath("gd:email").first
|
6
|
-
return nil
|
6
|
+
return nil if email_node.nil?
|
7
7
|
email = email_node['address']
|
8
8
|
new(email, name)
|
9
9
|
end
|
@@ -1,32 +1,36 @@
|
|
1
1
|
module Contacts
|
2
2
|
module Provider
|
3
3
|
class Base
|
4
|
-
|
5
|
-
class_inheritable_accessor :site_url
|
6
|
-
self.site_url = nil
|
7
|
-
delegate :site_url, :to => "self.class"
|
8
4
|
|
9
|
-
|
10
|
-
|
11
|
-
delegate :import_type, :valid_attributes, :to => "self.class"
|
5
|
+
class << self
|
6
|
+
attr_accessor :site_url
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
def valid_attributes= attrs
|
9
|
+
@valid_attributes = attrs.map!(&:to_sym)
|
10
|
+
attr_accessor *attrs
|
11
|
+
end
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
def valid_attributes
|
14
|
+
@valid_attributes ||= []
|
15
|
+
end
|
16
|
+
|
17
|
+
def provider_id
|
18
|
+
self.name.gsub(/^.*::/, '').downcase
|
19
|
+
end
|
20
|
+
|
21
|
+
def all attrs={}
|
22
|
+
new(attrs).contacts
|
23
|
+
end
|
20
24
|
end
|
21
25
|
|
22
|
-
def
|
23
|
-
self.
|
26
|
+
def site_url
|
27
|
+
self.class.site_url
|
24
28
|
end
|
25
|
-
|
26
|
-
def
|
27
|
-
|
29
|
+
|
30
|
+
def valid_attributes
|
31
|
+
self.class.valid_attributes
|
28
32
|
end
|
29
|
-
|
33
|
+
|
30
34
|
def initialize attrs={}
|
31
35
|
parse_attributes attrs
|
32
36
|
end
|
@@ -56,7 +60,7 @@ module Contacts
|
|
56
60
|
end
|
57
61
|
|
58
62
|
def parse_attributes attrs = {}
|
59
|
-
self.attributes = attrs.
|
63
|
+
self.attributes = attrs.reject { |k,v| !self.class.valid_attributes.include?(k.to_sym) }
|
60
64
|
end
|
61
65
|
|
62
66
|
def attributes= attrs = {}
|
@@ -66,7 +70,7 @@ module Contacts
|
|
66
70
|
end
|
67
71
|
|
68
72
|
def attributes
|
69
|
-
valid_attributes.inject({}) {|result, attr| result.merge attr => send(attr) }
|
73
|
+
self.class.valid_attributes.inject({}) {|result, attr| result.merge attr => send(attr) }
|
70
74
|
end
|
71
75
|
end
|
72
76
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
|
3
3
|
class Contacts::Provider::Google < Contacts::Provider::OAuth
|
4
|
-
|
4
|
+
self.site_url = 'https://www.google.com'
|
5
5
|
|
6
6
|
def retrieve_contacts!
|
7
7
|
@contacts_response = connection.get("/m8/feeds/contacts/#{uid||'default'}/full?max-results=999")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'multi_json'
|
2
2
|
class Contacts::Provider::Linkedin < Contacts::Provider::OAuth
|
3
|
-
|
3
|
+
self.site_url = 'http://api.linkedin.com'
|
4
4
|
|
5
5
|
def retrieve_contacts!
|
6
6
|
@connections_response = connection.get("/v1/people/~/connections:(first-name,last-name,id,headline,picture-url)")
|
@@ -3,10 +3,14 @@ require 'oauth'
|
|
3
3
|
module Contacts
|
4
4
|
module Provider
|
5
5
|
class OAuth < Contacts::Provider::Base
|
6
|
-
|
6
|
+
def self.inherited klass
|
7
|
+
klass.valid_attributes = self.valid_attributes
|
8
|
+
end
|
9
|
+
|
10
|
+
self.valid_attributes = [:token, :secret, :consumer_key, :consumer_secret, :uid]
|
7
11
|
|
8
12
|
def consumer
|
9
|
-
@consumer ||= ::OAuth::Consumer.new(consumer_key, consumer_secret, :site => site_url)
|
13
|
+
@consumer ||= ::OAuth::Consumer.new(consumer_key, consumer_secret, :site => self.site_url)
|
10
14
|
end
|
11
15
|
|
12
16
|
def connect!
|
@@ -3,7 +3,11 @@ require 'oauth2'
|
|
3
3
|
module Contacts
|
4
4
|
module Provider
|
5
5
|
class OAuth2 < Contacts::Provider::Base
|
6
|
-
|
6
|
+
def self.inherited klass
|
7
|
+
klass.valid_attributes = self.valid_attributes
|
8
|
+
end
|
9
|
+
|
10
|
+
self.valid_attributes = [:token, :consumer_key, :consumer_secret]
|
7
11
|
|
8
12
|
def client
|
9
13
|
@client ||= ::OAuth2::Client.new(consumer_key, consumer_secret, :site => site_url)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'multi_json'
|
2
2
|
class Contacts::Provider::Twitter < Contacts::Provider::OAuth
|
3
|
-
|
3
|
+
self.site_url = 'http://api.twitter.com'
|
4
4
|
|
5
5
|
def retrieve_contacts!
|
6
6
|
{:followers_response => followers_response, :following_response => following_response}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'multi_json'
|
2
2
|
class Contacts::Provider::Yahoo < Contacts::Provider::OAuth
|
3
|
-
|
3
|
+
self.site_url = 'http://social.yahooapis.com'
|
4
4
|
|
5
5
|
def retrieve_contacts!
|
6
6
|
@contacts_response = connection.get("/v1/user/me/contacts?format=json")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contact-list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-02-
|
14
|
+
date: 2012-02-20 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: contact-list
|
18
|
-
requirement: &
|
18
|
+
requirement: &70180995875800 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70180995875800
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
|
-
requirement: &
|
29
|
+
requirement: &70180995873440 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '2.0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70180995873440
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: rspec
|
40
|
-
requirement: &
|
40
|
+
requirement: &70180995872540 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '2.0'
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70180995872540
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: rspec
|
51
|
-
requirement: &
|
51
|
+
requirement: &70180995871580 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: '2.0'
|
57
57
|
type: :development
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70180995871580
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rspec
|
62
|
-
requirement: &
|
62
|
+
requirement: &70180995870620 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ~>
|
@@ -67,21 +67,32 @@ dependencies:
|
|
67
67
|
version: '2.0'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70180995870620
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
73
|
-
requirement: &
|
72
|
+
name: rspec
|
73
|
+
requirement: &70180995869160 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
|
-
- -
|
76
|
+
- - ~>
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: 2.
|
79
|
-
type: :
|
78
|
+
version: '2.0'
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: *70180995869160
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec
|
84
|
+
requirement: &70180995867120 !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.0'
|
90
|
+
type: :development
|
80
91
|
prerelease: false
|
81
|
-
version_requirements: *
|
92
|
+
version_requirements: *70180995867120
|
82
93
|
- !ruby/object:Gem::Dependency
|
83
94
|
name: multi_json
|
84
|
-
requirement: &
|
95
|
+
requirement: &70180995865060 !ruby/object:Gem::Requirement
|
85
96
|
none: false
|
86
97
|
requirements:
|
87
98
|
- - ~>
|
@@ -89,10 +100,10 @@ dependencies:
|
|
89
100
|
version: 1.0.4
|
90
101
|
type: :runtime
|
91
102
|
prerelease: false
|
92
|
-
version_requirements: *
|
103
|
+
version_requirements: *70180995865060
|
93
104
|
- !ruby/object:Gem::Dependency
|
94
105
|
name: nokogiri
|
95
|
-
requirement: &
|
106
|
+
requirement: &70180995863960 !ruby/object:Gem::Requirement
|
96
107
|
none: false
|
97
108
|
requirements:
|
98
109
|
- - ~>
|
@@ -100,10 +111,10 @@ dependencies:
|
|
100
111
|
version: 1.5.0
|
101
112
|
type: :runtime
|
102
113
|
prerelease: false
|
103
|
-
version_requirements: *
|
114
|
+
version_requirements: *70180995863960
|
104
115
|
- !ruby/object:Gem::Dependency
|
105
116
|
name: oauth
|
106
|
-
requirement: &
|
117
|
+
requirement: &70180995861800 !ruby/object:Gem::Requirement
|
107
118
|
none: false
|
108
119
|
requirements:
|
109
120
|
- - ~>
|
@@ -111,10 +122,10 @@ dependencies:
|
|
111
122
|
version: 0.4.5
|
112
123
|
type: :runtime
|
113
124
|
prerelease: false
|
114
|
-
version_requirements: *
|
125
|
+
version_requirements: *70180995861800
|
115
126
|
- !ruby/object:Gem::Dependency
|
116
127
|
name: oauth2
|
117
|
-
requirement: &
|
128
|
+
requirement: &70180995848320 !ruby/object:Gem::Requirement
|
118
129
|
none: false
|
119
130
|
requirements:
|
120
131
|
- - ~>
|
@@ -122,10 +133,10 @@ dependencies:
|
|
122
133
|
version: 0.5.2
|
123
134
|
type: :runtime
|
124
135
|
prerelease: false
|
125
|
-
version_requirements: *
|
136
|
+
version_requirements: *70180995848320
|
126
137
|
- !ruby/object:Gem::Dependency
|
127
138
|
name: rspec
|
128
|
-
requirement: &
|
139
|
+
requirement: &70180995847540 !ruby/object:Gem::Requirement
|
129
140
|
none: false
|
130
141
|
requirements:
|
131
142
|
- - ~>
|
@@ -133,7 +144,7 @@ dependencies:
|
|
133
144
|
version: '2.0'
|
134
145
|
type: :development
|
135
146
|
prerelease: false
|
136
|
-
version_requirements: *
|
147
|
+
version_requirements: *70180995847540
|
137
148
|
description: Find contacts from multiple providers
|
138
149
|
email:
|
139
150
|
- alex@rawnet.com
|
@@ -142,7 +153,7 @@ email:
|
|
142
153
|
executables: []
|
143
154
|
extensions: []
|
144
155
|
extra_rdoc_files:
|
145
|
-
- README
|
156
|
+
- README.md
|
146
157
|
files:
|
147
158
|
- lib/contact_list.rb
|
148
159
|
- lib/contacts.rb
|
@@ -161,8 +172,8 @@ files:
|
|
161
172
|
- lib/contacts/provider/oauth2.rb
|
162
173
|
- lib/contacts/provider/twitter.rb
|
163
174
|
- lib/contacts/provider/yahoo.rb
|
164
|
-
- README
|
165
|
-
homepage:
|
175
|
+
- README.md
|
176
|
+
homepage: http://github.com/boffbowsh/contact-list
|
166
177
|
licenses: []
|
167
178
|
post_install_message:
|
168
179
|
rdoc_options: []
|
data/README
DELETED
File without changes
|