linkedin-v2 0.1.3

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.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +10 -0
  3. data/CONTRIBUTING.md +1 -0
  4. data/Gemfile +8 -0
  5. data/LICENSE +22 -0
  6. data/README.md +224 -0
  7. data/Rakefile +19 -0
  8. data/lib/linked_in/access_token.rb +24 -0
  9. data/lib/linked_in/api.rb +108 -0
  10. data/lib/linked_in/api_resource.rb +180 -0
  11. data/lib/linked_in/communications.rb +40 -0
  12. data/lib/linked_in/configuration.rb +41 -0
  13. data/lib/linked_in/connection.rb +35 -0
  14. data/lib/linked_in/errors.rb +73 -0
  15. data/lib/linked_in/jobs.rb +11 -0
  16. data/lib/linked_in/mash.rb +68 -0
  17. data/lib/linked_in/media.rb +13 -0
  18. data/lib/linked_in/oauth2.rb +223 -0
  19. data/lib/linked_in/organizations.rb +217 -0
  20. data/lib/linked_in/people.rb +151 -0
  21. data/lib/linked_in/raise_error.rb +28 -0
  22. data/lib/linked_in/search.rb +70 -0
  23. data/lib/linked_in/share_and_social_stream.rb +143 -0
  24. data/lib/linked_in/version.rb +3 -0
  25. data/lib/linkedin-v2.rb +52 -0
  26. data/linkedin-v2.gemspec +39 -0
  27. data/pkg/linkedin-oauth2-2.0.0.gem +0 -0
  28. data/spec/linked_in/api/api_spec.rb +41 -0
  29. data/spec/linked_in/api/communications_spec.rb +13 -0
  30. data/spec/linked_in/api/jobs_spec.rb +33 -0
  31. data/spec/linked_in/api/organizations_spec.rb +54 -0
  32. data/spec/linked_in/api/people_spec.rb +191 -0
  33. data/spec/linked_in/api/search_spec.rb +71 -0
  34. data/spec/linked_in/api/share_and_social_stream_spec.rb +87 -0
  35. data/spec/linked_in/configuration_spec.rb +46 -0
  36. data/spec/linked_in/connection_spec.rb +10 -0
  37. data/spec/linked_in/module_loading_spec.rb +23 -0
  38. data/spec/linked_in/oauth/access_token_spec.rb +27 -0
  39. data/spec/linked_in/oauth/auth_code_spec.rb +86 -0
  40. data/spec/linked_in/oauth/credentials_spec.rb +96 -0
  41. data/spec/linked_in/oauth/get_access_token_spec.rb +108 -0
  42. data/spec/spec_helper.rb +16 -0
  43. data/spec/vcr_cassettes/access_token_success.yml +99 -0
  44. data/spec/vcr_cassettes/bad_code.yml +99 -0
  45. data/spec/vcr_cassettes/organization_data.yml +51 -0
  46. data/spec/vcr_cassettes/people_picture_urls.yml +52 -0
  47. data/spec/vcr_cassettes/people_profile_connections_fields.yml +52 -0
  48. data/spec/vcr_cassettes/people_profile_connections_other.yml +52 -0
  49. data/spec/vcr_cassettes/people_profile_connections_self.yml +52 -0
  50. data/spec/vcr_cassettes/people_profile_fields_complex.yml +52 -0
  51. data/spec/vcr_cassettes/people_profile_fields_simple.yml +52 -0
  52. data/spec/vcr_cassettes/people_profile_lang_spanish.yml +53 -0
  53. data/spec/vcr_cassettes/people_profile_multiple_fields.yml +52 -0
  54. data/spec/vcr_cassettes/people_profile_multiple_uids.yml +52 -0
  55. data/spec/vcr_cassettes/people_profile_multiple_uids_and_urls.yml +52 -0
  56. data/spec/vcr_cassettes/people_profile_multiple_urls.yml +52 -0
  57. data/spec/vcr_cassettes/people_profile_new_connections_fields.yml +52 -0
  58. data/spec/vcr_cassettes/people_profile_new_connections_other.yml +52 -0
  59. data/spec/vcr_cassettes/people_profile_new_connections_self.yml +52 -0
  60. data/spec/vcr_cassettes/people_profile_other_uid.yml +57 -0
  61. data/spec/vcr_cassettes/people_profile_other_url.yml +54 -0
  62. data/spec/vcr_cassettes/people_profile_own.yml +57 -0
  63. data/spec/vcr_cassettes/people_profile_own_secure.yml +53 -0
  64. data/spec/vcr_cassettes/people_profile_skills.yml +52 -0
  65. data/spec/vcr_cassettes/unavailable.yml +99 -0
  66. metadata +285 -0
