linkedin_v2 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.reek.yml +12 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +1175 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +7 -0
  8. data/Gemfile +4 -0
  9. data/Gemfile.lock +135 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +38 -0
  12. data/Rakefile +6 -0
  13. data/bin/console +14 -0
  14. data/bin/setup +8 -0
  15. data/lib/linkedin_v2/api/medias.rb +15 -0
  16. data/lib/linkedin_v2/api/organizations.rb +41 -0
  17. data/lib/linkedin_v2/api/profiles.rb +32 -0
  18. data/lib/linkedin_v2/client.rb +18 -0
  19. data/lib/linkedin_v2/error.rb +16 -0
  20. data/lib/linkedin_v2/files/creator.rb +12 -0
  21. data/lib/linkedin_v2/files/destroyer.rb +12 -0
  22. data/lib/linkedin_v2/files/reader.rb +11 -0
  23. data/lib/linkedin_v2/helpers/attribute.rb +11 -0
  24. data/lib/linkedin_v2/helpers/handler.rb +25 -0
  25. data/lib/linkedin_v2/helpers/hash.rb +25 -0
  26. data/lib/linkedin_v2/helpers/url.rb +15 -0
  27. data/lib/linkedin_v2/templates/endpoints/company.erb +1 -0
  28. data/lib/linkedin_v2/templates/endpoints/logo.erb +1 -0
  29. data/lib/linkedin_v2/templates/endpoints/me.erb +1 -0
  30. data/lib/linkedin_v2/templates/endpoints/organizations.erb +1 -0
  31. data/lib/linkedin_v2/templates/endpoints/shares.erb +1 -0
  32. data/lib/linkedin_v2/templates/endpoints/ugc_post.erb +1 -0
  33. data/lib/linkedin_v2/templates/endpoints/upload_image.erb +1 -0
  34. data/lib/linkedin_v2/templates/payloads/base.rb +19 -0
  35. data/lib/linkedin_v2/templates/payloads/shares.rb +99 -0
  36. data/lib/linkedin_v2/templates/payloads/ugc_post.rb +76 -0
  37. data/lib/linkedin_v2/url/builder.rb +56 -0
  38. data/lib/linkedin_v2/url/response.rb +17 -0
  39. data/lib/linkedin_v2/version.rb +3 -0
  40. data/lib/linkedin_v2.rb +28 -0
  41. data/linkedin_v2.gemspec +48 -0
  42. metadata +250 -0
