sql-jarvis 1.9.9 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,