Class: INatGet::Data::Model::Project

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

Sequel Associations collapse

Sequel Fields collapse

Instance Method Summary collapse

Methods inherited from INatGet::Data::Model

helper, manager, parser, updater

Instance Attribute Details

#adminsSequel::Dataset, Array<INatGet::Data::Model::ProjectAdmin>

Sequel one-to-many association.

Returns:



33
# File 'lib/inat-get/data/models/project.rb', line 33

one_to_many :admins, class: :'INatGet::Data::Model::ProjectAdmin'

#cachedTime

Sequel data field

Returns:

  • (Time)


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

set_dataset :projects

#createdTime

Sequel data field

Returns:

  • (Time)


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

set_dataset :projects

#descriptionString?

Sequel data field

Returns:

  • (String, nil)


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

set_dataset :projects

#excluded_placesSequel::Dataset, Array<INatGet::Data::Model::Place>

Sequel many-to-many association.

Returns:



25
# File 'lib/inat-get/data/models/project.rb', line 25

many_to_many :excluded_places, class: :'INatGet::Data::Model::Place', join_table: :project_excluded_places, left_key: :project_id, right_key: :place_id

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

Sequel many-to-many association.

Returns:



23
# File 'lib/inat-get/data/models/project.rb', line 23

many_to_many :excluded_taxa, class: :'INatGet::Data::Model::Taxon', join_table: :project_excluded_taxa, left_key: :project_id, right_key: :taxon_id

#excluded_usersSequel::Dataset, Array<INatGet::Data::Model::User>

Sequel many-to-many association.

Returns:



27
# File 'lib/inat-get/data/models/project.rb', line 27

many_to_many :excluded_users, class: :'INatGet::Data::Model::User', join_table: :project_excluded_users, left_key: :project_id, right_key: :user_id

#idInteger

Sequel data field

Returns:

  • (Integer)


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

set_dataset :projects

#included_placesSequel::Dataset, Array<INatGet::Data::Model::Place>

Sequel many-to-many association.

Returns:



24
# File 'lib/inat-get/data/models/project.rb', line 24

many_to_many :included_places, class: :'INatGet::Data::Model::Place', join_table: :project_included_places, left_key: :project_id, right_key: :place_id

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

Sequel many-to-many association.

Returns:



22
# File 'lib/inat-get/data/models/project.rb', line 22

many_to_many :included_taxa, class: :'INatGet::Data::Model::Taxon', join_table: :project_included_taxa, left_key: :project_id, right_key: :taxon_id

#included_usersSequel::Dataset, Array<INatGet::Data::Model::User>

Sequel many-to-many association.

Returns:



26
# File 'lib/inat-get/data/models/project.rb', line 26

many_to_many :included_users, class: :'INatGet::Data::Model::User', join_table: :project_included_users, left_key: :project_id, right_key: :user_id

#is_collectionBoolean

Sequel data field

Returns:

  • (Boolean)


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

set_dataset :projects

#is_umbrellaBoolean

Sequel data field

Returns:

  • (Boolean)


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

set_dataset :projects

#manual_observationsSequel::Dataset, Array<INatGet::Data::Model::Observation>

Sequel many-to-many association.

Returns:



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

many_to_many :manual_observations, class: :'INatGet::Data::Model::Observation', join_table: :observation_projects, left_key: :project_id, right_key: :observation_id

#membersSequel::Dataset, Array<INatGet::Data::Model::User>

Sequel many-to-many association.

Returns:



31
# File 'lib/inat-get/data/models/project.rb', line 31

many_to_many :members, class: :'INatGet::Data::Model::User', join_table: :project_members, left_key: :project_id, right_key: :user_id

#members_onlyBoolean

Sequel data field

Returns:

  • (Boolean)


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

set_dataset :projects

#placesObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



41
# File 'lib/inat-get/data/models/project.rb', line 41

one_to_many :places, class: :'INatGet::Data::Model::ProjectPlace'

#project_typeString?

Sequel data field

Returns:

  • (String, nil)


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

