nexboard-api 0.1.1 → 0.3

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
- SHA1:
3
- metadata.gz: 6af8f77bde99c40d78a90726c7102c576a1a443a
4
- data.tar.gz: c29257410b533fca2dd9b3914193e62bd38e5c4b
2
+ SHA256:
3
+ metadata.gz: 27ffd8587d8b3de5b0662d005ed7c13ad373fabb395ad00505b23b0572363782
4
+ data.tar.gz: 1bbf7e8db7a511f146b49b570e85c36adc8dec14900879041d56100b5cd3d386
5
5
  SHA512:
6
- metadata.gz: 7843716a53bc009231487bda8c7df7e224d50a26fc481a56f8d7e55515cf23a33fc96cc159c2bfcb81238ada59a81a8701dd36c372ade72ba1440f0a9e8ec6f4
7
- data.tar.gz: a2eb3768cd796e19d80663131158225ff2baa0dd1e708966f17edf80cde287362bfbe98532323744ca3f0298df5281075075ff693e40629f427af87bc757e498
6
+ metadata.gz: 5d97678d15db58085fce73c7d7c7a314e736622a6dc9d458835e24ec25fa90b84a679b6d390cab7a13454ac4fca7f0782a8ae24683b2c67c243b7a6cc858fe7b
7
+ data.tar.gz: 94ada08cecb3879d28bac06bea53c789730b5ea8262da6d4ab2e4ebc5e1bbed71b7a8f1424e7d7aef0a918717dab5847a8a7dc08abd9ec14118f4cd0c09769e1
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'restify'
4
+
1
5
  class NexboardApi
2
- DEFAULT_BASE_URL = 'https://nexboard.nexenio.com/portal/api/public/'.freeze
6
+ DEFAULT_BASE_URL = 'https://nexboard.nexenio.com/portal/api/v1/public/'
3
7
 
4
8
  attr_reader :api_key, :user_id, :template_project_id, :base_url
5
9
 
@@ -11,52 +15,96 @@ class NexboardApi
11
15
  DEFAULT_BASE_URL
12
16
  else
13
17
  base_url
14
- end
18
+ end
15
19
  end
16
-
17
- def get_project_ids
18
- projects = Restify.new(@base_url + 'projects')
19
- .get(userId: @user_id, token: @api_key)
20
- .value!
21
20
 
22
- projects.data.map{|project| project['project_id']}
21
+ def project_ids
22
+ projects = Restify.new(URI.join(base_url, 'projects'))
23
+ .get(userId: user_id, token: api_key)
24
+ .value!
25
+ projects.data.map(&:id)
23
26
  end
24
27
 
25
- def create_project(title:, description:)
28
+ def create_project(title:, description: nil)
26
29
  data = {
27
- title: title,
28
- description: description,
29
- user_id: @user_id
30
+ title: title,
31
+ userId: user_id,
30
32
  }
33
+ data[:description] = description if description
31
34
 
32
- Restify.new(@base_url + 'projects')
33
- .post(data, token: @api_key)
34
- .value!
35
+ Restify.new(URI.join(base_url, 'projects'))
36
+ .post(data, token: api_key)
37
+ .value!
35
38
  end
36
39
 
37
- def get_boards_for_project(project_id:)
38
- Restify.new(@base_url + "projects/#{project_id}/boards")
39
- .get(token: @api_key, userId: @user_id)
40
- .value!
40
+ def boards_for_project(project_id:)
41
+ Restify.new(URI.join(base_url, "projects/#{project_id}/boards"))
42
+ .get(token: api_key, userId: user_id)
43
+ .value!
41
44
  end
42
45
 
43
- def get_template_boards
44
- return [] if @template_project_id.nil?
45
- template_boards = get_boards_for_project(project_id: @template_project_id)
46
- template_boards.data.map{ |board| {board_id: board['boardId'], title: board['title'] } }
46
+ def template_boards
47
+ return [] if template_project_id.nil?
48
+
49
+ template_boards = boards_for_project(project_id: template_project_id)
50
+ template_boards
51
+ .data
52
+ .map {|board| {board_id: board['id'], title: board['title']} }
47
53
  end
