Sha256: 4c200aaf5584d249f9dd8a5e2dccb1dbaecd997dcdc57f842145fb317c9eee32

Contents?: true

Size: 1.57 KB

Versions: 48

Compression:

Stored size: 1.57 KB

Contents

require 'mongoid'

class TaxonomyTerm
  include Mongoid::Document
  include Mongoid::Timestamps

  field :label, type: String
  field :term_id, type: String
  field :term_type, :type => Hash, :default => {}

  key :term_id
  # index "term_type.FUND_CODE", sparse: true
  has_and_belongs_to_many :child_terms, :class_name => 'TaxonomyTerm', :inverse_of => :parent_term
  belongs_to :parent_term, :class_name => 'TaxonomyTerm', :inverse_of => :child_terms

  #validations
  validates_presence_of :term_id, :label
  validates_uniqueness_of :term_id

  scope :term_id_is, ->(term_id) { where(:term_id => term_id) }
  scope :parent_term_in, ->(parent_term_id) { where(:parent_term.in => parent_term_id)}
  scope :label_is, ->(label) {where(:label => label)}
  scope :fund_code_is, ->(fund_code) { where(:'term_type.FUND_CODE' => fund_code.gsub(/^0*/, ""))}

  def self.purge!
    TaxonomyTerm.destroy_all
  end

  def self.label_for_term(term_id)
    where(term_id: term_id).try(:first).try(:label) if term_id
  end

  def self.find_term_by_id(term_id)
   self.term_id_is(term_id).try(:first)
  end

  def fund_code
    term_type['FUND_CODE']
  end

  def ancestor?(term)
    if(parent_term)
      (parent_term == term) or parent_term.ancestor?(term)
    else
      false
    end
  end

  def descendant?(term)
    # accept either an ID string or a term
    term_id = term.is_a?(String) ? term : term.try(:term_id)
    # loop thru child terms and look for the id
    child_term_ids.index(term_id) or child_terms.detect {|c| c.descendant? term_id }
  end

end

Version data entries

48 entries across 48 versions & 1 rubygems

Version Path
daengine-0.7.3 app/models/taxonomy_term.rb
daengine-0.7.2 app/models/taxonomy_term.rb
daengine-0.7.1 app/models/taxonomy_term.rb
daengine-0.7 app/models/taxonomy_term.rb
daengine-0.6.23 app/models/taxonomy_term.rb
daengine-0.6.22 app/models/taxonomy_term.rb
daengine-0.6.21 app/models/taxonomy_term.rb
daengine-0.6.20 app/models/taxonomy_term.rb
daengine-0.6.19 app/models/taxonomy_term.rb
daengine-0.6.18 app/models/taxonomy_term.rb
daengine-0.6.17 app/models/taxonomy_term.rb
daengine-0.6.16 app/models/taxonomy_term.rb
daengine-0.6.15 app/models/taxonomy_term.rb
daengine-0.6.14 app/models/taxonomy_term.rb
daengine-0.6.13 app/models/taxonomy_term.rb
daengine-0.6.11 app/models/taxonomy_term.rb
daengine-0.6.10 app/models/taxonomy_term.rb
daengine-0.6.9 app/models/taxonomy_term.rb
daengine-0.6.8 app/models/taxonomy_term.rb
daengine-0.6.5 app/models/taxonomy_term.rb