There is a constant, a long hash of key IDs (Gosu) and symbols (such as :enter, :esc, :W, :w, :tab etc.). In the current form, I have a loop that iterates through the hash and checks whether that particular key is pressed, then it adds the appropriate symbol into another hash, which tracks pressed keys (as well as released).[....]
I dread the actual game engine; how would I handle game states, transitions, interface, logic, data? [....]
How to define skills and abilities? How to define items, equipment, ability to equip items? [....]
can't wait when I get to pathfinding, FOV and AI implementations. [....]
It sounds like you're doing great so I wouldn't be discouraged at all (you don't sound like you are really).
A little off-topic, but to respond:
Your key handling looks OK to me! That method actually is quite common.
In my first roguelike I handled states very simply. I had a hash of state strings which mapped to functions. Each update called a variable that contained the current state function. When the state changed, I updated the variable by finding the appropriate state function in the hash. I did this for gameplay, input, and rendering update methods at the same time.
An alternative way I've used is to keep a list of states. The update method calls the first state, which runs its update method. When you want to add a state you add it to the list (for example, you would push a pause state on top of the list).
For skills and abilities a very easy way is just to keep a list or hash of properties on each entity. Inventory also can be a hash with keys being slot strings that define what you can put there.
For FOV and so on, you might like to look at other roguelikes for inspiration, and some libs like libtcod and things like the roguelike development usenet group or the roguebasin wiki for educational value.
As a matter of fact...you could consider writing a Ruby wrapper for libtcod! That's be great and really leverage your work for others, while at the same time boosting your efforts with everything in the libtcod library.