Class: INatGet::Data::Model::Taxon

Inherits:
INatGet::Data::Model show all
Includes:
Comparable
Defined in:
lib/inat-get/data/models/taxon.rb

Sequel Associations collapse

Sequel Fields collapse

Taxonomy collapse

Sorting collapse

Fixed Taxon Levels collapse

Methods inherited from INatGet::Data::Model

helper, manager, parser, updater

Instance Attribute Details

#ancestorsSequel::Dataset, Array<INatGet::Data::Model::Taxon>

Sequel many-to-many association.

Returns:



19
# File 'lib/inat-get/data/models/taxon.rb', line 19

many_to_many :ancestors, class: INatGet::Data::Model::Taxon, join_table: :taxa_ancestors, left_key: :taxon_id, right_key: :ancestor_id

#cachedTime

Sequel data field

Returns:

  • (Time)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#common_nameString?

Sequel data field

Returns:

  • (String, nil)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#descendantsSequel::Dataset, Array<INatGet::Data::Model::Taxon>

Sequel many-to-many association.

Returns:



20
# File 'lib/inat-get/data/models/taxon.rb', line 20

many_to_many :descendants, class: INatGet::Data::Model::Taxon, join_table: :taxa_ancestors, left_key: :ancestor_id, right_key: :taxon_id

#english_nameString?

Sequel data field

Returns:

  • (String, nil)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#iconic_taxonINatGet::Data::Model::Taxon?

Sequel many-to-one association.

Returns:



16
# File 'lib/inat-get/data/models/taxon.rb', line 16

many_to_one :iconic_taxon, class: INatGet::Data::Model::Taxon

#iconic_taxon_idInteger?

Sequel data field

Returns:

  • (Integer, nil)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#idInteger

Sequel data field

Returns:

  • (Integer)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#identificationsSequel::Dataset, Array<Identification>

Sequel one-to-many association.

Returns:



14
# File 'lib/inat-get/data/models/taxon.rb', line 14

one_to_many :identifications

#is_activeBoolean

Sequel data field

Returns:

  • (Boolean)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#nameString

Sequel data field

Returns:

  • (String)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#observationsSequel::Dataset, Array<Observation>

Sequel one-to-many association.

Returns:



13
# File 'lib/inat-get/data/models/taxon.rb', line 13

one_to_many :observations

#parentINatGet::Data::Model::Taxon?

Sequel many-to-one association.

Returns:



17
# File 'lib/inat-get/data/models/taxon.rb', line 17

many_to_one :parent, class: INatGet::Data::Model::Taxon

#parent_idInteger?

Sequel data field

Returns:

  • (Integer, nil)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#rankString?

Sequel data field

Returns:

  • (String, nil)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

#rank_levelFloat?

Sequel data field

Returns:

  • (Float, nil)


11
# File 'lib/inat-get/data/models/taxon.rb', line 11

set_dataset :taxa

Class Method Details

.compact_set(*values) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/inat-get/data/models/taxon.rb', line 26

def compact_set *values
  result = ::Set[]
  values.each do |value|
    found = result.find { |v| v === value }
    next if found
    found = result.find { |v| value === v }
    result.delete found if found
    result << value
  end
  result
end

Instance Method Details

#<=>(other) ⇒ Object



86
87
88
89
90
# File 'lib/inat-get/data/models/taxon.rb', line 86

def <=> other
  return nil unless other.is_a?(INatGet::Data::Model::Taxon)
  return 0 if other.id == self.id
  [ self.iconic, self.name ] <=> [ other.iconic, other.name ]
end

#===(nil) ⇒ false #===(taxon) ⇒ Boolean #===(item) ⇒ Boolean #===(other) ⇒ nil

Overloads:

  • #===(nil) ⇒ false

    Parameters:

    • nil (nil)

    Returns:

    • (false)
  • #===(taxon) ⇒ Boolean

    Parameters:

    Returns:

    • (Boolean)
  • #===(item) ⇒ Boolean

    Parameters:

    Returns:

    • (Boolean)
  • #===(other) ⇒ nil

    Parameters:

    • other (Object)

    Returns:

    • (nil)

Returns:

  • (Boolean, nil)


57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/inat-get/data/models/taxon.rb', line 57

def === other
  case other
  when nil
    false
  when INatGet::Data::Model::Taxon
    return true if self.id == other.id
    Taxon.where(id: other.id)
         .where(id: Taxon.select(:taxon_id)
                         .from(:taxa_ancestors)
                         .where(ancestor_id: self.id))
         .any?
  when INatGet::Data::Model::Observation, INatGet::Data::Model::Identification
    self === value.taxon
  else
    nil
  end
end

#iconicINatGet::Data::Enum::Iconic



80
81
82
# File 'lib/inat-get/data/models/taxon.rb', line 80

def iconic
  INatGet::Data::Enum::Iconic::by_id self.iconic_taxon_id
end

#on_rank(*ranks) ⇒ Taxon

Returns:



97
98
99
100
# File 'lib/inat-get/data/models/taxon.rb', line 97

def on_rank *ranks
  ranks = ranks.map(&:to_s)
  self.ancestors_dataset.where(rank: ranks).first
end