Sha256: 67f704cf3b1a82beb4054ef2de69d2849cb0dc1380a0a989813cb30602d0adee

Contents?: true

Size: 1.08 KB

Versions: 37

Compression:

Stored size: 1.08 KB

Contents

class Qa::SubjectMeshTerm < ActiveRecord::Base
  has_many :mesh_trees, foreign_key: "term_id"

  def self.from_tree_number(tree_id)
    Qa::SubjectMeshTerm.joins('INNER JOIN qa_mesh_trees ON qa_subject_mesh_terms.term_id = qa_mesh_trees.term_id').where('qa_mesh_trees.tree_number = ?', tree_id)
  end

  def trees
    Qa::MeshTree.where(term_id: term_id).map(&:tree_number)
  end

  def synonyms
    s = self[:synonyms]
    s.nil? ? [] : s.split("|")
  end

  def synonyms=(syn_list)
    self[:synonyms] = syn_list.respond_to?(:join) ? syn_list.join('|') : syn_list
  end

  def parents
    t = trees
    t.map { |tn| initial_segements_of(tn) }.flatten.uniq.map { |tn| Qa::SubjectMeshTerm.from_tree_number(tn) }
  end

  private

    # Return all of the intial segements of our tree number,
    # from most general to most specific
    # e.g. 'D03.456.23.789' returns ['D03', 'D03.456', 'D03.456.23', 'D03.456.23.789']
    def initial_segements_of(s)
      result = []
      loop do
        result << s
        s = s.rpartition('.').first
        break if s.empty?
      end
      result.reverse
    end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
qa-5.14.0 app/models/qa/subject_mesh_term.rb
qa-5.13.0 app/models/qa/subject_mesh_term.rb
qa-5.12.0 app/models/qa/subject_mesh_term.rb
qa-5.11.0 app/models/qa/subject_mesh_term.rb
qa-5.10.0 app/models/qa/subject_mesh_term.rb
qa-5.9.0 app/models/qa/subject_mesh_term.rb
qa-5.8.1 app/models/qa/subject_mesh_term.rb
qa-5.8.0 app/models/qa/subject_mesh_term.rb
qa-5.7.0 app/models/qa/subject_mesh_term.rb
qa-5.6.0 app/models/qa/subject_mesh_term.rb
qa-5.5.2 app/models/qa/subject_mesh_term.rb
qa-4.3.0 app/models/qa/subject_mesh_term.rb
qa-3.1.0 app/models/qa/subject_mesh_term.rb
qa-2.3.0 app/models/qa/subject_mesh_term.rb
qa-5.5.1 app/models/qa/subject_mesh_term.rb
qa-5.5.0 app/models/qa/subject_mesh_term.rb
qa-5.4.0 app/models/qa/subject_mesh_term.rb
qa-5.3.1 app/models/qa/subject_mesh_term.rb
qa-5.3.0 app/models/qa/subject_mesh_term.rb
qa-5.2.0 app/models/qa/subject_mesh_term.rb