blazer_xlsx 3.0.6 → 3.0.8
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 +4 -4
- data/CHANGELOG.md +1 -1
- data/README.md +0 -45
- data/app/controllers/blazer/base_controller.rb +3 -3
- data/app/views/blazer/_variables.html.erb +8 -8
- data/app/views/blazer/checks/_form.html.erb +8 -8
- data/app/views/blazer/checks/index.html.erb +2 -2
- data/app/views/blazer/dashboards/_form.html.erb +2 -2
- data/app/views/blazer/dashboards/show.html.erb +2 -2
- data/app/views/blazer/queries/_form.html.erb +2 -2
- data/app/views/blazer/queries/home.html.erb +2 -2
- data/app/views/blazer/queries/run.html.erb +4 -4
- data/app/views/blazer/queries/schema.html.erb +2 -2
- data/app/views/blazer/queries/show.html.erb +4 -4
- data/app/views/blazer/uploads/index.html.erb +2 -2
- data/app/views/layouts/blazer/application.html.erb +5 -5
- data/lib/blazer/adapters/athena_adapter.rb +1 -1
- data/lib/blazer/adapters/hive_adapter.rb +1 -1
- data/lib/blazer/adapters/presto_adapter.rb +2 -2
- data/lib/blazer/adapters/sql_adapter.rb +1 -15
- data/lib/blazer/data_source.rb +1 -1
- data/lib/blazer/result.rb +1 -1
- data/lib/blazer/statement.rb +2 -2
- data/lib/blazer/version.rb +1 -1
- data/lib/blazer_xlsx.rb +1 -0
- metadata +9 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5028ca491b2786dd3d421258bb044d35c4d8ea3bafa76a13412ce97c97b7e345
|
|
4
|
+
data.tar.gz: ebb2f929232d742569000d3ee4973a6fd955b0b5c41e60a8b1927e743fa57f69
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 946dd43ae310c7243ae38acc8d72e0eb641e91b5a4612d9891db135222386426c82288c64874a2e7c40d1afa75cb67dae72c15dda2bb0ae3957f8c7a0850840b
|
|
7
|
+
data.tar.gz: a4f595cbd4497e43fcd696a65a231fc29e5a8ad32f81157864999f3e4a947e930d333d4f0f21e96d8d036fd2d3325e2cf2df29c98342331026a137eec31f23c8
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -1026,51 +1026,6 @@ override_csp: true
|
|
|
1026
1026
|
|
|
1027
1027
|
Maps now use Mapbox GL JS v1 instead of Mapbox.js, which affects Mapbox billing.
|
|
1028
1028
|
|
|
1029
|
-
### 2.6
|
|
1030
|
-
|
|
1031
|
-
Custom adapters now need to specify how to quote variables in queries (there is no longer a default)
|
|
1032
|
-
|
|
1033
|
-
```ruby
|
|
1034
|
-
class FooAdapter < Blazer::Adapters::BaseAdapter
|
|
1035
|
-
def quoting
|
|
1036
|
-
:backslash_escape # single quote strings and convert ' to \' and \ to \\
|
|
1037
|
-
# or
|
|
1038
|
-
:single_quote_escape # single quote strings and convert ' to ''
|
|
1039
|
-
# or
|
|
1040
|
-
->(value) { ... } # custom method
|
|
1041
|
-
end
|
|
1042
|
-
end
|
|
1043
|
-
```
|
|
1044
|
-
|
|
1045
|
-
### 2.3
|
|
1046
|
-
|
|
1047
|
-
To archive queries, create a migration
|
|
1048
|
-
|
|
1049
|
-
```sh
|
|
1050
|
-
rails g migration add_status_to_blazer_queries
|
|
1051
|
-
```
|
|
1052
|
-
|
|
1053
|
-
with:
|
|
1054
|
-
|
|
1055
|
-
```ruby
|
|
1056
|
-
add_column :blazer_queries, :status, :string
|
|
1057
|
-
Blazer::Query.update_all(status: "active")
|
|
1058
|
-
```
|
|
1059
|
-
|
|
1060
|
-
### 2.0
|
|
1061
|
-
|
|
1062
|
-
To use Slack notifications, create a migration
|
|
1063
|
-
|
|
1064
|
-
```sh
|
|
1065
|
-
rails g migration add_slack_channels_to_blazer_checks
|
|
1066
|
-
```
|
|
1067
|
-
|
|
1068
|
-
with:
|
|
1069
|
-
|
|
1070
|
-
```ruby
|
|
1071
|
-
add_column :blazer_checks, :slack_channels, :text
|
|
1072
|
-
```
|
|
1073
|
-
|
|
1074
1029
|
## History
|
|
1075
1030
|
|
|
1076
1031
|
View the [changelog](https://github.com/ankane/blazer/blob/master/CHANGELOG.md)
|
|
@@ -71,9 +71,9 @@ module Blazer
|
|
|
71
71
|
if smart_var_data_source
|
|
72
72
|
query = smart_var_data_source.smart_variables[var]
|
|
73
73
|
|
|
74
|
-
if query.is_a?
|
|
75
|
-
smart_var = query.map { |k,v| [v, k] }
|
|
76
|
-
elsif query.is_a?
|
|
74
|
+
if query.is_a?(Hash)
|
|
75
|
+
smart_var = query.map { |k, v| [v, k] }
|
|
76
|
+
elsif query.is_a?(Array)
|
|
77
77
|
smart_var = query.map { |v| [v, v] }
|
|
78
78
|
elsif query
|
|
79
79
|
result = smart_var_data_source.run_statement(query)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<% if @bind_vars.any? %>
|
|
2
2
|
<% var_params = request.query_parameters %>
|
|
3
|
-
|
|
3
|
+
<%= javascript_tag nonce: true do %>
|
|
4
4
|
<%= blazer_js_var "timeZone", Blazer.time_zone.tzinfo.name %>
|
|
5
5
|
var now = moment.tz(timeZone)
|
|
6
6
|
var format = "YYYY-MM-DD"
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
function toDate(time) {
|
|
9
9
|
return moment.tz(time.format(format), timeZone)
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
<% end %>
|
|
12
12
|
<form id="bind" method="get" action="<%= action %>" class="form-inline" style="margin-bottom: 15px;">
|
|
13
13
|
<% date_vars = ["start_time", "end_time"] %>
|
|
14
14
|
<% if (date_vars - @bind_vars).empty? %>
|
|
@@ -21,11 +21,11 @@
|
|
|
21
21
|
<%= label_tag var, var %>
|
|
22
22
|
<% if (data = @smart_vars[var]) %>
|
|
23
23
|
<%= select_tag var, options_for_select([[nil, nil]] + data, selected: var_params[var]), style: "margin-right: 20px; width: 200px; display: none;" %>
|
|
24
|
-
|
|
24
|
+
<%= javascript_tag nonce: true do %>
|
|
25
25
|
$("#<%= var %>").selectize({
|
|
26
26
|
create: true
|
|
27
27
|
});
|
|
28
|
-
|
|
28
|
+
<% end %>
|
|
29
29
|
<% elsif var.end_with?("_at") || var == "start_time" || var == "end_time" %>
|
|
30
30
|
<%= hidden_field_tag var, var_params[var] %>
|
|
31
31
|
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</div>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
<%= javascript_tag nonce: true do %>
|
|
39
39
|
(function() {
|
|
40
40
|
var input = $("#<%= var %>")
|
|
41
41
|
var datePicker = $("#<%= var %>-select")
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
datePicker.find("span").html(toDate(picker.startDate).format("MMMM D, YYYY"))
|
|
58
58
|
}
|
|
59
59
|
})()
|
|
60
|
-
|
|
60
|
+
<% end %>
|
|
61
61
|
<% else %>
|
|
62
62
|
<%= text_field_tag var, var_params[var], style: "width: 120px; margin-right: 20px;", autofocus: i == 0 && !var.end_with?("_at") && !var_params[var], class: "form-control" %>
|
|
63
63
|
<% end %>
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
</div>
|
|
76
76
|
</div>
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
<%= javascript_tag nonce: true do %>
|
|
79
79
|
function dateStr(daysAgo) {
|
|
80
80
|
return now.clone().subtract(daysAgo || 0, "days").format(format)
|
|
81
81
|
}
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
$("#reportrange").trigger("apply.daterangepicker", picker)
|
|
120
120
|
submitIfCompleted($("#start_time").closest("form"))
|
|
121
121
|
}
|
|
122
|
-
|
|
122
|
+
<% end %>
|
|
123
123
|
<% end %>
|
|
124
124
|
|
|
125
125
|
<input type="submit" class="btn btn-success" value="Run" style="vertical-align: top;" />
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
<div class="hide">
|
|
13
13
|
<%= f.select :query_id, [], {include_blank: true} %>
|
|
14
14
|
</div>
|
|
15
|
-
|
|
15
|
+
<%= javascript_tag nonce: true do %>
|
|
16
16
|
<%= blazer_js_var "queries", Blazer::Query.active.named.order(:name).select("id, name").map { |q| {text: q.name, value: q.id} } %>
|
|
17
17
|
<%= blazer_js_var "items", [@check.query_id].compact %>
|
|
18
18
|
|
|
19
19
|
$("#check_query_id").selectize({options: queries, items: items, highlight: false, maxOptions: 100}).parents(".hide").removeClass("hide");
|
|
20
|
-
|
|
20
|
+
<% end %>
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
23
|
<% if @check.respond_to?(:check_type) %>
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
<% check_options << ["Anomaly (most recent data point)", "anomaly"] if Blazer.anomaly_checks %>
|
|
29
29
|
<%= f.select :check_type, check_options %>
|
|
30
30
|
</div>
|
|
31
|
-
|
|
31
|
+
<%= javascript_tag nonce: true do %>
|
|
32
32
|
$("#check_check_type").selectize({}).parent().removeClass("hide");
|
|
33
|
-
|
|
33
|
+
<% end %>
|
|
34
34
|
</div>
|
|
35
35
|
<% elsif @check.respond_to?(:invert) %>
|
|
36
36
|
<div class="form-group">
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
<div class="hide">
|
|
39
39
|
<%= f.select :invert, [["Any results (bad data)", false], ["No results (missing data)", true]] %>
|
|
40
40
|
</div>
|
|
41
|
-
|
|
41
|
+
<%= javascript_tag nonce: true do %>
|
|
42
42
|
$("#check_invert").selectize({}).parent().removeClass("hide");
|
|
43
|
-
|
|
43
|
+
<% end %>
|
|
44
44
|
</div>
|
|
45
45
|
<% end %>
|
|
46
46
|
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
<div class="hide">
|
|
51
51
|
<%= f.select :schedule, Blazer.check_schedules.map { |v| [v, v] } %>
|
|
52
52
|
</div>
|
|
53
|
-
|
|
53
|
+
<%= javascript_tag nonce: true do %>
|
|
54
54
|
$("#check_schedule").selectize({}).parent().removeClass("hide");
|
|
55
|
-
|
|
55
|
+
<% end %>
|
|
56
56
|
</div>
|
|
57
57
|
<% end %>
|
|
58
58
|
|
|
@@ -62,11 +62,11 @@
|
|
|
62
62
|
</tbody>
|
|
63
63
|
</table>
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
<%= javascript_tag nonce: true do %>
|
|
66
66
|
$("#search").on("keyup", function() {
|
|
67
67
|
var value = $(this).val().toLowerCase()
|
|
68
68
|
$("#checks tbody tr").filter( function() {
|
|
69
69
|
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
|
|
70
70
|
})
|
|
71
71
|
}).focus()
|
|
72
|
-
|
|
72
|
+
<% end %>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
</p>
|
|
31
31
|
<% end %>
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
<%= javascript_tag nonce: true do %>
|
|
34
34
|
<%= blazer_js_var "queries", Blazer::Query.active.named.order(:name).select("id, name").map { |q| {text: q.name, value: q.id} } %>
|
|
35
35
|
<%= blazer_js_var "dashboardQueries", @queries || @dashboard.dashboard_queries.order(:position).map(&:query) %>
|
|
36
36
|
|
|
@@ -79,4 +79,4 @@
|
|
|
79
79
|
app.queries.splice(e.newIndex, 0, app.queries.splice(e.oldIndex, 1)[0])
|
|
80
80
|
}
|
|
81
81
|
})
|
|
82
|
-
|
|
82
|
+
<% end %>
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
<p class="text-muted">Loading...</p>
|
|
39
39
|
</div>
|
|
40
40
|
</div>
|
|
41
|
-
|
|
41
|
+
<%= javascript_tag nonce: true do %>
|
|
42
42
|
<% data = {statement: query.statement, query_id: query.id, data_source: query.data_source, variables: variable_params(query), only_chart: true} %>
|
|
43
43
|
<% data.merge!(cohort_period: params[:cohort_period]) if params[:cohort_period] %>
|
|
44
44
|
<%= blazer_js_var "data", data %>
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
}, function (message) {
|
|
50
50
|
$("#chart-<%= i %>").addClass("query-error").html(message)
|
|
51
51
|
});
|
|
52
|
-
|
|
52
|
+
<% end %>
|
|
53
53
|
<% end %>
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
</div>
|
|
69
69
|
</div>
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
<%= javascript_tag nonce: true do %>
|
|
72
72
|
<%= blazer_js_var "variableParams", @variable_params %>
|
|
73
73
|
<%= blazer_js_var "previewStatement", Blazer.data_sources.to_h { |k, v| [k, (v.preview_statement rescue "")] } %>
|
|
74
74
|
|
|
@@ -252,4 +252,4 @@
|
|
|
252
252
|
})
|
|
253
253
|
app.config.compilerOptions.whitespace = "preserve"
|
|
254
254
|
app.mount("#app")
|
|
255
|
-
|
|
255
|
+
<% end %>
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
<p v-if="more" class="text-muted">Loading...</p>
|
|
57
57
|
</div>
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
<%= javascript_tag nonce: true do %>
|
|
60
60
|
<%= blazer_js_var "dashboards", @dashboards %>
|
|
61
61
|
<%= blazer_js_var "queries", @queries %>
|
|
62
62
|
<%= blazer_js_var "more", @more %>
|
|
@@ -166,4 +166,4 @@
|
|
|
166
166
|
})
|
|
167
167
|
app.config.compilerOptions.whitespace = "preserve"
|
|
168
168
|
app.mount("#queries")
|
|
169
|
-
|
|
169
|
+
<% end %>
|
|
@@ -75,21 +75,21 @@
|
|
|
75
75
|
<% if @markers.any? %>
|
|
76
76
|
<% map_id = SecureRandom.hex %>
|
|
77
77
|
<%= content_tag :div, nil, id: map_id, style: "height: #{@only_chart ? 300 : 500}px;" %>
|
|
78
|
-
|
|
78
|
+
<%= javascript_tag nonce: true do %>
|
|
79
79
|
<%= blazer_js_var "mapboxAccessToken", Blazer.mapbox_access_token %>
|
|
80
80
|
<%= blazer_js_var "markers", @markers %>
|
|
81
81
|
<%= blazer_js_var "mapId", map_id %>
|
|
82
82
|
new Mapkick.Map(mapId, markers, {accessToken: mapboxAccessToken, tooltips: {hover: false, html: true}});
|
|
83
|
-
|
|
83
|
+
<% end %>
|
|
84
84
|
<% elsif @geojson.any? %>
|
|
85
85
|
<% map_id = SecureRandom.hex %>
|
|
86
86
|
<%= content_tag :div, nil, id: map_id, style: "height: #{@only_chart ? 300 : 500}px;" %>
|
|
87
|
-
|
|
87
|
+
<%= javascript_tag nonce: true do %>
|
|
88
88
|
<%= blazer_js_var "mapboxAccessToken", Blazer.mapbox_access_token %>
|
|
89
89
|
<%= blazer_js_var "geojson", @geojson %>
|
|
90
90
|
<%= blazer_js_var "mapId", map_id %>
|
|
91
91
|
new Mapkick.AreaMap(mapId, geojson, {accessToken: mapboxAccessToken, tooltips: {hover: false, html: true}});
|
|
92
|
-
|
|
92
|
+
<% end %>
|
|
93
93
|
<% elsif chart_type == "line" %>
|
|
94
94
|
<% chart_data = @columns[1..-1].each_with_index.map{ |k, i| {name: blazer_series_name(k), data: @rows.map{ |r| [r[0], r[i + 1]] }, library: series_library[i]} } %>
|
|
95
95
|
<%= line_chart chart_data, **chart_options %>
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
</table>
|
|
29
29
|
<% end %>
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
<%= javascript_tag nonce: true do %>
|
|
32
32
|
$("#search").on("keyup", function() {
|
|
33
33
|
var value = $(this).val().toLowerCase()
|
|
34
34
|
$(".schema-table").filter(function() {
|
|
@@ -52,4 +52,4 @@
|
|
|
52
52
|
$(this).toggle(found)
|
|
53
53
|
})
|
|
54
54
|
}).focus()
|
|
55
|
-
|
|
55
|
+
<% end %>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<p class="text-muted">Loading...</p>
|
|
47
47
|
</div>
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
<%= javascript_tag nonce: true do %>
|
|
50
50
|
function showRun(data) {
|
|
51
51
|
$("#results").html(data)
|
|
52
52
|
$("#results table").stupidtable(stupidtableCustomSettings).stickyTableHeaders({fixedOffset: 60})
|
|
@@ -59,14 +59,14 @@
|
|
|
59
59
|
<%= blazer_js_var "data", @run_data %>
|
|
60
60
|
|
|
61
61
|
runQuery(data, showRun, showError)
|
|
62
|
-
|
|
62
|
+
<% end %>
|
|
63
63
|
<% end %>
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
<%= javascript_tag nonce: true do %>
|
|
66
66
|
// do not highlight really long queries
|
|
67
67
|
// this can lead to performance issues
|
|
68
68
|
var code = $("#code code")
|
|
69
69
|
if (code.text().length < 10000) {
|
|
70
70
|
hljs.highlightElement(code.get(0))
|
|
71
71
|
}
|
|
72
|
-
|
|
72
|
+
<% end %>
|
|
@@ -45,11 +45,11 @@
|
|
|
45
45
|
</tbody>
|
|
46
46
|
</table>
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
<%= javascript_tag nonce: true do %>
|
|
49
49
|
$("#search").on("keyup", function() {
|
|
50
50
|
var value = $(this).val().toLowerCase()
|
|
51
51
|
$("#uploads tbody tr").filter( function() {
|
|
52
52
|
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
|
|
53
53
|
})
|
|
54
54
|
}).focus()
|
|
55
|
-
|
|
55
|
+
<% end %>
|
|
@@ -7,18 +7,18 @@
|
|
|
7
7
|
<%= favicon_link_tag "blazer/favicon.png" %>
|
|
8
8
|
<% if defined?(Propshaft::Railtie) %>
|
|
9
9
|
<%= stylesheet_link_tag "blazer/bootstrap-propshaft", "blazer/bootstrap", "blazer/selectize", "blazer/github", "blazer/daterangepicker", "blazer/application" %>
|
|
10
|
-
<%= javascript_include_tag "blazer/jquery", "blazer/rails-ujs", "blazer/stupidtable", "blazer/stupidtable-custom-settings", "blazer/jquery.stickytableheaders", "blazer/selectize", "blazer/highlight.min", "blazer/moment", "blazer/moment-timezone-with-data", "blazer/daterangepicker", "blazer/chart.umd", "blazer/chartjs-adapter-date-fns.bundle", "blazer/chartkick", "blazer/mapkick.bundle", "blazer/ace/ace", "blazer/ace/ext-language_tools", "blazer/ace/theme-twilight", "blazer/ace/mode-sql", "blazer/ace/snippets/text", "blazer/ace/snippets/sql", "blazer/Sortable", "blazer/bootstrap", "blazer/vue.global.prod", "blazer/routes", "blazer/queries", "blazer/fuzzysearch", "blazer/application" %>
|
|
10
|
+
<%= javascript_include_tag "blazer/jquery", "blazer/rails-ujs", "blazer/stupidtable", "blazer/stupidtable-custom-settings", "blazer/jquery.stickytableheaders", "blazer/selectize", "blazer/highlight.min", "blazer/moment", "blazer/moment-timezone-with-data", "blazer/daterangepicker", "blazer/chart.umd", "blazer/chartjs-adapter-date-fns.bundle", "blazer/chartkick", "blazer/mapkick.bundle", "blazer/ace/ace", "blazer/ace/ext-language_tools", "blazer/ace/theme-twilight", "blazer/ace/mode-sql", "blazer/ace/snippets/text", "blazer/ace/snippets/sql", "blazer/Sortable", "blazer/bootstrap", "blazer/vue.global.prod", "blazer/routes", "blazer/queries", "blazer/fuzzysearch", "blazer/application", nonce: true %>
|
|
11
11
|
<% else %>
|
|
12
12
|
<%= stylesheet_link_tag "blazer/application" %>
|
|
13
|
-
<%= javascript_include_tag "blazer/application" %>
|
|
13
|
+
<%= javascript_include_tag "blazer/application", nonce: true %>
|
|
14
14
|
<% end %>
|
|
15
|
-
|
|
15
|
+
<%= javascript_tag nonce: true do %>
|
|
16
16
|
<%= blazer_js_var "rootPath", root_path %>
|
|
17
|
-
|
|
17
|
+
<% end %>
|
|
18
18
|
<%= csrf_meta_tags %>
|
|
19
19
|
</head>
|
|
20
20
|
<body>
|
|
21
|
-
<div class="container">
|
|
21
|
+
<div class="container" style="margin-left:40px">
|
|
22
22
|
<%= yield %>
|
|
23
23
|
</div>
|
|
24
24
|
</body>
|
|
@@ -39,10 +39,10 @@ module Blazer
|
|
|
39
39
|
def client
|
|
40
40
|
@client ||= begin
|
|
41
41
|
uri = URI.parse(settings["url"])
|
|
42
|
-
query = uri.query ? CGI
|
|
42
|
+
query = uri.query ? CGI.parse(uri.query) : {}
|
|
43
43
|
Presto::Client.new(
|
|
44
44
|
server: "#{uri.host}:#{uri.port}",
|
|
45
|
-
catalog: uri.path.to_s.
|
|
45
|
+
catalog: uri.path.to_s.delete_prefix("/"),
|
|
46
46
|
schema: query["schema"] || "public",
|
|
47
47
|
user: uri.user,
|
|
48
48
|
http_debug: false
|
|
@@ -46,20 +46,6 @@ module Blazer
|
|
|
46
46
|
if adapter_name == "Trilogy"
|
|
47
47
|
columns.map! { |k| k.dup.force_encoding(Encoding::UTF_8) }
|
|
48
48
|
end
|
|
49
|
-
|
|
50
|
-
# fix for binary data
|
|
51
|
-
if mysql?
|
|
52
|
-
rows =
|
|
53
|
-
rows.map do |row|
|
|
54
|
-
row.map do |v|
|
|
55
|
-
if v.is_a?(String) && v.encoding == Encoding::BINARY
|
|
56
|
-
"0x#{v.unpack1("H*").upcase}"
|
|
57
|
-
else
|
|
58
|
-
v
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
49
|
rescue => e
|
|
64
50
|
error = e.message.sub(/.+ERROR: /, "")
|
|
65
51
|
error = Blazer::TIMEOUT_MESSAGE if Blazer::TIMEOUT_ERRORS.any? { |e| error.include?(e) }
|
|
@@ -164,7 +150,7 @@ module Blazer
|
|
|
164
150
|
def cohort_analysis_statement(statement, period:, days:)
|
|
165
151
|
raise "Cohort analysis not supported" unless supports_cohort_analysis?
|
|
166
152
|
|
|
167
|
-
cohort_column = statement
|
|
153
|
+
cohort_column = statement.match?(/\bcohort_time\b/) ? "cohort_time" : "conversion_time"
|
|
168
154
|
tzname = Blazer.time_zone.tzinfo.name
|
|
169
155
|
|
|
170
156
|
if mysql?
|
data/lib/blazer/data_source.rb
CHANGED
data/lib/blazer/result.rb
CHANGED
|
@@ -131,7 +131,7 @@ module Blazer
|
|
|
131
131
|
|
|
132
132
|
if chart_type == "line"
|
|
133
133
|
columns[1..-1].each_with_index.each do |k, i|
|
|
134
|
-
series << {name: k, data: rows.map{ |r| [r[0], r[i + 1]] }}
|
|
134
|
+
series << {name: k, data: rows.map { |r| [r[0], r[i + 1]] }}
|
|
135
135
|
end
|
|
136
136
|
else
|
|
137
137
|
rows.group_by { |r| v = r[1]; (smart_values[columns[1]] || {})[v.to_s] || v }.each_with_index.map do |(name, v), i|
|
data/lib/blazer/statement.rb
CHANGED
|
@@ -33,9 +33,9 @@ module Blazer
|
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
unless value.is_a?(ActiveSupport::TimeWithZone)
|
|
36
|
-
if value
|
|
36
|
+
if value.match?(/\A\d+\z/)
|
|
37
37
|
value = value.to_i
|
|
38
|
-
elsif value
|
|
38
|
+
elsif value.match?(/\A\d+\.\d+\z/)
|
|
39
39
|
value = value.to_f
|
|
40
40
|
end
|
|
41
41
|
end
|
data/lib/blazer/version.rb
CHANGED
data/lib/blazer_xlsx.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "blazer"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: blazer_xlsx
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0.
|
|
4
|
+
version: 3.0.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Caio Garcia
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-08-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: railties
|
|
@@ -94,8 +94,8 @@ dependencies:
|
|
|
94
94
|
- - ">="
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '0'
|
|
97
|
-
description:
|
|
98
|
-
email:
|
|
97
|
+
description:
|
|
98
|
+
email:
|
|
99
99
|
executables: []
|
|
100
100
|
extensions: []
|
|
101
101
|
extra_rdoc_files: []
|
|
@@ -220,6 +220,7 @@ files:
|
|
|
220
220
|
- lib/blazer/slack_notifier.rb
|
|
221
221
|
- lib/blazer/statement.rb
|
|
222
222
|
- lib/blazer/version.rb
|
|
223
|
+
- lib/blazer_xlsx.rb
|
|
223
224
|
- lib/generators/blazer/install_generator.rb
|
|
224
225
|
- lib/generators/blazer/templates/config.yml.tt
|
|
225
226
|
- lib/generators/blazer/templates/install.rb.tt
|
|
@@ -249,7 +250,7 @@ files:
|
|
|
249
250
|
homepage: https://github.com/CaioGarcia1/blazer_xlsx
|
|
250
251
|
licenses: []
|
|
251
252
|
metadata: {}
|
|
252
|
-
post_install_message:
|
|
253
|
+
post_install_message:
|
|
253
254
|
rdoc_options: []
|
|
254
255
|
require_paths:
|
|
255
256
|
- lib
|
|
@@ -264,8 +265,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
264
265
|
- !ruby/object:Gem::Version
|
|
265
266
|
version: '0'
|
|
266
267
|
requirements: []
|
|
267
|
-
rubygems_version: 3.
|
|
268
|
-
signing_key:
|
|
268
|
+
rubygems_version: 3.4.1
|
|
269
|
+
signing_key:
|
|
269
270
|
specification_version: 4
|
|
270
271
|
summary: Blazer fork that adds support for exporting to XLSX
|
|
271
272
|
test_files: []
|