sql-jarvis 1.9.9 → 2.0.1

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
2
  SHA256:
3
- metadata.gz: a3232731e4d33526a1e36b5d7b14e143a535097ec826163326fec0bb8d7f9add
4
- data.tar.gz: a64d8ea6bb11dbd6dab1b6e74b36c144d5effba442d68eef7f7dd095789b7327
3
+ metadata.gz: a692d1fe0f09c3fe9865e2a2c4b3f1835899672aa6accbbf150b90e43fbbdc5b
4
+ data.tar.gz: fb1c04bed559e70e7afa3207769a60700e91aa6400b68eadd0d5a4774b1c0c5b
5
5
  SHA512:
6
- metadata.gz: 71f0f0ea4e2229ef1dd6d09d7f92e65b883ad657fd07f1ef05c6370cd9b19d52e7fc5154440ceb3a5a9e58990dc9ce21ad90d9bb117dc4adbcead2fc4045c3d8
7
- data.tar.gz: ef24ade3db2314f19a02276ed0874112e4ac458052fa1f24b22f83e7130ed9f56f962251ef400be4bba4b02a81b977b2eea1836be5bb6f3e92d67e7f06851206
6
+ metadata.gz: e17d107a062ccf874485e39ec1893f15a2c7986c1f6667f360a75cc04a7f7b5b6154704dc5f1a20a481a566410f009db9aa445448541fdb0194321b1f0381de8
7
+ data.tar.gz: 2dd68c65560fa2e01e3b402df83bf1b2b1929163d4b01e323e3499664b077f6fb8edbe743d42dfc32981abf795586952a8a28fd1cab3fc4f03c442b04904659d
data/Gemfile CHANGED
@@ -1,4 +1,7 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'zip-zip'
4
+ gem 'axlsx'
5
+ gem 'axlsx_rails'
2
6
 
3
- # Specify your gem's dependencies in blazer.gemspec
4
7
  gemspec
@@ -262,12 +262,18 @@ module Blazer
262
262
  end
263
263
  end
264
264
 
265
+ filename = @query.try(:name).try(:parameterize).presence || 'query'
265
266
  respond_to do |format|
266
267
  format.html do
267
268
  render layout: false
268
269
  end
270
+ format.xlsx do
271
+ parser = ::Blazer::ExcelParser.new(@query, @columns, @rows)
272
+ tmp_file = parser.export
273
+ send_file tmp_file, type: "application/xlsx; charset=utf-8; header=present", disposition: "attachment; filename=\"#{parser.filename}\""
274
+ end
269
275
  format.csv do
270
- send_data csv_data(@columns, @rows, @data_source), type: "text/csv; charset=utf-8; header=present", disposition: "attachment; filename=\"#{@query.try(:name).try(:parameterize).presence || 'query'}.csv\""
276
+ send_data csv_data(@columns, @rows, @data_source), type: "text/csv; charset=utf-8; header=present", disposition: "attachment; filename=\"#{filename}.csv\""
271
277
  end
272
278
  end
273
279
  end
@@ -3,18 +3,19 @@
3
3
  <div class="topbar">
4
4
  <div class="container">
5
5
  <div class="row" style="padding-top: 13px;">
6
- <div class="col-sm-9">
6
+ <div class="col-sm-8">
7
7
  <%= render partial: "blazer/nav" %>
8
8
  <h3 style="margin: 0; line-height: 34px; display: inline;">
9
9
  <%= @query.name %>
10
10
  </h3>
11
11
  </div>
12
- <div class="col-sm-3 text-right">
12
+ <div class="col-sm-4 text-right">
13
13
  <%= link_to "Edit", edit_query_path(@query, variable_params), class: "btn btn-default", disabled: !@query.editable?(blazer_user) %>
14
14
  <%= link_to "Fork", new_query_path(variable_params.merge(fork_query_id: @query.id, data_source: @query.data_source, name: @query.name)), class: "btn btn-info" %>
15
15
 
16
16
  <% if !@error && @success %>
