diff --git a/app/services/documentation_generator.rb b/app/services/documentation_generator.rb index 7708fb48e..8f476f717 100644 --- a/app/services/documentation_generator.rb +++ b/app/services/documentation_generator.rb @@ -94,6 +94,48 @@ class DocumentationGenerator end end + def get_all_sales_methods + validation_classes = [Validations::Sales::SetupValidations, + Validations::Sales::HouseholdValidations, + Validations::Sales::PropertyValidations, + Validations::Sales::FinancialValidations, + Validations::Sales::SaleInformationValidations, + Validations::SharedValidations, + Validations::LocalAuthorityValidations] + + all_validation_methods = validation_classes.map(&:instance_methods).flatten.select { |method| method.starts_with?("validate_") }.uniq + all_methods = validation_classes.map { |x| x.instance_methods + x.private_instance_methods }.flatten.uniq + + all_helper_methods = all_methods - all_validation_methods + [all_validation_methods, all_helper_methods] + end + + def get_soft_sales_methods + all_helper_methods = Validations::SoftValidations.private_instance_methods + Validations::Sales::SoftValidations.private_instance_methods + all_validation_methods = Validations::SoftValidations.instance_methods + Validations::Sales::SoftValidations.instance_methods + [all_helper_methods, all_validation_methods] + end + + def get_all_lettings_methods + validation_classes = [Validations::SetupValidations, + Validations::HouseholdValidations, + Validations::PropertyValidations, + Validations::FinancialValidations, + Validations::TenancyValidations, + Validations::DateValidations, + Validations::LocalAuthorityValidations] + all_validation_methods = validation_classes.map(&:instance_methods).flatten.select { |method| method.starts_with?("validate_") }.uniq + all_methods = validation_classes.map { |x| x.instance_methods + x.private_instance_methods }.flatten.uniq + all_helper_methods = all_methods - all_validation_methods + [all_validation_methods, all_helper_methods] + end + + def get_soft_lettings_methods + all_helper_methods = Validations::SoftValidations.private_instance_methods + all_validation_methods = Validations::SoftValidations.instance_methods + [all_helper_methods, all_validation_methods] + end + private def describe_hard_validation(client, meth, validation_source, helper_methods_source, form, file_path) diff --git a/lib/tasks/generate_lettings_documentation.rake b/lib/tasks/generate_lettings_documentation.rake index 1f43efbe9..422e9bf2d 100644 --- a/lib/tasks/generate_lettings_documentation.rake +++ b/lib/tasks/generate_lettings_documentation.rake @@ -8,29 +8,15 @@ namespace :generate_lettings_documentation do raise "No form found for given year" if form.blank? client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"]) - include Validations::SetupValidations - include Validations::HouseholdValidations - include Validations::PropertyValidations - include Validations::FinancialValidations - include Validations::TenancyValidations - include Validations::DateValidations - include Validations::LocalAuthorityValidations - all_validation_methods = public_methods.select { |method| method.starts_with?("validate_") } - all_methods = [Validations::SetupValidations, - Validations::HouseholdValidations, - Validations::PropertyValidations, - Validations::FinancialValidations, - Validations::TenancyValidations, - Validations::DateValidations, - Validations::LocalAuthorityValidations].map { |x| x.instance_methods + x.private_instance_methods }.flatten - all_helper_methods = all_methods - all_validation_methods - - DocumentationGenerator.new.describe_hard_validations(client, form, all_validation_methods, all_helper_methods, "lettings") + + documentation_generator = DocumentationGenerator.new + all_validation_methods, all_helper_methods = documentation_generator.get_all_lettings_methods + + documentation_generator.describe_hard_validations(client, form, all_validation_methods, all_helper_methods, "lettings") end desc "Generate documentation for soft lettings validations" task :describe_soft_lettings_validations, %i[year] => :environment do |_task, args| - include Validations::SoftValidations form_year = args[:year]&.to_i raise "Usage: rake generate_lettings_documentation:describe_soft_lettings_validations['year']" if form_year.blank? @@ -38,11 +24,10 @@ namespace :generate_lettings_documentation do raise "No form found for given year" if form.blank? client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"]) + documentation_generator = DocumentationGenerator.new + all_helper_methods, all_validation_methods = documentation_generator.get_soft_lettings_methods - all_helper_methods = Validations::SoftValidations.private_instance_methods - all_validation_methods = Validations::SoftValidations.instance_methods - - DocumentationGenerator.new.describe_soft_validations(client, form, all_validation_methods, all_helper_methods, "lettings") + documentation_generator.describe_soft_validations(client, form, all_validation_methods, all_helper_methods, "lettings") end desc "Generate documentation for hard bu lettings validations" diff --git a/lib/tasks/generate_sales_documentation.rake b/lib/tasks/generate_sales_documentation.rake index f5dd550fa..df6b31a60 100644 --- a/lib/tasks/generate_sales_documentation.rake +++ b/lib/tasks/generate_sales_documentation.rake @@ -8,31 +8,14 @@ namespace :generate_sales_documentation do raise "No form found for given year" if form.blank? client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"]) - include Validations::Sales::SetupValidations - include Validations::Sales::HouseholdValidations - include Validations::Sales::PropertyValidations - include Validations::Sales::FinancialValidations - include Validations::Sales::SaleInformationValidations - include Validations::SharedValidations - include Validations::LocalAuthorityValidations - all_validation_methods = public_methods.select { |method| method.starts_with?("validate_") } - all_methods = [Validations::Sales::SetupValidations, - Validations::Sales::HouseholdValidations, - Validations::Sales::PropertyValidations, - Validations::Sales::FinancialValidations, - Validations::Sales::SaleInformationValidations, - Validations::SharedValidations, - Validations::LocalAuthorityValidations].map { |x| x.instance_methods + x.private_instance_methods }.flatten - - all_helper_methods = all_methods - all_validation_methods - - DocumentationGenerator.new.describe_hard_validations(client, form, all_validation_methods, all_helper_methods, "sales") + + documentation_generator = DocumentationGenerator.new + all_validation_methods, all_helper_methods = documentation_generator.get_all_sales_methods + documentation_generator.describe_hard_validations(client, form, all_validation_methods, all_helper_methods, "sales") end desc "Generate documentation for soft sales validations" task :describe_soft_sales_validations, %i[year] => :environment do |_task, args| - include Validations::SoftValidations - include Validations::Sales::SoftValidations form_year = args[:year]&.to_i raise "Usage: rake generate_sales_documentation:describe_soft_sales_validations['year']" if form_year.blank? @@ -40,10 +23,10 @@ namespace :generate_sales_documentation do raise "No form found for given year" if form.blank? client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"]) - all_helper_methods = Validations::SoftValidations.private_instance_methods + Validations::Sales::SoftValidations.private_instance_methods - all_validation_methods = Validations::SoftValidations.instance_methods + Validations::Sales::SoftValidations.instance_methods + documentation_generator = DocumentationGenerator.new + all_helper_methods, all_validation_methods = documentation_generator.get_soft_sales_methods - DocumentationGenerator.new.describe_soft_validations(client, form, all_validation_methods, all_helper_methods, "sales") + documentation_generator.describe_soft_validations(client, form, all_validation_methods, all_helper_methods, "sales") end desc "Generate documentation for hard bu sales validations" diff --git a/spec/lib/tasks/generate_lettings_documentation_spec.rb b/spec/lib/tasks/generate_lettings_documentation_spec.rb index 6b7e8c2f6..3f75b458d 100644 --- a/spec/lib/tasks/generate_lettings_documentation_spec.rb +++ b/spec/lib/tasks/generate_lettings_documentation_spec.rb @@ -67,7 +67,7 @@ RSpec.describe "generate_lettings_documentation" do describe ":describe_lettings_validations", type: :task do subject(:task) { Rake::Task["generate_lettings_documentation:describe_lettings_validations"] } - let(:documentation_generator) { instance_double(DocumentationGenerator, describe_bu_validations: nil) } + let(:documentation_generator) { instance_double(DocumentationGenerator, describe_bu_validations: nil, get_all_lettings_methods: []) } let(:client) { instance_double(OpenAI::Client) } before do @@ -179,7 +179,7 @@ RSpec.describe "generate_lettings_documentation" do describe ":describe_soft_lettings_validations", type: :task do subject(:task) { Rake::Task["generate_lettings_documentation:describe_soft_lettings_validations"] } - let(:documentation_generator) { instance_double(DocumentationGenerator, describe_bu_validations: nil) } + let(:documentation_generator) { instance_double(DocumentationGenerator, describe_bu_validations: nil, get_soft_lettings_methods: []) } let(:client) { instance_double(OpenAI::Client) } before do diff --git a/spec/lib/tasks/generate_sales_documentation_spec.rb b/spec/lib/tasks/generate_sales_documentation_spec.rb index 2766b921d..fbda8036a 100644 --- a/spec/lib/tasks/generate_sales_documentation_spec.rb +++ b/spec/lib/tasks/generate_sales_documentation_spec.rb @@ -67,7 +67,7 @@ RSpec.describe "generate_sales_documentation" do describe ":describe_sales_validations", type: :task do subject(:task) { Rake::Task["generate_sales_documentation:describe_sales_validations"] } - let(:documentation_generator) { instance_double(DocumentationGenerator, describe_bu_validations: nil) } + let(:documentation_generator) { instance_double(DocumentationGenerator, describe_bu_validations: nil, get_all_sales_methods: []) } let(:client) { instance_double(OpenAI::Client) } before do @@ -179,7 +179,7 @@ RSpec.describe "generate_sales_documentation" do describe ":describe_soft_sales_validations", type: :task do subject(:task) { Rake::Task["generate_sales_documentation:describe_soft_sales_validations"] } - let(:documentation_generator) { instance_double(DocumentationGenerator, describe_bu_validations: nil) } + let(:documentation_generator) { instance_double(DocumentationGenerator, describe_bu_validations: nil, get_soft_sales_methods: []) } let(:client) { instance_double(OpenAI::Client) } before do