splitting the gem to different classes, allow to handle config from initializers or yml file.