17
- <%= button_to "Download", run_queries_path(query_id: @query.id, format: "csv"), params: {statement: @statement}, class: "btn btn-primary" %>
17
+ <%= button_to "⤓ .csv", run_queries_path(query_id: @query.id, format: "csv"), params: {statement: @statement}, class: "btn btn-primary" %>
18
+ <%= button_to "⤓ .xlsx", run_queries_path(query_id: @query.id, format: "xlsx"), params: {statement: @statement}, class: "btn btn-primary" %>
18
19
  <% end %>
19
20
  </div>
20
21
  </div>
@@ -17,6 +17,9 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib"]
19
19
 
20
+ spec.add_dependency "zip-zip"
21
+ spec.add_dependency "axlsx"
22
+ spec.add_dependency "axlsx_rails"
20
23
  spec.add_dependency "railties", ">= 4"
21
24
  spec.add_dependency "activerecord", ">= 4"
22
25
  spec.add_dependency "chartkick"
@@ -1,10 +1,13 @@
1
1
  require "csv"
2
2
  require "yaml"
3
3
  require "chartkick"
4
+ require "zip/zip"
5
+ require "axlsx"
4
6
  require "safely/core"
5
7
  require "blazer/version"
6
8
  require "blazer/data_source"
7
9
  require "blazer/result"
10
+ require "blazer/excel_parser"
8
11
  require "blazer/run_statement"
9
12
  require "blazer/adapters/base_adapter"
10
13
  require "blazer/adapters/athena_adapter"
@@ -215,3 +218,6 @@ Blazer.register_adapter "presto", Blazer::Adapters::PrestoAdapter
215
218
  Blazer.register_adapter "mongodb", Blazer::Adapters::MongodbAdapter
216
219
  Blazer.register_adapter "sql", Blazer::Adapters::SqlAdapter
217
220
  Blazer.register_adapter "snowflake", Blazer::Adapters::SnowflakeAdapter
221
+
222
+ Mime::Type.register "application/xlsx", :xlsx
223
+ Mime::Type.register "application/xls", :xlsx
@@ -0,0 +1,40 @@
1
+ module Blazer
2
+ class ExcelParser
3
+
4
+ def initialize(query, columns, rows)
5
+ @query = query
6
+ @columns = columns
7
+ @rows = rows
8
+ @excel = ::Axlsx::Package.new
9
+ end
10
+
11
+ def export
12
+ load_data!
13
+ save_file!
14
+ end
15
+
16
+ def filename
17
+ "#{query.name.to_s.parameterize}-#{Time.current.strftime('%y-%m-%d')}.xlsx"
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :query, :excel
23
+
24
+ def load_data!
25
+ excel.workbook.add_worksheet(name: "ID #{query.id}") do |sheet|
26
+ sheet.add_row @columns
27
+ @rows.each do |row|
28
+ sheet.add_row row
29
+ end
30
+ end
31
+ end
32
+
33
+ def save_file!
34
+ tmp_file = "tmp/#{filename}"
35
+ excel.serialize(tmp_file)
36
+ return tmp_file
37
+ end
38
+
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module Blazer
2
- VERSION = "1.9.9"
2
+ VERSION = "2.0.1"
3
3
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql-jarvis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.9
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ThanhKhoaIT
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-16 00:00:00.000000000 Z
11
+ date: 2019-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: zip-zip
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: axlsx
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: axlsx_rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: railties
15
57
  requirement: !ruby/object:Gem::Requirement
@@ -197,6 +239,7 @@ files:
197
239
  - lib/blazer/data_source.rb
198
240
  - lib/blazer/detect_anomalies.R
199
241
  - lib/blazer/engine.rb
242
+ - lib/blazer/excel_parser.rb
200
243
  - lib/blazer/result.rb
201
244
  - lib/blazer/run_statement.rb
202
245
  - lib/blazer/run_statement_job.rb
@@ -225,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
268
  version: '0'
226
269
  requirements: []
227
270
  rubyforge_project:
228
- rubygems_version: 2.7.7
271
+ rubygems_version: 2.7.8
229
272
  signing_key:
230
273
  specification_version: 4
231
274
  summary: Fork from ankane! Explore your data with SQL. Easily create charts and dashboards,