SysMO-DB/seek

View on GitHub
app/models/investigation.rb

Summary

Maintainability
A
25 mins
Test Coverage

class Investigation < ActiveRecord::Base

  include Seek::Rdf::RdfGeneration

  acts_as_isa

  attr_accessor :new_link_from_study

  has_many :studies

  has_many :assays,:through=>:studies

  validates :projects,:presence => true

  def state_allows_delete? *args
    studies.empty? && super
  end
  
  #FIXME: see comment in Assay about reversing these
  ["data_file","sop","model","publication"].each do |type|
    eval <<-END_EVAL
      def #{type}_masters
        studies.collect{|study| study.send(:#{type}_masters)}.flatten.uniq
      end

      def #{type}s
        studies.collect{|study| study.send(:#{type}s)}.flatten.uniq
      end

      #related items hash will use data_file_masters instead of data_files, etc. (sops, models)
      def related_#{type.pluralize}
        #{type}_masters
      end
    END_EVAL
  end

  def sops
    assays.collect{|assay| assay.sops}.flatten.uniq
  end

  def clone_with_associations
    new_object= self.dup
    new_object.policy = self.policy.deep_copy
    new_object.project_ids= self.project_ids
    return new_object
  end

end