make storage.rb an abstract provider (like package)