@@ -0,0 +1,108 @@
1
+ require "spec_helper"
2
+
3
+ describe "Get OAuth2 Access Token" do
4
+ code = "dummy_code"
5
+ client_id = "dummy_client_id"
6
+ client_secret = "dummy_client_secret"
7
+ redirect_uri = "http://lvh.me:5000"
8
+
9
+ before(:example) do
10
+ LinkedIn.configure do |config|
11
+ config.client_id = client_id
12
+ config.client_secret = client_secret
13
+ config.redirect_uri = redirect_uri
14
+ end
15
+ end
16
+ subject { LinkedIn::OAuth2.new }
17
+
18
+ shared_examples "Success Access Token Fetch" do |*args|
19
+ it "Returns an access token object" do
20
+ VCR.use_cassette("access token success") do
21
+ expect(subject.get_access_token(*args)).to be_kind_of LinkedIn::AccessToken
22
+ end
23
+ end
24
+
25
+ it "Sets the AcessToken object" do
26
+ VCR.use_cassette("access token success") do
27
+ subject.get_access_token(*args)
28
+ expect(subject.access_token).to be_kind_of LinkedIn::AccessToken
29
+ end
30
+ end
31
+
32
+ it "Generated an access token string" do
33
+ VCR.use_cassette("access token success") do
34
+ subject.get_access_token(*args)
35
+ expect(subject.access_token.token).to be_kind_of String
36
+ end
37
+ end
38
+ end
39
+
40
+ shared_examples "Raises InvalidRequest" do |*args|
41
+ it "Raises InvalidRequest" do
42
+ expect{subject.get_access_token(*args)}.to raise_error(LinkedIn::InvalidRequest, msg)
43
+ end
44
+
45
+ it "Has no AccessToken object set" do
46
+ expect(subject.access_token).to be_nil
47
+ end
48
+ end
49
+
50
+ context "When a auth_code is provided" do
51
+ include_examples "Success Access Token Fetch", code
52
+ end
53
+
54
+ context "When no code is given" do
55
+ let(:msg) {LinkedIn::ErrorMessages.no_auth_code}
56
+ include_examples "Raises InvalidRequest"
57
+ end
58
+
59
+ context "When redirect_uri is not configured and not passed in" do
60
+ before(:example) do
61
+ LinkedIn.configure { |config| config.redirect_uri = nil }
62
+ end
63
+ let(:msg) {LinkedIn::ErrorMessages.redirect_uri}
64
+ include_examples "Raises InvalidRequest", code
65
+ end
66
+
67
+ context "When redirect_uri is configured and not passed in" do
68
+ before(:example) do
69
+ LinkedIn.configure { |config| config.redirect_uri = redirect_uri }
70
+ end
71
+ include_examples "Success Access Token Fetch", code
72
+ end
73
+
74
+ context "When redirect_uri is passed in" do
75
+ include_examples "Success Access Token Fetch", code, {redirect_uri: redirect_uri}
76
+ end
77
+
78
+ context "When redirect_uri was previously set by auth_code_url" do
79
+ before(:example) do
80
+ LinkedIn.configure { |config| config.redirect_uri = nil }
81
+ subject.auth_code_url(redirect_uri: redirect_uri)
82
+ end
83
+ include_examples "Success Access Token Fetch", code
84
+ end
85
+
86
+ context "When redirect_uri does not match previous setting" do
87
+ let(:msg) {LinkedIn::ErrorMessages.redirect_uri_mismatch}
88
+ include_examples "Raises InvalidRequest", code, {redirect_uri: "different"}
89
+ end
90
+
91
+ context "When the service is unavailable" do
92
+ let(:msg) { /temporarily_unavailable/ }
93
+ it "raises an OAuthError" do
94
+ VCR.use_cassette("unavailable") do
95
+ expect {subject.get_access_token(code)}.to raise_error(LinkedIn::OAuthError, msg)
96
+ end
97
+ end
98
+ end
99
+
100
+ context "When the request is invalid" do
101
+ let(:msg) { /invalid_request/ }
102
+ it "raises an OAuthError" do
103
+ VCR.use_cassette("bad code") do
104
+ expect {subject.get_access_token(code)}.to raise_error(LinkedIn::OAuthError, msg)
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,16 @@
1
+ # This file is required by all tests
2
+ require 'linkedin-v2'
3
+
4
+ # Record and playback LinkedIn API calls
5
+ require 'vcr'
6
+ VCR.configure do |config|
7
+ config.cassette_library_dir = "spec/vcr_cassettes"
8
+ config.hook_into :webmock
9
+ config.default_cassette_options = { :record => :all } # TODO WHILE WE'RE FIXING THINGS.
10
+ end
11
+
12
+ require 'webmock/rspec'
13
+
14
+ # https://coveralls.io/r/emorikawa/linkedin-oauth2
15
+ #require 'coveralls'
16
+ #Coveralls.wear!
@@ -0,0 +1,99 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://www.linkedin.com/uas/oauth2/accessToken
6
+ body:
7
+ encoding: UTF-8
8
+ string: client_id=dummy_client_id&client_secret=dummy_client_secret&code=dummy_code&grant_type=authorization_code&raise_errors=true&redirect_uri=http%3A%2F%2Flvh.me%3A5000
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.10.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 503
21
+ message: Service Unavailable
22
+ headers:
23
+ Server:
24
+ - Apache-Coyote/1.1
25
+ P3p:
26
+ - CP="CAO CUR ADM DEV PSA PSD OUR"
27
+ Vary:
28
+ - Accept-Encoding
29
+ Content-Type:
30
+ - application/json;charset=UTF-8
31
+ Content-Language:
32
+ - en-US
33
+ Content-Length:
34
+ - '249'
35
+ Date:
36
+ - Tue, 01 May 2018 14:17:43 GMT
37
+ X-Fs-Uuid:
38
+ - bf6c5d0f028b2a1590a6467fed2a0000
39
+ Strict-Transport-Security:
40
+ - max-age=2592000
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Xss-Protection:
44
+ - 1; mode=block
45
+ Content-Security-Policy:
46
+ - 'default-src *; connect-src ''self'' static.licdn.com media.licdn.com static-exp1.licdn.com
47
+ static-exp2.licdn.com media-exp1.licdn.com media-exp2.licdn.com https://media-src.linkedin.com/media/
48
+ wss://www.linkedin.com s.c.lnkd.licdn.com m.c.lnkd.licdn.com; img-src data:
49
+ blob: *; font-src data: *; style-src ''unsafe-inline'' ''self'' static-src.linkedin.com
50
+ *.licdn.com; script-src ''report-sample'' ''unsafe-inline'' ''unsafe-eval''
51
+ ''self'' platform.linkedin.com spdy.linkedin.com static-src.linkedin.com *.ads.linkedin.com
52
+ *.licdn.com; object-src ''none''; media-src blob: *; frame-ancestors ''self'';
53
+ report-uri https://www.linkedin.com/lite/contentsecurity?f=lg'
54
+ X-Li-Fabric:
55
+ - prod-lva1
56
+ Set-Cookie:
57
+ - _lipt=deleteMe; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
58
+ - bcookie="v=2&4205eb48-a5ea-4f29-8108-bdfdfa79cb24"; domain=.linkedin.com;
59
+ Path=/; Expires=Fri, 01-May-2020 01:55:16 GMT
60
+ - bscookie="v=1&2018050114174418ef52dd-1a5f-4006-8862-b07f2a68ddb5AQHI6jMgrQdgDs4at9XOvrB5TRYgPKiD";
61
+ domain=.www.linkedin.com; Path=/; Secure; Expires=Fri, 01-May-2020 01:55:16
62
+ GMT; HttpOnly
63
+ - lang="v=2&lang=en-us"; Version=1; Domain=linkedin.com; Path=/
64
+ - leo_auth_token="GST:9_uuYMY1IHLX3WGEWhw56CYD9pzSzwHlqgPFBfHnswzOSBPKGsvR-1:1525184264:70fd3e80ad474c238a910ff8c3bfc9cfcdddafac";
65
+ Version=1; Max-Age=1799; Expires=Tue, 01-May-2018 14:47:43 GMT; Path=/
66
+ - lidc="b=VB58:g=1209:u=1:i=1525184264:t=1525270664:s=AQHROYZbcdNtaKeDJC52E_vpC8G6Ta6l";
67
+ Expires=Wed, 02 May 2018 14:17:44 GMT; domain=.linkedin.com; Path=/
68
+ - s_leo_auth_token="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970
69
+ 00:00:10 GMT; Path=/
70
+ - sl="delete me"; Version=1; Domain=.www.linkedin.com; Max-Age=0; Expires=Thu,
71
+ 01-Jan-1970 00:00:10 GMT; Path=/
72
+ - sl="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT;
73
+ Path=/
74
+ - visit="v=1&G"; Version=1; Max-Age=63072000; Expires=Thu, 30-Apr-2020 14:17:44
75
+ GMT; Path=/
76
+ X-Li-Proto:
77
+ - http/1.1
78
+ - http/1.1
79
+ Pragma:
80
+ - no-cache
81
+ Expires:
82
+ - Thu, 01 Jan 1970 00:00:00 GMT
83
+ Cache-Control:
84
+ - no-cache, no-store
85
+ Connection:
86
+ - keep-alive
87
+ X-Li-Pop:
88
+ - prod-ech2
89
+ X-Li-Uuid:
90
+ - 4avgDgKLKhVAid+m7SoAAA==
91
+ body:
92
+ encoding: ASCII-8BIT
93
+ string: '{"error_description":"the authorization server is currently unable
94
+ to handle the request : RestException{_response=RestResponse[headers={Content-Length=9511,
95
+ Content-Type=application/json, X-RestLi-Error-Response=true, X-RestLi-Protocol-Version=2.0.0}cookies=[],status=404,entityLength=9511]}
96
+ ","error":"temporarily_unavailable"}'
97
+ http_version:
98
+ recorded_at: Tue, 01 May 2018 14:17:44 GMT
99
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,99 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://www.linkedin.com/uas/oauth2/accessToken
6
+ body:
7
+ encoding: UTF-8
8
+ string: client_id=dummy_client_id&client_secret=dummy_client_secret&code=dummy_code&grant_type=authorization_code&raise_errors=true&redirect_uri=http%3A%2F%2Flvh.me%3A5000
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.10.1
12
+ Content-Type:
13
+ - application/x-www-form-urlencoded
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ Accept:
17
+ - "*/*"
18
+ response:
19
+ status:
20
+ code: 503
21
+ message: Service Unavailable
22
+ headers:
23
+ Server:
24
+ - Apache-Coyote/1.1
25
+ P3p:
26
+ - CP="CAO CUR ADM DEV PSA PSD OUR"
27
+ Vary:
28
+ - Accept-Encoding
29
+ Content-Type:
30
+ - application/json;charset=UTF-8
31
+ Content-Language:
32
+ - en-US
33
+ Content-Length:
34
+ - '249'
35
+ Date:
36
+ - Tue, 01 May 2018 14:17:44 GMT
37
+ X-Fs-Uuid:
38
+ - 4ea6a43b028b2a1510635f10032b0000
39
+ Strict-Transport-Security:
40
+ - max-age=2592000
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Xss-Protection:
44
+ - 1; mode=block
45
+ Content-Security-Policy:
46
+ - 'default-src *; connect-src ''self'' static.licdn.com media.licdn.com static-exp1.licdn.com
47
+ static-exp2.licdn.com media-exp1.licdn.com media-exp2.licdn.com https://media-src.linkedin.com/media/
48
+ wss://www.linkedin.com s.c.lnkd.licdn.com m.c.lnkd.licdn.com; img-src data:
49
+ blob: *; font-src data: *; style-src ''unsafe-inline'' ''self'' static-src.linkedin.com
50
+ *.licdn.com; script-src ''report-sample'' ''unsafe-inline'' ''unsafe-eval''
51
+ ''self'' platform.linkedin.com spdy.linkedin.com static-src.linkedin.com *.ads.linkedin.com
52
+ *.licdn.com; object-src ''none''; media-src blob: *; frame-ancestors ''self'';
53
+ report-uri https://www.linkedin.com/lite/contentsecurity?f=lg'
54
+ X-Li-Fabric:
55
+ - prod-lva1
56
+ Set-Cookie:
57
+ - _lipt=deleteMe; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
58
+ - bcookie="v=2&cddc5842-8ac1-40be-8051-2e3e98f9c0c8"; domain=.linkedin.com;
59
+ Path=/; Expires=Fri, 01-May-2020 01:55:17 GMT
60
+ - bscookie="v=1&2018050114174590478047-e07b-4d00-8c27-982afedc45deAQEsbZz-cnu6aaApudE86HNqsbh-VKak";
61
+ domain=.www.linkedin.com; Path=/; Secure; Expires=Fri, 01-May-2020 01:55:17
62
+ GMT; HttpOnly
63
+ - lang="v=2&lang=en-us"; Version=1; Domain=linkedin.com; Path=/
64
+ - leo_auth_token="GST:UYc_4AhwNzUOeZKN5j6EoJHHo3lOXlfQnv_lliH-MQUO2zA0aOt1GP:1525184265:3b2083ec3dafeaa73166b385b5047fed69d4c376";
65
+ Version=1; Max-Age=1799; Expires=Tue, 01-May-2018 14:47:44 GMT; Path=/
66
+ - lidc="b=VB88:g=1230:u=1:i=1525184265:t=1525270665:s=AQG1hoFytmuJ4bX6yweMD8dsESg_j4id";
67
+ Expires=Wed, 02 May 2018 14:17:45 GMT; domain=.linkedin.com; Path=/
68
+ - s_leo_auth_token="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970
69
+ 00:00:10 GMT; Path=/
70
+ - sl="delete me"; Version=1; Domain=.www.linkedin.com; Max-Age=0; Expires=Thu,
71
+ 01-Jan-1970 00:00:10 GMT; Path=/
72
+ - sl="delete me"; Version=1; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:10 GMT;
73
+ Path=/
74
+ - visit="v=1&G"; Version=1; Max-Age=63072000; Expires=Thu, 30-Apr-2020 14:17:45
75
+ GMT; Path=/
76
+ X-Li-Proto:
77
+ - http/1.1
78
+ - http/1.1
79
+ Pragma:
80
+ - no-cache
81
+ Expires:
82
+ - Thu, 01 Jan 1970 00:00:00 GMT
83
+ Cache-Control:
84
+ - no-cache, no-store
85
+ Connection:
86
+ - keep-alive
87
+ X-Li-Pop:
88
+ - prod-edc2
89
+ X-Li-Uuid:
90
+ - BYMxOwKLKhWAF4VFAysAAA==
91
+ body:
92
+ encoding: ASCII-8BIT
93
+ string: '{"error_description":"the authorization server is currently unable
94
+ to handle the request : RestException{_response=RestResponse[headers={Content-Length=9511,
95
+ Content-Type=application/json, X-RestLi-Error-Response=true, X-RestLi-Protocol-Version=2.0.0}cookies=[],status=404,entityLength=9511]}
96
+ ","error":"temporarily_unavailable"}'
97
+ http_version:
98
+ recorded_at: Tue, 01 May 2018 14:17:45 GMT
99
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,51 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.linkedin.com/v2/organizations/11571530
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ X-Li-Format:
11
+ - json
12
+ Authorization:
13
+ - Bearer dummy access token
14
+ User-Agent:
15
+ - Faraday v0.10.1
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 401
23
+ message: Unauthorized
24
+ headers:
25
+ X-Restli-Gateway-Error:
26
+ - 'true'
27
+ Content-Type:
28
+ - application/json
29
+ Date:
30
+ - Tue, 01 May 2018 14:17:30 GMT
31
+ X-Li-Fabric:
32
+ - prod-lva1
33
+ Transfer-Encoding:
34
+ - chunked
35
+ Connection:
36
+ - keep-alive
37
+ X-Li-Pop:
38
+ - prod-edc2
39
+ X-Li-Proto:
40
+ - http/1.1
41
+ X-Li-Uuid:
42
+ - 2OAVov6KKhXAKU2piisAAA==
43
+ Set-Cookie:
44
+ - lidc="b=VB17:g=1697:u=1:i=1525184250:t=1525270650:s=AQG1i0-x5NI4UE0yKGSSlmGeQMDgyeoA";
45
+ Expires=Wed, 02 May 2018 14:17:30 GMT; domain=.linkedin.com; Path=/
46
+ body:
47
+ encoding: UTF-8
48
+ string: '{"serviceErrorCode":65600,"message":"Invalid access token","status":401}'
49
+ http_version:
50
+ recorded_at: Tue, 01 May 2018 14:17:30 GMT
51
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,52 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.linkedin.com/v2/me/picture-urls::(original)
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ X-Li-Format:
11
+ - json
12
+ Authorization:
13
+ - Bearer AQVM91zzF-bLiOfCsTi8ktxnq99l-tW9meri8F9ZEWAuHf5g1bO_Pa4p0nFwKvZ7VFdSERAnJZq3eNOq6BzDPFNIyGIy50s-7HkLq2hE5uy6HrAQrsMAQR_qZxnBrSD11g_M2sF5XB5fUHZOXEQFgFaXB0M19VUAsvsz3yg-7zMI7w9Zn_DYTLO1e2W9VEZrOgVmRNt1XBIT_pdQO7pQkKv4702yJTrIBOuhZWNLZRClPHd2RRhPf2SJeTkodbnL4xSvzcyEPpLaTPyZIVJnBcsAzYFiG_pJtyGs7x-iWbUZsYgnUVSy8Wg-5eqmvze5tuZdICIP0PJ0AVMNGOxRRiLOEh8MSg
14
+ User-Agent:
15
+ - Faraday v0.10.1
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: Not Found
24
+ headers:
25
+ X-Restli-Gateway-Error:
26
+ - 'true'
27
+ Content-Type:
28
+ - application/json
29
+ Date:
30
+ - Tue, 01 May 2018 14:17:38 GMT
31
+ X-Li-Fabric:
32
+ - prod-lva1
33
+ Transfer-Encoding:
34
+ - chunked
35
+ Connection:
36
+ - keep-alive
37
+ X-Li-Pop:
38
+ - prod-ech2
39
+ X-Li-Proto:
40
+ - http/1.1
41
+ Set-Cookie:
42
+ - lidc="b=VB96:g=1148:u=15:i=1525184258:t=1525268970:s=AQEbKiX38Wd1TL5kfyYniOxQdy73nOc8"
43
+ X-Li-Route-Key:
44
+ - '"b=VB96:g=1148:u=15:i=1525184258:t=1525268970:s=AQEbKiX38Wd1TL5kfyYniOxQdy73nOc8"'
45
+ X-Li-Uuid:
46
+ - r1RXpgCLKhWQOpqF2CoAAA==
47
+ body:
48
+ encoding: UTF-8
49
+ string: '{"serviceErrorCode":0,"message":"Resource me does not exist","status":404}'
50
+ http_version:
51
+ recorded_at: Tue, 01 May 2018 14:17:38 GMT
52
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,52 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.linkedin.com/v2/me/connections?projection=(%5B%22id%22,%20%22industry%22%5D)
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ X-Li-Format:
11
+ - json
12
+ Authorization:
13
+ - Bearer AQVM91zzF-bLiOfCsTi8ktxnq99l-tW9meri8F9ZEWAuHf5g1bO_Pa4p0nFwKvZ7VFdSERAnJZq3eNOq6BzDPFNIyGIy50s-7HkLq2hE5uy6HrAQrsMAQR_qZxnBrSD11g_M2sF5XB5fUHZOXEQFgFaXB0M19VUAsvsz3yg-7zMI7w9Zn_DYTLO1e2W9VEZrOgVmRNt1XBIT_pdQO7pQkKv4702yJTrIBOuhZWNLZRClPHd2RRhPf2SJeTkodbnL4xSvzcyEPpLaTPyZIVJnBcsAzYFiG_pJtyGs7x-iWbUZsYgnUVSy8Wg-5eqmvze5tuZdICIP0PJ0AVMNGOxRRiLOEh8MSg
14
+ User-Agent:
15
+ - Faraday v0.10.1
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: Not Found
24
+ headers:
25
+ X-Restli-Gateway-Error:
26
+ - 'true'
27
+ Content-Type:
28
+ - application/json
29
+ Date:
30
+ - Tue, 01 May 2018 14:17:36 GMT
31
+ X-Li-Fabric:
32
+ - prod-lva1
33
+ Transfer-Encoding:
34
+ - chunked
35
+ Connection:
36
+ - keep-alive
37
+ X-Li-Pop:
38
+ - prod-edc2
39
+ X-Li-Proto:
40
+ - http/1.1
41
+ Set-Cookie:
42
+ - lidc="b=VB96:g=1148:u=15:i=1525184256:t=1525268970:s=AQGuzPOyk54isP6qZQ6uB-89hgh9VWud"
43
+ X-Li-Route-Key:
44
+ - '"b=VB96:g=1148:u=15:i=1525184256:t=1525268970:s=AQGuzPOyk54isP6qZQ6uB-89hgh9VWud"'
45
+ X-Li-Uuid:
46
+ - 84sWIQCLKhWQ3EKPiisAAA==
47
+ body:
48
+ encoding: UTF-8
49
+ string: '{"serviceErrorCode":0,"message":"Resource me does not exist","status":404}'
50
+ http_version:
51
+ recorded_at: Tue, 01 May 2018 14:17:36 GMT
52
+ recorded_with: VCR 3.0.3