Skip to content

Commit

Permalink
sacar los cambios de preloader
Browse files Browse the repository at this point in the history
  • Loading branch information
RenzoMinelli committed Feb 13, 2025
1 parent ab342b7 commit 5dc28e8
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 32 deletions.
2 changes: 1 addition & 1 deletion app/controllers/approvals_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def render_turbo_stream
if params[:subject_show] == "true"
@subject = @approvable.subject
else
@subjects = TreePreloader.new.preload_subjects.select do |subject|
@subjects = TreePreloader.new.preload.select do |subject|
current_student.approved?(subject.course) ||
(!subject.hidden_by_default? && current_student.available?(subject.course))
end
Expand Down
6 changes: 1 addition & 5 deletions app/controllers/subject_plans_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,12 @@ def set_planned_and_not_planned_subjects
@subject_plans = current_user.subject_plans.includes(:subject).order(:semester)
tree_preloader.preload_subject_array(@subject_plans.map(&:subject))

@not_planned_approved_subjects, @not_planned_subjects = tree_preloader.preload_subjects.reject { |subject|
@not_planned_approved_subjects, @not_planned_subjects = TreePreloader.new.preload.reject { |subject|
current_user.planned?(subject)
}.partition { |subject| current_student.approved?(subject) }
end

def subject_plan_params
params.require(:subject_plan).permit(:subject_id, :semester)
end

def tree_preloader
@tree_preloader ||= TreePreloader.new
end
end
4 changes: 2 additions & 2 deletions app/controllers/subjects_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class SubjectsController < ApplicationController
def index
@subjects = TreePreloader.new.preload_subjects.select do |subject|
@subjects = TreePreloader.new.preload.select do |subject|
current_student.approved?(subject.course) ||
(!subject.hidden_by_default? && current_student.available?(subject.course))
end
Expand All @@ -23,7 +23,7 @@ def all
.or(Subject.where("lower(code) LIKE lower(?)", "%#{params[:search].strip}%"))
end

@subjects = TreePreloader.new.preload_subjects(subjects)
@subjects = TreePreloader.new.preload(subjects)
end

private
Expand Down
31 changes: 11 additions & 20 deletions app/services/tree_preloader.rb
Original file line number Diff line number Diff line change
@@ -1,34 +1,25 @@
class TreePreloader
def preload_subjects(subjects = nil)
subjects ||= Subject.all
def initialize(subjects = nil)
@subjects = subjects || Subject.all
end

def preload
# rubocop:disable Rails/FindEach
subjects
.ordered_by_category_and_name
.includes(
course: :prerequisite_tree,
exam: :prerequisite_tree
).map do |subject|
preload_approvables(subject)
end
end

def preload_subject_array(subjects)
ActiveRecord::Associations::Preloader.new(
records: subjects,
associations: [course: :prerequisite_tree, exam: :prerequisite_tree],
).call

subjects.map do |subject|
preload_approvables(subject)
).each do |subject|
preload_prerequisite(subject.course.prerequisite_tree) if subject.course&.prerequisite_tree
preload_prerequisite(subject.exam.prerequisite_tree) if subject.exam&.prerequisite_tree
end
# rubocop:enable Rails/FindEach
end

private

def preload_approvables(subject)
preload_prerequisite(subject.course.prerequisite_tree) if subject.course&.prerequisite_tree
preload_prerequisite(subject.exam.prerequisite_tree) if subject.exam&.prerequisite_tree
subject
end
attr_reader :subjects

def preload_prerequisite(prereq)
case prereq
Expand Down
8 changes: 4 additions & 4 deletions test/services/tree_preloader_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class TreePreloaderTest < ActiveSupport::TestCase
s2 = create :subject, :with_exam, name: "s2"
create :subject_prerequisite, approvable: s2.course, approvable_needed: s1.course

subjects = TreePreloader.new.preload_subjects.sort_by(&:name)
subjects = TreePreloader.new.preload.sort_by(&:name)

Subject.destroy_all
Approvable.destroy_all
Expand Down Expand Up @@ -36,19 +36,19 @@ class TreePreloaderTest < ActiveSupport::TestCase
s2 = create :subject, :with_exam, name: "s2"
create :subject_prerequisite, approvable: s2.course, approvable_needed: s1.course

subjects = TreePreloader.new.preload_subjects(Subject.where(id: s2))
subjects = TreePreloader.new.preload(Subject.where(id: s2))

assert_equal 1, subjects.count
assert_equal "s2", subjects.first.name

assert_equal SubjectPrerequisite, subjects.first.course.prerequisite_tree.class
assert_equal s1.course, subjects.first.course.prerequisite_tree.approvable_needed

subjects = TreePreloader.new.preload_subjects(Subject.where(name: 'does_not_exist'))
subjects = TreePreloader.new.preload(Subject.where(name: 'does_not_exist'))

assert_equal 0, subjects.count

subjects = TreePreloader.new.preload_subjects
subjects = TreePreloader.new.preload

assert_equal 2, subjects.count
assert_equal "s1", subjects.first.name
Expand Down

0 comments on commit 5dc28e8

Please sign in to comment.