From 1c2e38ea005cb1cc96d117c3354d32c5fc32e6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Mon, 29 Apr 2019 14:21:38 +0200 Subject: [PATCH] Use metaprogramming for report methods We're going to add an `advanced_stats` report, and having 3 identical sets of methods would be too much duplication. --- app/models/concerns/reportable.rb | 23 ++++++++--------------- app/models/report.rb | 2 ++ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/app/models/concerns/reportable.rb b/app/models/concerns/reportable.rb index 9f58b0003..45cc7b328 100644 --- a/app/models/concerns/reportable.rb +++ b/app/models/concerns/reportable.rb @@ -10,21 +10,14 @@ module Reportable super || build_report end - def results_enabled? - report&.results? - end - alias_method :results_enabled, :results_enabled? + Report::KINDS.each do |kind| + define_method "#{kind}_enabled?" do + report.send(kind) + end + alias_method "#{kind}_enabled", "#{kind}_enabled?" - def stats_enabled? - report&.stats? - end - alias_method :stats_enabled, :stats_enabled? - - def results_enabled=(enabled) - report.results = enabled - end - - def stats_enabled=(enabled) - report.stats = enabled + define_method "#{kind}_enabled=" do |enabled| + report.send("#{kind}=", enabled) + end end end diff --git a/app/models/report.rb b/app/models/report.rb index 11471bcf2..5e1f3dcb1 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -1,3 +1,5 @@ class Report < ApplicationRecord + KINDS = %i[results stats] + belongs_to :process, polymorphic: true end