linkedin 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/.yardopts +7 -0
- data/{changelog.markdown → CHANGELOG.md} +5 -1
- data/EXAMPLES.md +199 -0
- data/Gemfile +4 -0
- data/README.md +43 -0
- data/Rakefile +2 -7
- data/lib/linked_in/api.rb +34 -2
- data/lib/linked_in/api/communications.rb +44 -0
- data/lib/linked_in/api/companies.rb +128 -0
- data/lib/linked_in/api/groups.rb +115 -0
- data/lib/linked_in/api/jobs.rb +64 -0
- data/lib/linked_in/api/people.rb +72 -0
- data/lib/linked_in/api/query_helpers.rb +86 -0
- data/lib/linked_in/api/share_and_social_stream.rb +133 -0
- data/lib/linked_in/client.rb +7 -2
- data/lib/linked_in/errors.rb +12 -2
- data/lib/linked_in/mash.rb +31 -4
- data/lib/linked_in/search.rb +16 -1
- data/lib/linked_in/version.rb +1 -1
- data/lib/linkedin.rb +4 -1
- data/linkedin.gemspec +5 -3
- data/spec/cases/api_spec.rb +15 -5
- data/spec/cases/mash_spec.rb +30 -2
- data/spec/cases/oauth_spec.rb +5 -6
- data/spec/cases/search_spec.rb +53 -23
- data/spec/fixtures/cassette_library/LinkedIn_Api/Company_API.yml +3 -3
- data/spec/fixtures/cassette_library/LinkedIn_Api/Company_API/should_load_correct_company_data.yml +81 -0
- data/spec/fixtures/cassette_library/LinkedIn_Client/{_authorize_from_request.yml → _authorize_from_request/should_return_a_valid_access_token.yml} +0 -0
- data/spec/fixtures/cassette_library/LinkedIn_Client/_request_token/{with_a_callback_url.yml → with_a_callback_url/should_return_a_valid_access_token.yml} +0 -0
- data/spec/fixtures/cassette_library/LinkedIn_Client/_request_token/{with_default_options.yml → with_default_options/should_return_a_valid_request_token.yml} +0 -0
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/{by_company_name_option.yml → by_company_name_option/should_perform_a_search.yml} +8 -9
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/by_email_address/should_perform_a_people_search.yml +57 -0
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/{by_first_name_and_last_name_options.yml → by_first_name_and_last_name_options/should_perform_a_search.yml} +15 -15
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/by_first_name_and_last_name_options_with_fields/should_perform_a_search.yml +114 -0
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/{by_keywords_string_parameter.yml → by_keywords_string_parameter/should_perform_a_search.yml} +8 -9
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/by_multiple_email_address/should_perform_a_multi-email_search.yml +59 -0
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/{by_single_keywords_option.yml → by_single_keywords_option/should_perform_a_search.yml} +8 -9
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/{by_single_keywords_option_with_pagination.yml → by_single_keywords_option_with_pagination/should_perform_a_search.yml} +1 -3
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/email_search_returns_unauthorized/should_raise_an_unauthorized_error.yml +59 -0
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_keywords_options_with_fields/should_perform_a_search.yml +43 -0
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search_company/{by_keywords_string_parameter.yml → by_keywords_string_parameter/should_perform_a_company_search.yml} +19 -19
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search_company/{by_single_keywords_option.yml → by_single_keywords_option/should_perform_a_company_search.yml} +19 -19
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search_company/{by_single_keywords_option_with_facets_to_return.yml → by_single_keywords_option_with_facets_to_return/should_return_a_facet.yml} +14 -14
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search_company/{by_single_keywords_option_with_pagination.yml → by_single_keywords_option_with_pagination/should_perform_a_search.yml} +15 -15
- data/spec/helper.rb +9 -5
- metadata +76 -61
- data/.document +0 -5
- data/README.markdown +0 -84
- data/examples/authenticate.rb +0 -26
- data/examples/communication.rb +0 -7
- data/examples/network.rb +0 -12
- data/examples/profile.rb +0 -18
- data/examples/sinatra.rb +0 -77
- data/examples/status.rb +0 -6
- data/lib/linked_in/api/query_methods.rb +0 -176
- data/lib/linked_in/api/update_methods.rb +0 -85
- data/spec/fixtures/cassette_library/LinkedIn_Client/_request_token.yml +0 -37
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search/by_first_name_and_last_name_options_with_fields.yml +0 -112
- data/spec/fixtures/cassette_library/LinkedIn_Search/_search_company/by_keywords_options_with_fields.yml +0 -232
@@ -0,0 +1,115 @@
|
|
1
|
+
module LinkedIn
|
2
|
+
module Api
|
3
|
+
|
4
|
+
# Groups API
|
5
|
+
#
|
6
|
+
# @see http://developer.linkedin.com/documents/groups-api Groups API
|
7
|
+
# @see http://developer.linkedin.com/documents/groups-fields Groups Fields
|
8
|
+
#
|
9
|
+
# The following API actions do not have corresponding methods in
|
10
|
+
# this module
|
11
|
+
#
|
12
|
+
# * PUT Change my Group Settings
|
13
|
+
# * POST Change my Group Settings
|
14
|
+
# * DELETE Leave a group
|
15
|
+
# * PUT Follow/unfollow a Group post
|
16
|
+
# * PUT Flag a Post as a Promotion or Job
|
17
|
+
# * DELETE Delete a Post
|
18
|
+
# * DELETE Flag a post as inappropriate
|
19
|
+
# * DELETE A comment or flag comment as inappropriate
|
20
|
+
# * DELETE Remove a Group Suggestion
|
21
|
+
#
|
22
|
+
# [(contribute here)](https://github.com/hexgnu/linkedin)
|
23
|
+
module Groups
|
24
|
+
|
25
|
+
# Retrieve group suggestions for the current user
|
26
|
+
#
|
27
|
+
# Permissions: r_fullprofile
|
28
|
+
#
|
29
|
+
# @see http://developer.linkedin.com/documents/job-bookmarks-and-suggestions
|
30
|
+
#
|
31
|
+
# @macro person_path_options
|
32
|
+
# @return [LinkedIn::Mash]
|
33
|
+
def group_suggestions(options = {})
|
34
|
+
path = "#{person_path(options)}/suggestions/groups"
|
35
|
+
simple_query(path, options)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Retrieve the groups a current user belongs to
|
39
|
+
#
|
40
|
+
# Permissions: rw_groups
|
41
|
+
#
|
42
|
+
# @see http://developer.linkedin.com/documents/groups-api
|
43
|
+
#
|
44
|
+
# @macro person_path_options
|
45
|
+
# @return [LinkedIn::Mash]
|
46
|
+
def group_memberships(options = {})
|
47
|
+
path = "#{person_path(options)}/group-memberships"
|
48
|
+
simple_query(path, options)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Retrieve the profile of a group
|
52
|
+
#
|
53
|
+
# Permissions: rw_groups
|
54
|
+
#
|
55
|
+
# @see http://developer.linkedin.com/documents/groups-api
|
56
|
+
#
|
57
|
+
# @param [Hash] options identifies the group or groups
|
58
|
+
# @optio options [String] :id identifier for the group
|
59
|
+
# @return [LinkedIn::Mash]
|
60
|
+
def group_profile(options)
|
61
|
+
path = group_path(options)
|
62
|
+
simple_query(path, options)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Retrieve the posts in a group
|
66
|
+
#
|
67
|
+
# Permissions: rw_groups
|
68
|
+
#
|
69
|
+
# @see http://developer.linkedin.com/documents/groups-api
|
70
|
+
#
|
71
|
+
# @param [Hash] options identifies the group or groups
|
72
|
+
# @optio options [String] :id identifier for the group
|
73
|
+
# @optio options [String] :count
|
74
|
+
# @optio options [String] :start
|
75
|
+
# @return [LinkedIn::Mash]
|
76
|
+
def group_posts(options)
|
77
|
+
path = "#{group_path(options)}/posts"
|
78
|
+
simple_query(path, options)
|
79
|
+
end
|
80
|
+
|
81
|
+
# @deprecated Use {#add_group_share} instead
|
82
|
+
def post_group_discussion(group_id, discussion)
|
83
|
+
warn 'Use add_group_share over post_group_discussion. This will be taken out in future versions'
|
84
|
+
add_group_share(group_id, discussion)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Create a share for a company that the authenticated user
|
88
|
+
# administers
|
89
|
+
#
|
90
|
+
# Permissions: rw_groups
|
91
|
+
#
|
92
|
+
# @see http://developer.linkedin.com/documents/groups-api#create
|
93
|
+
#
|
94
|
+
# @param [String] group_id Group ID
|
95
|
+
# @macro share_input_fields
|
96
|
+
# @return [void]
|
97
|
+
def add_group_share(group_id, share)
|
98
|
+
path = "/groups/#{group_id}/posts"
|
99
|
+
post(path, MultiJson.dump(share), "Content-Type" => "application/json")
|
100
|
+
end
|
101
|
+
|
102
|
+
# (Update) User joins, or requests to join, a group
|
103
|
+
#
|
104
|
+
# @see http://developer.linkedin.com/documents/groups-api#membergroups
|
105
|
+
#
|
106
|
+
# @param [String] group_id Group ID
|
107
|
+
# @return [void]
|
108
|
+
def join_group(group_id)
|
109
|
+
path = "/people/~/group-memberships/#{group_id}"
|
110
|
+
body = {'membership-state' => {'code' => 'member' }}
|
111
|
+
put(path, MultiJson.dump(body), "Content-Type" => "application/json")
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module LinkedIn
|
2
|
+
module Api
|
3
|
+
|
4
|
+
# Jobs API
|
5
|
+
#
|
6
|
+
# @see http://developer.linkedin.com/documents/job-lookup-api-and-fields Job Lookup API and Fields
|
7
|
+
# @see http://developer.linkedin.com/documents/job-bookmarks-and-suggestions Job Bookmarks and Suggestions
|
8
|
+
#
|
9
|
+
# The following API actions do not have corresponding methods in
|
10
|
+
# this module
|
11
|
+
#
|
12
|
+
# * DELETE a Job Bookmark
|
13
|
+
#
|
14
|
+
# [(contribute here)](https://github.com/hexgnu/linkedin)
|
15
|
+
module Jobs
|
16
|
+
|
17
|
+
# Retrieve likes on a particular company update:
|
18
|
+
#
|
19
|
+
# @see http://developer.linkedin.com/reading-company-shares
|
20
|
+
#
|
21
|
+
# @param [Hash] options identifies the job
|
22
|
+
# @option options [String] id unique identifier for a job
|
23
|
+
# @return [LinkedIn::Mash]
|
24
|
+
def job(options = {})
|
25
|
+
path = jobs_path(options)
|
26
|
+
simple_query(path, options)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Retrieve the current members' job bookmarks
|
30
|
+
#
|
31
|
+
# @see http://developer.linkedin.com/documents/job-bookmarks-and-suggestions
|
32
|
+
#
|
33
|
+
# @macro person_path_options
|
34
|
+
# @return [LinkedIn::Mash]
|
35
|
+
def job_bookmarks(options = {})
|
36
|
+
path = "#{person_path(options)}/job-bookmarks"
|
37
|
+
simple_query(path, options)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Retrieve job suggestions for the current user
|
41
|
+
#
|
42
|
+
# @see http://developer.linkedin.com/documents/job-bookmarks-and-suggestions
|
43
|
+
#
|
44
|
+
# @macro person_path_options
|
45
|
+
# @return [LinkedIn::Mash]
|
46
|
+
def job_suggestions(options = {})
|
47
|
+
path = "#{person_path(options)}/suggestions/job-suggestions"
|
48
|
+
simple_query(path, options)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Create a job bookmark for the authenticated user
|
52
|
+
#
|
53
|
+
# @see http://developer.linkedin.com/documents/job-bookmarks-and-suggestions
|
54
|
+
#
|
55
|
+
# @param [String] job_id Job ID
|
56
|
+
# @return [void]
|
57
|
+
def add_job_bookmark(job_id)
|
58
|
+
path = "/people/~/job-bookmarks"
|
59
|
+
body = {'job' => {'id' => job_id}}
|
60
|
+
post(path, MultiJson.dump(body), "Content-Type" => "application/json")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module LinkedIn
|
2
|
+
module Api
|
3
|
+
|
4
|
+
# People APIs
|
5
|
+
#
|
6
|
+
# @see http://developer.linkedin.com/documents/people People API
|
7
|
+
# @see http://developer.linkedin.com/documents/profile-fields Profile Fields
|
8
|
+
# @see http://developer.linkedin.com/documents/field-selectors Field Selectors
|
9
|
+
# @see http://developer.linkedin.com/documents/accessing-out-network-profiles Accessing Out of Network Profiles
|
10
|
+
module People
|
11
|
+
|
12
|
+
# Retrieve a member's LinkedIn profile.
|
13
|
+
#
|
14
|
+
# Permissions: r_basicprofile, r_fullprofile
|
15
|
+
#
|
16
|
+
# @see http://developer.linkedin.com/documents/profile-api
|
17
|
+
# @macro person_path_options
|
18
|
+
# @option options [string] :secure-urls if 'true' URLs in responses will be HTTPS
|
19
|
+
# @return [LinkedIn::Mash]
|
20
|
+
def profile(options={})
|
21
|
+
path = person_path(options)
|
22
|
+
simple_query(path, options)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Retrieve a list of 1st degree connections for a user who has
|
26
|
+
# granted access to his/her account
|
27
|
+
#
|
28
|
+
# Permissions: r_network
|
29
|
+
#
|
30
|
+
# @see http://developer.linkedin.com/documents/connections-api
|
31
|
+
#
|
32
|
+
# @macro person_path_options
|
33
|
+
# @return [LinkedIn::Mash]
|
34
|
+
def connections(options={})
|
35
|
+
path = "#{person_path(options)}/connections"
|
36
|
+
simple_query(path, options)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Retrieve a list of the latest set of 1st degree connections for a
|
40
|
+
# user
|
41
|
+
#
|
42
|
+
# Permissions: r_network
|
43
|
+
#
|
44
|
+
# @see http://developer.linkedin.com/documents/connections-api
|
45
|
+
#
|
46
|
+
# @param [String] modified_since timestamp indicating since when
|
47
|
+
# you want to retrieve new connections
|
48
|
+
# @macro person_path_options
|
49
|
+
# @return [LinkedIn::Mash]
|
50
|
+
def new_connections(modified_since, options={})
|
51
|
+
options.merge!('modified' => 'new', 'modified-since' => modified_since)
|
52
|
+
path = "#{person_path(options)}/connections"
|
53
|
+
simple_query(path, options)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Retrieve the picture url
|
57
|
+
# http://api.linkedin.com/v1/people/~/picture-urls::(original)
|
58
|
+
#
|
59
|
+
# Permissions: r_network
|
60
|
+
#
|
61
|
+
# @options [String] :id, the id of the person for whom you want the profile picture
|
62
|
+
# @options [String] :picture_size, default: 'original'
|
63
|
+
#
|
64
|
+
# example for use in code: client.picture_urls(:id => 'id_of_connection')
|
65
|
+
def picture_urls(options={})
|
66
|
+
picture_size = options.delete(:picture_size) || 'original'
|
67
|
+
path = "#{picture_urls_path(options)}::(#{picture_size})"
|
68
|
+
simple_query(path, options)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module LinkedIn
|
2
|
+
module Api
|
3
|
+
|
4
|
+
module QueryHelpers
|
5
|
+
private
|
6
|
+
|
7
|
+
def group_path(options)
|
8
|
+
path = "/groups"
|
9
|
+
if id = options.delete(:id)
|
10
|
+
path += "/#{id}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def simple_query(path, options={})
|
15
|
+
fields = options.delete(:fields) || LinkedIn.default_profile_fields
|
16
|
+
|
17
|
+
if options.delete(:public)
|
18
|
+
path +=":public"
|
19
|
+
elsif fields
|
20
|
+
path +=":(#{build_fields_params(fields)})"
|
21
|
+
end
|
22
|
+
|
23
|
+
headers = options.delete(:headers) || {}
|
24
|
+
params = to_query(options)
|
25
|
+
path += "#{path.include?("?") ? "&" : "?"}#{params}" if !params.empty?
|
26
|
+
|
27
|
+
Mash.from_json(get(path, headers))
|
28
|
+
end
|
29
|
+
|
30
|
+
def build_fields_params(fields)
|
31
|
+
if fields.is_a?(Hash) && !fields.empty?
|
32
|
+
fields.map {|index,value| "#{index}:(#{build_fields_params(value)})" }.join(',')
|
33
|
+
elsif fields.respond_to?(:each)
|
34
|
+
fields.map {|field| build_fields_params(field) }.join(',')
|
35
|
+
else
|
36
|
+
fields.to_s.gsub("_", "-")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def person_path(options)
|
41
|
+
path = "/people"
|
42
|
+
if id = options.delete(:id)
|
43
|
+
path += "/id=#{id}"
|
44
|
+
elsif url = options.delete(:url)
|
45
|
+
path += "/url=#{CGI.escape(url)}"
|
46
|
+
elsif email = options.delete(:email)
|
47
|
+
path += "::(#{email})"
|
48
|
+
else
|
49
|
+
path += "/~"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def company_path(options)
|
54
|
+
path = "/companies"
|
55
|
+
|
56
|
+
if domain = options.delete(:domain)
|
57
|
+
path += "?email-domain=#{CGI.escape(domain)}"
|
58
|
+
elsif id = options.delete(:id)
|
59
|
+
path += "/id=#{id}"
|
60
|
+
elsif url = options.delete(:url)
|
61
|
+
path += "/url=#{CGI.escape(url)}"
|
62
|
+
elsif name = options.delete(:name)
|
63
|
+
path += "/universal-name=#{CGI.escape(name)}"
|
64
|
+
elsif is_admin = options.delete(:is_admin)
|
65
|
+
path += "?is-company-admin=#{CGI.escape(is_admin)}"
|
66
|
+
else
|
67
|
+
path += "/~"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def picture_urls_path(options)
|
72
|
+
path = person_path(options)
|
73
|
+
path += "/picture-urls"
|
74
|
+
end
|
75
|
+
|
76
|
+
def jobs_path(options)
|
77
|
+
path = "/jobs"
|
78
|
+
if id = options.delete(:id)
|
79
|
+
path += "/id=#{id}"
|
80
|
+
else
|
81
|
+
path += "/~"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
module LinkedIn
|
2
|
+
module Api
|
3
|
+
|
4
|
+
# Share and Social Stream APIs
|
5
|
+
#
|
6
|
+
# @see http://developer.linkedin.com/documents/share-and-social-stream
|
7
|
+
# @see http://developer.linkedin.com/documents/share-api Share API
|
8
|
+
#
|
9
|
+
# The following API actions do not have corresponding methods in
|
10
|
+
# this module
|
11
|
+
#
|
12
|
+
# * GET Network Statistics
|
13
|
+
# * POST Post Network Update
|
14
|
+
#
|
15
|
+
# [(contribute here)](https://github.com/hexgnu/linkedin)
|
16
|
+
module ShareAndSocialStream
|
17
|
+
|
18
|
+
# Retrieve the authenticated users network updates
|
19
|
+
#
|
20
|
+
# Permissions: rw_nus
|
21
|
+
#
|
22
|
+
# @see http://developer.linkedin.com/documents/get-network-updates-and-statistics-api
|
23
|
+
# @see http://developer.linkedin.com/documents/network-update-types Network Update Types
|
24
|
+
#
|
25
|
+
# @macro person_path_options
|
26
|
+
# @option options [String] :scope
|
27
|
+
# @option options [String] :type
|
28
|
+
# @option options [String] :count
|
29
|
+
# @option options [String] :start
|
30
|
+
# @option options [String] :after
|
31
|
+
# @option options [String] :before
|
32
|
+
# @option options [String] :show-hidden-members
|
33
|
+
# @return [LinkedIn::Mash]
|
34
|
+
def network_updates(options={})
|
35
|
+
path = "#{person_path(options)}/network/updates"
|
36
|
+
simple_query(path, options)
|
37
|
+
end
|
38
|
+
|
39
|
+
# TODO refactor to use #network_updates
|
40
|
+
def shares(options={})
|
41
|
+
path = "#{person_path(options)}/network/updates"
|
42
|
+
simple_query(path, {:type => "SHAR", :scope => "self"}.merge(options))
|
43
|
+
end
|
44
|
+
|
45
|
+
# Retrieve all comments for a particular network update
|
46
|
+
#
|
47
|
+
# @note The first 5 comments are included in the response to #network_updates
|
48
|
+
#
|
49
|
+
# Permissions: rw_nus
|
50
|
+
#
|
51
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
52
|
+
#
|
53
|
+
# @param [String] update_key a update/update-key representing a
|
54
|
+
# particular network update
|
55
|
+
# @macro person_path_options
|
56
|
+
# @return [LinkedIn::Mash]
|
57
|
+
def share_comments(update_key, options={})
|
58
|
+
path = "#{person_path(options)}/network/updates/key=#{update_key}/update-comments"
|
59
|
+
simple_query(path, options)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Retrieve all likes for a particular network update
|
63
|
+
#
|
64
|
+
# @note Some likes are included in the response to #network_updates
|
65
|
+
#
|
66
|
+
# Permissions: rw_nus
|
67
|
+
#
|
68
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
69
|
+
#
|
70
|
+
# @param [String] update_key a update/update-key representing a
|
71
|
+
# particular network update
|
72
|
+
# @macro person_path_options
|
73
|
+
# @return [LinkedIn::Mash]
|
74
|
+
def share_likes(update_key, options={})
|
75
|
+
path = "#{person_path(options)}/network/updates/key=#{update_key}/likes"
|
76
|
+
simple_query(path, options)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Create a share for the authenticated user
|
80
|
+
#
|
81
|
+
# Permissions: rw_nus
|
82
|
+
#
|
83
|
+
# @see http://developer.linkedin.com/documents/share-api
|
84
|
+
#
|
85
|
+
# @macro share_input_fields
|
86
|
+
# @return [void]
|
87
|
+
def add_share(share)
|
88
|
+
path = "/people/~/shares"
|
89
|
+
defaults = {:visibility => {:code => "anyone"}}
|
90
|
+
post(path, MultiJson.dump(defaults.merge(share)), "Content-Type" => "application/json")
|
91
|
+
end
|
92
|
+
|
93
|
+
# Create a comment on an update from the authenticated user
|
94
|
+
#
|
95
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
96
|
+
#
|
97
|
+
# @param [String] update_key a update/update-key representing a
|
98
|
+
# particular network update
|
99
|
+
# @param [String] comment The text of the comment
|
100
|
+
# @return [void]
|
101
|
+
def update_comment(update_key, comment)
|
102
|
+
path = "/people/~/network/updates/key=#{update_key}/update-comments"
|
103
|
+
body = {'comment' => comment}
|
104
|
+
post(path, MultiJson.dump(body), "Content-Type" => "application/json")
|
105
|
+
end
|
106
|
+
|
107
|
+
# (Update) like an update as the authenticated user
|
108
|
+
#
|
109
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
110
|
+
#
|
111
|
+
# @param [String] update_key a update/update-key representing a
|
112
|
+
# particular network update
|
113
|
+
# @return [void]
|
114
|
+
def like_share(update_key)
|
115
|
+
path = "/people/~/network/updates/key=#{update_key}/is-liked"
|
116
|
+
put(path, 'true', "Content-Type" => "application/json")
|
117
|
+
end
|
118
|
+
|
119
|
+
# (Destroy) unlike an update the authenticated user previously
|
120
|
+
# liked
|
121
|
+
#
|
122
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
123
|
+
#
|
124
|
+
# @param [String] update_key a update/update-key representing a
|
125
|
+
# particular network update
|
126
|
+
# @return [void]
|
127
|
+
def unlike_share(update_key)
|
128
|
+
path = "/people/~/network/updates/key=#{update_key}/is-liked"
|
129
|
+
put(path, 'false', "Content-Type" => "application/json")
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|