velocity_client_ruby 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e2516b551ac58ec8b4f71195364e2cdb7400dc8efb70a4835cc0b3081e2bfe8
4
- data.tar.gz: 95263628e3a1e4ae64d8a2f94e15df212c6c98917abbc89d66e4d288f25d22d8
3
+ metadata.gz: 5eec482e30a02e7f2ffb015d5fe6c192cf3f1fdcaaa4c3b6e7ceaf11994269dc
4
+ data.tar.gz: 8b141bb370fe3e3cdab469e59a75b269ef8cc2a4e15c66b8dccb87c74934c9e5
5
5
  SHA512:
6
- metadata.gz: 4c0e28a0e9ad13a549878cec86787cc562098a942fe9b406b0022ea59203eae70fba46f2e55d100743d2c4ffd38e8616b1dd0f7e766e7739cfff9aab7be16130
7
- data.tar.gz: fcffcc10ea15e93ac12d1f4e0318bb71e9562105d8eb3081a86afa6bd57243338769955a0ab29dd96b39b917ec5f267900910ab75fd4dd9566a2694178346f5b
6
+ metadata.gz: e6fdda65e7f609d69492e86aa2f304b30622645dc24768005def33e3fd02963b5ea3e31b0e17031e21205c729adc31a29e91dd3794982fcd90e9c84b305fb0ff
7
+ data.tar.gz: 30dd425047f3cfa9bc95b95e627e2d697ec31feabade6d6cf937b7c08be60bb321f5735b748be134754741be818f8947ead70ab21e1ce96497c28e1236759e5d
data/Gemfile.lock CHANGED
@@ -1,28 +1,35 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- velocity_client_ruby (0.1.1)
4
+ velocity_client_ruby (0.3.0)
5
5
  dotenv (~> 2.7)
6
6
  httparty (~> 0.18)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
+ addressable (2.8.0)
12
+ public_suffix (>= 2.0.2, < 5.0)
11
13
  coderay (1.1.3)
14
+ crack (0.4.5)
15
+ rexml
12
16
  diff-lcs (1.4.4)
13
17
  dotenv (2.7.6)
14
- httparty (0.18.1)
18
+ hashdiff (1.0.1)
19
+ httparty (0.20.0)
15
20
  mime-types (~> 3.0)
16
21
  multi_xml (>= 0.5.2)
17
22
  method_source (1.0.0)
18
23
  mime-types (3.3.1)
19
24
  mime-types-data (~> 3.2015)
20
- mime-types-data (3.2021.0704)
25
+ mime-types-data (3.2021.0901)
21
26
  multi_xml (0.6.0)
22
27
  pry (0.14.1)
23
28
  coderay (~> 1.1)
24
29
  method_source (~> 1.0)
30
+ public_suffix (4.0.6)
25
31
  rake (10.5.0)
32
+ rexml (3.2.5)
26
33
  rspec (3.10.0)
27
34
  rspec-core (~> 3.10.0)
28
35
  rspec-expectations (~> 3.10.0)
@@ -36,16 +43,23 @@ GEM
36
43
  diff-lcs (>= 1.2.0, < 2.0)
37
44
  rspec-support (~> 3.10.0)
38
45
  rspec-support (3.10.2)
46
+ vcr (6.0.0)
47
+ webmock (3.14.0)
48
+ addressable (>= 2.8.0)
49
+ crack (>= 0.3.2)
50
+ hashdiff (>= 0.4.0, < 2.0.0)
39
51
 
40
52
  PLATFORMS
41
53
  ruby
42
54
 
43
55
  DEPENDENCIES
44
- bundler (~> 1.17)
56
+ bundler (~> 2.2.3)
45
57
  pry (~> 0.14)
46
58
  rake (~> 10.0)
47
59
  rspec (~> 3.0)
60
+ vcr (~> 6.0)
48
61
  velocity_client_ruby!
62
+ webmock (~> 3.14)
49
63
 
50
64
  BUNDLED WITH
51
65
  2.2.3
data/README.md CHANGED
@@ -18,30 +18,40 @@ Or install it yourself as:
18
18
 
19
19
  $ gem install velocity_client_ruby
20
20
 
21
+ ## Configuration
22
+
23
+ In order to be able to Access Velocity API you need to have a token.
24
+ You can set it up all your environemnt variables using configure method:
25
+
26
+ ```ruby
27
+ Velocity.configure do |config|
28
+ config.api_token = "<TOKEN>"
29
+ end
30
+ ```
31
+
21
32
  ## Usage
22
33
 
