Module: Sensu::Utilities

Included in:
Client, Server, Settings
Defined in:
lib/sensu/utilities.rb

Instance Method Summary collapse

Instance Method Details

#deep_diff(hash_one, hash_two) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/sensu/utilities.rb', line 47

def deep_diff(hash_one, hash_two)
  keys = hash_one.keys.concat(hash_two.keys).uniq
  keys.inject(Hash.new) do |diff, key|
    unless hash_one[key] == hash_two[key]
      if hash_one[key].is_a?(Hash) && hash_two[key].is_a?(Hash)
        diff[key] = deep_diff(hash_one[key], hash_two[key])
      else
        diff[key] = [hash_one[key], hash_two[key]]
      end
    end
    diff
  end
end

#deep_merge(hash_one, hash_two) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/sensu/utilities.rb', line 32

def deep_merge(hash_one, hash_two)
  merged = hash_one.dup
  hash_two.each do |key, value|
    merged[key] = case
    when hash_one[key].is_a?(Hash) && value.is_a?(Hash)
      deep_merge(hash_one[key], value)
    when hash_one[key].is_a?(Array) && value.is_a?(Array)
      hash_one[key].concat(value).uniq
    else
      value
    end
  end
  merged
end

#indifferent_hashObject



15
16
17
18
19
20
21
# File 'lib/sensu/utilities.rb', line 15

def indifferent_hash
  Hash.new do |hash, key|
    if key.is_a?(String)
      hash[key.to_sym]
    end
  end
end

#redact_sensitive(hash, keys = nil) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/sensu/utilities.rb', line 61

def redact_sensitive(hash, keys=nil)
  keys ||= %w[
    password passwd pass
    api_key api_token
    access_key secret_key private_key
    secret
  ]
  hash = hash.dup
  hash.each do |key, value|
    if keys.include?(key.to_s)
      hash[key] = "REDACTED"
    elsif value.is_a?(Hash)
      hash[key] = redact_sensitive(value, keys)
    elsif value.is_a?(Array)
      hash[key] = value.map do |item|
        item.is_a?(Hash) ? redact_sensitive(item, keys) : item
      end
    end
  end
  hash
end

#retry_until_true(wait = 0.5, &block) ⇒ Object



7
8
9
10
11
12
13
# File 'lib/sensu/utilities.rb', line 7

def retry_until_true(wait=0.5, &block)
  EM::Timer.new(wait) do
    unless block.call
      retry_until_true(wait, &block)
    end
  end
end

#testing?Boolean

Returns:

  • (Boolean)


3
4
5
# File 'lib/sensu/utilities.rb', line 3

def testing?
  File.basename($0) == 'rspec'
end

#with_indifferent_access(hash) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/sensu/utilities.rb', line 23

def with_indifferent_access(hash)
  hash = indifferent_hash.merge(hash)
  hash.each do |key, value|
    if value.is_a?(Hash)
      hash[key] = with_indifferent_access(value)
    end
  end
end