Sha256: 8925410fec33677420f5ac0878b669e8ee0fcf1f947dda4fccbd011e1245750d

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

class Unico::SimilarityControl < Unico::Model
  extend EnumerateIt

  self.abstract_class = true
  self.table_name = :unico_similarity_controls

  has_many :similarity_control_items, dependent: :destroy
  has_many :similarity_control_tables, dependent: :destroy

  has_enumeration_for :table_name, with: SimilarityTable
  has_enumeration_for :job_status, create_helpers: true

  accepts_nested_attributes_for :similarity_control_items

  validates :table_name, :column_name, :similarity, presence: true
  validates :similarity, numericality: { greater_than: 0, less_than: 101 }
  validates :job_status, presence: true

  before_create :set_reference_column

  orderize

  def to_s
    "#{table_name} / #{column_name}"
  end

  def similarity_percent
    similarity / 100.00
  end

  def can_edit?
    similarity_control_tables.blank?
  end

  def agglutinated?
    !can_edit?
  end

  def extra_info
    case table_name
    when SimilarityTable::UNICO_STREETS then 'Bairros'
    end
  end

  def mark_as_processed!
    update_column(:job_status, JobStatus::PROCESSED)
  end

  def mark_as_error_processing!
    update_column(:job_status, JobStatus::ERROR)
  end

  private

  def set_reference_column
    # unico_street_types >> street_type_id
    self.reference_column = table_name.split('_')[1..10].join('_').singularize + '_id'
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
unico-training-7.8.0 app/models/unico/similarity_control.rb