Problems with this approach:
- Schema is scattered in all the validation methods. It would be good to keep schema at one place. 

- All Validate_* methods do similar stuff. They hold their own schema and call check_data_against_schema(config, schema, next_validator_to_be_invoked). This makes Validator complex, because I will have to add a new method for every Hash and Array type field in config. As schema grows , code size will grow.


Solution: 

This is how I would like to implement it. Launcher schema should be declared as a module. We need to iterate over the schema & config recursively, schema should ideally tell me what all validators are applicable for a particular field. 

E.g : ```schema => ip_address: { type: ip, required: false, allowed_empty: false } ``` should invoke BasicValidator , IPValidator.
BasicValidator does mandatory_field and allowed_empty checks, IPValidator checks that ip_address follows the correct ipv4 format.