Jelajahi Sumber

Added variable defaults

Andrew Kane 8 tahun lalu
induk
melakukan
528b42998c

+ 4 - 0
CHANGELOG.md

@@ -1,3 +1,7 @@
+## 1.1.2 [unreleased]
+
+- Added variable defaults
+
 ## 1.1.1
 
 - Added `before_action` option

+ 4 - 1
app/controllers/blazer/base_controller.rb

@@ -23,8 +23,11 @@ module Blazer
       render text: "BLAZER_DATABASE_URL required" if !ENV["BLAZER_DATABASE_URL"] && !Rails.env.development?
     end
 
-    def process_vars(statement)
+    def process_vars(statement, data_source)
       (@bind_vars ||= []).concat(extract_vars(statement)).uniq!
+      @bind_vars.each do |var|
+        params[var] ||= Blazer.data_sources[data_source].variable_defaults[var]
+      end
       @success = @bind_vars.all? { |v| params[v] }
 
       if @success

+ 2 - 2
app/controllers/blazer/dashboards_controller.rb

@@ -23,7 +23,7 @@ module Blazer
     def show
       @queries = @dashboard.dashboard_queries.order(:position).preload(:query).map(&:query)
       @queries.each do |query|
-        process_vars(query.statement)
+        process_vars(query.statement, query.data_source)
       end
       @bind_vars ||= []
 
@@ -62,7 +62,7 @@ module Blazer
       @dashboard.queries.each do |query|
         data_source = Blazer.data_sources[query.data_source]
         statement = query.statement.dup
-        process_vars(statement)
+        process_vars(statement, query.data_source)
         Blazer.transform_statement.call(data_source, statement) if Blazer.transform_statement
         data_source.clear_cache(statement)
       end

+ 4 - 4
app/controllers/blazer/queries_controller.rb

@@ -35,7 +35,7 @@ module Blazer
 
     def show
       @statement = @query.statement.dup
-      process_vars(@statement)
+      process_vars(@statement, @query.data_source)
 
       @smart_vars = {}
       @sql_errors = []
@@ -57,13 +57,13 @@ module Blazer
 
     def run
       @statement = params[:statement]
-      process_vars(@statement)
+      data_source = params[:data_source]
+      process_vars(@statement, data_source)
       @only_chart = params[:only_chart]
 
       if @success
         @query = Query.find_by(id: params[:query_id]) if params[:query_id]
 
-        data_source = params[:data_source]
         data_source = @query.data_source if @query && @query.data_source
         @data_source = Blazer.data_sources[data_source]
         Blazer.transform_statement.call(@data_source, @statement) if Blazer.transform_statement
@@ -146,7 +146,7 @@ module Blazer
     def refresh
       data_source = Blazer.data_sources[@query.data_source]
       @statement = @query.statement.dup
-      process_vars(@statement)
+      process_vars(@statement, @query.data_source)
       Blazer.transform_statement.call(data_source, @statement) if Blazer.transform_statement
       data_source.clear_cache(@statement)
       redirect_to query_path(@query, variable_params)

+ 4 - 0
lib/blazer/data_source.rb

@@ -32,6 +32,10 @@ module Blazer
       settings["smart_variables"] || {}
     end
 
+    def variable_defaults
+      settings["variable_defaults"] || {}
+    end
+
     def timeout
       settings["timeout"]
     end