23
34
  ```ruby
24
35
  require "velocity"
25
36
 
26
- contributors_list = CSV.parse(File.read('./examples/contributors-list.csv'), headers: true)
37
+ list = CSV.parse(File.read('./examples/contributors.csv'), headers: true)
27
38
 
28
- contributors_list.map do |contributor|
29
- velocity_contributor = Velocity::Contributor.find_by(name: contributor['name'])
39
+ list.map do |contributor_data|
40
+ contributor = Velocity::Contributor.find_by(name: contributor_data['name'])
30
41
 
31
- if velocity_contributor
32
- puts "Contributor #{velocity_contributor.id} found.\n#{velocity_contributor.inspect}"
42
+ if contributor
43
+ puts "Contributor #{contributor.id} found."
33
44
  else
34
- role = Velocity::Role.find_by(name: contributor['role_name'])
35
- raise 'Role not found' if role.nil?
45
+ role = Velocity::Role.find_by(name: contributor_data['role_name'])
36
46
 
37
47
  invite = Velocity::Invite.create(
38
- name: contributor['name'],
39
- email: contributor['email'],
40
- job_function: contributor['job_function'],
48
+ name: contributor_date['name'],
49
+ email: contributor_data['email'],
50
+ job_function: contributor_data['job_function'],
41
51
  role_ids: [role.id]
42
52
  )
43
53
 
44
- puts "Invite #{invite.id} sent.\n#{invite.inspect}"
54
+ puts "Invite #{invite.id} sent."
45
55
  end
46
56
  end
47
57
  ```
@@ -1,5 +1,5 @@
1
1
  name,email,job_function,role_name
2
- Vera Prot,vera@codeclimate.com,Software Engineer,Engineer
3
- Victor Antoniazzi,vantoniazzi@codeclimate.com,Software Engineer,Engineer
4
- Alex Oliveira,aoliveira@codeclimate.com,Software Engineer,Engineer
5
- Filipe Esperandio,filipe@codeclimate.com,Software Engineer,Engineer
2
+ Vera Prot,vera@fakemail.com,Software Engineer,Engineer
3
+ Victor Antoniazzi,victor@fakemail.com,Software Engineer,Engineer
4
+ Alex Oliveira,alex@fakemail.com,Software Engineer,Engineer
5
+ Filipe Esperandio,filipe@fakemail.com,Software Engineer,Engineer
@@ -8,6 +8,8 @@ module Velocity
8
8
  class InternalServerError < StandardError; end
9
9
  class BadRequestError < StandardError; end
10
10
 
11
+ PAGE_SIZE = 100
12
+
11
13
  include HTTParty
12
14
 
13
15
  base_uri "https://api.velocity.codeclimate.com/v1"
@@ -18,15 +20,20 @@ module Velocity
18
20
  @args = args
19
21
  end
20
22
 
21
- def options
22
- {
23
- headers: {
24
- "Authorization" => "Bearer #{Velocity.configuration.api_token}",
25
- "Content-Type" => "application/vnd.api+json",
26
- }
27
- }
23
+ def get(url)
24
+ parse_response(self.class.get(url, options.merge(query: build_query)))
25
+ end
26
+
27
+ def post(url, body)
28
+ parse_response(self.class.post("/invitations", options.merge(body)))
28
29
  end
29
30
 
31
+ def put(url, body)
32
+ parse_response(self.class.put(url, options.merge(body)))
33
+ end
34
+
35
+ private
36
+
30
37
  def parse_response(response)
31
38
  case response.code
32
39
  when 200..201
@@ -43,10 +50,28 @@ module Velocity
43
50
  end
44
51
  end
45
52
 
53
+ def options
54
+ {
55
+ headers: {
56
+ "Authorization" => "Bearer #{Velocity.configuration.api_token}",
57
+ "Content-Type" => "application/vnd.api+json",
58
+ }
59
+ }
60
+ end
61
+
46
62
  def build_query
47
63
  args.map do |key, value|
48
- "filter[#{key.to_s}][contains]=#{value}"
49
- end.join("&")
64
+ "filter[#{key.to_s}][#{operation(key)}]=#{value}"
65
+ end.join("&") + "&page[size]=100"
66
+ end
67
+
68
+ def operation(key)
69
+ case key.to_sym
70
+ when :id
71
+ "eq"
72
+ else
73
+ "contains"
74
+ end
50
75
  end
51
76
  end
52
77
  end
@@ -2,9 +2,11 @@ module Velocity
2
2
  module Api
3
3
  class Invite < Velocity::Api::Base
4
4
  def create
5
- parse_response(self.class.post("/invitations", options.merge(body)))
5
+ post("/invitations", body)
6
6
  end
7
7
 
8
+ private
9
+
8
10
  def body
