linkedin 1.1.0 → 1.1.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.
- 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:
|