blazer 1.7.7 → 1.7.8

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of blazer might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0960679b538f12dd8fc9df631a6dc5c66e3a17b4
4
- data.tar.gz: 8207552bf1024524b3f32d0719b38c98666ee7a7
3
+ metadata.gz: 26fcc8a24832e5f3f482ac9e2ae622b43f2c44e8
4
+ data.tar.gz: a4ce257d4c97d36bf577a952202a139721097482
5
5
  SHA512:
6
- metadata.gz: 9a47660580a4ab89a49e9ff6e95838c742056b9b025143eda6bf2cba494842b6f182b8f21fe4b08a0d3b06d31721fc53599339358c149c95f06a874d92fbd93a
7
- data.tar.gz: 7aa7dc39d4b669a1bc3988180a70ad7f8b9e3fe8d9ed92e830e6504a86b1244dd17d71d0e1fe6c32d117f644fa5a6823a396dc0d76d331e40c56ad4eee89ff1d
6
+ metadata.gz: 115725c9779514165f926c36f9f71406a480892414d249f2f156c176ce632b1893b9bf9617a0c03a6f9044bf2e53aabe3d378ea971b1a7d64e18acf5bf357c5f
7
+ data.tar.gz: 985b07bf120c96a196d8c5bef81d8c9c5c6ee64cea56c15c64a3c4d2e7a2b9b0fe010ace797d3a98d6aa565171a0bd675d378fb944b911d29d1bb1cc7931274d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 1.7.8
2
+
3
+ - Added support for custom adapters
4
+ - Fixed bug with scatter charts on dashboards
5
+ - Fixed table preview for SQL Server
6
+ - Fixed issue when `default_url_options` set
7
+
1
8
  ## 1.7.7
2
9
 
3
10
  - Fixed preview error for MySQL
