diff --git a/app/models/publication.rb b/app/models/publication.rb index 8170b3e0..62448039 100644 --- a/app/models/publication.rb +++ b/app/models/publication.rb @@ -36,22 +36,22 @@ class Publication < ApplicationRecord scope :unpublished, -> { where(published_at: nil) } scope :with_id, ->(id) do - nn, vv = id.to_s.split('@') + number_or_uuid, version = id.to_s.split('@') + number = Integer(number_or_uuid) rescue nil join_rel = joins(:publication_group) - or_rel = join_rel.where(publication_group: { uuid: nn }).or( - join_rel.where(publication_group: { number: nn }) - ) + or_rel = join_rel.where(publication_group: { uuid: number_or_uuid }) + or_rel = or_rel.or(join_rel.where(publication_group: { number: number })) unless number.nil? - rel = case vv + rel = case version when NilClass - join_rel.where(uuid: nn).or(or_rel.published) + join_rel.where(uuid: number_or_uuid).or(or_rel.published) when 'draft', 'd' or_rel.unpublished when 'latest' or_rel.chainable_latest else - or_rel.where(version: vv) + or_rel.where(version: version) end rel.order('"publication_group"."number" ASC').order(version: :desc) diff --git a/lib/publishable/active_record.rb b/lib/publishable/active_record.rb index 4edc13ec..26bede66 100644 --- a/lib/publishable/active_record.rb +++ b/lib/publishable/active_record.rb @@ -26,22 +26,23 @@ def publishable(options = {}) scope :unpublished, -> { joins(:publication).where(publication: { published_at: nil }) } scope :with_id, ->(id) do - nn, vv = id.to_s.split('@') + number_or_uuid, version = id.to_s.split('@') + number = Integer(number_or_uuid) rescue nil join_rel = joins(publication: :publication_group) - or_rel = join_rel.where(publication_group: { uuid: nn }).or( - join_rel.where(publication_group: { number: nn }) - ) + or_rel = join_rel.where(publication_group: { uuid: number_or_uuid }) + or_rel = or_rel.or(join_rel.where(publication_group: { number: number })) \ + unless number.nil? - rel = case vv + rel = case version when NilClass - join_rel.where(publication: { uuid: nn }).or(or_rel.published) + join_rel.where(publication: { uuid: number_or_uuid }).or(or_rel.published) when 'draft', 'd' or_rel.unpublished when 'latest' or_rel.chainable_latest else - or_rel.where(publication: { version: vv }) + or_rel.where(publication: { version: version }) end rel.order('"publication_group"."number" ASC').order('"publication"."version" DESC') diff --git a/spec/models/exercise_spec.rb b/spec/models/exercise_spec.rb index db034d2e..797b77fa 100644 --- a/spec/models/exercise_spec.rb +++ b/spec/models/exercise_spec.rb @@ -1,7 +1,6 @@ require 'rails_helper' RSpec.describe Exercise, type: :model do - subject(:exercise) { FactoryBot.create :exercise } it { is_expected.to have_many(:questions).dependent(:destroy).autosave(true) } @@ -74,5 +73,4 @@ expect(exercise.can_view_solutions?(user)).to eq false end end - end diff --git a/spec/models/publication_spec.rb b/spec/models/publication_spec.rb index 00738577..f759561f 100644 --- a/spec/models/publication_spec.rb +++ b/spec/models/publication_spec.rb @@ -1,4 +1,4 @@ -require "rails_helper" +require 'rails_helper' RSpec.describe Publication, type: :model do subject(:publication) { FactoryBot.create :publication }