From dd31121ca464994337245fc2894dbae35babd03d Mon Sep 17 00:00:00 2001 From: Larry Gebhardt Date: Fri, 22 Feb 2019 17:51:14 -0500 Subject: [PATCH] Add rake task to check the upgrade for orphaned overrides --- lib/jsonapi-resources.rb | 1 + lib/jsonapi/resources/railtie.rb | 9 ++++++ lib/tasks/check_upgrade.rake | 52 ++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 lib/jsonapi/resources/railtie.rb create mode 100644 lib/tasks/check_upgrade.rake diff --git a/lib/jsonapi-resources.rb b/lib/jsonapi-resources.rb index bafa53788..76580e2a0 100644 --- a/lib/jsonapi-resources.rb +++ b/lib/jsonapi-resources.rb @@ -1,3 +1,4 @@ +require 'jsonapi/resources/railtie' require 'jsonapi/naive_cache' require 'jsonapi/compiled_json' require 'jsonapi/resource' diff --git a/lib/jsonapi/resources/railtie.rb b/lib/jsonapi/resources/railtie.rb new file mode 100644 index 000000000..a2d92c1c5 --- /dev/null +++ b/lib/jsonapi/resources/railtie.rb @@ -0,0 +1,9 @@ +module JSONAPI + module Resources + class Railtie < Rails::Railtie + rake_tasks do + load 'tasks/check_upgrade.rake' + end + end + end +end \ No newline at end of file diff --git a/lib/tasks/check_upgrade.rake b/lib/tasks/check_upgrade.rake new file mode 100644 index 000000000..34ddef4a6 --- /dev/null +++ b/lib/tasks/check_upgrade.rake @@ -0,0 +1,52 @@ +require 'rake' +require 'jsonapi-resources' + +namespace :jsonapi do + namespace :resources do + desc 'Checks application for orphaned overrides' + task :check_upgrade => :environment do + Rails.application.eager_load! + + resource_klasses = ObjectSpace.each_object(Class).select { |klass| klass < JSONAPI::Resource} + + puts "Checking #{resource_klasses.count} resources" + + issues_found = 0 + + klasses_with_deprecated = resource_klasses.select { |klass| klass.methods.include?(:find_records) } + unless klasses_with_deprecated.empty? + puts " Found the following resources the still implement `find_records`:" + klasses_with_deprecated.each { |klass| puts " #{klass}"} + puts " The `find_records` method is no longer called by JR. Please review and ensure your functionality is ported over." + + issues_found = issues_found + klasses_with_deprecated.length + end + + klasses_with_deprecated = resource_klasses.select { |klass| klass.methods.include?(:records_for) } + unless klasses_with_deprecated.empty? + puts " Found the following resources the still implement `records_for`:" + klasses_with_deprecated.each { |klass| puts " #{klass}"} + puts " The `records_for` method is no longer called by JR. Please review and ensure your functionality is ported over." + + issues_found = issues_found + klasses_with_deprecated.length + end + + klasses_with_deprecated = resource_klasses.select { |klass| klass.methods.include?(:apply_includes) } + unless klasses_with_deprecated.empty? + puts " Found the following resources the still implement `apply_includes`:" + klasses_with_deprecated.each { |klass| puts " #{klass}"} + puts " The `apply_includes` method is no longer called by JR. Please review and ensure your functionality is ported over." + + issues_found = issues_found + klasses_with_deprecated.length + end + + if issues_found > 0 + puts "Finished inspection. #{issues_found} issues found that may impact upgrading. Please address these issues. " + else + puts "Finished inspection with no issues found. Note this is only a cursory check for method overrides that will no \n" \ + "longer be called by JSONAPI::Resources. This check in no way assures your code will continue to function as \n" \ + "it did before the upgrade. Please do adequate testing before using in production." + end + end + end +end