set_dataset :projects

#quality_gradesSequel::Dataset, Array<INatGet::Data::Model::ProjectQualityGrade>

Sequel one-to-many association.

Returns:



34
# File 'lib/inat-get/data/models/project.rb', line 34

one_to_many :quality_grades, class: :'INatGet::Data::Model::ProjectQualityGrade'

#slugString

Sequel data field

Returns:

  • (String)


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

set_dataset :projects

#subprojectsSequel::Dataset, Array<self>

Sequel many-to-many association.

Returns:

  • (Sequel::Dataset, Array<self>)


29
# File 'lib/inat-get/data/models/project.rb', line 29

many_to_many :subprojects, class: self, join_table: :umbrella_projects, left_key: :umbrella_id, right_key: :subproject_id

#taxaObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



38
# File 'lib/inat-get/data/models/project.rb', line 38

one_to_many :taxa, class: :'INatGet::Data::Model::ProjectTaxon'

#termsSequel::Dataset, Array<INatGet::Data::Model::ProjectTerm>

Sequel one-to-many association.

Returns:



35
# File 'lib/inat-get/data/models/project.rb', line 35

one_to_many :terms, class: :'INatGet::Data::Model::ProjectTerm'

#titleString

Sequel data field

Returns:

  • (String)


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

set_dataset :projects

#updatedTime?

Sequel data field

Returns:

  • (Time, nil)


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

set_dataset :projects

#userINatGet::Data::Model::User?

Sequel many-to-one association.

Returns:



18
# File 'lib/inat-get/data/models/project.rb', line 18

many_to_one :user, class: :'INatGet::Data::Model::User'

#user_idInteger?

Sequel data field

Returns:

  • (Integer, nil)


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

set_dataset :projects

#usersObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



44
# File 'lib/inat-get/data/models/project.rb', line 44

one_to_many :users, class: :'INatGet::Data::Model::ProjectUser'

Instance Method Details

#<=>(other) ⇒ Object



93
94
95
96
97
# File 'lib/inat-get/data/models/project.rb', line 93

def <=> other
  return nil unless other.is_a?(INatGet::Data::Model::Project)
  return 0 if self.id == other.id
  self.slug <=> other.slug
end

#observationsSequel::Dataset<INatGet::Data::Model::Observation>

Returns:



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

def observations
  INatGet::Data::Model::Observation.where(self.to_sequel)
end

#to_sequelSequel::SQL::Expression

Returns:

  • (Sequel::SQL::Expression)


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/inat-get/data/models/project.rb', line 47

def to_sequel
  if self.is_umbrella
    return Sequel.|(*self.subprojects.map(&:to_sequel))
  elsif self.is_collection
    conditions = []
    if !self.included_taxa_dataset.empty?
      conditions << Sequel.|(*self.included_taxa.map { |taxon| { taxon: taxon.descendants_dataset } })
    end
    if !self.excluded_taxa_dataset.empty?
      conditions << Sequel.~(Sequel.|(*self.excluded_taxa.map { |taxon| { taxon: taxon.descendants_dataset } }))
    end
    if !self.included_places_dataset.empty?
      conditions << { places: self.included_places_dataset }
    end
    if !self.excluded_places_dataset.empty?
      conditions << Sequel.~({ places: self.excluded_places_dataset })
    end
    if self.members_only
      conditions << { user: self.members_dataset }
    elsif !self.included_users_dataset.empty?
      conditions << { user: self.included_users_dataset }
    end
    if !self.excluded_users_dataset.empty?
      conditions << Sequel.~({ user: self.excluded_users_dataset })
    end
    if !self.terms_dataset.empty?
      self.terms.each do |term|
        conditions << { id: Annotation.select(:observation_id).where({ term_id: term.term_id, term_value_id: term.term_value_id }) }
      end
    end
    if !self.quality_grades_dataset.empty?
      conditions << { quality_grade: self.quality_grades_dataset.select(:quality_grade) }
    end
    return Sequel.&(*conditions)
  else
    return { project_id: self.id }
  end
end