linkedin 0.4.4 → 0.4.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bfe7308054e4ded9f8fabfdbfc04ee68eae04257
4
- data.tar.gz: 446b1003b220d412dcd323fa7b5a5ebefa689713
3
+ metadata.gz: beb262e6873736feb890b56c140f682c80beb36f
4
+ data.tar.gz: 8e1878a8f048e6807c3c3470aa9e9cc391ba4354
5
5
  SHA512:
6
- metadata.gz: 3459938df6bee5b3e97434b626a55a790778a02017b09fc1ca761ec2a39088c82f15a992eb65b77fc81c3170bbf900d3bfd1527ded889fb45480c2d6dec67529
7
- data.tar.gz: ac1f9808e63d3830562f24905d20a82fed94df13795ccf7c4e51b80c6066fe1ca58f1a8618d3aa8ae8e7a2b3300350dc21ed2acebcc1fff0727b7a9668602539
6
+ metadata.gz: 4de393817404a35a883e2987ef686e2763a5b9c0d684998aff0c66a28e988dde4da3513889fa6de8bed23562abd2e9a32851d8a6fedb6967d5027d2442c28f6d
7
+ data.tar.gz: 8b22d8d9eff024281c1a8c388ecabe73e436f3ed80806694113890d319c72c206d3f58ad8a831e37d88e856490bdccf00f8f5d3365f65d2787e1adb998619be3
@@ -1,4 +1,7 @@
1
1
  rvm:
2
2
  - 2.0.0
3
+ - 2.1.0
4
+ - 1.9.3
5
+ - jruby-18mode
3
6
  - jruby-19mode
