linkedin 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -7
- data/.travis.yml +3 -1
- data/CHANGELOG.md +4 -0
- data/EXAMPLES.md +7 -11
- data/lib/linked_in/api/communications.rb +1 -1
- data/lib/linked_in/api/companies.rb +13 -12
- data/lib/linked_in/api/people.rb +3 -3
- data/lib/linked_in/api/share_and_social_stream.rb +2 -3
- data/lib/linked_in/errors.rb +3 -3
- data/lib/linked_in/helpers/authorization.rb +15 -22
- data/lib/linked_in/helpers/request.rb +8 -8
- data/lib/linked_in/version.rb +2 -2
- data/lib/linkedin.rb +1 -1
- data/linkedin.gemspec +1 -1
- data/spec/cases/api_spec.rb +33 -43
- data/spec/cases/oauth_spec.rb +16 -100
- data/spec/cases/search_spec.rb +1 -2
- data/spec/fixtures/cassette_library/LinkedIn_Api/Company_API/should_load_correct_company_data.yml +8 -6
- metadata +148 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
5
|
-
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '08e347913e1e07f57fc795eea8905e879acb8ca3e85252447d01f067e8d27669'
|
4
|
+
data.tar.gz: 33826a5f7d4ec9bd6feb55ff322ad88431912ac407871a85b0d0c1d1eede2862
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b25e4ff03e783768fb91e8428c8fd463dac35560f0251591bcb6ad5857b583c8e17fd2d3fbbfb1aa5c60e62aa908645ac6c775082c68469a510e4f467181997b
|
7
|
+
data.tar.gz: ee7007f936d2800af5334b377631947f96e29dce4e3b3664fa3ab9e9c12ce2578de79fb75ec040df624c9839e092f2b5db9e8d6d31113b066060b5bedf630282
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/EXAMPLES.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Linkedin Gem Examples
|
2
2
|
|
3
|
-
##
|
3
|
+
## OAuth2 Authentication
|
4
4
|
|
5
5
|
Here's an example of authenticating with the LinkedIn API
|
6
6
|
|
@@ -13,22 +13,18 @@ client = LinkedIn::Client.new('your_consumer_key', 'your_consumer_secret')
|
|
13
13
|
|
14
14
|
# If you want to use one of the scopes from linkedin you have to pass it in at this point
|
15
15
|
# You can learn more about it here: http://developer.linkedin.com/documents/authentication
|
16
|
-
request_token = client.request_token({}, :scope => "r_basicprofile r_emailaddress")
|
17
|
-
|
18
|
-
rtoken = request_token.token
|
19
|
-
rsecret = request_token.secret
|
20
16
|
|
21
17
|
# to test from your desktop, open the following url in your browser
|
22
18
|
# and record the pin it gives you
|
23
|
-
|
24
|
-
=> "https://api.linkedin.com/uas/
|
19
|
+
client.authorize_url(:redirect_uri => 'https:://www.yourdomain.com/callback', :state => SecureRandom.uuid, :scope => "r_basicprofile+r_emailaddress")
|
20
|
+
=> "https://api.linkedin.com/uas/oauth2/authorization?"
|
25
21
|
|
26
22
|
# then fetch your access keys
|
27
|
-
client.authorize_from_request(
|
28
|
-
=>
|
23
|
+
client.authorize_from_request(code, :redirect_uri => 'https:://www.yourdomain.com/callback')
|
24
|
+
=> "OU812" # <= save this for future requests
|
29
25
|
|
30
26
|
# or authorize from previously fetched access keys
|
31
|
-
client.authorize_from_access("OU812"
|
27
|
+
client.authorize_from_access("OU812")
|
32
28
|
|
33
29
|
# you're now free to move about the cabin, call any API method
|
34
30
|
```
|
@@ -145,7 +141,7 @@ helpers do
|
|
145
141
|
private
|
146
142
|
def linkedin_client
|
147
143
|
client = LinkedIn::Client.new(settings.api, settings.secret)
|
148
|
-
client.authorize_from_access(session[:atoken]
|
144
|
+
client.authorize_from_access(session[:atoken])
|
149
145
|
client
|
150
146
|
end
|
151
147
|
|
@@ -3,8 +3,8 @@ module LinkedIn
|
|
3
3
|
|
4
4
|
# Companies API
|
5
5
|
#
|
6
|
-
# @see
|
7
|
-
# @see
|
6
|
+
# @see https://developer.linkedin.com/docs/company-pages Companies API
|
7
|
+
# @see https://developer.linkedin.com/docs/fields/companies Company Fields
|
8
8
|
#
|
9
9
|
# The following API actions do not have corresponding methods in
|
10
10
|
# this module
|
@@ -18,7 +18,8 @@ module LinkedIn
|
|
18
18
|
|
19
19
|
# Retrieve a Company Profile
|
20
20
|
#
|
21
|
-
# @see
|
21
|
+
# @see https://developer.linkedin.com/docs/fields/company-profile Company Profile field
|
22
|
+
# @see https://developer.linkedin.com/docs/company-pages#company_profile Company Profile
|
22
23
|
#
|
23
24
|
# @macro company_path_options
|
24
25
|
# @option options [String] :scope
|
@@ -27,13 +28,13 @@ module LinkedIn
|
|
27
28
|
# @option options [String] :start
|
28
29
|
# @return [LinkedIn::Mash]
|
29
30
|
def company(options = {})
|
30
|
-
path
|
31
|
+
path = company_path(options)
|
31
32
|
simple_query(path, options)
|
32
33
|
end
|
33
34
|
|
34
35
|
# Retrieve a feed of event items for a Company
|
35
36
|
#
|
36
|
-
# @see
|
37
|
+
# @see https://developer.linkedin.com/docs/company-pages#get_update Get Specific Company Update
|
37
38
|
#
|
38
39
|
# @macro company_path_options
|
39
40
|
# @option options [String] :event-type
|
@@ -49,7 +50,7 @@ module LinkedIn
|
|
49
50
|
#
|
50
51
|
# Permissions: rw_company_admin
|
51
52
|
#
|
52
|
-
# @see
|
53
|
+
# @see https://developer.linkedin.com/docs/company-pages#statistics Get Company Statistics
|
53
54
|
#
|
54
55
|
# @macro company_path_options
|
55
56
|
# @return [LinkedIn::Mash]
|
@@ -60,7 +61,7 @@ module LinkedIn
|
|
60
61
|
|
61
62
|
# Retrieve comments on a particular company update:
|
62
63
|
#
|
63
|
-
# @see
|
64
|
+
# @see https://developer.linkedin.com/docs/company-pages#get_update_comments Get comments for a specific Company update
|
64
65
|
#
|
65
66
|
# @param [String] update_key a update/update-key representing a
|
66
67
|
# particular company update
|
@@ -73,7 +74,7 @@ module LinkedIn
|
|
73
74
|
|
74
75
|
# Retrieve likes on a particular company update:
|
75
76
|
#
|
76
|
-
# @see
|
77
|
+
# @see https://developer.linkedin.com/docs/company-pages#get_update_likes Get likes for a specific Company update
|
77
78
|
#
|
78
79
|
# @param [String] update_key a update/update-key representing a
|
79
80
|
# particular company update
|
@@ -89,15 +90,15 @@ module LinkedIn
|
|
89
90
|
#
|
90
91
|
# Permissions: rw_company_admin
|
91
92
|
#
|
92
|
-
# @see
|
93
|
-
# @see
|
93
|
+
# @see https://developer.linkedin.com/docs/company-pages#company_share Create a company share
|
94
|
+
# @see https://developer.linkedin.com/docs/company-pages#targetting_shares Targeting company shares
|
94
95
|
#
|
95
96
|
# @param [String] company_id Company ID
|
96
97
|
# @macro share_input_fields
|
97
98
|
# @return [void]
|
98
99
|
def add_company_share(company_id, share)
|
99
100
|
path = "/companies/#{company_id}/shares"
|
100
|
-
defaults = {:
|
101
|
+
defaults = { visibility: { code: 'anyone' } }
|
101
102
|
post(path, MultiJson.dump(defaults.merge(share)), "Content-Type" => "application/json")
|
102
103
|
end
|
103
104
|
|
@@ -109,7 +110,7 @@ module LinkedIn
|
|
109
110
|
# @return [void]
|
110
111
|
def follow_company(company_id)
|
111
112
|
path = "/people/~/following/companies"
|
112
|
-
body = {:
|
113
|
+
body = { id: company_id }
|
113
114
|
post(path, MultiJson.dump(body), "Content-Type" => "application/json")
|
114
115
|
end
|
115
116
|
|
data/lib/linked_in/api/people.rb
CHANGED
@@ -3,8 +3,8 @@ module LinkedIn
|
|
3
3
|
|
4
4
|
# People APIs
|
5
5
|
#
|
6
|
-
#
|
7
|
-
# @see
|
6
|
+
#
|
7
|
+
# @see https://developer.linkedin.com/docs/fields/basic-profile Profile Fields
|
8
8
|
# @see http://developer.linkedin.com/documents/field-selectors Field Selectors
|
9
9
|
# @see http://developer.linkedin.com/documents/accessing-out-network-profiles Accessing Out of Network Profiles
|
10
10
|
module People
|
@@ -13,7 +13,7 @@ module LinkedIn
|
|
13
13
|
#
|
14
14
|
# Permissions: r_basicprofile, r_fullprofile
|
15
15
|
#
|
16
|
-
# @see
|
16
|
+
# @see https://developer.linkedin.com/docs/signin-with-linkedin#content-par_componenttabbedlist_resource_1_resourceparagraph_6
|
17
17
|
# @macro person_path_options
|
18
18
|
# @option options [string] :secure-urls if 'true' URLs in responses will be HTTPS
|
19
19
|
# @return [LinkedIn::Mash]
|
@@ -3,8 +3,7 @@ module LinkedIn
|
|
3
3
|
|
4
4
|
# Share and Social Stream APIs
|
5
5
|
#
|
6
|
-
# @see
|
7
|
-
# @see http://developer.linkedin.com/documents/share-api Share API
|
6
|
+
# @see https://developer.linkedin.com/docs/share-on-linkedin Share API
|
8
7
|
#
|
9
8
|
# The following API actions do not have corresponding methods in
|
10
9
|
# this module
|
@@ -85,7 +84,7 @@ module LinkedIn
|
|
85
84
|
#
|
86
85
|
# Permissions: rw_nus
|
87
86
|
#
|
88
|
-
# @see
|
87
|
+
# @see https://developer.linkedin.com/docs/share-on-linkedin Share API
|
89
88
|
#
|
90
89
|
# @macro share_input_fields
|
91
90
|
# @return [void]
|
data/lib/linked_in/errors.rb
CHANGED
@@ -18,12 +18,12 @@ module LinkedIn
|
|
18
18
|
class AccessDeniedError < LinkedInError; end
|
19
19
|
|
20
20
|
# Raised when a 404 response status code is received
|
21
|
-
class NotFoundError <
|
21
|
+
class NotFoundError < LinkedInError; end
|
22
22
|
|
23
23
|
# Raised when a 500 response status code is received
|
24
|
-
class InformLinkedInError <
|
24
|
+
class InformLinkedInError < LinkedInError; end
|
25
25
|
|
26
26
|
# Raised when a 502 or 503 response status code is received
|
27
|
-
class UnavailableError <
|
27
|
+
class UnavailableError < LinkedInError; end
|
28
28
|
end
|
29
29
|
end
|
@@ -4,38 +4,32 @@ module LinkedIn
|
|
4
4
|
module Authorization
|
5
5
|
|
6
6
|
DEFAULT_OAUTH_OPTIONS = {
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:authorize_path => "/uas/oauth/authorize",
|
7
|
+
:token_path => "/uas/oauth2/accessToken",
|
8
|
+
:authorize_path => "/uas/oauth2/authorization",
|
10
9
|
:api_host => "https://api.linkedin.com",
|
11
10
|
:auth_host => "https://www.linkedin.com"
|
12
11
|
}
|
13
12
|
|
14
13
|
def consumer
|
15
|
-
@consumer ||= ::
|
16
|
-
end
|
17
|
-
|
18
|
-
# Note: If using oauth with a web app, be sure to provide :oauth_callback.
|
19
|
-
# Options:
|
20
|
-
# :oauth_callback => String, url that LinkedIn should redirect to
|
21
|
-
def request_token(options={}, *arguments, &block)
|
22
|
-
@request_token ||= consumer.get_request_token(options, *arguments, &block)
|
14
|
+
@consumer ||= ::OAuth2::Client.new(@consumer_token, @consumer_secret, parse_oauth_options)
|
23
15
|
end
|
24
16
|
|
25
17
|
# For web apps use params[:oauth_verifier], for desktop apps,
|
26
18
|
# use the verifier is the pin that LinkedIn gives users.
|
27
|
-
def authorize_from_request(
|
28
|
-
|
29
|
-
access_token = request_token.get_access_token(:oauth_verifier => verifier_or_pin)
|
30
|
-
@auth_token, @auth_secret = access_token.token, access_token.secret
|
19
|
+
def authorize_from_request(code, params = {})
|
20
|
+
@auth_token = consumer.auth_code.get_token(code, params).token
|
31
21
|
end
|
32
22
|
|
33
23
|
def access_token
|
34
|
-
@access_token ||= ::
|
24
|
+
@access_token ||= ::OAuth2::AccessToken.new(consumer, @auth_token)
|
25
|
+
end
|
26
|
+
|
27
|
+
def authorize_url(params = {})
|
28
|
+
consumer.auth_code.authorize_url(params)
|
35
29
|
end
|
36
30
|
|
37
|
-
def authorize_from_access(atoken
|
38
|
-
@auth_token
|
31
|
+
def authorize_from_access(atoken)
|
32
|
+
@auth_token = atoken
|
39
33
|
end
|
40
34
|
|
41
35
|
private
|
@@ -45,11 +39,10 @@ module LinkedIn
|
|
45
39
|
# of the url creation ourselves.
|
46
40
|
def parse_oauth_options
|
47
41
|
{
|
48
|
-
:
|
49
|
-
:
|
50
|
-
:authorize_url => full_oauth_url_for(:authorize, :auth_host),
|
42
|
+
:token_url => full_oauth_url_for(:token, :api_host),
|
43
|
+
:authorize_url => full_oauth_url_for(:authorize, :auth_host),
|
51
44
|
:site => @consumer_options[:site] || @consumer_options[:api_host] || DEFAULT_OAUTH_OPTIONS[:api_host],
|
52
|
-
:
|
45
|
+
:raise_errors => false
|
53
46
|
}
|
54
47
|
end
|
55
48
|
|
@@ -12,25 +12,25 @@ module LinkedIn
|
|
12
12
|
protected
|
13
13
|
|
14
14
|
def get(path, options={})
|
15
|
-
response = access_token.get("#{API_PATH}#{path}", DEFAULT_HEADERS.merge(options))
|
15
|
+
response = access_token.get("#{API_PATH}#{path}", {:headers => DEFAULT_HEADERS.merge(options)})
|
16
16
|
raise_errors(response)
|
17
17
|
response.body
|
18
18
|
end
|
19
19
|
|
20
20
|
def post(path, body='', options={})
|
21
|
-
response = access_token.post("#{API_PATH}#{path}", body, DEFAULT_HEADERS.merge(options))
|
21
|
+
response = access_token.post("#{API_PATH}#{path}", {:body => body, :headers => DEFAULT_HEADERS.merge(options)})
|
22
22
|
raise_errors(response)
|
23
23
|
response
|
24
24
|
end
|
25
25
|
|
26
26
|
def put(path, body, options={})
|
27
|
-
response = access_token.put("#{API_PATH}#{path}", body, DEFAULT_HEADERS.merge(options))
|
27
|
+
response = access_token.put("#{API_PATH}#{path}", {:body => body, :headers => DEFAULT_HEADERS.merge(options)})
|
28
28
|
raise_errors(response)
|
29
29
|
response
|
30
30
|
end
|
31
31
|
|
32
32
|
def delete(path, options={})
|
33
|
-
response = access_token.delete("#{API_PATH}#{path}", DEFAULT_HEADERS.merge(options))
|
33
|
+
response = access_token.delete("#{API_PATH}#{path}", {:headers => DEFAULT_HEADERS.merge(options)})
|
34
34
|
raise_errors(response)
|
35
35
|
response
|
36
36
|
end
|
@@ -40,7 +40,7 @@ module LinkedIn
|
|
40
40
|
def raise_errors(response)
|
41
41
|
# Even if the json answer contains the HTTP status code, LinkedIn also sets this code
|
42
42
|
# in the HTTP answer (thankfully).
|
43
|
-
case response.
|
43
|
+
case response.status.to_i
|
44
44
|
when 401
|
45
45
|
data = Mash.from_json(response.body)
|
46
46
|
raise LinkedIn::Errors::UnauthorizedError.new(data), "(#{data.status}): #{data.message}"
|
@@ -51,11 +51,11 @@ module LinkedIn
|
|
51
51
|
data = Mash.from_json(response.body)
|
52
52
|
raise LinkedIn::Errors::AccessDeniedError.new(data), "(#{data.status}): #{data.message}"
|
53
53
|
when 404
|
54
|
-
raise LinkedIn::Errors::NotFoundError, "(#{response.
|
54
|
+
raise LinkedIn::Errors::NotFoundError, "(#{response.status}): #{response.message}"
|
55
55
|
when 500
|
56
|
-
raise LinkedIn::Errors::InformLinkedInError, "LinkedIn had an internal error. Please let them know in the forum. (#{response.
|
56
|
+
raise LinkedIn::Errors::InformLinkedInError, "LinkedIn had an internal error. Please let them know in the forum. (#{response.status}): #{response.message}"
|
57
57
|
when 502..503
|
58
|
-
raise LinkedIn::Errors::UnavailableError, "(#{response.
|
58
|
+
raise LinkedIn::Errors::UnavailableError, "(#{response.status}): #{response.message}"
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
data/lib/linked_in/version.rb
CHANGED
data/lib/linkedin.rb
CHANGED
data/linkedin.gemspec
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/linked_in/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.add_dependency 'hashie', '~> 3.0'
|
6
6
|
gem.add_dependency 'multi_json', '~> 1.0'
|
7
|
-
gem.add_dependency '
|
7
|
+
gem.add_dependency 'oauth2', '~> 1.0'
|
8
8
|
# gem.add_development_dependency 'json', '~> 1.6'
|
9
9
|
gem.add_development_dependency 'rake', '~> 10'
|
10
10
|
gem.add_development_dependency 'yard'
|
data/spec/cases/api_spec.rb
CHANGED
@@ -4,11 +4,11 @@ describe LinkedIn::Api do
|
|
4
4
|
before do
|
5
5
|
LinkedIn.default_profile_fields = nil
|
6
6
|
client.stub(:consumer).and_return(consumer)
|
7
|
-
client.authorize_from_access('
|
7
|
+
client.authorize_from_access('77j2rfbjbmkcdh')
|
8
8
|
end
|
9
9
|
|
10
10
|
let(:client){LinkedIn::Client.new('token', 'secret')}
|
11
|
-
let(:consumer){
|
11
|
+
let(:consumer){OAuth2::Client.new('token', 'secret', {:site => 'https://api.linkedin.com', :raise_errors => false})}
|
12
12
|
|
13
13
|
it "should be able to view the account profile" do
|
14
14
|
stub_request(:get, "https://api.linkedin.com/v1/people/~").to_return(:body => "{}")
|
@@ -70,15 +70,15 @@ describe LinkedIn::Api do
|
|
70
70
|
it "should be able to share a new status" do
|
71
71
|
stub_request(:post, "https://api.linkedin.com/v1/people/~/shares").to_return(:body => "", :status => 201)
|
72
72
|
response = client.add_share(:comment => "Testing, 1, 2, 3")
|
73
|
-
response.body.should ==
|
74
|
-
response.
|
73
|
+
response.body.should == ""
|
74
|
+
response.status.should == 201
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should be able to share a new company status" do
|
78
78
|
stub_request(:post, "https://api.linkedin.com/v1/companies/123456/shares").to_return(:body => "", :status => 201)
|
79
79
|
response = client.add_company_share("123456", { :comment => "Testing, 1, 2, 3" })
|
80
|
-
response.body.should ==
|
81
|
-
response.
|
80
|
+
response.body.should == ""
|
81
|
+
response.status.should == 201
|
82
82
|
end
|
83
83
|
|
84
84
|
it "returns the shares for a person" do
|
@@ -96,41 +96,30 @@ describe LinkedIn::Api do
|
|
96
96
|
stub_request(:post, "https://api.linkedin.com/v1/people/~/network/updates/key=SOMEKEY/update-comments").to_return(
|
97
97
|
:body => "", :status => 201)
|
98
98
|
response = client.update_comment('SOMEKEY', "Testing, 1, 2, 3")
|
99
|
-
response.body.should ==
|
100
|
-
response.
|
99
|
+
response.body.should == ""
|
100
|
+
response.status.should == 201
|
101
101
|
end
|
102
102
|
|
103
103
|
it "should be able to like a network update" do
|
104
104
|
stub_request(:put, "https://api.linkedin.com/v1/people/~/network/updates/key=SOMEKEY/is-liked").
|
105
105
|
with(:body => "true").to_return(:body => "", :status => 201)
|
106
106
|
response = client.like_share('SOMEKEY')
|
107
|
-
response.body.should ==
|
108
|
-
response.
|
107
|
+
response.body.should == ""
|
108
|
+
response.status.should == 201
|
109
109
|
end
|
110
110
|
|
111
111
|
it "should be able to unlike a network update" do
|
112
112
|
stub_request(:put, "https://api.linkedin.com/v1/people/~/network/updates/key=SOMEKEY/is-liked").
|
113
113
|
with(:body => "false").to_return(:body => "", :status => 201)
|
114
114
|
response = client.unlike_share('SOMEKEY')
|
115
|
-
response.body.should ==
|
116
|
-
response.
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should be able to pass down the additional arguments to OAuth's get_request_token" do
|
120
|
-
consumer.should_receive(:get_request_token).with(
|
121
|
-
{:oauth_callback => "http://localhost:3000/auth/callback"}, :scope => "rw_nus").and_return("request_token")
|
122
|
-
|
123
|
-
request_token = client.request_token(
|
124
|
-
{:oauth_callback => "http://localhost:3000/auth/callback"}, :scope => "rw_nus"
|
125
|
-
)
|
126
|
-
|
127
|
-
request_token.should == "request_token"
|
115
|
+
response.body.should == ""
|
116
|
+
response.status.should == 201
|
128
117
|
end
|
129
118
|
|
130
119
|
context "Company API", :vcr do
|
131
120
|
|
132
121
|
it "should be able to view a company profile" do
|
133
|
-
stub_request(:get, "https://api.linkedin.com/v1/companies/
|
122
|
+
stub_request(:get, "https://api.linkedin.com/v1/companies/1586").to_return(:body => "{}")
|
134
123
|
client.company(:id => 1586).should be_an_instance_of(LinkedIn::Mash)
|
135
124
|
end
|
136
125
|
|
@@ -155,8 +144,9 @@ describe LinkedIn::Api do
|
|
155
144
|
end
|
156
145
|
|
157
146
|
it "should load correct company data" do
|
147
|
+
stub_request(:get, "https://api.linkedin.com/v1/companies/1586:(id,name,industry,locations:(address:(city,state,country-code),is-headquarters),employee-count-range)").to_return(:body => "{\"id\":1586,\"name\":\"Amazon\",\"employee_count_range\":{\"name\":\"10001+\"},\"industry\":\"Internet\",\"locations\":{\"all\":[{\"address\":{\"city\":\"Seattle\"},\"is_headquarters\":true}]}}")
|
148
|
+
stub_request(:get, "https://api.linkedin.com/v1/companies/1586").to_return(:body => "{\"id\":1586,\"name\":\"Amazon\"}")
|
158
149
|
client.company(:id => 1586).name.should == "Amazon"
|
159
|
-
|
160
150
|
data = client.company(:id => 1586, :fields => %w{ id name industry locations:(address:(city state country-code) is-headquarters) employee-count-range })
|
161
151
|
data.id.should == 1586
|
162
152
|
data.name.should == "Amazon"
|
@@ -167,22 +157,22 @@ describe LinkedIn::Api do
|
|
167
157
|
end
|
168
158
|
|
169
159
|
it "should be able to view company_updates" do
|
170
|
-
stub_request(:get, "https://api.linkedin.com/v1/companies/
|
160
|
+
stub_request(:get, "https://api.linkedin.com/v1/companies/1586/updates").to_return(:body => "{}")
|
171
161
|
client.company_updates(:id => 1586).should be_an_instance_of(LinkedIn::Mash)
|
172
162
|
end
|
173
163
|
|
174
164
|
it "should be able to view company_statistic" do
|
175
|
-
stub_request(:get, "https://api.linkedin.com/v1/companies/
|
165
|
+
stub_request(:get, "https://api.linkedin.com/v1/companies/1586/company-statistics").to_return(:body => "{}")
|
176
166
|
client.company_statistics(:id => 1586).should be_an_instance_of(LinkedIn::Mash)
|
177
167
|
end
|
178
168
|
|
179
169
|
it "should be able to view company updates comments" do
|
180
|
-
stub_request(:get, "https://api.linkedin.com/v1/companies/
|
170
|
+
stub_request(:get, "https://api.linkedin.com/v1/companies/1586/updates/key=company_update_key/update-comments").to_return(:body => "{}")
|
181
171
|
client.company_updates_comments("company_update_key", :id => 1586).should be_an_instance_of(LinkedIn::Mash)
|
182
172
|
end
|
183
173
|
|
184
174
|
it "should be able to view company updates likes" do
|
185
|
-
stub_request(:get, "https://api.linkedin.com/v1/companies/
|
175
|
+
stub_request(:get, "https://api.linkedin.com/v1/companies/1586/updates/key=company_update_key/likes").to_return(:body => "{}")
|
186
176
|
client.company_updates_likes("company_update_key", :id => 1586).should be_an_instance_of(LinkedIn::Mash)
|
187
177
|
end
|
188
178
|
|
@@ -190,16 +180,16 @@ describe LinkedIn::Api do
|
|
190
180
|
stub_request(:post, "https://api.linkedin.com/v1/people/~/following/companies").to_return(:body => "", :status => 201)
|
191
181
|
|
192
182
|
response = client.follow_company(1586)
|
193
|
-
response.body.should ==
|
194
|
-
response.
|
183
|
+
response.body.should == ""
|
184
|
+
response.status.should == 201
|
195
185
|
end
|
196
186
|
|
197
187
|
it "should be able to unfollow a company" do
|
198
188
|
stub_request(:delete, "https://api.linkedin.com/v1/people/~/following/companies/id=1586").to_return(:body => "", :status => 201)
|
199
189
|
|
200
190
|
response = client.unfollow_company(1586)
|
201
|
-
response.body.should ==
|
202
|
-
response.
|
191
|
+
response.body.should == ""
|
192
|
+
response.status.should == 201
|
203
193
|
end
|
204
194
|
|
205
195
|
end
|
@@ -224,8 +214,8 @@ describe LinkedIn::Api do
|
|
224
214
|
it "should be able to add a bookmark" do
|
225
215
|
stub_request(:post, "https://api.linkedin.com/v1/people/~/job-bookmarks").to_return(:body => "", :status => 201)
|
226
216
|
response = client.add_job_bookmark(:id => 1452577)
|
227
|
-
response.body.should ==
|
228
|
-
response.
|
217
|
+
response.body.should == ""
|
218
|
+
response.status.should == 201
|
229
219
|
end
|
230
220
|
end
|
231
221
|
|
@@ -251,8 +241,8 @@ describe LinkedIn::Api do
|
|
251
241
|
stub_request(:put, "https://api.linkedin.com/v1/people/~/group-memberships/123").to_return(:body => "", :status => 201)
|
252
242
|
|
253
243
|
response = client.join_group(123)
|
254
|
-
response.body.should ==
|
255
|
-
response.
|
244
|
+
response.body.should == ""
|
245
|
+
response.status.should == 201
|
256
246
|
end
|
257
247
|
|
258
248
|
it "should be able to list a group profile" do
|
@@ -278,15 +268,15 @@ describe LinkedIn::Api do
|
|
278
268
|
|
279
269
|
stub_request(:post, "https://api.linkedin.com/v1/groups/123/posts").with(:body => expected).to_return(:body => "", :status => 201)
|
280
270
|
response = client.post_group_discussion(123, expected)
|
281
|
-
response.body.should ==
|
282
|
-
response.
|
271
|
+
response.body.should == ""
|
272
|
+
response.status.should == 201
|
283
273
|
end
|
284
274
|
|
285
275
|
it "should be able to share a new group status" do
|
286
276
|
stub_request(:post, "https://api.linkedin.com/v1/groups/1/posts").to_return(:body => "", :status => 201)
|
287
277
|
response = client.add_group_share(1, :comment => "Testing, 1, 2, 3")
|
288
|
-
response.body.should ==
|
289
|
-
response.
|
278
|
+
response.body.should == ""
|
279
|
+
response.status.should == 201
|
290
280
|
end
|
291
281
|
end
|
292
282
|
|
@@ -294,8 +284,8 @@ describe LinkedIn::Api do
|
|
294
284
|
it "should be able to send a message" do
|
295
285
|
stub_request(:post, "https://api.linkedin.com/v1/people/~/mailbox").to_return(:body => "", :status => 201)
|
296
286
|
response = client.send_message("subject", "body", ["recip1", "recip2"])
|
297
|
-
response.body.should ==
|
298
|
-
response.
|
287
|
+
response.body.should == ""
|
288
|
+
response.status.should == 201
|
299
289
|
end
|
300
290
|
end
|
301
291
|
|
data/spec/cases/oauth_spec.rb
CHANGED
@@ -14,22 +14,8 @@ describe "LinkedIn::Client" do
|
|
14
14
|
|
15
15
|
it "should return a configured OAuth consumer" do
|
16
16
|
consumer.site.should == 'https://api.linkedin.com'
|
17
|
-
consumer.
|
18
|
-
consumer.
|
19
|
-
consumer.authorize_url.should == 'https://www.linkedin.com/uas/oauth/authorize'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "proxy oauth options" do
|
24
|
-
let(:proxy) { "http://dummy.proxy" }
|
25
|
-
let(:consumer) do
|
26
|
-
LinkedIn::Client.new('1234', '1234', {
|
27
|
-
:proxy => proxy,
|
28
|
-
}).consumer
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should send requests though proxy" do
|
32
|
-
consumer.proxy.should eq proxy
|
17
|
+
consumer.token_url.should == 'https://api.linkedin.com/uas/oauth2/accessToken'
|
18
|
+
consumer.authorize_url.should == 'https://www.linkedin.com/uas/oauth2/authorization'
|
33
19
|
end
|
34
20
|
end
|
35
21
|
|
@@ -43,43 +29,38 @@ describe "LinkedIn::Client" do
|
|
43
29
|
|
44
30
|
it "should return a configured OAuth consumer" do
|
45
31
|
consumer.site.should == 'https://api.josh.com'
|
46
|
-
consumer.
|
47
|
-
consumer.
|
48
|
-
consumer.authorize_url.should == 'https://www.josh.com/uas/oauth/authorize'
|
32
|
+
consumer.token_url.should == 'https://api.josh.com/uas/oauth2/accessToken'
|
33
|
+
consumer.authorize_url.should == 'https://www.josh.com/uas/oauth2/authorization'
|
49
34
|
end
|
50
35
|
end
|
51
36
|
|
52
37
|
describe "different oauth paths" do
|
53
38
|
let(:consumer) do
|
54
39
|
LinkedIn::Client.new('1234', '1234', {
|
55
|
-
:
|
56
|
-
:
|
57
|
-
:authorize_path => "/secure/oauth/authorize",
|
40
|
+
:token_path => "/secure/oauth2/accessToken",
|
41
|
+
:authorize_path => "/secure/oauth2/authorization",
|
58
42
|
}).consumer
|
59
43
|
end
|
60
44
|
|
61
45
|
it "should return a configured OAuth consumer" do
|
62
46
|
consumer.site.should == 'https://api.linkedin.com'
|
63
|
-
consumer.
|
64
|
-
consumer.
|
65
|
-
consumer.authorize_url.should == 'https://www.linkedin.com/secure/oauth/authorize'
|
47
|
+
consumer.token_url.should == 'https://api.linkedin.com/secure/oauth2/accessToken'
|
48
|
+
consumer.authorize_url.should == 'https://www.linkedin.com/secure/oauth2/authorization'
|
66
49
|
end
|
67
50
|
end
|
68
51
|
|
69
52
|
describe "specify oauth urls" do
|
70
53
|
let(:consumer) do
|
71
54
|
LinkedIn::Client.new('1234', '1234', {
|
72
|
-
:
|
73
|
-
:
|
74
|
-
:authorize_url => "https://www.josh.com/secure/oauth/authorize",
|
55
|
+
:token_url => "https://api.josh.com/secure/oauth2/accessToken",
|
56
|
+
:authorize_url => "https://www.josh.com/secure/oauth2/authorization",
|
75
57
|
}).consumer
|
76
58
|
end
|
77
59
|
|
78
60
|
it "should return a configured OAuth consumer" do
|
79
61
|
consumer.site.should == 'https://api.linkedin.com'
|
80
|
-
consumer.
|
81
|
-
consumer.
|
82
|
-
consumer.authorize_url.should == 'https://www.josh.com/secure/oauth/authorize'
|
62
|
+
consumer.token_url.should == 'https://api.josh.com/secure/oauth2/accessToken'
|
63
|
+
consumer.authorize_url.should == 'https://www.josh.com/secure/oauth2/authorization'
|
83
64
|
end
|
84
65
|
end
|
85
66
|
|
@@ -92,87 +73,22 @@ describe "LinkedIn::Client" do
|
|
92
73
|
|
93
74
|
it "should return a configured OAuth consumer" do
|
94
75
|
consumer.site.should == 'https://api.josh.com'
|
95
|
-
consumer.
|
96
|
-
consumer.
|
97
|
-
consumer.authorize_url.should == 'https://api.josh.com/uas/oauth/authorize'
|
76
|
+
consumer.token_url.should == 'https://api.josh.com/uas/oauth2/accessToken'
|
77
|
+
consumer.authorize_url.should == 'https://api.josh.com/uas/oauth2/authorization'
|
98
78
|
end
|
99
79
|
end
|
100
80
|
end
|
101
81
|
|
102
|
-
describe "#request_token" do
|
103
|
-
vcr_options = { :record => :new_episodes}
|
104
|
-
describe "with default options", vcr: vcr_options do
|
105
|
-
|
106
|
-
it "should return a valid request token" do
|
107
|
-
request_token = client.request_token
|
108
|
-
|
109
|
-
request_token.should be_a_kind_of OAuth::RequestToken
|
110
|
-
request_token.authorize_url.should include("https://www.linkedin.com/uas/oauth/authorize?oauth_token=")
|
111
|
-
|
112
|
-
a_request(:post, "https://api.linkedin.com/uas/oauth/requestToken").should have_been_made.once
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
describe "with a callback url", vcr: vcr_options do
|
117
|
-
|
118
|
-
it "should return a valid access token" do
|
119
|
-
request_token = client.request_token(:oauth_callback => 'http://www.josh.com')
|
120
|
-
|
121
|
-
request_token.should be_a_kind_of OAuth::RequestToken
|
122
|
-
request_token.authorize_url.should include("https://www.linkedin.com/uas/oauth/authorize?oauth_token=")
|
123
|
-
request_token.callback_confirmed?.should == true
|
124
|
-
|
125
|
-
a_request(:post, "https://api.linkedin.com/uas/oauth/requestToken").should have_been_made.once
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
describe "#authorize_from_request" do
|
131
|
-
let(:access_token) do
|
132
|
-
# if you remove the related casssette you will need to do the following
|
133
|
-
# authorize_from_request request manually
|
134
|
-
#
|
135
|
-
# request_token = client.request_token
|
136
|
-
# puts "token : #{request_token.token} - secret #{request_token.secret}"
|
137
|
-
# puts "auth url : #{request_token.authorize_url}"
|
138
|
-
# raise 'keep note of the token and secret'
|
139
|
-
#
|
140
|
-
client.authorize_from_request('dummy-token', 'dummy-secret', 'dummy-pin')
|
141
|
-
end
|
142
|
-
|
143
|
-
vcr_options = { :record => :new_episodes, :match_requests_on => [ :uri, :method] }
|
144
|
-
|
145
|
-
it "should return a valid access token", vcr: vcr_options do
|
146
|
-
access_token.should be_a_kind_of Array
|
147
|
-
access_token[0].should be_a_kind_of String
|
148
|
-
access_token[1].should be_a_kind_of String
|
149
|
-
|
150
|
-
a_request(:post, "https://api.linkedin.com/uas/oauth/accessToken").should have_been_made.once
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
82
|
describe "#access_token" do
|
155
83
|
let(:access_token) do
|
156
|
-
client.authorize_from_access('dummy-token'
|
84
|
+
client.authorize_from_access('dummy-token')
|
157
85
|
client.access_token
|
158
86
|
end
|
159
87
|
|
160
88
|
it "should return a valid auth token" do
|
161
|
-
access_token.should be_a_kind_of
|
89
|
+
access_token.should be_a_kind_of OAuth2::AccessToken
|
162
90
|
access_token.token.should be_a_kind_of String
|
163
91
|
end
|
164
92
|
end
|
165
93
|
|
166
|
-
describe "#authorize_from_access" do
|
167
|
-
let(:auth_token) do
|
168
|
-
client.authorize_from_access('dummy-token', 'dummy-secret')
|
169
|
-
end
|
170
|
-
|
171
|
-
it "should return a valid auth token" do
|
172
|
-
auth_token.should be_a_kind_of Array
|
173
|
-
auth_token[0].should be_a_kind_of String
|
174
|
-
auth_token[1].should be_a_kind_of String
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
94
|
end
|
data/spec/cases/search_spec.rb
CHANGED
@@ -11,8 +11,7 @@ describe LinkedIn::Search do
|
|
11
11
|
client = LinkedIn::Client.new(consumer_token, consumer_secret)
|
12
12
|
|
13
13
|
auth_token = ENV['LINKED_IN_AUTH_KEY'] || 'key'
|
14
|
-
|
15
|
-
client.authorize_from_access(auth_token, auth_secret)
|
14
|
+
client.authorize_from_access(auth_token)
|
16
15
|
client
|
17
16
|
end
|
18
17
|
|
data/spec/fixtures/cassette_library/LinkedIn_Api/Company_API/should_load_correct_company_data.yml
CHANGED
@@ -2,19 +2,21 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://api.linkedin.com/v1/companies/
|
5
|
+
uri: https://api.linkedin.com/v1/companies/1586
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
10
12
|
X-Li-Format:
|
11
13
|
- json
|
12
|
-
User-Agent:
|
13
|
-
- OAuth gem v0.4.5
|
14
14
|
Authorization:
|
15
|
-
-
|
16
|
-
|
17
|
-
|
15
|
+
- Bearer atoken
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
18
20
|
response:
|
19
21
|
status:
|
20
22
|
code: 200
|
metadata
CHANGED
@@ -1,135 +1,172 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: linkedin
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Matthew Kirk
|
8
8
|
- Wynn Netherland
|
9
9
|
- Josh Kalderimis
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2018-08-08 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
17
16
|
name: hashie
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
version: "3.0"
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: multi_json
|
28
23
|
prerelease: false
|
29
|
-
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '3.0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: multi_json
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '1.0'
|
34
36
|
type: :runtime
|
35
|
-
version_requirements: *id002
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: oauth
|
38
37
|
prerelease: false
|
39
|
-
|
40
|
-
requirements:
|
41
|
-
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version:
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: oauth2
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.0'
|
44
50
|
type: :runtime
|
45
|
-
version_requirements: *id003
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rake
|
48
51
|
prerelease: false
|
49
|
-
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version:
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '1.0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rake
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '10'
|
54
64
|
type: :development
|
55
|
-
version_requirements: *id004
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: yard
|
58
65
|
prerelease: false
|
59
|
-
|
60
|
-
requirements:
|
61
|
-
-
|
62
|
-
-
|
63
|
-
|
64
|
-
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '10'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: yard
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
65
78
|
type: :development
|
66
|
-
version_requirements: *id005
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: kramdown
|
69
79
|
prerelease: false
|
70
|
-
|
71
|
-
requirements:
|
72
|
-
-
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: kramdown
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
73
92
|
type: :development
|
74
|
-
version_requirements: *id007
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: rspec
|
77
93
|
prerelease: false
|
78
|
-
|
79
|
-
requirements:
|
80
|
-
- -
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version:
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: rspec
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '2.13'
|
83
106
|
type: :development
|
84
|
-
version_requirements: *id008
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: simplecov
|
87
107
|
prerelease: false
|
88
|
-
|
89
|
-
requirements:
|
90
|
-
- - ~>
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version:
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - "~>"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '2.13'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: simplecov
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.7'
|
93
120
|
type: :development
|
94
|
-
version_requirements: *id009
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: vcr
|
97
121
|
prerelease: false
|
98
|
-
|
99
|
-
requirements:
|
100
|
-
- - ~>
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version:
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0.7'
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: vcr
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - "~>"
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '2.5'
|
103
134
|
type: :development
|
104
|
-
version_requirements: *id010
|
105
|
-
- !ruby/object:Gem::Dependency
|
106
|
-
name: webmock
|
107
135
|
prerelease: false
|
108
|
-
|
109
|
-
requirements:
|
110
|
-
- - ~>
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - "~>"
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '2.5'
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: webmock
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - "~>"
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '1.11'
|
113
148
|
type: :development
|
114
|
-
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - "~>"
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '1.11'
|
115
155
|
description: Ruby wrapper for the LinkedIn API
|
116
|
-
email:
|
156
|
+
email:
|
117
157
|
- meteor.kirk@gmail.com
|
118
158
|
- wynn.netherland@gmail.com
|
119
159
|
- josh.kalderimis@gmail.com
|
120
160
|
executables: []
|
121
|
-
|
122
161
|
extensions: []
|
123
|
-
|
124
162
|
extra_rdoc_files: []
|
125
|
-
|
126
|
-
|
127
|
-
- .
|
128
|
-
- .
|
129
|
-
- .
|
130
|
-
- .
|
131
|
-
- .
|
132
|
-
- .yardopts
|
163
|
+
files:
|
164
|
+
- ".autotest"
|
165
|
+
- ".gemtest"
|
166
|
+
- ".gitignore"
|
167
|
+
- ".rspec"
|
168
|
+
- ".travis.yml"
|
169
|
+
- ".yardopts"
|
133
170
|
- CHANGELOG.md
|
134
171
|
- EXAMPLES.md
|
135
172
|
- Gemfile
|
@@ -180,29 +217,30 @@ files:
|
|
180
217
|
- spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_single_keywords_option_with_pagination/should_perform_a_search.yml
|
181
218
|
- spec/helper.rb
|
182
219
|
homepage: http://github.com/hexgnu/linkedin
|
183
|
-
licenses:
|
220
|
+
licenses:
|
184
221
|
- MIT
|
185
222
|
metadata: {}
|
186
|
-
|
187
223
|
post_install_message:
|
188
224
|
rdoc_options: []
|
189
|
-
|
190
|
-
require_paths:
|
225
|
+
require_paths:
|
191
226
|
- lib
|
192
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
193
|
-
requirements:
|
194
|
-
-
|
195
|
-
|
196
|
-
|
197
|
-
|
227
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
228
|
+
requirements:
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: '0'
|
232
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
198
237
|
requirements: []
|
199
|
-
|
200
238
|
rubyforge_project:
|
201
|
-
rubygems_version: 2.
|
239
|
+
rubygems_version: 2.7.3
|
202
240
|
signing_key:
|
203
241
|
specification_version: 4
|
204
242
|
summary: This gem interfaces with the Linkedin XML and JSON APis
|
205
|
-
test_files:
|
243
|
+
test_files:
|
206
244
|
- spec/cases/api_spec.rb
|
207
245
|
- spec/cases/linkedin_spec.rb
|
208
246
|
- spec/cases/mash_spec.rb
|
@@ -228,4 +266,3 @@ test_files:
|
|
228
266
|
- spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_single_keywords_option_with_facets_to_return/should_return_a_facet.yml
|
229
267
|
- spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_single_keywords_option_with_pagination/should_perform_a_search.yml
|
230
268
|
- spec/helper.rb
|
231
|
-
has_rdoc:
|