diff options
Diffstat (limited to 'lib/oxidized/source')
| -rw-r--r-- | lib/oxidized/source/http.rb | 28 | 
1 files changed, 12 insertions, 16 deletions
diff --git a/lib/oxidized/source/http.rb b/lib/oxidized/source/http.rb index 55dcd4c..bf1e74c 100644 --- a/lib/oxidized/source/http.rb +++ b/lib/oxidized/source/http.rb @@ -39,21 +39,20 @@ module Oxidized        response = http.request(request)        data = JSON.parse(response.body) +      data = string_navigate(data, @cfg.hosts_location) if @cfg.hosts_location?        data.each do |node|          next if node.empty?          # map node parameters          keys = {}          @cfg.map.each do |key, want_position| -          want_positions = want_position.split('.') -          keys[key.to_sym] = node_var_interpolate node.dig(*want_positions) +          keys[key.to_sym] = node_var_interpolate string_navigate(node, want_position)          end          keys[:model] = map_model keys[:model] if keys.has_key? :model          # map node specific vars          vars = {}          @cfg.vars_map.each do |key, want_position| -          want_positions = want_position.split('.') -          vars[key.to_sym] = node_var_interpolate node.dig(*want_positions) +          vars[key.to_sym] = node_var_interpolate string_navigate(node, want_position)          end          keys[:vars] = vars unless vars.empty? @@ -61,20 +60,17 @@ module Oxidized        end        nodes      end -  end -end -if RUBY_VERSION < '2.3' -  class Hash -    def dig(key, *rest) -      value = self[key] -      if value.nil? || rest.empty? -        value -      elsif value.respond_to?(:dig) -        value.dig(*rest) -      else # foo.bar.baz (bar exist but is not hash) -        return nil +    private + +    def string_navigate object, wants +      wants.split(".").map do |want| +        head, match, _tail = want.partition(/\[\d+\]/) +        match.empty? ? head : [head, match[1..-2].to_i] +      end.flatten.each do |want| +        object = object[want] if object.respond_to? :each        end +      object      end    end  end  | 
