فهرست منبع

Support smart_variables as a Hash or Array (#20)

Phạm Trung Nam 8 سال پیش
والد
کامیت
1e7b093201

+ 14 - 0
app/controllers/blazer/base_controller.rb

@@ -50,6 +50,20 @@ module Blazer
       end
     end
 
+    def parse_smart_variables(var, data_source)
+      query = data_source.smart_variables[var]
+      if query.is_a? Hash
+        smart_var = query.map { |k,v| [v, k] }
+      elsif query.is_a? Array
+        smart_var = query.map { |v| [v, v] }
+      elsif query
+        result = data_source.run_statement(query)
+        smart_var = result.rows.map { |v| v.reverse }
+        error = result.error if result.error
+      end
+      return smart_var, error
+    end
+
     def extract_vars(statement)
       # strip commented out lines
       # and regex {1} or {1,2}

+ 3 - 6
app/controllers/blazer/dashboards_controller.rb

@@ -35,12 +35,9 @@ module Blazer
       @data_sources = @queries.map { |q| Blazer.data_sources[q.data_source] }.uniq
       @bind_vars.each do |var|
         @data_sources.each do |data_source|
-          query = data_source.smart_variables[var]
-          if query
-            result = data_source.run_statement(query)
-            ((@smart_vars[var] ||= []).concat(result.rows.map { |v| v.reverse })).uniq!
-            @sql_errors << result.error if result.error
-          end
+          smart_var, error = parse_smart_variables(var, data_source)
+          ((@smart_vars[var] ||= []).concat(smart_var)).uniq! if smart_var
+          @sql_errors << error if error
         end
       end
     end

+ 3 - 6
app/controllers/blazer/queries_controller.rb

@@ -55,12 +55,9 @@ module Blazer
       @sql_errors = []
       data_source = Blazer.data_sources[@query.data_source]
       @bind_vars.each do |var|
-        query = data_source.smart_variables[var]
-        if query
-          result = data_source.run_statement(query)
-          @smart_vars[var] = result.rows.map { |v| v.reverse }
-          @sql_errors << result.error if result.error
-        end
+        smart_var, error = parse_smart_variables(var, data_source)
+        @smart_vars[var] = smart_var if smart_var
+        @sql_errors << error if error
       end
 
       Blazer.transform_statement.call(data_source, @statement) if Blazer.transform_statement

+ 4 - 0
lib/generators/blazer/templates/config.yml

@@ -23,6 +23,10 @@ data_sources:
 
     smart_variables:
       # zone_id: "SELECT id, name FROM zones ORDER BY name ASC"
+      #=== You can use it as Array
+      # zone_name: ['Zone 1', 'Zone 2']
+      #=== or as Hash
+      # zone_type: {type_1: 'Type 1', type_2: 'Type 2'}
 
     linked_columns:
       # user_id: "/admin/users/{value}"