linkedin-oauth2 0.1.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +9 -9
- data/.gitignore +24 -39
- data/.travis.yml +4 -4
- data/.yardopts +2 -0
- data/CHANGELOG.md +10 -0
- data/CONTRIBUTING.md +1 -0
- data/Gemfile +6 -5
- data/LICENSE +19 -17
- data/README.md +399 -0
- data/Rakefile +15 -22
- data/lib/linked_in/access_token.rb +24 -0
- data/lib/linked_in/api.rb +96 -3
- data/lib/linked_in/api_resource.rb +165 -0
- data/lib/linked_in/communications.rb +40 -0
- data/lib/linked_in/companies.rb +146 -0
- data/lib/linked_in/configuration.rb +41 -0
- data/lib/linked_in/connection.rb +31 -0
- data/lib/linked_in/errors.rb +33 -13
- data/lib/linked_in/groups.rb +116 -0
- data/lib/linked_in/jobs.rb +68 -0
- data/lib/linked_in/mash.rb +34 -34
- data/lib/linked_in/oauth2.rb +223 -0
- data/lib/linked_in/people.rb +141 -0
- data/lib/linked_in/search.rb +58 -43
- data/lib/linked_in/share_and_social_stream.rb +128 -0
- data/lib/linked_in/version.rb +1 -9
- data/lib/linkedin-oauth2.rb +43 -25
- data/linkedin-oauth2.gemspec +35 -21
- data/spec/linked_in/api/api_spec.rb +41 -0
- data/spec/linked_in/api/communications_spec.rb +13 -0
- data/spec/linked_in/api/companies_spec.rb +59 -0
- data/spec/linked_in/api/groups_spec.rb +55 -0
- data/spec/linked_in/api/jobs_spec.rb +33 -0
- data/spec/linked_in/api/people_spec.rb +181 -0
- data/spec/linked_in/api/search_spec.rb +71 -0
- data/spec/linked_in/api/share_and_social_stream_spec.rb +60 -0
- data/spec/linked_in/configuration_spec.rb +46 -0
- data/spec/linked_in/connection_spec.rb +10 -0
- data/spec/linked_in/module_loading_spec.rb +23 -0
- data/spec/linked_in/oauth/access_token_spec.rb +27 -0
- data/spec/linked_in/oauth/auth_code_spec.rb +86 -0
- data/spec/linked_in/oauth/credentials_spec.rb +96 -0
- data/spec/linked_in/oauth/get_access_token_spec.rb +108 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/vcr_cassettes/access_token_success.yml +84 -0
- data/spec/vcr_cassettes/bad_code.yml +78 -0
- data/spec/vcr_cassettes/companies_data.yml +44 -0
- data/spec/vcr_cassettes/invalid_access_token.yml +60 -0
- data/spec/vcr_cassettes/not_found.yml +64 -0
- data/spec/vcr_cassettes/people_picture_urls.yml +54 -0
- data/spec/vcr_cassettes/people_profile_connections_fields.yml +73 -0
- data/spec/vcr_cassettes/people_profile_connections_other.yml +78 -0
- data/spec/vcr_cassettes/people_profile_connections_self.yml +78 -0
- data/spec/vcr_cassettes/people_profile_fields_complex.yml +70 -0
- data/spec/vcr_cassettes/people_profile_fields_simple.yml +57 -0
- data/spec/vcr_cassettes/people_profile_lang_spanish.yml +59 -0
- data/spec/vcr_cassettes/people_profile_multiple_fields.yml +68 -0
- data/spec/vcr_cassettes/people_profile_multiple_uids.yml +70 -0
- data/spec/vcr_cassettes/people_profile_multiple_uids_and_urls.yml +76 -0
- data/spec/vcr_cassettes/people_profile_multiple_urls.yml +70 -0
- data/spec/vcr_cassettes/people_profile_new_connections_fields.yml +69 -0
- data/spec/vcr_cassettes/people_profile_new_connections_other.yml +72 -0
- data/spec/vcr_cassettes/people_profile_new_connections_self.yml +72 -0
- data/spec/vcr_cassettes/people_profile_other_uid.yml +59 -0
- data/spec/vcr_cassettes/people_profile_other_url.yml +59 -0
- data/spec/vcr_cassettes/people_profile_own.yml +59 -0
- data/spec/vcr_cassettes/people_profile_own_secure.yml +59 -0
- data/spec/vcr_cassettes/unauthorized.yml +61 -0
- data/spec/vcr_cassettes/unavailable.yml +81 -0
- metadata +145 -88
- data/.autotest +0 -14
- data/.document +0 -5
- data/.gemtest +0 -0
- data/.rspec +0 -1
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/README.markdown +0 -121
- data/changelog.markdown +0 -94
- data/examples/authenticate.rb +0 -16
- data/examples/network.rb +0 -12
- data/examples/profile.rb +0 -18
- data/examples/sinatra.rb +0 -69
- data/examples/status.rb +0 -6
- data/lib/linked_in/api/query_methods.rb +0 -123
- data/lib/linked_in/api/update_methods.rb +0 -76
- data/lib/linked_in/client.rb +0 -31
- data/lib/linked_in/helpers.rb +0 -6
- data/lib/linked_in/helpers/authorization.rb +0 -106
- data/lib/linked_in/helpers/request.rb +0 -93
- data/spec/cases/api_spec.rb +0 -192
- data/spec/cases/linkedin_spec.rb +0 -37
- data/spec/cases/mash_spec.rb +0 -85
- data/spec/cases/oauth_spec.rb +0 -130
- data/spec/cases/search_spec.rb +0 -190
- data/spec/helper.rb +0 -30
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'time'
|
2
|
+
module LinkedIn
|
3
|
+
# People APIs
|
4
|
+
#
|
5
|
+
# @see http://developer.linkedin.com/documents/people People API
|
6
|
+
# @see http://developer.linkedin.com/documents/profile-fields Profile Fields
|
7
|
+
# @see http://developer.linkedin.com/documents/field-selectors Field Selectors
|
8
|
+
# @see http://developer.linkedin.com/documents/accessing-out-network-profiles Accessing Out of Network Profiles
|
9
|
+
class People < APIResource
|
10
|
+
|
11
|
+
# @!macro multi_profile_options
|
12
|
+
# @options opts [Array] :urls A list of profile urls
|
13
|
+
# @options opts [Array] :ids List of LinkedIn IDs
|
14
|
+
#
|
15
|
+
# @!macro new profile_args
|
16
|
+
# @overload profile()
|
17
|
+
# Fetches your own profile
|
18
|
+
# @overload profile(id_or_url, opts)
|
19
|
+
# Fetches the profile of another user
|
20
|
+
# @param [String] id_or_url a LinkedIn id or a profile URL
|
21
|
+
# @param [Hash] opts more profile options
|
22
|
+
# @macro profile_options
|
23
|
+
# @overload profile(opts)
|
24
|
+
# Fetches the profile of another user
|
25
|
+
# @param [Hash] opts profile options
|
26
|
+
# @macro profile_options
|
27
|
+
# @return [LinkedIn::Mash]
|
28
|
+
|
29
|
+
# Retrieve a member's LinkedIn profile.
|
30
|
+
#
|
31
|
+
# Required permissions: r_basicprofile, r_fullprofile
|
32
|
+
#
|
33
|
+
# @see http://developer.linkedin.com/documents/profile-api
|
34
|
+
# @macro profile_args
|
35
|
+
# @macro multi_profile_options
|
36
|
+
def profile(id={}, options={})
|
37
|
+
options = parse_id(id, options)
|
38
|
+
path = profile_path(options)
|
39
|
+
get(path, options)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Retrieve a list of 1st degree connections for a user who has
|
43
|
+
# granted access to his/her account
|
44
|
+
#
|
45
|
+
# Permissions: r_network
|
46
|
+
#
|
47
|
+
# @see http://developer.linkedin.com/documents/connections-api
|
48
|
+
# @macro profile_args
|
49
|
+
def connections(id={}, options={})
|
50
|
+
options = parse_id(id, options)
|
51
|
+
path = "#{profile_path(options, false)}/connections"
|
52
|
+
get(path, options)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Retrieve a list of the latest set of 1st degree connections for a
|
56
|
+
# user
|
57
|
+
#
|
58
|
+
# Permissions: r_network
|
59
|
+
#
|
60
|
+
# @see http://developer.linkedin.com/documents/connections-api
|
61
|
+
#
|
62
|
+
# @param [String, Fixnum, Time] modified_since timestamp in unix time
|
63
|
+
# miliseconds indicating since when you want to retrieve new
|
64
|
+
# connections
|
65
|
+
# @param [Hash] opts profile options
|
66
|
+
# @macro profile_options
|
67
|
+
# @return [LinkedIn::Mash]
|
68
|
+
def new_connections(since, options={})
|
69
|
+
since = parse_modified_since(since)
|
70
|
+
options.merge!('modified' => 'new', 'modified-since' => since)
|
71
|
+
path = "#{profile_path(options, false)}/connections"
|
72
|
+
get(path, options)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Retrieve the picture url
|
76
|
+
# http://api.linkedin.com/v1/people/~/picture-urls::(original)
|
77
|
+
#
|
78
|
+
# Permissions: r_network
|
79
|
+
#
|
80
|
+
# @options [String] :id, the id of the person for whom you want the profile picture
|
81
|
+
# @options [String] :picture_size, default: 'original'
|
82
|
+
# @options [String] :secure, default: 'false', options: ['false','true']
|
83
|
+
#
|
84
|
+
# example for use in code: client.picture_urls(:id => 'id_of_connection')
|
85
|
+
def picture_urls(options={})
|
86
|
+
picture_size = options.delete(:picture_size) || 'original'
|
87
|
+
path = "#{profile_path(options)}/picture-urls::(#{picture_size})"
|
88
|
+
get(path, options)
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
protected ############################################################
|
93
|
+
|
94
|
+
|
95
|
+
def get(path, options)
|
96
|
+
options[:"secure-urls"] = true unless options[:secure] == false
|
97
|
+
super path, options
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
private ##############################################################
|
102
|
+
|
103
|
+
|
104
|
+
def parse_id(id, options)
|
105
|
+
if id.is_a? String
|
106
|
+
if id.downcase =~ /linkedin\.com/
|
107
|
+
options[:url] = id
|
108
|
+
else
|
109
|
+
options[:id] = id
|
110
|
+
end
|
111
|
+
elsif id.is_a? Hash
|
112
|
+
options = id
|
113
|
+
else
|
114
|
+
options = {}
|
115
|
+
end
|
116
|
+
|
117
|
+
return options
|
118
|
+
end
|
119
|
+
|
120
|
+
# Returns a unix time in miliseconds
|
121
|
+
def parse_modified_since(since)
|
122
|
+
if since.is_a? ::Fixnum
|
123
|
+
if ::Time.at(since).year < 2050
|
124
|
+
# Got passed in as seconds.
|
125
|
+
since = since * 1000
|
126
|
+
end
|
127
|
+
elsif since.is_a? ::String
|
128
|
+
since = utc_parse(since)
|
129
|
+
elsif since.is_a? ::Time
|
130
|
+
since = since.to_i * 1000
|
131
|
+
end
|
132
|
+
return since
|
133
|
+
end
|
134
|
+
|
135
|
+
def utc_parse(since)
|
136
|
+
t = ::Time.parse(since)
|
137
|
+
Time.utc(t.year, t.month, t.day, t.hour, t.min, t.sec).to_i * 1000
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
end
|
data/lib/linked_in/search.rb
CHANGED
@@ -1,55 +1,70 @@
|
|
1
1
|
module LinkedIn
|
2
|
-
|
3
|
-
|
2
|
+
# Search APIs
|
3
|
+
#
|
4
|
+
# @see https://developer.linkedin.com/documents/people-search-api
|
5
|
+
# @see https://developer.linkedin.com/documents/company-search
|
6
|
+
# @see https://developer.linkedin.com/documents/job-search-api
|
7
|
+
class Search < APIResource
|
8
|
+
# Search through People, Companies, and Jobs
|
9
|
+
#
|
10
|
+
# To search through people you need to be part of LinkedIn's Vetted
|
11
|
+
# API Access Program.
|
12
|
+
#
|
13
|
+
# @see https://developer.linkedin.com/documents/people-search-api
|
14
|
+
#
|
15
|
+
# You can use the same API to search through Companies and Jobs.
|
16
|
+
#
|
17
|
+
# @!macro search_options
|
18
|
+
# @options opts [String] :type either "people", "companies", or
|
19
|
+
# "jobs"
|
20
|
+
# @options opts [String] :keywords various keywords to search for
|
21
|
+
# @options opts [Array, Hash] :fields fields to fetch. The
|
22
|
+
# list of fields can be found at
|
23
|
+
# https://developer.linkedin.com/documents/field-selectors
|
24
|
+
# @options opts various There are many more options you can search
|
25
|
+
# by see https://developer.linkedin.com/documents/people-search-api
|
26
|
+
# for more possibilities. All keys can be entered underscored and
|
27
|
+
# they will be dasherized to match the field names on LinkedIn's
|
28
|
+
# website
|
29
|
+
#
|
30
|
+
# @overload search
|
31
|
+
# Grabs all people in your network
|
32
|
+
# @overload search(keyword_string)
|
33
|
+
# Keyword search through people
|
34
|
+
# @param [String] keywords search keywords
|
35
|
+
# @overload search(keyword_string, type)
|
36
|
+
# Keyword search through people
|
37
|
+
# @param [String] keywords search keywords
|
38
|
+
# @param [String] type either "people", "companies", or "jobs"
|
39
|
+
# @overload search(opts)
|
40
|
+
# Searches based on various options
|
41
|
+
# @param [Hash] opts search options
|
42
|
+
# @macro search_options
|
43
|
+
# @overload search(opts, type)
|
44
|
+
# Searches for a type based on various options
|
45
|
+
# @param [Hash] opts search options
|
46
|
+
# @macro search_options
|
47
|
+
# @param [String] type either "people", "companies", or "jobs"
|
4
48
|
def search(options={}, type='people')
|
49
|
+
options, type = prepare_options(options, type)
|
5
50
|
path = "/#{type.to_s}-search"
|
6
|
-
|
7
|
-
if options.is_a?(Hash)
|
8
|
-
fields = options.delete(:fields)
|
9
|
-
path += field_selector(fields) if fields
|
10
|
-
end
|
11
|
-
|
12
|
-
options = { :keywords => options } if options.is_a?(String)
|
13
|
-
options = format_options_for_query(options)
|
14
|
-
|
15
|
-
result_json = get(to_uri(path, options))
|
16
|
-
|
17
|
-
Mash.from_json(result_json)
|
51
|
+
get(path, options)
|
18
52
|
end
|
19
53
|
|
20
|
-
private
|
54
|
+
private ##############################################################
|
21
55
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
56
|
+
def prepare_options(options, type)
|
57
|
+
options ||= {}
|
58
|
+
if options.is_a? String or options.is_a? Array
|
59
|
+
kw = options
|
60
|
+
options = {keywords: kw}
|
28
61
|
end
|
29
62
|
|
30
|
-
|
31
|
-
|
32
|
-
value = value.gsub(" ", "+") if value.is_a?(String)
|
33
|
-
value
|
63
|
+
if not options[:type].nil?
|
64
|
+
type = options.delete(:type)
|
34
65
|
end
|
35
66
|
|
36
|
-
|
37
|
-
|
38
|
-
fields = fields.to_a.map do |field|
|
39
|
-
if field.is_a?(Hash)
|
40
|
-
innerFields = []
|
41
|
-
field.each do |key, value|
|
42
|
-
innerFields << key.to_s.gsub("_","-") + field_selector(value)
|
43
|
-
end
|
44
|
-
innerFields.join(',')
|
45
|
-
else
|
46
|
-
field.to_s.gsub("_","-")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
result += fields.join(',')
|
50
|
-
result += ")"
|
51
|
-
result
|
52
|
-
end
|
67
|
+
return [options, type]
|
68
|
+
end
|
53
69
|
end
|
54
|
-
|
55
70
|
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
module LinkedIn
|
2
|
+
# Share and Social Stream APIs
|
3
|
+
#
|
4
|
+
# @see http://developer.linkedin.com/documents/share-and-social-stream
|
5
|
+
# @see http://developer.linkedin.com/documents/share-api Share API
|
6
|
+
#
|
7
|
+
# The following API actions do not have corresponding methods in
|
8
|
+
# this module
|
9
|
+
#
|
10
|
+
# * GET Network Statistics
|
11
|
+
# * POST Post Network Update
|
12
|
+
#
|
13
|
+
# [(contribute here)](https://github.com/emorikawa/linkedin-oauth2)
|
14
|
+
class ShareAndSocialStream < APIResource
|
15
|
+
# Retrieve the authenticated users network updates
|
16
|
+
#
|
17
|
+
# Permissions: rw_nus
|
18
|
+
#
|
19
|
+
# @see http://developer.linkedin.com/documents/get-network-updates-and-statistics-api
|
20
|
+
# @see http://developer.linkedin.com/documents/network-update-types Network Update Types
|
21
|
+
#
|
22
|
+
# @macro profile_options
|
23
|
+
# @option options [String] :scope
|
24
|
+
# @option options [String] :type
|
25
|
+
# @option options [String] :count
|
26
|
+
# @option options [String] :start
|
27
|
+
# @option options [String] :after
|
28
|
+
# @option options [String] :before
|
29
|
+
# @option options [String] :show-hidden-members
|
30
|
+
# @return [LinkedIn::Mash]
|
31
|
+
def network_updates(options={})
|
32
|
+
path = "#{profile_path(options)}/network/updates"
|
33
|
+
get(path, options)
|
34
|
+
end
|
35
|
+
|
36
|
+
# TODO refactor to use #network_updates
|
37
|
+
def shares(options={})
|
38
|
+
path = "#{profile_path(options)}/network/updates"
|
39
|
+
get(path, {type: "SHAR", scope: "self"}.merge(options))
|
40
|
+
end
|
41
|
+
|
42
|
+
# Retrieve all comments for a particular network update
|
43
|
+
#
|
44
|
+
# @note The first 5 comments are included in the response to #network_updates
|
45
|
+
#
|
46
|
+
# Permissions: rw_nus
|
47
|
+
#
|
48
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
49
|
+
#
|
50
|
+
# @param [String] update_key a update/update-key representing a
|
51
|
+
# particular network update
|
52
|
+
# @macro profile_options
|
53
|
+
# @return [LinkedIn::Mash]
|
54
|
+
def share_comments(update_key, options={})
|
55
|
+
path = "#{profile_path(options)}/network/updates/key=#{update_key}/update-comments"
|
56
|
+
get(path, options)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Retrieve all likes for a particular network update
|
60
|
+
#
|
61
|
+
# @note Some likes are included in the response to #network_updates
|
62
|
+
#
|
63
|
+
# Permissions: rw_nus
|
64
|
+
#
|
65
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
66
|
+
#
|
67
|
+
# @param [String] update_key a update/update-key representing a
|
68
|
+
# particular network update
|
69
|
+
# @macro profile_options
|
70
|
+
# @return [LinkedIn::Mash]
|
71
|
+
def share_likes(update_key, options={})
|
72
|
+
path = "#{profile_path(options)}/network/updates/key=#{update_key}/likes"
|
73
|
+
get(path, options)
|
74
|
+
end
|
75
|
+
|
76
|
+
# Create a share for the authenticated user
|
77
|
+
#
|
78
|
+
# Permissions: rw_nus
|
79
|
+
#
|
80
|
+
# @see http://developer.linkedin.com/documents/share-api
|
81
|
+
#
|
82
|
+
# @macro share_input_fields
|
83
|
+
# @return [void]
|
84
|
+
def add_share(share)
|
85
|
+
path = "/people/~/shares"
|
86
|
+
defaults = {visibility: {code: "anyone"}}
|
87
|
+
post(path, defaults.merge(share))
|
88
|
+
end
|
89
|
+
|
90
|
+
# Create a comment on an update from the authenticated user
|
91
|
+
#
|
92
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
93
|
+
#
|
94
|
+
# @param [String] update_key a update/update-key representing a
|
95
|
+
# particular network update
|
96
|
+
# @param [String] comment The text of the comment
|
97
|
+
# @return [void]
|
98
|
+
def update_comment(update_key, comment)
|
99
|
+
path = "/people/~/network/updates/key=#{update_key}/update-comments"
|
100
|
+
post(path, {comment: comment})
|
101
|
+
end
|
102
|
+
|
103
|
+
# (Update) like an update as the authenticated user
|
104
|
+
#
|
105
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
106
|
+
#
|
107
|
+
# @param [String] update_key a update/update-key representing a
|
108
|
+
# particular network update
|
109
|
+
# @return [void]
|
110
|
+
def like_share(update_key)
|
111
|
+
path = "/people/~/network/updates/key=#{update_key}/is-liked"
|
112
|
+
put(path, "true")
|
113
|
+
end
|
114
|
+
|
115
|
+
# (Destroy) unlike an update the authenticated user previously
|
116
|
+
# liked
|
117
|
+
#
|
118
|
+
# @see http://developer.linkedin.com/documents/commenting-reading-comments-and-likes-network-updates
|
119
|
+
#
|
120
|
+
# @param [String] update_key a update/update-key representing a
|
121
|
+
# particular network update
|
122
|
+
# @return [void]
|
123
|
+
def unlike_share(update_key)
|
124
|
+
path = "/people/~/network/updates/key=#{update_key}/is-liked"
|
125
|
+
put(path, "false")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
data/lib/linked_in/version.rb
CHANGED
data/lib/linkedin-oauth2.rb
CHANGED
@@ -1,32 +1,50 @@
|
|
1
|
-
require
|
1
|
+
require "oauth2"
|
2
|
+
|
3
|
+
require "linked_in/errors"
|
4
|
+
require "linked_in/version"
|
5
|
+
require "linked_in/configuration"
|
6
|
+
|
7
|
+
# Responsible for all authentication
|
8
|
+
# LinkedIn::OAuth2 inherits from OAuth2::Client
|
9
|
+
require "linked_in/oauth2"
|
10
|
+
|
11
|
+
# Coerces LinkedIn JSON to a nice Ruby hash
|
12
|
+
# LinkedIn::Mash inherits from Hashie::Mash
|
13
|
+
require "hashie"
|
14
|
+
require "linked_in/mash"
|
15
|
+
|
16
|
+
# Wraps a LinkedIn-specifc API connection
|
17
|
+
# LinkedIn::Connection inherits from Faraday::Connection
|
18
|
+
require "faraday"
|
19
|
+
require "linked_in/connection"
|
20
|
+
|
21
|
+
# Data object to wrap API access token
|
22
|
+
require "linked_in/access_token"
|
23
|
+
|
24
|
+
# Endpoints inherit from APIResource
|
25
|
+
require "linked_in/api_resource"
|
26
|
+
|
27
|
+
# All of the endpoints
|
28
|
+
require "linked_in/jobs"
|
29
|
+
require "linked_in/people"
|
30
|
+
require "linked_in/search"
|
31
|
+
require "linked_in/groups"
|
32
|
+
require "linked_in/companies"
|
33
|
+
require "linked_in/communications"
|
34
|
+
require "linked_in/share_and_social_stream"
|
35
|
+
|
36
|
+
# The primary API object that makes requests.
|
37
|
+
# It composes in all of the endpoints
|
38
|
+
require "linked_in/api"
|
2
39
|
|
3
40
|
module LinkedIn
|
41
|
+
@config = Configuration.new
|
4
42
|
|
5
43
|
class << self
|
6
|
-
attr_accessor :
|
7
|
-
|
8
|
-
# config/initializers/linkedin.rb (for instance)
|
9
|
-
#
|
10
|
-
# LinkedIn.configure do |config|
|
11
|
-
# config.client_id = 'client_id'
|
12
|
-
# config.client_secret = 'client_secret'
|
13
|
-
# config.default_profile_fields = ['education', 'positions']
|
14
|
-
# end
|
15
|
-
#
|
16
|
-
# elsewhere
|
17
|
-
#
|
18
|
-
# client = LinkedIn::Client.new
|
19
|
-
def configure
|
20
|
-
yield self
|
21
|
-
true
|
22
|
-
end
|
44
|
+
attr_accessor :config
|
23
45
|
end
|
24
46
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
autoload :Errors, "linked_in/errors"
|
29
|
-
autoload :Helpers, "linked_in/helpers"
|
30
|
-
autoload :Search, "linked_in/search"
|
31
|
-
autoload :Version, "linked_in/version"
|
47
|
+
def self.configure
|
48
|
+
yield self.config
|
49
|
+
end
|
32
50
|
end
|