module Apruve::Utils
Public Instance Methods
assert_required_keys(hash, params)
click to toggle source
http://pablomanrubia.com/2011/03/extending-ruby-to-validate-required-keys-in-a-hash-table/
def assert_required_keys
(hash, params)
params[:required] ||= [] params[:optional] ||= [] assert_valid_keys(hash, params[:required] + params[:optional]) pending_keys = params[:required] - hash.keys raise(ArgumentError, "Required key(s) not present: #{pending_keys.join(', ')}") unless pending_keys.empty?
end
# File lib/apruve/utils.rb, line 101 def assert_required_keys(hash, params) params[:required] ||= [] pending_keys = params[:required] - hash.keys raise(ArgumentError, "Required key(s) not present: #{pending_keys.join(', ')}") unless pending_keys.empty? end
assert_valid_keys(hash, *valid_keys)
click to toggle source
Validate all keys in a hash match *valid keys, raising ArgumentError on a mismatch. Note that keys are NOT treated indifferently, meaning if you use strings for keys but assert symbols as keys, this will fail.
Examples¶ ↑
{ :name => "Rob", :years => "28" }.assert_valid_keys(:name, :age) # => raises "ArgumentError: Unknown key(s): years" { :name => "Rob", :age => "28" }.assert_valid_keys("name", "age") # => raises "ArgumentError: Unknown key(s): name, age" { :name => "Rob", :age => "28" }.assert_valid_keys(:name, :age) # => passes, raises nothing
# File lib/apruve/utils.rb, line 87 def assert_valid_keys(hash, *valid_keys) unknown_keys = hash.keys - [valid_keys].flatten raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(', ')}") unless unknown_keys.empty? end
callable( callable_or_not )
click to toggle source
# File lib/apruve/utils.rb, line 5 def callable( callable_or_not ) callable_or_not.respond_to?(:call) ? callable_or_not : lambda { callable_or_not } end
camelize(underscored_word)
click to toggle source
# File lib/apruve/utils.rb, line 9 def camelize(underscored_word) underscored_word.to_s.gsub(/(?:^|_)(.)/) { $1.upcase } end
classify(table_name)
click to toggle source
# File lib/apruve/utils.rb, line 13 def classify(table_name) camelize singularize(table_name.to_s.sub(/.*\./, '')) end
demodulize(class_name_in_module)
click to toggle source
# File lib/apruve/utils.rb, line 17 def demodulize(class_name_in_module) class_name_in_module.to_s.sub(/^.*::/, '') end
extract_href_from_object(object)
click to toggle source
# File lib/apruve/utils.rb, line 39 def extract_href_from_object(object) object.respond_to?(:href) ? object.href : object end
indifferent_read_access(base = {})
click to toggle source
# File lib/apruve/utils.rb, line 43 def indifferent_read_access(base = {}) indifferent = Hash.new do |hash, key| hash[key.to_s] if key.is_a? Symbol end base.each_pair do |key, value| if value.is_a? Hash value = indifferent_read_access value elsif value.respond_to? :each if value.respond_to? :map! value.map! do |v| if v.is_a? Hash v = indifferent_read_access v end v end else value.map do |v| if v.is_a? Hash v = indifferent_read_access v end v end end end indifferent[key.to_s] = value end indifferent end
pluralize(word)
click to toggle source
# File lib/apruve/utils.rb, line 21 def pluralize(word) word.to_s.sub(/([^s])$/, '\1s') end
singularize(word)
click to toggle source
# File lib/apruve/utils.rb, line 25 def singularize(word) word.to_s.sub(/s$/, '').sub(/ie$/, 'y') end
stringify_keys!(hash)
click to toggle source
# File lib/apruve/utils.rb, line 72 def stringify_keys!(hash) hash.keys.each do |key| stringify_keys! hash[key] if hash[key].is_a? Hash hash[key.to_s] = hash.delete key if key.is_a? Symbol end end
underscore(camel_cased_word)
click to toggle source
# File lib/apruve/utils.rb, line 29 def underscore(camel_cased_word) word = camel_cased_word.to_s.dup word.gsub!(/::/, '/') word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2') word.gsub!(/([a-z\d])([A-Z])/, '\1_\2') word.tr! '-', '_' word.downcase! word end