Separate asset interfaces, remove boilerplate ruby