Created
December 28, 2010 17:09
-
-
Save acuppy/757421 to your computer and use it in GitHub Desktop.
Hash extension to add addition assertions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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