You have a method whose implementation steps are so common that they can safely be hidden away.
Declare the behavior by calling a class method from the class definition.
class SearchCriteria... def initialize(hash) @author_id = hash[:author_id] @publisher_id = hash[:publisher_id] @isbn = hash[:isbn] end
class SearchCriteria... hash_initializer :author_id, :publisher_id, :isbn