48
54
 
49
- def create_board_for_project(project_id:, title:, description:, template_id: nil)
55
+ def create_board(project_id:, title:, description: nil, template_id: nil)
50
56
  data = {
51
- project_id: project_id,
52
- title: title,
53
- description: description,
54
- user_id: @user_id
57
+ projectId: project_id,
58
+ userId: user_id,
59
+ title: title,
55
60
  }
56
- data.merge!(template_id: template_id) unless template_id.nil?
61
+ data[:description] = description if description
62
+ data[:template_id] = template_id unless template_id.nil?
63
+
64
+ Restify.new(URI.join(base_url, 'boards'))
65
+ .post(data, token: api_key)
66
+ .value!
67
+ end
68
+
69
+ def upload_image_to_board(board_id:, uploaded_io:)
70
+ uri = URI.join(
71
+ base_url,
72
+ "boards/images/#{board_id}",
73
+ "?token=#{api_key}",
74
+ )
75
+
76
+ multipart_request uri, uploaded_io
77
+ end
78
+
79
+ private
80
+
81
+ BOUNDARY = 'NexboardApiP3K'
82
+
83
+ def multipart_request(uri, uploaded_io)
84
+ uploaded_io.rewind
85
+
86
+ http = Net::HTTP.new uri.host, uri.port
87
+ request = Net::HTTP::Post.new uri.request_uri
88
+ request.body = post_body
89
+ request['Content-Type'] = "multipart/form-data, boundary=#{BOUNDARY}"
90
+
91
+ response = http.request(request)
92
+ response.is_a? Net::HTTPSuccess
93
+ end
94
+
95
+ def post_body(uploaded_io)
96
+ post_body = []
97
+ post_body << "--#{BOUNDARY}\r\n"
98
+ post_body << 'Content-Disposition: form-data; name="datafile"; '
99
+ post_body << "filename=\"#{to_ascii(uploaded_io.original_filename)}\"\r\n"
100
+ post_body << "Content-Type: text/plain\r\n"
101
+ post_body << "\r\n"
102
+ post_body << uploaded_io.tempfile.read
103
+ post_body << "\r\n--#{BOUNDARY}--\r\n"
104
+ post_body.join
105
+ end
57
106
 
58
- Restify.new(@base_url + 'boards')
59
- .post(data, token: @api_key)
60
- .value!
107
+ def to_ascii(str)
108
+ str.encode('ascii', invalid: :replace, undef: :replace, replace: '?')
61
109
  end
62
- end
110
+ end
@@ -1,18 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gem::Specification.new do |spec|
2
4
  spec.name = 'nexboard-api'
3
- spec.version = '0.1.1'
5
+ spec.version = '0.3'
4
6
  spec.authors = ['Xikolo Development Team']
