contact-list 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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 unless email_node.present?
6
+ return nil if email_node.nil?
7
7
  email = email_node['address']
8
8
  new(email, name)
9
9
  end
@@ -11,7 +11,7 @@ class Contacts::Contact::Yahoo < Struct.new(:email, :name)
11
11
  end
12
12
  end
13
13
  name ||= email
14
- new(email, name) unless email.blank?
14
+ new(email, name) unless email.nil? or email.empty?
15
15
  end
16
16
 
17
17
  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
- class_inheritable_accessor :valid_attributes
10
- self.valid_attributes = []
11
- delegate :import_type, :valid_attributes, :to => "self.class"
5
+ class << self
6
+ attr_accessor :site_url
12
7
 
13
- def self.set_site_url url
14
- self.site_url = url
15
- end
8
+ def valid_attributes= attrs
9
+ @valid_attributes = attrs.map!(&:to_sym)
10
+ attr_accessor *attrs
11
+ end
16
12
 
17
- def self.set_valid_attributes *attrs
18
- self.valid_attributes = attrs.map!(&:to_sym)
19
- attr_accessor *attrs
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 self.provider_id
23
- self.name.demodulize.underscore
26
+ def site_url
27
+ self.class.site_url
24
28
  end
25
-
26
- def self.all attrs={}
27
- new(attrs).contacts
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.only(*valid_attributes)
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,6 +1,6 @@
1
1
  require 'multi_json'
2
2
  class Contacts::Provider::Facebook < Contacts::Provider::OAuth2
3
- set_site_url 'https://graph.facebook.com'
3
+ self.site_url = 'https://graph.facebook.com'
4
4
 
5
5
  def retrieve_contacts!
6
6
  @contacts_response = connection.get("/me/friends")
@@ -1,7 +1,7 @@
1
1
  require 'nokogiri'
2
2
 
3
3
  class Contacts::Provider::Google < Contacts::Provider::OAuth
4
- set_site_url 'https://www.google.com'
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
- set_site_url 'http://api.linkedin.com'
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
- set_valid_attributes :token, :secret, :consumer_key, :consumer_secret, :uid
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
- set_valid_attributes :token, :consumer_key, :consumer_secret
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
- set_site_url 'http://api.twitter.com'
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
- set_site_url 'http://social.yahooapis.com'
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.0
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 00:00:00.000000000 Z
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: &70198657387760 !ruby/object:Gem::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: *70198657387760
26
+ version_requirements: *70180995875800
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
- requirement: &70198657387140 !ruby/object:Gem::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: *70198657387140
37
+ version_requirements: *70180995873440
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: rspec
40
- requirement: &70198657386660 !ruby/object:Gem::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: *70198657386660
48
+ version_requirements: *70180995872540
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rspec
51
- requirement: &70198657386040 !ruby/object:Gem::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: *70198657386040
59
+ version_requirements: *70180995871580
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rspec
62
- requirement: &70198657385400 !ruby/object:Gem::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: *70198657385400
70
+ version_requirements: *70180995870620
71
71
  - !ruby/object:Gem::Dependency
72
- name: activesupport
73
- requirement: &70198657384880 !ruby/object:Gem::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.1.0
79
- type: :runtime
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: *70198657384880
92
+ version_requirements: *70180995867120
82
93
  - !ruby/object:Gem::Dependency
83
94
  name: multi_json
84
- requirement: &70198657384340 !ruby/object:Gem::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: *70198657384340
103
+ version_requirements: *70180995865060
93
104
  - !ruby/object:Gem::Dependency
94
105
  name: nokogiri
95
- requirement: &70198657383640 !ruby/object:Gem::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: *70198657383640
114
+ version_requirements: *70180995863960
104
115
  - !ruby/object:Gem::Dependency
105
116
  name: oauth
106
- requirement: &70198657383040 !ruby/object:Gem::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: *70198657383040
125
+ version_requirements: *70180995861800
115
126
  - !ruby/object:Gem::Dependency
116
127
  name: oauth2
117
- requirement: &70198657382440 !ruby/object:Gem::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: *70198657382440
136
+ version_requirements: *70180995848320
126
137
  - !ruby/object:Gem::Dependency
127
138
  name: rspec
128
- requirement: &70198657381900 !ruby/object:Gem::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: *70198657381900
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