module Mutations # The "mutations" gem has a concept called "filters". They allow for creation # of custom validation logic. # This particular one is for validating the shape of data that is stored in # an HStore column. class HstoreFilter < AdditionalFilter # At a minimum, expect the input to respond to these methods. HASHY_METHODS = [:[], :[]=, :map] def filter(input) not_hash = HASHY_METHODS .map{|x| input.respond_to?(x) } .uniq .include?(false) return [input, :not_hash] if not_hash output = input .map{|x| Pair.new(*x) } .inject({}) do |hash, pair| hash[pair.head.to_sym] = pair.tail.to_s hash end [output, nil] end end end