5
- spec.email = %w(xikolo-dev@hpi.uni-potsdam.de)
6
- spec.description = %q{Ruby wrapper for Nexboard API (https://nexboard.nexenio.com)}
7
- spec.summary = %q{Ruby wrapper for Nexboard API (https://nexboard.nexenio.com)}
7
+ spec.email = %w[xikolo-dev@hpi.uni-potsdam.de]
8
+ spec.description = 'Ruby wrapper for Nexboard API (https://nexboard.nexenio.com)'
9
+ spec.summary = 'Ruby wrapper for Nexboard API (https://nexboard.nexenio.com)'
8
10
  spec.homepage = 'https://github.com/openHPI/nexboard-api'
9
11
  spec.license = ''
10
12
 
11
- spec.files = Dir['**/*'].grep(/((bin|lib|test|spec|features)\/|
12
- .*\.gemspec|.*LICENSE.*|.*README.*|.*CHANGELOG.*)/x)
13
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
13
+ spec.files = Dir['**/*'].grep(%r{((bin|lib|test|spec|features)/|
14
+ .*\.gemspec|.*LICENSE.*|.*README.*|.*CHANGELOG.*)}x)
15
+ spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
14
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
- spec.require_paths = %w(lib)
17
+ spec.require_paths = %w[lib]
16
18
 
17
19
  spec.add_dependency 'restify'
18
20
 
@@ -1,130 +1,203 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe NexboardApi do
6
+ subject(:api) { described_class.new(**params) }
7
+
4
8
  let(:api_key) { 'RandomApiKey' }
5
9
  let(:user_id) { 1337 }
6
- let(:params) { {api_key: api_key, user_id: user_id} }
7
-
8
- let(:api) { NexboardApi.new **params }
9
-
10
- let(:default_base_url) { 'https://nexboard.nexenio.com/portal/api/public/' }
11
- let(:default_headers) { {'Content-Type' => 'application/json'} }
10
+ let(:params) { {api_key: api_key, user_id: user_id} }
11
+ let(:default_base_url) { 'https://nexboard.nexenio.com/portal/api/v1/public/' }
12
+ let(:default_headers) { {'Content-Type' => 'application/json'} }
12
13
 
13
14
  describe '#initialize' do
14
- subject { NexboardApi.new **params }
15
-
16
- it 'should be initialized with correct params' do
17
- expect(subject.api_key).to eq(api_key)
18
- expect(subject.user_id).to eq(user_id)
19
- expect(subject.base_url).to eq(default_base_url)
15
+ it 'is initialized with correct params' do
16
+ expect(api.api_key).to eq(api_key)
17
+ expect(api.user_id).to eq(user_id)
18
+ expect(api.base_url).to eq(default_base_url)
20
19
  end
21
20
 
22
21
  context 'with custom base_url' do
23
22
  let(:params) { super().merge(base_url: 'https://p3k.com') }
24
23
 
25
- it 'should be initialized with custom base_url' do
26
- expect(subject.base_url).to eq('https://p3k.com')
27
- end
28
- end
24
+ it 'is initialized with custom base_url' do
25
+ expect(api.base_url).to eq('https://p3k.com')
26
+ end
27
+ end
29
28
 
30
29
  context 'with template_project_id' do
31
30
  let(:params) { super().merge(template_project_id: 666) }
32
31
 
33
- it 'should be initialized with template_project_id' do
34
- expect(subject.template_project_id).to eq(666)
35
- end
36
- end
32
+ it 'is initialized with template_project_id' do
33
+ expect(api.template_project_id).to eq(666)
34
+ end
35
+ end
37
36
  end
38
37
 
39
- describe '#get_project_ids' do
40
- subject { api.get_project_ids }
38
+ describe '#project_ids' do
39
+ subject(:project_ids) { api.project_ids }
41
40
 
42
41
  let!(:projects_stub) do
43
- stub_request(:get, "#{default_base_url}projects?token=#{api_key}&userId=#{user_id}").
44
- with(headers: default_headers).
45
- to_return(status: 200, body: "[{\"project_id\": 1}, {\"project_id\": 3000}]", headers: default_headers)
46
- end
42
+ stub_request(:get, "#{default_base_url}projects?token=#{api_key}&userId=#{user_id}")
43
+ .with(headers: default_headers)
44
+ .to_return(status: 200, body: '[{"id": 1}, {"id": 3000}]', headers: default_headers)
45
+ end
47
46
 
48
- it 'should request Nexboard API' do
49
- subject
47
+ it 'requests Nexboard API' do
48
+ project_ids
50
49
  expect(projects_stub).to have_been_requested
51
- end
50
+ end
52
51
 
53
- it 'should return a list of project ids' do
54
- expect(subject).to eq([1, 3000])
55
- end
52
+ it 'returns a list of project ids' do
53
+ expect(project_ids).to eq([1, 3000])
54
+ end
56
55
  end
57
56
 
58
57
  describe '#create_project' do
58
+ subject(:create_project) { api.create_project(**create_params) }
59
+
59
60
  let(:create_params) { {title: 'My project', description: 'My description'} }
60
61
 
61
- subject { api.create_project **create_params }
62
+ let(:create_body) do
63
+ {
64
+ userId: user_id,
65
+ title: 'My project',
66
+ description: 'My description',
67
+ }
68
+ end
62
69
 
63
70
  let!(:create_project_stub) do
64
- stub_request(:post, "#{default_base_url}projects?token=#{api_key}").
65
- with(headers: default_headers, body: create_params.merge(user_id: user_id)).
66
- to_return(status: 200, body: "{}", headers: default_headers)
71
+ stub_request(:post, "#{default_base_url}projects?token=#{api_key}")
72
+ .with(
73
+ headers: default_headers,
74
+ body: create_body,
75
+ )
76
+ .to_return(status: 200, body: '{}', headers: default_headers)
67
77
  end
68
78
 
69
- it 'should request Nexboard API' do
70
- subject
79
+ it 'requests Nexboard API' do
80
+ create_project
71
81
  expect(create_project_stub).to have_been_requested
72
- end
82
+ end
83
+
84
+ context 'without description' do
85
+ let(:create_params) { {title: 'My project'} }
86
+
87
+ let(:create_body) do
88
+ {
89
+ userId: user_id,
90
+ title: 'My project',
91
+ }
92
+ end
93
+
94
+ it 'requests Nexboard API' do
95
+ create_project
96
+ expect(create_project_stub).to have_been_requested
97
+ end
98
+ end
73
99
  end
74
100
 
75
- describe '#get_boards_for_project' do
76
- let(:project_id) { 123 }
101
+ describe '#boards_for_project' do
102
+ subject(:boards) { api.boards_for_project project_id: project_id }
77
103
 
78
- subject { api.get_boards_for_project project_id: project_id }
104
+ let(:project_id) { 123 }
79
105
 
80
106
  let(:board) do
81
107
  {
82
- boardId: 1,
83
- project_id: project_id,
108
+ id: 1,
109
+ projectId: project_id,
84
110
  title: 'My board',
85
- description: 'My description'
111
+ description: 'My description',
86
112
  }
87
- end
113
+ end
88
114
 
89
115
  let!(:boards_stub) do
90
- stub_request(:get, "#{default_base_url}projects/#{project_id}/boards?token=#{api_key}&userId=#{user_id}").
91
- with(headers: default_headers).
92
- to_return(status: 200, body: "[#{board.to_json}]", headers: default_headers)
116
+ stub_request(:get, "#{default_base_url}projects/#{project_id}/boards?token=#{api_key}&userId=#{user_id}")
117
+ .with(headers: default_headers)
118
+ .to_return(status: 200, body: "[#{board.to_json}]", headers: default_headers)
93
119
  end
94
120
 
95
- it 'should request Nexboard API' do
96
- subject
121
+ it 'requests Nexboard API' do
122
+ boards
97
123
  expect(boards_stub).to have_been_requested
98
124
  end
99
125
 
100
- it 'should return a list of board resources' do
101
- expect(subject.data.to_json).to eq([board].to_json)
102
- end
126
+ it 'returns a list of board resources' do
127
+ expect(boards.data.to_json).to eq([board].to_json)
128
+ end
129
+
130
+ context 'without description' do
131
+ let(:board) do
132
+ {
133
+ id: 1,
134
+ projectId: project_id,
135
+ title: 'My board',
136
+ }
137
+ end
138
+
139
+ it 'requests Nexboard API' do
140
+ boards
141
+ expect(boards_stub).to have_been_requested
142
+ end
143
+ end
103
144
  end
104
145
 
105
- describe '#create_board_for_project' do
106
- let(:create_params) { {project_id: 123, title: 'My title', description: 'My description'} }
146
+ describe '#create_board' do
147
+ subject(:create_board) { api.create_board(**create_params) }
107
148
 
108
- subject { api.create_board_for_project **create_params }
149
+ let(:create_params) do
150
+ {
151
+ project_id: 123,
152
+ title: 'My title',
153
+ description: 'My description',
154
+ }
155
+ end
156
+
157
+ let(:create_body) do
158
+ {
159
+ projectId: 123,
160
+ title: 'My title',
161
+ description: 'My description',
162
+ userId: user_id,
163
+ }
164
+ end
109
165
 
110
166
  let(:create_board_stub) do
111
- stub_request(:post, "#{default_base_url}boards?token=#{api_key}").
112
- with(headers: default_headers, body: create_params.merge(user_id: user_id)).
113
- to_return(status: 200, body: "{}", headers: default_headers)
167
+ stub_request(:post, "#{default_base_url}boards?token=#{api_key}")
168
+ .with(headers: default_headers, body: create_body)
169
+ .to_return(status: 200, body: '{}', headers: default_headers)
114
170
  end
115
171
 
116
- before { create_board_stub; subject }
172
+ before { create_board_stub; create_board }
117
173
 
118
- it 'should request Nexboard API' do
174
+ it 'requests Nexboard API' do
119
175
  expect(create_board_stub).to have_been_requested
120
- end
176
+ end
121
177
 
122
178
  context 'with template_id' do
123
- let(:create_params) { super().merge(template_id: 1234) }
124
-
125
- it 'should request Nexboard API' do
179
+ let(:create_params) do
180
+ {
181
+ project_id: 123,
182
+ title: 'My title',
183
+ description: 'My description',
184
+ template_id: 1234,
185
+ }
186
+ end
187
+
188
+ let(:create_body) do
189
+ {
190
+ projectId: 123,
191
+ title: 'My title',
192
+ description: 'My description',
193
+ userId: user_id,
194
+ template_id: 1234,
195
+ }
196
+ end
197
+
198
+ it 'requests Nexboard API' do
126
199
  expect(create_board_stub).to have_been_requested
127
- end
128
- end
200
+ end
201
+ end
129
202
  end
130
203
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pact/consumer/rspec'
4
+ require 'restify'
5
+ require 'nexboard_api'
6
+
7
+ Pact.service_consumer 'OpenHPI' do
8
+ has_pact_with 'nexboard' do
9
+ mock_service :nexboard do
10
+ port 1234
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,107 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pact_helper'
4
+
5
+ describe NexboardApi, pact: true do
6
+ let(:api_key) { 'RandomApiKey' }
7
+ let(:user_id) { '1337' }
8
+ let(:base_url) { 'http://localhost:1234/' }
9
+ let(:params) { {api_key: api_key, user_id: user_id, base_url: base_url} }
10
+ let(:encoded_credentials) { CGI.escape("token=#{api_key}&userId=#{user_id}") }
11
+ let(:encoded_token) { CGI.escape("token=#{api_key}") }
12
+ let(:client) { described_class.new(**params) }
13
+
14
+ describe 'get_project_ids' do
15
+ let(:response) { [{project_id: '1'}, {project_id: '2'}] }
16
+
17
+ before do
18
+ nexboard.given('user has valid credentials and some projects exist')
19
+ .upon_receiving('a request to get all projects')
20
+ .with(method: :get, path: '/projects', query: encoded_credentials)
21
+ .will_respond_with(
22
+ status: 200,
23
+ headers: {'Content-Type' => 'application/json'},
24
+ body: response,
25
+ )
26
+ end
27
+
28
+ it 'returns the project ids' do
29
+ project_ids = client.get_project_ids
30
+ expect(project_ids).to eq(%w[1 2])
31
+ end
32
+ end
33
+
34
+ describe 'create_project' do
35
+ let(:title) { 'A new project' }
36
+ let(:description) { 'This is a new project' }
37
+ let(:project_id) { '1' }
38
+ let(:response) { {project_id: project_id, title: title} }
39
+ let(:project_data) { {title: title, description: description} }
40
+ let(:post_body) { {title: title, description: description, user_id: user_id} }
41
+
42
+ before do
43
+ nexboard.given('user has valid credentials')
44
+ .upon_receiving('a request to create a project')
45
+ .with(method: :post, path: '/projects', query: encoded_token, body: post_body)
46
+ .will_respond_with(
47
+ status: 200,
48
+ headers: {'Content-Type' => 'application/json'},
49
+ body: response,
50
+ )
51
+ end
52
+
53
+ it 'returns a new project' do
54
+ project = client.create_project(project_data)
55
+ expect(project.project_id).to eq(project_id)
56
+ end
57
+ end
58
+
59
+ describe 'get_boards_for_project' do
60
+ let(:title) { 'A board' }
61
+ let(:project_id) { '1' }
62
+ let(:board_id) { '101' }
63
+ let(:response) { [{boardId: board_id, title: title}] }
64
+
65
+ before do
66
+ nexboard.given('user has valid credentials and an existing project with boards')
67
+ .upon_receiving('a request to get boards of a project')
68
+ .with(method: :get, path: "/projects/#{project_id}/boards", query: encoded_credentials)
69
+ .will_respond_with(
70
+ status: 200,
71
+ headers: {'Content-Type' => 'application/json'},
72
+ body: response,
73
+ )
74
+ end
75
+
76
+ it 'returns a new project' do
77
+ boards = client.get_boards_for_project(project_id: project_id)
78
+ expect(boards.first.boardId).to eq(board_id)
79
+ end
80
+ end
81
+
82
+ describe 'create_board_for_project' do
83
+ let(:title) { 'A new project' }
84
+ let(:description) { 'This is a new project' }
85
+ let(:project_id) { '1' }
86
+ let(:board_id) { '101' }
87
+ let(:response) { {board_id: board_id, project_id: project_id, title: title} }
88
+ let(:board_data) { {title: title, description: description, project_id: project_id} }
89
+ let(:post_body) { {title: title, description: description, project_id: project_id, user_id: user_id} }
90
+
91
+ before do
92
+ nexboard.given('user has valid credentials and an existing project')
93
+ .upon_receiving('a request to create a project')
94
+ .with(method: :post, path: '/boards', query: encoded_token, body: post_body)
95
+ .will_respond_with(
96
+ status: 200,
97
+ headers: {'Content-Type' => 'application/json'},
98
+ body: response,
99
+ )
100
+ end
101
+
102
+ it 'returns a new project' do
103
+ board = client.create_board_for_project(board_data)
104
+ expect(board.board_id).to eq(board_id)
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,109 @@
1
+ {
2
+ "consumer": {
3
+ "name": "OpenHPI"
4
+ },
5
+ "provider": {
6
+ "name": "nexboard"
7
+ },
8
+ "interactions": [
9
+ {
10
+ "description": "a request to get all projects",
11
+ "providerState": "user has valid credentials and some projects exist",
12
+ "request": {
13
+ "method": "get",
14
+ "path": "/projects",
15
+ "query": "token=RandomApiKey&userId=1337"
16
+ },
17
+ "response": {
18
+ "status": 200,
19
+ "headers": {
20
+ "Content-Type": "application/json"
21
+ },
22
+ "body": [
23
+ {
24
+ "project_id": "1"
25
+ },
26
+ {
27
+ "project_id": "2"
28
+ }
29
+ ]
30
+ }
31
+ },
32
+ {
33
+ "description": "a request to create a project",
34
+ "providerState": "user has valid credentials",
35
+ "request": {
36
+ "method": "post",
37
+ "path": "/projects",
38
+ "query": "token=RandomApiKey",
39
+ "body": {
40
+ "title": "A new project",
41
+ "description": "This is a new project",
42
+ "user_id": "1337"
43
+ }
44
+ },
45
+ "response": {
46
+ "status": 200,
47
+ "headers": {
48
+ "Content-Type": "application/json"
49
+ },
50
+ "body": {
51
+ "project_id": "1",
52
+ "title": "A new project"
53
+ }
54
+ }
55
+ },
56
+ {
57
+ "description": "a request to get boards of a project",
58
+ "providerState": "user has valid credentials and an existing project with boards",
59
+ "request": {
60
+ "method": "get",
61
+ "path": "/projects/1/boards",
62
+ "query": "token=RandomApiKey&userId=1337"
63
+ },
64
+ "response": {
65
+ "status": 200,
66
+ "headers": {
67
+ "Content-Type": "application/json"
68
+ },
69
+ "body": [
70
+ {
71
+ "boardId": "101",
72
+ "title": "A board"
73
+ }
74
+ ]
75
+ }
76
+ },
77
+ {
78
+ "description": "a request to create a project",
79
+ "providerState": "user has valid credentials and an existing project",
80
+ "request": {
81
+ "method": "post",
82
+ "path": "/boards",
83
+ "query": "token=RandomApiKey",
84
+ "body": {
85
+ "title": "A new project",
86
+ "description": "This is a new project",
87
+ "project_id": "1",
88
+ "user_id": "1337"
89
+ }
90
+ },
91
+ "response": {
92
+ "status": 200,
93
+ "headers": {
94
+ "Content-Type": "application/json"
95
+ },
96
+ "body": {
97
+ "board_id": "101",
98
+ "project_id": "1",
99
+ "title": "A new project"
100
+ }
101
+ }
102
+ }
103
+ ],
104
+ "metadata": {
105
+ "pactSpecification": {
106
+ "version": "2.0.0"
107
+ }
108
+ }
109
+ }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is copied to spec/ when you run 'rails generate rspec:install'
2
4
  require 'simplecov'
3
5
  SimpleCov.start do
@@ -14,7 +16,7 @@ require 'restify'
14
16
 
15
17
  # Requires supporting ruby files with custom matchers and macros, etc,
16
18
  # in spec/support/ and its subdirectories.
17
- Dir['spec/support/**/*.rb'].each {|f| require f}
19
+ Dir['spec/support/**/*.rb'].each {|f| require f }
18
20
 
19
21
  RSpec.configure do |config|
20
22
  # ## Mock Framework
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexboard-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xikolo Development Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-04 00:00:00.000000000 Z
11
+ date: 2019-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: restify
@@ -49,6 +49,9 @@ files:
49
49
  - lib/nexboard_api.rb
50
50
  - nexboard-api.gemspec
51
51
  - spec/lib/nexboard_api_spec.rb
52
+ - spec/pact_helper.rb
53
+ - spec/pacts/nexboard_api_pact_spec.rb
54
+ - spec/pacts/openhpi-nexboard.json
52
55
  - spec/spec_helper.rb
53
56
  homepage: https://github.com/openHPI/nexboard-api
54
57
  licenses:
@@ -69,11 +72,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
72
  - !ruby/object:Gem::Version
70
73
  version: '0'
71
74
  requirements: []
72
- rubyforge_project:
73
- rubygems_version: 2.5.1
75
+ rubygems_version: 3.0.3
74
76
  signing_key:
75
77
  specification_version: 4
76
78
  summary: Ruby wrapper for Nexboard API (https://nexboard.nexenio.com)
77
79
  test_files:
78
80
  - spec/lib/nexboard_api_spec.rb
81
+ - spec/pact_helper.rb
82
+ - spec/pacts/nexboard_api_pact_spec.rb
83
+ - spec/pacts/openhpi-nexboard.json
79
84
  - spec/spec_helper.rb