config/initializers/constants/model/taxon_name_classifications.rb
# Be sure to restart your server (or console) when you modify this file.
Rails.application.config.after_initialize do
# Array of all ICZN and ICN TaxonNameClassification classes
TAXON_NAME_CLASSIFICATION_CLASSES = TaxonNameClassification.descendants.freeze
# Array of all Latinized TaxonNameClassification classes, as Strings
LATINIZED_TAXON_NAME_CLASSIFICATION_NAMES = TaxonNameClassification::Latinized.descendants.collect { |d| d.to_s }.freeze
# Array of all ICZN TaxonNameClassification classes, as Strings
ICZN_TAXON_NAME_CLASSIFICATION_NAMES = TaxonNameClassification::Iczn.descendants.collect { |d| d.to_s }.freeze
# Array of all ICN TaxonNameClassifications classes, as Strings
ICN_TAXON_NAME_CLASSIFICATION_NAMES = TaxonNameClassification::Icn.descendants.collect { |d| d.to_s }.freeze
# Array of all ICNP TaxonNameClassifications classes, as Strings
ICNP_TAXON_NAME_CLASSIFICATION_NAMES = TaxonNameClassification::Icnp.descendants.collect { |d| d.to_s }.freeze
TAXON_NAME_CLASSIFICATION_GENDER_CLASSES = TaxonNameClassification::Latinized::Gender.descendants.freeze
# Array of all ICVCN TaxonNameClassifications classes, as Strings
ICVCN_TAXON_NAME_CLASSIFICATION_NAMES = TaxonNameClassification::Icvcn.descendants.collect { |d| d.to_s }.freeze
ICZN_TAXON_NAME_CLASSIFICATION_HASH = (ICZN_TAXON_NAME_CLASSIFICATION_NAMES + LATINIZED_TAXON_NAME_CLASSIFICATION_NAMES).inject({}) {
|hsh, klass| hsh.merge(klass.constantize.name => klass)
}.freeze
ICN_TAXON_NAME_CLASSIFICATION_HASH = (ICN_TAXON_NAME_CLASSIFICATION_NAMES + LATINIZED_TAXON_NAME_CLASSIFICATION_NAMES).inject({}) {
|hsh, klass| hsh.merge(klass.constantize.name => klass)
}.freeze
ICNP_TAXON_NAME_CLASSIFICATION_HASH = (ICNP_TAXON_NAME_CLASSIFICATION_NAMES + LATINIZED_TAXON_NAME_CLASSIFICATION_NAMES).inject({}) {
|hsh, klass| hsh.merge(klass.constantize.name => klass)
}.freeze
ICVCN_TAXON_NAME_CLASSIFICATION_HASH = (ICVCN_TAXON_NAME_CLASSIFICATION_NAMES + LATINIZED_TAXON_NAME_CLASSIFICATION_NAMES).inject({}) {
|hsh, klass| hsh.merge(klass.constantize.name => klass)
}.freeze
# Array of all TaxonNameClassifications classes, as Strings
TAXON_NAME_CLASSIFICATION_NAMES = (ICN_TAXON_NAME_CLASSIFICATION_NAMES + ICVCN_TAXON_NAME_CLASSIFICATION_NAMES + ICNP_TAXON_NAME_CLASSIFICATION_NAMES + ICZN_TAXON_NAME_CLASSIFICATION_NAMES + LATINIZED_TAXON_NAME_CLASSIFICATION_NAMES).freeze
# Array of all Unavailable and Invalid TaxonNameClassifications classes, as Strings
TAXON_NAME_CLASS_NAMES_UNAVAILABLE_AND_INVALID = [
TaxonNameClassification::Iczn::Unavailable,
TaxonNameClassification::Iczn::Unavailable.descendants,
TaxonNameClassification::Iczn::Available::Invalid,
TaxonNameClassification::Iczn::Available::Invalid.descendants,
TaxonNameClassification::Iczn::CollectiveGroup,
TaxonNameClassification::Iczn::Fossil::Ichnotaxon,
TaxonNameClassification::Icn::NotEffectivelyPublished,
TaxonNameClassification::Icn::NotEffectivelyPublished.descendants,
TaxonNameClassification::Icn::EffectivelyPublished::InvalidlyPublished,
TaxonNameClassification::Icn::EffectivelyPublished::InvalidlyPublished.descendants,
TaxonNameClassification::Icn::EffectivelyPublished::ValidlyPublished::Illegitimate,
TaxonNameClassification::Icn::EffectivelyPublished::ValidlyPublished::Illegitimate.descendants,
TaxonNameClassification::Icnp::NotEffectivelyPublished,
TaxonNameClassification::Icnp::NotEffectivelyPublished.descendants,
TaxonNameClassification::Icnp::EffectivelyPublished::InvalidlyPublished,
TaxonNameClassification::Icnp::EffectivelyPublished::InvalidlyPublished.descendants,
TaxonNameClassification::Icnp::EffectivelyPublished::ValidlyPublished::Illegitimate,
TaxonNameClassification::Icnp::EffectivelyPublished::ValidlyPublished::Illegitimate.descendants,
TaxonNameClassification::Icvcn::Invalid,
TaxonNameClassification::Icvcn::Invalid.descendants,
TaxonNameClassification::Icvcn::Valid::Unaccepted
].flatten.map(&:to_s).freeze
# Array of all Unavailable and Invalid TaxonNameClassifications classes, as Strings
TAXON_NAME_CLASS_NAMES_UNAVAILABLE = [
TaxonNameClassification::Iczn::Unavailable,
TaxonNameClassification::Iczn::Unavailable.descendants,
TaxonNameClassification::Iczn::CollectiveGroup,
TaxonNameClassification::Iczn::Fossil::Ichnotaxon,
TaxonNameClassification::Icn::NotEffectivelyPublished,
TaxonNameClassification::Icn::NotEffectivelyPublished.descendants,
TaxonNameClassification::Icn::EffectivelyPublished::InvalidlyPublished,
TaxonNameClassification::Icn::EffectivelyPublished::InvalidlyPublished.descendants,
TaxonNameClassification::Icnp::NotEffectivelyPublished,
TaxonNameClassification::Icnp::NotEffectivelyPublished.descendants,
TaxonNameClassification::Icnp::EffectivelyPublished::InvalidlyPublished,
TaxonNameClassification::Icnp::EffectivelyPublished::InvalidlyPublished.descendants
].flatten.map(&:to_s).freeze
TAXON_NAME_CLASS_NAMES_VALID = [
TaxonNameClassification::Iczn::Available::Valid,
TaxonNameClassification::Iczn::Available::Valid.descendants,
TaxonNameClassification::Icn::EffectivelyPublished::ValidlyPublished::Legitimate::Correct,
TaxonNameClassification::Icn::EffectivelyPublished::ValidlyPublished::Legitimate::Correct.descendants,
TaxonNameClassification::Icvcn::Valid::Accepted,
TaxonNameClassification::Icvcn::Valid::Accepted.descendants,
TaxonNameClassification::Icnp::EffectivelyPublished::ValidlyPublished::Legitimate::Correct,
TaxonNameClassification::Icnp::EffectivelyPublished::ValidlyPublished::Legitimate::Correct.descendants
].flatten.map(&:to_s).freeze
EXCEPTED_FORM_TAXON_NAME_CLASSIFICATIONS = [
TaxonNameClassification::Iczn::Unavailable::NotLatin,
TaxonNameClassification::Iczn::Unavailable::LessThanTwoLetters,
TaxonNameClassification::Iczn::Unavailable::NotLatinizedAfter1899,
TaxonNameClassification::Iczn::Unavailable::NotLatinizedBefore1900AndNotAccepted,
TaxonNameClassification::Iczn::Unavailable::NonBinominal,
TaxonNameClassification::Iczn::Unavailable::NonBinominal.descendants,
TaxonNameClassification::Iczn::Unavailable::NomenNudum,
TaxonNameClassification::Iczn::Unavailable::NomenNudum.descendants,
TaxonNameClassification::Iczn::Unavailable::Excluded,
TaxonNameClassification::Iczn::Unavailable::Excluded.descendants,
TaxonNameClassification::Icn::EffectivelyPublished::InvalidlyPublished::NotLatin
].flatten.map(&:to_s).freeze
# JSON supporting
module TaxonNameClassificationsHelper
# @return [Hash]
def self.collection(classifications)
classifications.select { |s| s.assignable }.inject({}) { |hsh, c|
hsh.merge!(c.name => attributes(c))
}
end
# @return [Hash]
def self.attributes(classification)
return {
name: classification.label,
type: classification.to_s,
applicable_ranks: classification.applicable_ranks
}
end
# @return [Hash]
def self.descendants_collection(base_classification)
collection(base_classification.descendants)
end
end
TAXON_NAME_CLASSIFICATION_JSON = {
iczn: {
tree: ApplicationEnumeration.nested_subclasses(TaxonNameClassification::Iczn),
all: TaxonNameClassificationsHelper::descendants_collection(TaxonNameClassification::Iczn),
common: TaxonNameClassificationsHelper.collection([
TaxonNameClassification::Iczn::Unavailable,
TaxonNameClassification::Iczn::Unavailable::NomenNudum,
TaxonNameClassification::Iczn::Available::Valid::NomenDubium,
TaxonNameClassification::Iczn::Fossil
])
},
icn: {
tree: ApplicationEnumeration.nested_subclasses(TaxonNameClassification::Icn),
all: TaxonNameClassificationsHelper::descendants_collection(TaxonNameClassification::Icn),
common: TaxonNameClassificationsHelper.collection([
TaxonNameClassification::Icn::EffectivelyPublished::InvalidlyPublished,
TaxonNameClassification::Icn::EffectivelyPublished::InvalidlyPublished::NomenNudum,
TaxonNameClassification::Icn::Fossil
])
},
icnp: {
tree: ApplicationEnumeration.nested_subclasses(TaxonNameClassification::Icnp),
all: TaxonNameClassificationsHelper::descendants_collection(TaxonNameClassification::Icnp),
common: TaxonNameClassificationsHelper.collection([
TaxonNameClassification::Icnp::EffectivelyPublished::ValidlyPublished::Legitimate::Candidatus
])
},
icvcn: {
tree: ApplicationEnumeration.nested_subclasses(TaxonNameClassification::Icvcn),
all: TaxonNameClassificationsHelper::descendants_collection(TaxonNameClassification::Icvcn),
common: TaxonNameClassificationsHelper.collection([
])
},
latinized: {
tree: ApplicationEnumeration.nested_subclasses(TaxonNameClassification::Latinized),
all: TaxonNameClassificationsHelper::descendants_collection(TaxonNameClassification::Latinized),
common: TaxonNameClassificationsHelper.collection([
])
}
}.freeze
end