@@ -0,0 +1,76 @@
1
+ module LinkedinV2
2
+ module Templates
3
+ module Payloads
4
+ class UgcPost < Base
5
+ def initialize(**options)
6
+ super(options)
7
+ end
8
+
9
+ def to_json
10
+ payload.to_json
11
+ end
12
+
13
+ private
14
+
15
+ def payload
16
+ response = body
17
+ if Helpers::Attribute.present?(picture)
18
+ response = Helpers::Hash.deep_merge(response, picture_attribute)
19
+ end
20
+
21
+ response
22
+ end
23
+
24
+ def body
25
+ {
26
+ "author" => "urn:li:#{entity}:#{identifier}",
27
+ "lifecycleState" => "PUBLISHED",
28
+ "specificContent" => {
29
+ "com.linkedin.ugc.ShareContent" => {
30
+ "shareCommentary" => {
31
+ "text" => text
32
+ },
33
+ "shareMediaCategory" => "NONE",
34
+ }
35
+ },
36
+ "visibility" => {
37
+ "com.linkedin.ugc.MemberNetworkVisibility" => "PUBLIC"
38
+ }
39
+ }
40
+ end
41
+
42
+ def entity
43
+ options.fetch(:entity)
44
+ end
45
+
46
+ def identifier
47
+ options.fetch(:identifier)
48
+ end
49
+
50
+ def text
51
+ options.fetch(:text)
52
+ end
53
+
54
+ def picture
55
+ options.fetch(:picture, nil)
56
+ end
57
+
58
+ def picture_attribute
59
+ {
60
+ "specificContent" => {
61
+ "com.linkedin.ugc.ShareContent" => {
62
+ "shareMediaCategory" => "IMAGE",
63
+ "media" => [
64
+ {
65
+ "media": picture,
66
+ "status": "READY",
67
+ }
68
+ ],
69
+ }
70
+ },
71
+ }
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,56 @@
1
+ require_relative "response"
2
+
3
+ module LinkedinV2
4
+ module Url
5
+ class Builder
6
+ def self.call(key, **options)
7
+ new.(key, options)
8
+ end
9
+
10
+ # key -> Symbol object - Name of method to get endpoint Files::Reader.
11
+ # options -> Hash object - Each method needs a specific parameter
12
+ def call(key, **options)
13
+ path = options.empty? ? send(key) : send(key, Helpers::Url.escape(**options))
14
+
15
+ path.strip
16
+ rescue NoMethodError, ArgumentError => exception
17
+ raise InvalidEndpointError.new("endpoint not found", details: exception.message)
18
+ end
19
+
20
+ private
21
+
22
+ def shares
23
+ Response[__method__]
24
+ end
25
+
26
+ def ugc_post
27
+ Response[__method__]
28
+ end
29
+
30
+ # 'projection' - query to get specific attributes - optional
31
+ def organizations(projection: nil, start: nil, count: nil)
32
+ Response[__method__, { projection: projection, start: start, count: count }]
33
+ end
34
+
35
+ # 'identifier' - organization id - required
36
+ # 'projection' - query to get specific attributes - optional
37
+ def company(identifier:, projection: nil)
38
+ Response[__method__, { identifier: identifier, projection: projection }]
39
+ end
40
+
41
+ # 'identifier' - organization id - required
42
+ def logo(identifier:)
43
+ Response[__method__, { identifier: identifier }]
44
+ end
45
+
46
+ def upload_image
47
+ Response[__method__]
48
+ end
49
+
50
+ # 'projection' - query to get specific attributes - optional
51
+ def me(projection: nil)
52
+ Response[__method__, { projection: projection }]
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,17 @@
1
+ module LinkedinV2
2
+ module Url
3
+ module Response
4
+ TEMPLATE_PATH = "../templates/endpoints/".freeze
5
+
6
+ class << self
7
+ def [](name, **options)
8
+ path = TEMPLATE_PATH + "#{name}.erb"
9
+ file = Files::Reader.(path)
10
+ erb = ERB.new(file)
11
+
12
+ options.empty? ? erb.result : erb.result_with_hash(options)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module LinkedinV2
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,28 @@
1
+ require "down"
2
+ require "rest-client"
3
+
4
+ module LinkedinV2
5
+ API_URL ||= "https://api.linkedin.com/v2"
6
+ API_V1_URL ||= "https://api.linkedin.com"
7
+ end
8
+
9
+ require_relative "linkedin_v2/version"
10
+
11
+ require_relative "linkedin_v2/error"
12
+
13
+ require_relative "linkedin_v2/helpers/handler"
14
+ require_relative "linkedin_v2/helpers/url"
15
+ require_relative "linkedin_v2/helpers/attribute"
16
+ require_relative "linkedin_v2/helpers/hash"
17
+
18
+ require_relative "linkedin_v2/url/builder"
19
+
20
+ require_relative "linkedin_v2/templates/payloads/base"
21
+ require_relative "linkedin_v2/templates/payloads/shares"
22
+ require_relative "linkedin_v2/templates/payloads/ugc_post"
23
+
24
+ require_relative "linkedin_v2/files/reader"
25
+ require_relative "linkedin_v2/files/creator"
26
+ require_relative "linkedin_v2/files/destroyer"
27
+
28
+ require_relative "linkedin_v2/client"
@@ -0,0 +1,48 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "linkedin_v2/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "linkedin_v2"
8
+ spec.version = LinkedinV2::VERSION
9
+ spec.authors = [ "Lucas Teles" ]
10
+ spec.email = [ "lucasteles22@gmail.com" ]
11
+
12
+ spec.summary = %q{Ruby wrapper for the LinkedIn API V2}
13
+ spec.description = %q{This gem interfaces with the LinkedIn REST API V2}
14
+ spec.homepage = "https://rockcontent.com"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+
21
+ spec.metadata["homepage_uri"] = spec.homepage
22
+ else
23
+ raise "RubyGems 2.0 or newer is required to protect against " \
24
+ "public gem pushes."
25
+ end
26
+
27
+ # Specify which files should be added to the gem when it is released.
28
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
29
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
30
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
31
+ end
32
+ spec.bindir = "exe"
33
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
+ spec.require_paths = [ "lib" ]
35
+
36
+ spec.add_dependency "rest-client", "~> 2.0", ">= 2.0.2"
37
+ spec.add_dependency "down", "~> 4.8", ">= 4.8.1"
38
+
39
+ spec.add_development_dependency "bundler", "~> 2.0"
40
+ spec.add_development_dependency "rake", "~> 10.0"
41
+ spec.add_development_dependency "rspec", "~> 3.0"
42
+ spec.add_development_dependency "reek", "~> 5.4"
43
+ spec.add_development_dependency "rubocop", "~> 0.73.0"
44
+ spec.add_development_dependency "pry", "~> 0.12.2"
45
+ spec.add_development_dependency "webmock", "~> 3.6"
46
+ spec.add_development_dependency "vcr", "~> 5.0"
47
+ spec.add_development_dependency "coveralls", "~> 0.8.23"
48
+ end
metadata ADDED
@@ -0,0 +1,250 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: linkedin_v2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Lucas Teles
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-07-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: down
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '4.8'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 4.8.1
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '4.8'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 4.8.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: bundler
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.0'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '10.0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '10.0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '3.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: reek
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '5.4'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '5.4'
109
+ - !ruby/object:Gem::Dependency
110
+ name: rubocop
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: 0.73.0
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: 0.73.0
123
+ - !ruby/object:Gem::Dependency
124
+ name: pry
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: 0.12.2
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: 0.12.2
137
+ - !ruby/object:Gem::Dependency
138
+ name: webmock
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '3.6'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '3.6'
151
+ - !ruby/object:Gem::Dependency
152
+ name: vcr
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '5.0'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '5.0'
165
+ - !ruby/object:Gem::Dependency
166
+ name: coveralls
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: 0.8.23
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - "~>"
177
+ - !ruby/object:Gem::Version
178
+ version: 0.8.23
179
+ description: This gem interfaces with the LinkedIn REST API V2
180
+ email:
181
+ - lucasteles22@gmail.com
182
+ executables: []
183
+ extensions: []
184
+ extra_rdoc_files: []
185
+ files:
186
+ - ".gitignore"
187
+ - ".reek.yml"
188
+ - ".rspec"
189
+ - ".rubocop.yml"
190
+ - ".ruby-version"
191
+ - ".travis.yml"
192
+ - Gemfile
193
+ - Gemfile.lock
194
+ - LICENSE.txt
195
+ - README.md
196
+ - Rakefile
197
+ - bin/console
198
+ - bin/setup
199
+ - lib/linkedin_v2.rb
200
+ - lib/linkedin_v2/api/medias.rb
201
+ - lib/linkedin_v2/api/organizations.rb
202
+ - lib/linkedin_v2/api/profiles.rb
203
+ - lib/linkedin_v2/client.rb
204
+ - lib/linkedin_v2/error.rb
205
+ - lib/linkedin_v2/files/creator.rb
206
+ - lib/linkedin_v2/files/destroyer.rb
207
+ - lib/linkedin_v2/files/reader.rb
208
+ - lib/linkedin_v2/helpers/attribute.rb
209
+ - lib/linkedin_v2/helpers/handler.rb
210
+ - lib/linkedin_v2/helpers/hash.rb
211
+ - lib/linkedin_v2/helpers/url.rb
212
+ - lib/linkedin_v2/templates/endpoints/company.erb
213
+ - lib/linkedin_v2/templates/endpoints/logo.erb
214
+ - lib/linkedin_v2/templates/endpoints/me.erb
215
+ - lib/linkedin_v2/templates/endpoints/organizations.erb
216
+ - lib/linkedin_v2/templates/endpoints/shares.erb
217
+ - lib/linkedin_v2/templates/endpoints/ugc_post.erb
218
+ - lib/linkedin_v2/templates/endpoints/upload_image.erb
219
+ - lib/linkedin_v2/templates/payloads/base.rb
220
+ - lib/linkedin_v2/templates/payloads/shares.rb
221
+ - lib/linkedin_v2/templates/payloads/ugc_post.rb
222
+ - lib/linkedin_v2/url/builder.rb
223
+ - lib/linkedin_v2/url/response.rb
224
+ - lib/linkedin_v2/version.rb
225
+ - linkedin_v2.gemspec
226
+ homepage: https://rockcontent.com
227
+ licenses:
228
+ - MIT
229
+ metadata:
230
+ homepage_uri: https://rockcontent.com
231
+ post_install_message:
232
+ rdoc_options: []
233
+ require_paths:
234
+ - lib
235
+ required_ruby_version: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - ">="
238
+ - !ruby/object:Gem::Version
239
+ version: '0'
240
+ required_rubygems_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ requirements: []
246
+ rubygems_version: 3.0.3
247
+ signing_key:
248
+ specification_version: 4
249
+ summary: Ruby wrapper for the LinkedIn API V2
250
+ test_files: []