diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..30b4756 --- /dev/null +++ b/src/main.py @@ -0,0 +1,54 @@ +from pathlib import Path +from typing import List, Optional +import argparse +import yaml + +from requirements_to_gherkin.parser import RequirementsParser +from requirements_to_gherkin.generator import GherkinGenerator + + +def load_config(config_path: Optional[Path] = None) -> dict: + if config_path is None or not config_path.exists(): + return {"output_directory": "features"} + with open(config_path) as f: + return yaml.safe_load(f) + + +def main(args: Optional[List[str]] = None) -> None: + parser = argparse.ArgumentParser( + description="Convert natural language requirements to Gherkin feature files" + ) + parser.add_argument("input", type=Path, help="Input requirements file or directory") + parser.add_argument( + "-o", "--output", type=Path, default=Path("features"), help="Output directory" + ) + parser.add_argument( + "-c", "--config", type=Path, help="Configuration file" + ) + parsed_args = parser.parse_args(args) + + config = load_config(parsed_args.config) + output_dir = parsed_args.output or Path(config.get("output_directory", "features")) + output_dir.mkdir(parents=True, exist_ok=True) + + requirements_parser = RequirementsParser() + gherkin_generator = GherkinGenerator() + + input_path = parsed_args.input + if input_path.is_file(): + requirements = requirements_parser.parse_file(input_path) + features = gherkin_generator.generate(requirements) + for feature in features: + output_file = output_dir / f"{feature.name.lower().replace(' ', '_')}.feature" + output_file.write_text(feature.to_gherkin()) + else: + for req_file in input_path.glob("*.txt"): + requirements = requirements_parser.parse_file(req_file) + features = gherkin_generator.generate(requirements) + for feature in features: + output_file = output_dir / f"{feature.name.lower().replace(' ', '_')}.feature" + output_file.write_text(feature.to_gherkin()) + + +if __name__ == "__main__": + main()