4
- - rbx-19mode
7
+ - rbx
data/LICENSE CHANGED
@@ -1,4 +1,6 @@
1
- Copyright (c) 2009 Wynn Netherland
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2009 Wynn Netherland & Matthew Kirk
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining
4
6
  a copy of this software and associated documentation files (the
@@ -1,12 +1,12 @@
1
1
  # LinkedIn
2
2
 
3
- Ruby wrapper for the [LinkedIn API](http://developer.linkedin.com). Heavily inspired by [John Nunemaker's](http://github.com/jnunemaker) [Twitter gem](http://github.com/jnunemaker/twitter), the LinkedIn gem provides an easy-to-use wrapper for LinkedIn's Oauth/XML APIs.
3
+ Ruby wrapper for the [LinkedIn API](http://developer.linkedin.com). The LinkedIn gem provides an easy-to-use wrapper for LinkedIn's Oauth/XML APIs.
4
4
 
5
5
  Travis CI : [![Build Status](https://secure.travis-ci.org/hexgnu/linkedin.png)](http://travis-ci.org/hexgnu/linkedin)
6
6
 
7
7
  ## Installation
8
8
 
9
- [sudo] gem install linkedin
9
+ gem install linkedin
10
10
 
11
11
  ## Usage
12
12
 
@@ -15,17 +15,21 @@ Travis CI : [![Build Status](https://secure.travis-ci.org/hexgnu/linkedin.png)](
15
15
  LinkedIn's API uses Oauth for authentication. Luckily, the LinkedIn gem hides most of the gory details from you.
16
16
 
17
17
  ```ruby
18
- require 'rubygems'
19
18
  require 'linkedin'
20
19
 
21
20
  # get your api keys at https://www.linkedin.com/secure/developer
22
21
  client = LinkedIn::Client.new('your_consumer_key', 'your_consumer_secret')
23
- rtoken = client.request_token.token
24
- rsecret = client.request_token.secret
22
+
23
+ # If you want to use one of the scopes from linkedin you have to pass it in at this point
24
+ # You can learn more about it here: http://developer.linkedin.com/documents/authentication
25
+ request_token = client.request_token({}, :scope => "r_basicprofile+r_emailaddress")
26
+
27
+ rtoken = request_token.token
28
+ rsecret = request_token.secret
25
29
 
26
30
  # to test from your desktop, open the following url in your browser
27
31
  # and record the pin it gives you
28
- client.request_token.authorize_url
32
+ request_token.authorize_url
29
33
  => "https://api.linkedin.com/uas/oauth/authorize?oauth_token=<generated_token>"
30
34
 
31
35
  # then fetch your access keys
@@ -33,7 +37,7 @@ client.authorize_from_request(rtoken, rsecret, pin)
33
37
  => ["OU812", "8675309"] # <= save these for future requests
34
38
 
35
39
  # or authorize from previously fetched access keys
36
- client.authorize_from_access("OU812", "8675309")
40
+ c.authorize_from_access("OU812", "8675309")
37
41
 
38
42
  # you're now free to move about the cabin, call any API method
39
43
  ```
@@ -50,7 +54,6 @@ client.profile(:id => 'gNma67_AdI')
50
54
  client.profile(:url => 'http://www.linkedin.com/in/netherland')
51
55
  ```
52
56
 
53
-
54
57
  More examples in the [examples folder](http://github.com/pengwynn/linkedin/blob/master/examples).
55
58
 
56
59
  For a nice example on using this in a [Rails App](http://pivotallabs.com/users/will/blog/articles/1096-linkedin-gem-for-a-web-app).
@@ -70,6 +73,7 @@ If you want to play with the LinkedIn api without using the gem, have a look at
70
73
  * Make your feature addition or bug fix.
71
74
  * Add tests for it. This is important so I don't break it in a
72
75
  future version unintentionally.
76
+ * Make sure your test doesn't just check of instance of LinkedIn::Mash :smile:.
73
77
  * Commit, do not mess with rakefile, version, or history.
74
78
  (if you want to have your own version, that is fine but
75
79
  bump version in a commit by itself I can ignore when I pull)
@@ -77,4 +81,4 @@ If you want to play with the LinkedIn api without using the gem, have a look at
77
81
 
78
82
  ## Copyright
79
83
 
80
- Copyright (c) 2009-11 [Wynn Netherland](http://wynnnetherland.com). See LICENSE for details.
84
+ Copyright (c) 2013-Present [Matt Kirk](http://matthewkirk.com) 2009-11 [Wynn Netherland](http://wynnnetherland.com). See LICENSE for details.
@@ -1,20 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.4 - Jan 11, 2014
4
+
5
+ * Group share add
6
+ * Readme updates
7
+
8
+ ## 0.4.3
9
+
10
+ ## 0.4.2
11
+
12
+ ## 0.4.1
13
+
3
14
  ## 0.4.0 - May 30, 2013
4
15
 
5
16
  * Add capability to ask for desired permissions from linked in api
6
17
  * Add option to specify a proxy
7
18
  * Bump hashie version
8
19
  * fix the permission param passing
9
- * fix to be able to pass the permission scope
20
+ * fix to be able to pass the permission scope
10
21
  * Manipulating comments/likes for network_updates ('shares')
11
- * Methods to work with comments/likes for share
22
+ * Methods to work with comments/likes for share
12
23
  * Added a method to get a user's shares
13
24
  * Added current user's shares as an option (client.shares)
14
25
  * Readme Typos
15
26
 
16
-
17
-
18
27
  ## 0.2.x - March x, 2010
19
28
 
20
29
  * Removed Crack as a dependency, Nokogiri FTW
@@ -3,12 +3,17 @@ require 'linkedin'
3
3
 
4
4
  # get your api keys at https://www.linkedin.com/secure/developer
5
5
  client = LinkedIn::Client.new('your_consumer_key', 'your_consumer_secret')
6
- rtoken = client.request_token.token
7
- rsecret = client.request_token.secret
6
+
7
+ # If you want to use one of the scopes from linkedin you have to pass it in at this point
8
+ # You can learn more about it here: http://developer.linkedin.com/documents/authentication
9
+ request_token = client.request_token({}, :scope => "r_basicprofile+r_emailaddress")
10
+
11
+ rtoken = request_token.token
12
+ rsecret = request_token.secret
8
13
 
9
14
  # to test from your desktop, open the following url in your browser
10
15
  # and record the pin it gives you
11
- client.request_token.authorize_url
16
+ request_token.authorize_url
12
17
  => "https://api.linkedin.com/uas/oauth/authorize?oauth_token=<generated_token>"
13
18
 
14
19
  # then fetch your access keys
@@ -0,0 +1,7 @@
1
+ # AUTHENTICATE FIRST found in examples/authenticate.rb
2
+
3
+ # client is a LinkedIn::Client
4
+
5
+ # send a message to a person in your network. you will need to authenticate the
6
+ # user and ask for the "w_messages" permission.
7
+ response = client.send_message("subject", "body", ["person_1_id", "person_2_id"])
@@ -87,7 +87,7 @@ module LinkedIn
87
87
  path = "#{person_path(options)}/network/updates/key=#{update_key}/likes"
88
88
  simple_query(path, options)
89
89
  end
90
-
90
+
91
91
  def picture_urls(options={})
92
92
  picture_size = options.delete(:picture_size) || 'original'
93
93
  path = "#{picture_urls_path(options)}::(#{picture_size})"
@@ -109,7 +109,7 @@ module LinkedIn
109
109
  if options.delete(:public)
110
110
  path +=":public"
111
111
  elsif fields
112
- path +=":(#{fields.map{ |f| f.to_s.gsub("_","-") }.join(',')})"
112
+ path +=":(#{build_fields_params(fields)})"
113
113
  end
114
114
 
115
115
  headers = options.delete(:headers) || {}
@@ -119,6 +119,16 @@ module LinkedIn
119
119
  Mash.from_json(get(path, headers))
120
120
  end
121
121
 
122
+ def build_fields_params(fields)
123
+ if fields.is_a?(Hash) && !fields.empty?
124
+ fields.map {|index,value| "#{index}:(#{build_fields_params(value)})" }.join(',')
125
+ elsif fields.respond_to?(:each)
126
+ fields.map {|field| build_fields_params(field) }.join(',')
127
+ else
128
+ fields.to_s.gsub("_", "-")
129
+ end
130
+ end
131
+
122
132
  def person_path(options)
123
133
  path = "/people/"
124
134
  if id = options.delete(:id)
@@ -15,6 +15,16 @@ module LinkedIn
15
15
  post(path, defaults.merge(share).to_json, "Content-Type" => "application/json")
16
16
  end
17
17
 
18
+ def post_group_discussion(group_id, discussion)
19
+ warn 'Use add_group_share over post_group_discussion. This will be taken out in future versions'
20
+ add_group_share(group_id, discussion)
21
+ end
22
+
23
+ def add_group_share(group_id, share)
24
+ path = "/groups/#{group_id}/posts"
25
+ post(path, share.to_json, "Content-Type" => "application/json")
26
+ end
27
+
18
28
  def follow_company(company_id)
19
29
  path = "/people/~/following/companies"
20
30
  body = {:id => company_id }
@@ -69,17 +79,6 @@ module LinkedIn
69
79
  post(path, message.to_json, "Content-Type" => "application/json")
70
80
  end
71
81
 
72
- def post_group_discussion(group_id, discussion)
73
- path = "/groups/#{group_id}/posts"
74
-
75
- discussion_post = {
76
- 'title' => discussion['title'],
77
- 'summary' => discussion['summary']
78
- }
79
-
80
- post(path, discussion_post.to_json, "Content-Type" => "application/json")
81
- end
82
-
83
82
  end
84
83
 
85
84
  end
@@ -3,7 +3,7 @@ module LinkedIn
3
3
  module VERSION #:nodoc:
4
4
  MAJOR = 0
5
5
  MINOR = 4
6
- PATCH = 4
6
+ PATCH = 6
7
7
  PRE = nil
8
8
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
9
9
  end
@@ -12,11 +12,11 @@ Gem::Specification.new do |gem|
12
12
  gem.add_development_dependency 'simplecov', '~> 0.7'
13
13
  gem.add_development_dependency 'vcr', '~> 2.5'
14
14
  gem.add_development_dependency 'webmock', '~> 1.11'
15
- gem.authors = ["Wynn Netherland", "Josh Kalderimis"]
16
- gem.description = %q{Ruby wrapper for the LinkedIn API}
17
- gem.email = ['wynn.netherland@gmail.com', 'josh.kalderimis@gmail.com']
15
+ gem.authors = ['Matthew Kirk', 'Wynn Netherland', 'Josh Kalderimis']
16
+ gem.description = 'Ruby wrapper for the LinkedIn API'
17
+ gem.email = ['meteor.kirk@gmail.com', 'wynn.netherland@gmail.com', 'josh.kalderimis@gmail.com']
18
18
  gem.files = `git ls-files`.split("\n")
19
- gem.homepage = 'http://github.com/pengwynn/linkedin'
19
+ gem.homepage = 'http://github.com/hexgnu/linkedin'
20
20
  gem.name = 'linkedin'
21
21
  gem.require_paths = ['lib']
22
22
  gem.summary = gem.description
@@ -19,7 +19,7 @@ describe LinkedIn::Api do
19
19
  stub_request(:get, "https://api.linkedin.com/v1/people/id=123").to_return(:body => "{}")
20
20
  client.profile(:id => 123).should be_an_instance_of(LinkedIn::Mash)
21
21
  end
22
-
22
+
23
23
  it "should be able to view the picture urls" do
24
24
  stub_request(:get, "https://api.linkedin.com/v1/people/~/picture-urls::(original)").to_return(:body => "{}")
25
25
  client.picture_urls.should be_an_instance_of(LinkedIn::Mash)
@@ -89,13 +89,6 @@ describe LinkedIn::Api do
89
89
  response.code.should == "201"
90
90
  end
91
91
 
92
- it "should be able to send a message" do
93
- stub_request(:post, "https://api.linkedin.com/v1/people/~/mailbox").to_return(:body => "", :status => 201)
94
- response = client.send_message("subject", "body", ["recip1", "recip2"])
95
- response.body.should == nil
96
- response.code.should == "201"
97
- end
98
-
99
92
  it "should be able to like a network update" do
100
93
  stub_request(:put, "https://api.linkedin.com/v1/people/~/network/updates/key=SOMEKEY/is-liked").
101
94
  with(:body => "true").to_return(:body => "", :status => 201)
@@ -234,6 +227,11 @@ describe LinkedIn::Api do
234
227
  client.group_memberships.should be_an_instance_of(LinkedIn::Mash)
235
228
  end
236
229
 
230
+ it "should be able to parse nested fields" do
231
+ stub_request(:get, "https://api.linkedin.com/v1/people/~/group-memberships:(group:(id,name,small-logo-url,short-description))").to_return(:body => "{}")
232
+ client.group_memberships(fields: [{group: ['id', 'name', 'small-logo-url', 'short-description']}]).should be_an_instance_of(LinkedIn::Mash)
233
+ end
234
+
237
235
  it "should be able to join a group" do
238
236
  stub_request(:put, "https://api.linkedin.com/v1/people/~/group-memberships/123").to_return(:body => "", :status => 201)
239
237
 
@@ -255,11 +253,35 @@ describe LinkedIn::Api do
255
253
  end
256
254
 
257
255
  it 'should be able to post a discussion to a group' do
258
- stub_request(:post, "https://api.linkedin.com/v1/groups/123/posts").to_return(:body => "", :status => 201)
259
- response = client.post_group_discussion(123, {'title' => 'New Discussion', 'summary' => 'New Summary'})
256
+ expected = {
257
+ 'title' => 'New Discussion',
258
+ 'summary' => 'New Summary',
259
+ 'content' => {
260
+ "submitted-url" => "http://www.google.com"
261
+ }
262
+ }
263
+
264
+ stub_request(:post, "https://api.linkedin.com/v1/groups/123/posts").with(:body => expected).to_return(:body => "", :status => 201)
265
+ response = client.post_group_discussion(123, expected)
260
266
  response.body.should == nil
261
267
  response.code.should == '201'
262
268
  end
269
+
270
+ it "should be able to share a new group status" do
271
+ stub_request(:post, "https://api.linkedin.com/v1/groups/1/posts").to_return(:body => "", :status => 201)
272
+ response = client.add_group_share(1, :comment => "Testing, 1, 2, 3")
273
+ response.body.should == nil
274
+ response.code.should == "201"
275
+ end
276
+ end
277
+
278
+ context "Communication API" do
279
+ it "should be able to send a message" do
280
+ stub_request(:post, "https://api.linkedin.com/v1/people/~/mailbox").to_return(:body => "", :status => 201)
281
+ response = client.send_message("subject", "body", ["recip1", "recip2"])
282
+ response.body.should == nil
283
+ response.code.should == "201"
284
+ end
263
285
  end
264
286
 
265
287
  context "Errors" do
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linkedin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
+ - Matthew Kirk
7
8
  - Wynn Netherland
8
9
  - Josh Kalderimis
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-11-15 00:00:00.000000000 Z
13
+ date: 2014-01-16 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: hashie
@@ -145,6 +146,7 @@ dependencies:
145
146
  version: '1.11'
146
147
  description: Ruby wrapper for the LinkedIn API
147
148
  email:
149
+ - meteor.kirk@gmail.com
148
150
  - wynn.netherland@gmail.com
149
151
  - josh.kalderimis@gmail.com
150
152
  executables: []
@@ -163,6 +165,7 @@ files:
163
165
  - Rakefile
164
166
  - changelog.markdown
165
167
  - examples/authenticate.rb
168
+ - examples/communication.rb
166
169
  - examples/network.rb
167
170
  - examples/profile.rb
168
171
  - examples/sinatra.rb
@@ -202,7 +205,7 @@ files:
202
205
  - spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_single_keywords_option_with_facets_to_return.yml
203
206
  - spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_single_keywords_option_with_pagination.yml
204
207
  - spec/helper.rb
205
- homepage: http://github.com/pengwynn/linkedin
208
+ homepage: http://github.com/hexgnu/linkedin
206
209
  licenses: []
207
210
  metadata: {}
208
211
  post_install_message:
@@ -221,8 +224,30 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
224
  version: '0'
222
225
  requirements: []
223
226
  rubyforge_project:
224
- rubygems_version: 2.0.3
227
+ rubygems_version: 2.0.2
225
228
  signing_key:
226
229
  specification_version: 4
227
230
  summary: Ruby wrapper for the LinkedIn API
228
- test_files: []
231
+ test_files:
232
+ - spec/cases/api_spec.rb
233
+ - spec/cases/linkedin_spec.rb
234
+ - spec/cases/mash_spec.rb
235
+ - spec/cases/oauth_spec.rb
236
+ - spec/cases/search_spec.rb
237
+ - spec/fixtures/cassette_library/LinkedIn_Api/Company_API.yml
238
+ - spec/fixtures/cassette_library/LinkedIn_Client/_authorize_from_request.yml
239
+ - spec/fixtures/cassette_library/LinkedIn_Client/_request_token.yml
240
+ - spec/fixtures/cassette_library/LinkedIn_Client/_request_token/with_a_callback_url.yml
241
+ - spec/fixtures/cassette_library/LinkedIn_Client/_request_token/with_default_options.yml
242
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search/by_company_name_option.yml
243
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search/by_first_name_and_last_name_options.yml
244
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search/by_first_name_and_last_name_options_with_fields.yml
245
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search/by_keywords_string_parameter.yml
246
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search/by_single_keywords_option.yml
247
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search/by_single_keywords_option_with_pagination.yml
248
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_keywords_options_with_fields.yml
249
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_keywords_string_parameter.yml
250
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_single_keywords_option.yml
251
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_single_keywords_option_with_facets_to_return.yml
252
+ - spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_single_keywords_option_with_pagination.yml
253
+ - spec/helper.rb