Skip to content

Commit 6f896ae

Browse files
authored
Merge pull request #18 from SlicingDice/feature/new-api-formats
Change client to match new api formats
2 parents 09cf6f3 + 64f6b50 commit 6f896ae

15 files changed

Lines changed: 49402 additions & 53755 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
/spec/reports/
99
/tmp/
1010
.idea/
11-
11+
examples/*

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
## [2.0.2]
44
### Updated
55
- Correct data extraction validator to accept columns: all
6+
- Add support for SQL queries on client
7+
- Adapt test queries to the changes on SlicingDice API
68

79
## [2.0.1]
810
### Updated

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SlicingDice Official Ruby Client (v2.0.1)
1+
# SlicingDice Official Ruby Client (v2.0.2)
22
### Build Status: [![CircleCI](https://circleci.com/gh/SlicingDice/slicingdice-ruby.svg?style=svg)](https://circleci.com/gh/SlicingDice/slicingdice-ruby)
33

44
Official Ruby client for [SlicingDice](http://www.slicingdice.com/), Data Warehouse and Analytics Database as a Service.

lib/rbslicer.rb

Lines changed: 24 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
query_data_extraction_result: '/data_extraction/result/',
3838
query_data_extraction_score: '/data_extraction/score/',
3939
query_saved: '/query/saved/',
40-
database: '/database/'
40+
database: '/database/',
41+
query_sql: '/query/sql/'
4142
}.freeze
4243

4344
# Public: A ruby interface to SlicingDice API
@@ -63,27 +64,18 @@ def initialize(options = {})
6364
read_key = options.fetch(:read_key, nil)
6465
write_key = options.fetch(:write_key, nil)
6566
timeout = options.fetch(:timeout, 60)
66-
uses_test_endpoint = options.fetch(:uses_test_endpoint, false)
6767
base_url= options.fetch(:base_url, BASE_URL)
6868
super(master_key, custom_key, read_key, write_key, timeout)
6969
@list_query_types = [
7070
"count/entity", "count/event", "count/entity/total",
71-
"aggregation", "top_values"]
71+
"aggregation", "top_values", "sql"]
7272
if base_url.nil?
7373
@base_url = BASE_URL
7474
else
7575
@base_url = base_url
7676
end
77-
@uses_test_endpoint = uses_test_endpoint
7877
end
7978

80-
def wrapper_test()
81-
base_url = @base_url
82-
if @uses_test_endpoint
83-
base_url += "/test"
84-
end
85-
return base_url
86-
end
8779
# Public: Create column in SlicingDice API
8880
#
8981
# query - A Hash in the SlicingDice column format
@@ -104,7 +96,6 @@ def wrapper_test()
10496
#
10597
# Returns a hash with api result
10698
def create_column(query)
107-
base_url = wrapper_test()
10899
if query.kind_of?(Array)
109100
query.each { |q| column_create(q) }
110101
else
@@ -113,18 +104,16 @@ def create_column(query)
113104
end
114105

115106
def column_create(query)
116-
base_url = wrapper_test()
117107
sd_validator = Utils::ColumnValidator.new(query)
118108
if sd_validator.validator
119-
url = base_url + METHODS[:column]
109+
url = @base_url + METHODS[:column]
120110
make_request(url, "post", 2, data= query)
121111
end
122112
end
123113

124114
# Public: Get all columns created on SlicingDice API
125115
def get_columns()
126-
base_url = wrapper_test()
127-
url = base_url + METHODS[:column]
116+
url = @base_url + METHODS[:column]
128117
make_request url, "get", 2
129118
end
130119

@@ -144,18 +133,16 @@ def get_columns()
144133
#
145134
# Returns a hash with api result
146135
def insert(data)
147-
base_url = wrapper_test()
148136
sd_validator = Utils::InsertValidator.new(data)
149137
if sd_validator.validator
150-
url = base_url + METHODS[:insert]
138+
url = @base_url + METHODS[:insert]
151139
make_request(url, "post", 1, data = data)
152140
end
153141
end
154142

155143
# Public: Get information about current database
156144
def get_database()
157-
base_url = wrapper_test()
158-
url = base_url + METHODS[:database]
145+
url = @base_url + METHODS[:database]
159146
make_request url, "get", 2
160147
end
161148

@@ -204,8 +191,7 @@ def saved_query_wrapper(url, query, update = false)
204191
#
205192
# Returns a count entity query result
206193
def count_entity(query)
207-
base_url = wrapper_test()
208-
url = base_url + METHODS[:query_count_entity]
194+
url = @base_url + METHODS[:query_count_entity]
209195
count_query_wrapper(url, query)
210196
end
211197

@@ -216,8 +202,7 @@ def count_entity(query)
216202
#
217203
# Returns a count entity total query result
218204
def count_entity_total(tables=[])
219-
base_url = wrapper_test()
220-
url = base_url + METHODS[:query_count_entity_total]
205+
url = @base_url + METHODS[:query_count_entity_total]
221206

222207
query = {
223208
"tables" => tables
@@ -232,8 +217,7 @@ def count_entity_total(tables=[])
232217
#
233218
# Returns a count event query result
234219
def count_event(query)
235-
base_url = wrapper_test()
236-
url = base_url + METHODS[:query_count_event]
220+
url = @base_url + METHODS[:query_count_event]
237221
count_query_wrapper(url, query)
238222
end
239223

@@ -243,8 +227,7 @@ def count_event(query)
243227
#
244228
# Returns a aggregation query result
245229
def aggregation(query)
246-
base_url = wrapper_test()
247-
url = base_url + METHODS[:query_aggregation]
230+
url = @base_url + METHODS[:query_aggregation]
248231
if !query.key?("query")
249232
raise Exceptions::InvalidQueryException, 'The aggregation query must '\
250233
'have \'query\' property.'
@@ -263,8 +246,7 @@ def aggregation(query)
263246
#
264247
# Returns a top values query result
265248
def top_values(query)
266-
base_url = wrapper_test()
267-
url = base_url + METHODS[:query_top_values]
249+
url = @base_url + METHODS[:query_top_values]
268250
sd_validator = Utils::QueryTopValuesValidator.new(query)
269251
if sd_validator.validator
270252
make_request(url, "post", 0, data=query)
@@ -278,8 +260,7 @@ def top_values(query)
278260
#
279261
# Returns a Hash with ids that exists and that don't exits
280262
def exists_entity(ids, table=nil)
281-
base_url = wrapper_test()
282-
url = base_url + METHODS[:query_exists_entity]
263+
url = @base_url + METHODS[:query_exists_entity]
283264
if ids.length > 100
284265
raise Exceptions::MaxLimitExceptions, 'The query exists entity must '\
285266
'have up to 100 ids.'
@@ -299,8 +280,7 @@ def exists_entity(ids, table=nil)
299280
#
300281
# Returns a hash with saved query
301282
def get_saved_queries()
302-
base_url = wrapper_test()
303-
url = base_url + METHODS[:query_saved]
283+
url = @base_url + METHODS[:query_saved]
304284
make_request url, "get", 2
305285
end
306286

@@ -310,8 +290,7 @@ def get_saved_queries()
310290
#
311291
# Returns a hash with saved query
312292
def get_saved_query(query_name)
313-
base_url = wrapper_test()
314-
url = base_url + METHODS[:query_saved] + query_name
293+
url = @base_url + METHODS[:query_saved] + query_name
315294
make_request url, "get", 0
316295
end
317296

@@ -321,8 +300,7 @@ def get_saved_query(query_name)
321300
#
322301
# Returns a hash with saved query
323302
def delete_saved_query(query_name)
324-
base_url = wrapper_test()
325-
url = base_url + METHODS[:query_saved] + query_name
303+
url = @base_url + METHODS[:query_saved] + query_name
326304
make_request url, "delete", 2
327305
end
328306

@@ -332,8 +310,7 @@ def delete_saved_query(query_name)
332310
#
333311
# Returns a hash with saved query created and SUCCESS status
334312
def create_saved_query(query)
335-
base_url = wrapper_test()
336-
url = base_url + METHODS[:query_saved]
313+
url = @base_url + METHODS[:query_saved]
337314
saved_query_wrapper url, query
338315
end
339316

@@ -344,28 +321,28 @@ def create_saved_query(query)
344321
#
345322
# Returns a hash with saved query updated and SUCCESS status
346323
def update_saved_query(name, query)
347-
base_url = wrapper_test()
348-
url = base_url + METHODS[:query_saved] + name
324+
url = @base_url + METHODS[:query_saved] + name
349325
saved_query_wrapper(url, query, update=true)
350326
end
351327

352328
# Public: Get a data extraction result query
353329
#
354330
# query(Hash) - A Hash to send in request
355331
def result(query)
356-
base_url = wrapper_test()
357-
url = base_url + METHODS[:query_data_extraction_result]
332+
url = @base_url + METHODS[:query_data_extraction_result]
358333
data_extraction_wrapper(url, query)
359334
end
360335

361336
# Public: Get a data extraction score query
362337
#
363338
# query(Hash) - A Hash to send in request
364339
def score(query)
365-
base_url = wrapper_test()
366-
url = base_url + METHODS[:query_data_extraction_score]
340+
url = @base_url + METHODS[:query_data_extraction_score]
367341
data_extraction_wrapper(url, query)
368342
end
369343

370-
private :wrapper_test
344+
def sql(query)
345+
url = @base_url + METHODS[:query_sql]
346+
make_request(url, "post", 0, data=query, sql=true)
347+
end
371348
end

lib/rbslicer/api.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,18 @@ def check_key(endpoint_key_level)
6464
# data(Hash) - A Hash to send in request
6565
#
6666
# Returns a request result
67-
def make_request(url, req_type, key_level, data = nil)
67+
def make_request(url, req_type, key_level, data = nil, sql = false)
6868
check_key key_level
69+
content_type = 'application/json'
70+
71+
if sql
72+
content_type = 'application/sql'
73+
end
6974
headers = {
70-
'Content-Type' => 'application/json',
75+
'Content-Type' => content_type,
7176
'Authorization' => @api_key
7277
}
73-
@req = @requester.run(url, headers, req_type, data=data)
78+
@req = @requester.run(url, headers, req_type, data=data, sql = sql)
7479
handler_request!
7580
end
7681

lib/rbslicer/core/requester.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def initialize(timeout)
1919
# data(Hash) - A Hash to send in request
2020
#
2121
# Returns a object with result request
22-
def run(url, headers, req_type, data = nil)
22+
def run(url, headers, req_type, data = nil, sql = false)
2323
begin
2424
uri = URI.parse(url)
2525
http = Net::HTTP.new(uri.host, uri.port)
@@ -29,12 +29,18 @@ def run(url, headers, req_type, data = nil)
2929
http.read_timeout = @timeout
3030
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
3131
requester = nil
32+
parsed_data = data
33+
34+
if !sql
35+
parsed_data = data.to_json
36+
end
37+
3238
if req_type == "post"
3339
requester = Net::HTTP::Post.new(uri.request_uri, initheader = headers)
34-
requester.body = data.to_json
40+
requester.body = parsed_data
3541
elsif req_type == "put"
3642
requester = Net::HTTP::Put.new(uri.request_uri, initheader = headers)
37-
requester.body = data.to_json
43+
requester.body = parsed_data
3844
elsif req_type == "get"
3945
requester = Net::HTTP::Get.new(uri.request_uri, initheader = headers)
4046
elsif req_type == "delete"

lib/rbslicer/utils/validators.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def initialize(hash_data)
4646
@valid_type_columns =
4747
["unique-id", "boolean", "string", "integer", "decimal",
4848
"enumerated", "date", "integer-time-series",
49-
"decimal-time-series", "string-time-series"]
49+
"decimal-time-series", "string-time-series", "datetime"]
5050
end
5151

5252
# Public: Validates key 'name' in column

0 commit comments

Comments
 (0)