renamed class to be more explicit
moved logic of creating dict from map into subclass
allow spec to be populated from param