Files
nairobi/app/models/sdg/local_target.rb
Javi Martín cb57a4696d Add method to easily access a local target by code
Similar to what we do in goals and targets.
2021-01-26 19:10:12 +01:00

44 lines
917 B
Ruby

class SDG::LocalTarget < ApplicationRecord
include Comparable
include SDG::Related
delegate :goal, to: :target
translates :title, touch: true
translates :description, touch: true
include Globalizable
validates_translation :title, presence: true
validates_translation :description, presence: true
validates :code, presence: true, uniqueness: true,
format: ->(local_target) { /\A#{local_target.target&.code}\.\d+/ }
validates :target, presence: true
belongs_to :target
def self.[](code)
find_by!(code: code)
end
def <=>(any_target)
if any_target.class == self.class
[target, numeric_subcode] <=> [any_target.target, any_target.numeric_subcode]
elsif any_target.class == target.class
-1 * (any_target <=> self)
end
end
protected
def numeric_subcode
subcode.to_i
end
private
def subcode
code.split(".").last
end
end