data/README.md CHANGED
@@ -394,7 +394,7 @@ data_sources:
394
394
  - [MongoDB](#mongodb-1) [beta]
395
395
  - [Elasticsearch](#elasticsearch) [beta]
396
396
 
397
- You can also create an adapter for any other data store.
397
+ You can also [create an adapter](#creating-an-adapter) for any other data store.
398
398
 
399
399
  **Note:** In the examples below, we recommend using environment variables for urls.
400
400
 
@@ -426,7 +426,13 @@ data_sources:
426
426
 
427
427
  ### SQL Server
428
428
 
429
- Use [activerecord-sqlserver-adapter](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter).
429
+ Add [tiny_tds](https://github.com/rails-sqlserver/tiny_tds) and [activerecord-sqlserver-adapter](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter) to your Gemfile and set:
430
+
431
+ ```yml
432
+ data_sources:
433
+ my_source:
434
+ url: sqlserver://user:password@hostname:1433/database
435
+ ```
430
436
 
431
437
  ### Oracle
432
438
 
@@ -448,7 +454,7 @@ data_sources:
448
454
 
449
455
  ### Redshift
450
456
 
451
- Add [activerecord4-redshift-adapter](https://github.com/aamine/activerecord4-redshift-adapter) to your Gemfile and set:
457
+ Add [activerecord4-redshift-adapter](https://github.com/aamine/activerecord4-redshift-adapter) or [activerecord5-redshift-adapter](https://github.com/ConsultingMD/activerecord5-redshift-adapter) to your Gemfile and set:
452
458
 
453
459
  ```yml
454
460
  data_sources:
@@ -487,6 +493,27 @@ data_sources:
487
493
  url: http://user:password@hostname:9200/
488
494
  ```
489
495
 
496
+ ## Creating an Adapter
497
+
498
+ Create an adapter for any data store with:
499
+
500
+ ```ruby
501
+ class FooAdapter < Blazer::Adapters::BaseAdapter
502
+ # code goes here
503
+ end
504
+
505
+ Blazer.register_adapter "foo", FooAdapter
506
+ ```
507
+
508
+ See the [Presto adapter](https://github.com/ankane/blazer/blob/master/lib/blazer/adapters/presto_adapter.rb) for a good example. Then use:
509
+
510
+ ```yml
511
+ data_sources:
512
+ my_source:
513
+ adapter: foo
514
+ url: http://user:password@hostname:9200/
515
+ ```
516
+
490
517
  ## Query Permissions
491
518
 
492
519
  Blazer supports a basic permissions model.
@@ -663,7 +690,10 @@ audit: true
663
690
  # class name of the user model
664
691
  # user_class: User
665
692
 
666
- # method name for the user model
693
+ # method name for the current user
694
+ # user_method: current_user
695
+
696
+ # method name for the display name
667
697
  # user_name: name
668
698
 
669
699
  # email to send checks from
@@ -101,5 +101,10 @@ module Blazer
101
101
  action = resource.persisted? ? :edit : :new
102
102
  render action, status: :unprocessable_entity
103
103
  end
104
+
105
+ # do not inherit from ApplicationController - #120
106
+ def default_url_options
107
+ {}
108
+ end
104
109
  end
105
110
  end
@@ -92,7 +92,7 @@
92
92
  <% end %>
93
93
  <%= column_chart first_20.group_by { |r| v = r[1]; (@boom[@columns[1]] || {})[v.to_s] || v }.each_with_index.map { |(name, v), i| {name: name, data: v.sort_by { |r2| labels.index(r2[0]) }.map { |v2| v3 = v2[0]; [(@boom[@columns[0]] || {})[v3.to_s] || v3, v2[2]] }} }, id: chart_id %>
94
94
  <% elsif chart_type == "scatter" %>
95
- <%= scatter_chart @rows, xtitle: @columns[0], ytitle: @columns[1] %>
95
+ <%= scatter_chart @rows, xtitle: @columns[0], ytitle: @columns[1], id: chart_id %>
96
96
  <% elsif @only_chart %>
97
97
  <% if @rows.size == 1 && @rows.first.size == 1 %>
98
98
  <% v = @rows.first.first %>
data/lib/blazer.rb CHANGED
@@ -148,4 +148,17 @@ module Blazer
148
148
  end
149
149
  end
150
150
  end
151
+
152
+ def self.adapters
153
+ @adapters ||= {}
154
+ end
155
+
156
+ def self.register_adapter(name, adapter)
157
+ adapters[name] = adapter
158
+ end
151
159
  end
160
+
161
+ Blazer.register_adapter "elasticsearch", Blazer::Adapters::ElasticsearchAdapter
162
+ Blazer.register_adapter "mongodb", Blazer::Adapters::MongodbAdapter
163
+ Blazer.register_adapter "presto", Blazer::Adapters::PrestoAdapter
164
+ Blazer.register_adapter "sql", Blazer::Adapters::SqlAdapter
@@ -53,6 +53,8 @@ module Blazer
53
53
  def preview_statement
54
54
  if postgresql?
55
55
  "SELECT * FROM \"{table}\" LIMIT 10"
56
+ elsif sqlserver?
57
+ "SELECT TOP (10) * FROM {table}"
56
58
  else
57
59
  "SELECT * FROM {table} LIMIT 10"
58
60
  end
@@ -64,13 +66,25 @@ module Blazer
64
66
 
65
67
  def cost(statement)
66
68
  result = explain(statement)
67
- match = /cost=\d+\.\d+..(\d+\.\d+) /.match(result)
68
- match[1] if match
69
+ if sqlserver?
70
+ result["TotalSubtreeCost"]
71
+ else
72
+ match = /cost=\d+\.\d+..(\d+\.\d+) /.match(result)
73
+ match[1] if match
74
+ end
69
75
  end
70
76
 
71
77
  def explain(statement)
72
78
  if postgresql? || redshift?
73
79
  select_all("EXPLAIN #{statement}").rows.first.first
80
+ elsif sqlserver?
81
+ begin
82
+ execute("SET SHOWPLAN_ALL ON")
83
+ result = select_all(statement).each.first
84
+ ensure
85
+ execute("SET SHOWPLAN_ALL OFF")
86
+ end
87
+ result
74
88
  end
75
89
  rescue
76
90
  nil
@@ -114,15 +128,29 @@ module Blazer
114
128
  ["MySQL", "Mysql2", "Mysql2Spatial"].include?(adapter_name)
115
129
  end
116
130
 
131
+ def sqlserver?
132
+ ["SQLServer", "tinytds", "mssql"].include?(adapter_name)
133
+ end
134
+
117
135
  def adapter_name
118
- connection_model.connection.adapter_name
136
+ # prevent bad data source from taking down queries/new
137
+ connection_model.connection.adapter_name rescue nil
119
138
  end
120
139
 
121
140
  def schemas
122
- default_schema = (postgresql? || redshift?) ? "public" : connection_model.connection_config[:database]
123
141
  settings["schemas"] || [connection_model.connection_config[:schema] || default_schema]
124
142
  end
125
143
 
144
+ def default_schema
145
+ if postgresql? || redshift?
146
+ "public"
147
+ elsif sqlserver?
148
+ "dbo"
149
+ else
150
+ connection_model.connection_config[:database]
151
+ end
152
+ end
153
+
126
154
  def set_timeout(timeout)
127
155
  if postgresql? || redshift?
128
156
  execute("SET #{use_transaction? ? "LOCAL " : ""}statement_timeout = #{timeout.to_i * 1000}")
@@ -17,15 +17,8 @@ module Blazer
17
17
  end
18
18
 
19
19
  @adapter_instance =
20
- case adapter
21
- when "elasticsearch"
22
- Blazer::Adapters::ElasticsearchAdapter.new(self)
23
- when "mongodb"
24
- Blazer::Adapters::MongodbAdapter.new(self)
25
- when "presto"
26
- Blazer::Adapters::PrestoAdapter.new(self)
27
- when "sql"
28
- Blazer::Adapters::SqlAdapter.new(self)
20
+ if Blazer.adapters[adapter]
21
+ Blazer.adapters[adapter].new(self)
29
22
  else
30
23
  raise Blazer::Error, "Unknown adapter"
31
24
  end
@@ -1,3 +1,3 @@
1
1
  module Blazer
2
- VERSION = "1.7.7"
2
+ VERSION = "1.7.8"
3
3
  end
@@ -41,7 +41,10 @@ audit: true
41
41
  # class name of the user model
42
42
  # user_class: User
43
43
 
44
- # method name for the user model
44
+ # method name for the current user
45
+ # user_method: current_user
46
+
47
+ # method name for the display name
45
48
  # user_name: name
46
49
 
47
50
  # optional auth method to use as a before_action (default: nil)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blazer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.7
4
+ version: 1.7.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-17 00:00:00.000000000 Z
11
+ date: 2017-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  version: '0'
200
200
  requirements: []
201
201
  rubyforge_project:
202
- rubygems_version: 2.5.1
202
+ rubygems_version: 2.6.8
203
203
  signing_key:
204
204
  specification_version: 4
205
205
  summary: Explore your data with SQL. Easily create charts and dashboards, and share