Sha256: 7e3959c6e6dc32e725c84effc7e24719b5df4f811af2078260ef1bea36e61149

Contents?: true

Size: 1.21 KB

Versions: 8

Compression:

Stored size: 1.21 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 = read_attribute(:synonyms)
    s.nil? ? [] : s.split("|")
  end

  def synonyms=(syn_list)
    write_attribute(:synonyms,
                    if syn_list.respond_to?(:join)
                      syn_list.join('|')
                    else
                      syn_list
                    end)
  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

8 entries across 8 versions & 1 rubygems

Version Path
qa-2.0.1 app/models/qa/subject_mesh_term.rb
qa-2.0.0 app/models/qa/subject_mesh_term.rb
qa-1.2.0 app/models/qa/subject_mesh_term.rb
qa-1.1.0 app/models/qa/subject_mesh_term.rb
qa-1.0.0 app/models/qa/subject_mesh_term.rb
qa-0.11.1 app/models/qa/subject_mesh_term.rb
qa-0.11.0 app/models/qa/subject_mesh_term.rb
qa-0.10.2 app/models/qa/subject_mesh_term.rb