nexboard-api 0.1.1 → 0.3

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.
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