9
11
  {
10
12
  body: {
@@ -2,7 +2,38 @@ module Velocity
2
2
  module Api
3
3
  class People < Velocity::Api::Base
4
4
  def fetch
5
- parse_response(self.class.get("/people", options.merge(query: build_query)))
5
+ get("/people")
6
+ end
7
+
8
+ def update
9
+ put("/people/#{args.fetch(:id)}", body)
10
+ end
11
+
12
+ private
13
+
14
+ def body
15
+ {
16
+ body: {
17
+ data: {
18
+ id: args.fetch(:id),
19
+ type: "people",
20
+ relationships: relationships
21
+ }
22
+ }.to_json
23
+ }
24
+ end
25
+
26
+ def relationships
27
+ {
28
+ teams: {
29
+ data: args.fetch(:team_ids).map do |team_id|
30
+ {
31
+ type: "teams",
32
+ id: team_id
33
+ }
34
+ end
35
+ }
36
+ }
6
37
  end
7
38
  end
8
39
  end
@@ -2,7 +2,7 @@ module Velocity
2
2
  module Api
3
3
  class Role < Velocity::Api::Base
4
4
  def fetch
5
- parse_response(self.class.get("/roles", options.merge(query: build_query)))
5
+ get("/roles")
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,9 @@
1
+ module Velocity
2
+ module Api
3
+ class Team < Velocity::Api::Base
4
+ def fetch
5
+ get("/teams")
6
+ end
7
+ end
8
+ end
9
+ end
data/lib/velocity/base.rb CHANGED
@@ -19,6 +19,12 @@ module Velocity
19
19
  new(data["attributes"].merge(id: data["id"]))
20
20
  end
21
21
 
22
+ def self.all
23
+ resource_class.new({}).fetch.map do |data|
24
+ new(data["attributes"].merge(id: data["id"]))
25
+ end
26
+ end
27
+
22
28
  def self.where(args)
23
29
  resource_class.new(args).fetch.map do |data|
24
30
  new(data["attributes"].merge(id: data["id"]))
@@ -32,5 +38,10 @@ module Velocity
32
38
  def self.find_by!(args)
33
39
  where(args).first or raise NotFoundError, "record not found with #{args.inspect}"
34
40
  end
41
+
42
+ def update(args)
43
+ data = self.class.resource_class.new(args.merge(id: self.id)).update
44
+ self.class.new(data["attributes"].merge(id: data["id"]))
45
+ end
35
46
  end
36
47
  end
@@ -0,0 +1,5 @@
1
+ module Velocity
2
+ class Team < Base
3
+ resource_class Velocity::Api::Team
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Velocity
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/velocity.rb CHANGED
@@ -4,10 +4,12 @@ require "velocity/api/base"
4
4
  require "velocity/api/role"
5
5
  require "velocity/api/people"
6
6
  require "velocity/api/invite"
7
+ require "velocity/api/team"
7
8
  require "velocity/base"
8
9
  require "velocity/role"
9
10
  require "velocity/contributor"
10
11
  require "velocity/invite"
12
+ require "velocity/team"
11
13
  require "dotenv/load"
12
14
 
13
15
  module Velocity
@@ -33,9 +33,11 @@ Gem::Specification.new do |spec|
33
33
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
34
  spec.require_paths = ["lib"]
35
35
 
36
- spec.add_development_dependency "bundler", "~> 1.17"
36
+ spec.add_development_dependency "bundler", "~> 2.2.3"
37
37
  spec.add_development_dependency "rake", "~> 10.0"
38
38
  spec.add_development_dependency "rspec", "~> 3.0"
39
+ spec.add_development_dependency "vcr", "~> 6.0"
40
+ spec.add_development_dependency "webmock", "~> 3.14"
39
41
  spec.add_development_dependency "pry", "~> 0.14"
40
42
 
41
43
  spec.add_dependency "httparty", "~> 0.18"
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: velocity_client_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Antoniazzi
8
8
  - Vera Protopopova
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2021-09-07 00:00:00.000000000 Z
12
+ date: 2022-01-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '1.17'
20
+ version: 2.2.3
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '1.17'
27
+ version: 2.2.3
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -53,6 +53,34 @@ dependencies:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '3.0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: vcr
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '6.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '6.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: webmock
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '3.14'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '3.14'
56
84
  - !ruby/object:Gem::Dependency
57
85
  name: pry
58
86
  requirement: !ruby/object:Gem::Requirement
@@ -122,10 +150,12 @@ files:
122
150
  - lib/velocity/api/invite.rb
123
151
  - lib/velocity/api/people.rb
124
152
  - lib/velocity/api/role.rb
153
+ - lib/velocity/api/team.rb
125
154
  - lib/velocity/base.rb
126
155
  - lib/velocity/contributor.rb
127
156
  - lib/velocity/invite.rb
128
157
  - lib/velocity/role.rb
158
+ - lib/velocity/team.rb
129
159
  - lib/velocity/version.rb
130
160
  - velocity_client_ruby.gemspec
131
161
  homepage: http://velocity.codeclimate.com
@@ -134,7 +164,7 @@ licenses:
134
164
  metadata:
135
165
  homepage_uri: http://velocity.codeclimate.com
136
166
  source_code_uri: https://github.com/codeclimate/velocity-client-ruby
137
- post_install_message:
167
+ post_install_message:
138
168
  rdoc_options: []
139
169
  require_paths:
140
170
  - lib
@@ -149,8 +179,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
179
  - !ruby/object:Gem::Version
150
180
  version: '0'
151
181
  requirements: []
152
- rubygems_version: 3.0.6
153
- signing_key:
182
+ rubygems_version: 3.0.8
183
+ signing_key:
154
184
  specification_version: 4
155
185
  summary: Ruby Gem to interact with Velocity Teams API
156
186
  test_files: []