summaryrefslogtreecommitdiff
path: root/lib/oxidized
diff options
context:
space:
mode:
authorSaku Ytti <saku@ytti.fi>2016-09-28 16:14:35 +0300
committerSaku Ytti <saku@ytti.fi>2016-09-28 16:14:35 +0300
commite638e7c9685d375afbfba2949943da1c542dae53 (patch)
treece2f25bfd9fadbb7480360fc7125c1b12ece9a10 /lib/oxidized
parenta4df8447d7126f3d333a95b97f688421684141e3 (diff)
interpolate node variable values
Empty value was variably considered "" or nil, now it will always be "" string. Now "nil", "false", "true" strings are converted to their respective types nil, false and true. This also means we cannot have verbatim strings by that name, like if your password was "false", you're shit out of luck. If this is the case, we can add some __false__ hack or consider other similar solutions. Fixes #500 Fixes #534 May break stuff with ""/nil changing now, but as it was not consistent to begin with, I find it acceptable. Users now may need to manually enter nil in some fields to regain old behaviour.
Diffstat (limited to 'lib/oxidized')
-rw-r--r--lib/oxidized/source/csv.rb8
-rw-r--r--lib/oxidized/source/http.rb6
-rw-r--r--lib/oxidized/source/source.rb12
-rw-r--r--lib/oxidized/source/sql.rb4
4 files changed, 24 insertions, 6 deletions
diff --git a/lib/oxidized/source/csv.rb b/lib/oxidized/source/csv.rb
index a0ce848..be5c4a6 100644
--- a/lib/oxidized/source/csv.rb
+++ b/lib/oxidized/source/csv.rb
@@ -20,7 +20,7 @@ class CSV < Source
nodes = []
open(File.expand_path @cfg.file).each_line do |line|
next if line.match(/^\s*#/)
- data = line.chomp.split @cfg.delimiter
+ data = line.chomp.split(@cfg.delimiter, -1)
next if data.empty?
# map node parameters
keys = {}
@@ -29,9 +29,11 @@ class CSV < Source
end
keys[:model] = map_model keys[:model] if keys.key? :model
- # map node specific vars, empty value is considered as nil
+ # map node specific vars
vars = {}
- @cfg.vars_map.each { |key, position| vars[key.to_sym] = data[position].to_s.empty? ? nil : data[position] }
+ @cfg.vars_map.each do |key, position|
+ vars[key.to_sym] = node_var_interpolate data[position]
+ end
keys[:vars] = vars unless vars.empty?
nodes << keys
diff --git a/lib/oxidized/source/http.rb b/lib/oxidized/source/http.rb
index 93361a2..38387ad 100644
--- a/lib/oxidized/source/http.rb
+++ b/lib/oxidized/source/http.rb
@@ -43,9 +43,11 @@ class HTTP < Source
end
keys[:model] = map_model keys[:model] if keys.key? :model
- # map node specific vars, empty value is considered as nil
+ # map node specific vars
vars = {}
- @cfg.vars_map.each { |key, position| vars[key.to_sym] = line[position].to_s.empty? ? nil : line[position] }
+ @cfg.vars_map.each do |key, position|
+ vars[key.to_sym] = node_var_interpolate line[position]
+ end
keys[:vars] = vars unless vars.empty?
nodes << keys
diff --git a/lib/oxidized/source/source.rb b/lib/oxidized/source/source.rb
index 7862dd1..9b8bc94 100644
--- a/lib/oxidized/source/source.rb
+++ b/lib/oxidized/source/source.rb
@@ -1,11 +1,23 @@
module Oxidized
class Source
class NoConfig < OxidizedError; end
+
def initialize
@map = (Oxidized.config.model_map or {})
end
+
def map_model model
@map.has_key?(model) ? @map[model] : model
end
+
+ def node_var_interpolate var
+ case var
+ when "nil" then nil
+ when "false" then false
+ when "true" then true
+ else var
+ end
+ end
+
end
end
diff --git a/lib/oxidized/source/sql.rb b/lib/oxidized/source/sql.rb
index fc1caa8..ba85447 100644
--- a/lib/oxidized/source/sql.rb
+++ b/lib/oxidized/source/sql.rb
@@ -31,7 +31,9 @@ class SQL < Source
# map node specific vars
vars = {}
- @cfg.vars_map.each { |key, sql_column| vars[key.to_sym] = node[sql_column.to_sym] }
+ @cfg.vars_map.each do |key, sql_column|
+ vars[key.to_sym] = node_var_interpolate node[sql_column.to_sym]
+ end
keys[:vars] = vars unless vars.empty?
nodes << keys