Skip to content

Commit 1748f6a

Browse files
committed
AC-11246 Add Put endpoint for chart and dataset
1 parent b76adfb commit 1748f6a

File tree

6 files changed

+113
-65
lines changed

6 files changed

+113
-65
lines changed

lib/superset/base_put_request.rb

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
3+
module Superset
4+
class BasePutRequest < Superset::Request
5+
attr_reader :object_id, :params
6+
7+
def initialize(object_id: ,params: )
8+
@object_id = object_id
9+
@params = params
10+
end
11+
12+
def perform
13+
validate
14+
response
15+
end
16+
17+
def response
18+
@response ||= client.put(route, params)
19+
end
20+
21+
private
22+
23+
def validate
24+
raise "Error: object_id integer is required" unless object_id.present? && object_id.is_a?(Integer)
25+
raise "Error: params hash is required" unless params.present? && params.is_a?(Hash)
26+
end
27+
28+
def route
29+
raise "Error: route method is required"
30+
end
31+
end
32+
end

lib/superset/chart/put.rb

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,16 @@
22
#
33
# Usage:
44
# params = { owners: [ 58, 3 ] }
5-
# Superset::Chart::Put.new(chart_id: 3998, params: params ).perform
5+
# Superset::Chart::Put.new(object_id: 202, params: params ).perform
66

77
module Superset
88
module Chart
9-
class Put < Superset::Request
10-
11-
attr_reader :chart_id, :params
12-
13-
def initialize(chart_id: , params:)
14-
@chart_id = chart_id
15-
@params = params
16-
end
17-
18-
def perform
19-
validate_proposed_changes
20-
response
21-
end
22-
23-
def response
24-
@response ||= client.put(route, params)
25-
end
9+
class Put < Superset::BasePutRequest
2610

2711
private
2812

29-
def validate_proposed_changes
30-
raise "Error: chart_id integer is required" unless chart_id.present? && chart_id.is_a?(Integer)
31-
raise "Error: params hash is required" unless params.present? && params.is_a?(Hash)
32-
end
33-
3413
def route
35-
"chart/#{chart_id}"
14+
"chart/#{object_id}"
3615
end
3716
end
3817
end

lib/superset/dataset/put.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Updates a dataset in Superset with the given params
2+
#
3+
# Usage:
4+
# params = { owners: [ 58, 3 ] }
5+
# Superset::Dataset::Put.new(object_id: 101, params: params ).perform
6+
7+
module Superset
8+
module Dataset
9+
class Put < Superset::BasePutRequest
10+
11+
private
12+
13+
def route
14+
"dataset/#{object_id}"
15+
end
16+
end
17+
end
18+
end
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
require 'spec_helper'
2+
3+
RSpec.shared_examples :base_put_request_shared_examples do
4+
describe "#perform" do
5+
subject { described_class.new(
6+
object_id: object_id,
7+
params: params) }
8+
9+
let(:object_id) { 226 }
10+
let(:params) { { owners: [ 1, 2, 3 ] } }
11+
let(:response) do
12+
{
13+
id: object_id,
14+
result: { owners: [1, 2, 3] }
15+
}
16+
end
17+
18+
before do
19+
allow(subject).to receive(:response).and_return(response)
20+
end
21+
22+
describe '#perform' do
23+
context 'with valid params' do
24+
specify do
25+
expect(subject.perform).to eq response
26+
end
27+
end
28+
29+
context 'with invalid params' do
30+
context 'object_id is empty' do
31+
let(:object_id) { nil }
32+
33+
specify do
34+
expect { subject.perform }.to raise_error(RuntimeError, "Error: object_id integer is required")
35+
end
36+
end
37+
38+
context 'params is empty' do
39+
let(:params) { nil }
40+
41+
specify do
42+
expect { subject.perform }.to raise_error(RuntimeError, "Error: params hash is required")
43+
end
44+
end
45+
end
46+
end
47+
end
48+
end

spec/superset/chart/put_spec.rb

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,8 @@
11
require 'spec_helper'
2+
require 'shared/base_put_request_shared_examples'
23

34
RSpec.describe Superset::Chart::Put do
4-
subject { described_class.new(
5-
chart_id: chart_id,
6-
params: params) }
7-
8-
let(:chart_id) { 226 }
9-
let(:params) { { owners: [ 1, 2, 3 ] } }
10-
let(:response) do
11-
{
12-
id: chart_id,
13-
result: { owners: [1, 2, 3] }
14-
}
15-
end
16-
17-
before do
18-
allow(subject).to receive(:response).and_return(response)
19-
end
20-
21-
describe '#perform' do
22-
context 'with valid params' do
23-
specify do
24-
expect(subject.perform).to eq response
25-
end
26-
end
27-
28-
context 'with invalid params' do
29-
context 'chart_id is empty' do
30-
let(:chart_id) { nil }
31-
32-
specify do
33-
expect { subject.perform }.to raise_error(RuntimeError, "Error: chart_id integer is required")
34-
end
35-
end
36-
37-
context 'params is empty' do
38-
let(:params) { nil }
39-
40-
specify do
41-
expect { subject.perform }.to raise_error(RuntimeError, "Error: params hash is required")
42-
end
43-
end
44-
end
5+
describe 'behaves like a BasePutRequest' do
6+
it_behaves_like :base_put_request_shared_examples
457
end
468
end

spec/superset/dataset/put_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require 'spec_helper'
2+
require 'shared/base_put_request_shared_examples'
3+
4+
RSpec.describe Superset::Dataset::Put do
5+
6+
describe 'behaves like a BasePutRequest' do
7+
it_behaves_like :base_put_request_shared_examples
8+
end
9+
end

0 commit comments

Comments
 (0)