Skip to content

Instantly share code, notes, and snippets.

@acuppy
Created December 28, 2010 17:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save acuppy/757421 to your computer and use it in GitHub Desktop.
Save acuppy/757421 to your computer and use it in GitHub Desktop.
Hash extension to add addition assertions
class Hash
# Confirms that a key is set in the Hash
def assert_required_keys(*required_keys)
missing_keys = []
[required_keys].flatten.each { |k| missing_keys << k unless keys.has_key?(k) }
raise(ArgumentError, "Missing required key(s): #{missing_keys.join(", ")}") unless missing_keys.empty?
end
# Confirms that a key is present and that is has value
def assert_required_keys!(*required_keys)
assert_required_keys(required_keys)
empty_keys, required_keys = [], [required_keys].flatten
required_keys.each { |k| empty_keys << k if keys[k].nil? }
raise(ArgumentError, "Required key has no value: #{empty_keys.join(", ")}") unless empty_keys.empty?
end
# assert_dependent_keys( :scope => [:modifier, :object], :person => [:site, :group] )
# If parent is not present it is bypassed. Only dependencies are required.
def assert_presence_of_dependent_keys(*dependents)
dependents.each { |set| set.each { |k,v| v.each { |required_key| assert_required_keys(required_key) } }
end
# requires that the parent is also provided as a key
def assert_presence_of_dependent_keys!(*dependents)
dependents.each { |set| set.each { |k,v| assert_required_keys(k); v.each { |r| assert_required_keys(r) } } }
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment