linkedin_v2 1.0.0

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 (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: []