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 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