Class: Study::Metadata

Inherits:
Object
  • Object
show all
Defined in:
app/models/study.rb

Overview

rubocop:disable Metrics/ClassLength

Instance Method Summary collapse

Instance Method Details

#clear_externally_managed_errorsObject



801
802
803
# File 'app/models/study.rb', line 801

def clear_externally_managed_errors
  errors.clear
end

#data_release_prevention_reason_other?Boolean

Returns:

  • (Boolean)


723
724
725
# File 'app/models/study.rb', line 723

def data_release_prevention_reason_other?
  data_release_prevention_reason == DATA_RELEASE_PREVENTION_REASON_OTHER
end

#data_release_strategy_must_be_managed?Boolean

Returns:

  • (Boolean)


770
771
772
# File 'app/models/study.rb', line 770

def data_release_strategy_must_be_managed?
  Flipper.enabled?(:y24_052_enable_data_release_timing_validation) && data_release_strategy.present? && managed?
end

#data_release_timing_must_be_never?Boolean

Returns:

  • (Boolean)


756
757
758
759
# File 'app/models/study.rb', line 756

def data_release_timing_must_be_never?
  Flipper.enabled?(:y24_052_enable_data_release_timing_validation) && data_release_strategy.present? &&
    strategy_not_applicable?
end

#data_release_timing_must_be_open?Boolean

Returns:

  • (Boolean)


766
767
768
# File 'app/models/study.rb', line 766

def data_release_timing_must_be_open?
  Flipper.enabled?(:y24_052_enable_data_release_timing_validation) && data_release_strategy.present? && open?
end

#data_release_timing_must_not_be_never?Boolean

Returns:

  • (Boolean)


761
762
763
764
# File 'app/models/study.rb', line 761

def data_release_timing_must_not_be_never?
  Flipper.enabled?(:y24_052_enable_data_release_timing_validation) && data_release_strategy.present? &&
    !strategy_not_applicable?
end

#delay_until_publication?Boolean

Returns:

  • (Boolean)


731
732
733
# File 'app/models/study.rb', line 731

def delay_until_publication?
  data_release_timing == DATA_RELEASE_TIMING_PUBLICATION
end

#delayed_for_long_time?Boolean

Returns:

  • (Boolean)


727
728
729
# File 'app/models/study.rb', line 727

def delayed_for_long_time?
  DATA_RELEASE_DELAY_PERIODS.include?(data_release_delay_period)
end

#delayed_for_other_reasons?Boolean

Returns:

  • (Boolean)


719
720
721
# File 'app/models/study.rb', line 719

def delayed_for_other_reasons?
  [DATA_RELEASE_DELAY_FOR_OTHER, OLD_DATA_RELEASE_DELAY_FOR_OTHER].include?(data_release_delay_reason)
end

#delayed_release?Boolean

Returns:

  • (Boolean)


711
712
713
# File 'app/models/study.rb', line 711

def delayed_release?
  data_release_timing == DATA_RELEASE_TIMING_DELAYED
end

#managed?Boolean

Returns:

  • (Boolean)


703
704
705
# File 'app/models/study.rb', line 703

def managed?
  data_release_strategy == DATA_RELEASE_STRATEGY_MANAGED
end

#never_release?Boolean

Returns:

  • (Boolean)


715
716
717
# File 'app/models/study.rb', line 715

def never_release?
  data_release_timing == DATA_RELEASE_TIMING_NEVER
end

#non_standard_agreement?Boolean

Returns:

  • (Boolean)


788
789
790
# File 'app/models/study.rb', line 788

def non_standard_agreement?
  data_release_standard_agreement == NO
end

#open?Boolean

Returns:

  • (Boolean)


699
700
701
# File 'app/models/study.rb', line 699

def open?
  data_release_strategy == DATA_RELEASE_STRATEGY_OPEN
end

#remove_x_and_autosomes?Boolean

Returns:

  • (Boolean)


695
696
697
# File 'app/models/study.rb', line 695

def remove_x_and_autosomes?
  remove_x_and_autosomes == YES
end

#sanity_check_y_separationObject



774
775
776
777
778
779
# File 'app/models/study.rb', line 774

def sanity_check_y_separation
  if remove_x_and_autosomes?
    errors.add(:separate_y_chromosome_data, 'cannot be selected with remove x and autosomes.')
  end
  !remove_x_and_autosomes?
end

#snp_child_studiesObject



843
844
845
846
847
# File 'app/models/study.rb', line 843

def snp_child_studies
  return nil if snp_study_id.nil?

  self.class.where(snp_parent_study_id: snp_study_id).includes(:study).map(&:study)
end

#snp_parent_studyObject



837
838
839
840
841
# File 'app/models/study.rb', line 837

def snp_parent_study
  return nil if snp_parent_study_id.nil?

  self.class.where(snp_study_id: snp_parent_study_id).includes(:study).try(:study)
end

#strategy_not_applicable?Boolean

Returns:

  • (Boolean)


707
708
709
# File 'app/models/study.rb', line 707

def strategy_not_applicable?
  data_release_strategy == DATA_RELEASE_STRATEGY_NOT_APPLICABLE
end

#study_type_valid?Boolean

Returns:

  • (Boolean)


792
793
794
# File 'app/models/study.rb', line 792

def study_type_valid?
  errors.add(:study_type, 'is not specified') if study_type.name == 'Not specified'
end

#valid_policy_url?Boolean

rubocop:todo Metrics/MethodLength

Returns:

  • (Boolean)


806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
# File 'app/models/study.rb', line 806

def valid_policy_url? # rubocop:todo Metrics/AbcSize
  # Rails 2.3 has no inbuilt URL validation, but rather than rolling our own, we'll
  # use the inbuilt ruby URI parser, a bit like here:
  # http://www.simonecarletti.com/blog/2009/04/validating-the-format-of-an-url-with-rails/
  return true if dac_policy.blank?

  dac_policy.insert(0, 'http://') unless dac_policy.include?('://') # Add an http protocol if no protocol is defined
  begin
    uri = URI.parse(dac_policy)
    if configatron.invalid_policy_url_domains.include?(uri.host)
      errors.add(
        :dac_policy,
        ": #{dac_policy} is not an acceptable URL. Please ensure you haven't provided an internal URL."
      )
    end
  rescue URI::InvalidURIError
    errors.add(:dac_policy, ": #{dac_policy} is not a valid URL")
  end
end