Class: INatGet::Data::Model::Project
- Inherits:
-
INatGet::Data::Model
- Object
- Sequel::Model
- INatGet::Data::Model
- INatGet::Data::Model::Project
- Includes:
- Comparable
- Defined in:
- lib/inat-get/data/models/project.rb
Sequel Associations collapse
-
#admins ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectAdmin>
Sequel one-to-many association.
-
#excluded_places ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Place>
Sequel many-to-many association.
-
#excluded_taxa ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Taxon>
Sequel many-to-many association.
-
#excluded_users ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
-
#included_places ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Place>
Sequel many-to-many association.
-
#included_taxa ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Taxon>
Sequel many-to-many association.
-
#included_users ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
-
#manual_observations ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Observation>
Sequel many-to-many association.
-
#members ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
- #places ⇒ Object private
-
#quality_grades ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectQualityGrade>
Sequel one-to-many association.
-
#subprojects ⇒ Sequel::Dataset, Array<self>
Sequel many-to-many association.
- #taxa ⇒ Object private
-
#terms ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectTerm>
Sequel one-to-many association.
-
#user ⇒ INatGet::Data::Model::User?
Sequel many-to-one association.
- #users ⇒ Object private
Sequel Fields collapse
-
#cached ⇒ Time
Sequel data field.
-
#created ⇒ Time
Sequel data field.
-
#description ⇒ String?
Sequel data field.
-
#id ⇒ Integer
Sequel data field.
-
#is_collection ⇒ Boolean
Sequel data field.
-
#is_umbrella ⇒ Boolean
Sequel data field.
-
#members_only ⇒ Boolean
Sequel data field.
-
#project_type ⇒ String?
Sequel data field.
-
#slug ⇒ String
Sequel data field.
-
#title ⇒ String
Sequel data field.
-
#updated ⇒ Time?
Sequel data field.
-
#user_id ⇒ Integer?
Sequel data field.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #observations ⇒ Sequel::Dataset<INatGet::Data::Model::Observation>
- #to_sequel ⇒ Sequel::SQL::Expression
Methods inherited from INatGet::Data::Model
endpoint, helper, manager, parser, updater
Instance Attribute Details
#admins ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectAdmin>
Sequel one-to-many association.
36 |
# File 'lib/inat-get/data/models/project.rb', line 36 one_to_many :admins, class: :'INatGet::Data::Model::ProjectAdmin' |
#cached ⇒ Time
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#created ⇒ Time
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#description ⇒ String?
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#excluded_places ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Place>
Sequel many-to-many association.
28 |
# File 'lib/inat-get/data/models/project.rb', line 28 many_to_many :excluded_places, class: :'INatGet::Data::Model::Place', join_table: :project_excluded_places, left_key: :project_id, right_key: :place_id |
#excluded_taxa ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Taxon>
Sequel many-to-many association.
26 |
# File 'lib/inat-get/data/models/project.rb', line 26 many_to_many :excluded_taxa, class: :'INatGet::Data::Model::Taxon', join_table: :project_excluded_taxa, left_key: :project_id, right_key: :taxon_id |
#excluded_users ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
30 |
# File 'lib/inat-get/data/models/project.rb', line 30 many_to_many :excluded_users, class: :'INatGet::Data::Model::User', join_table: :project_excluded_users, left_key: :project_id, right_key: :user_id |
#id ⇒ Integer
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#included_places ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Place>
Sequel many-to-many association.
27 |
# File 'lib/inat-get/data/models/project.rb', line 27 many_to_many :included_places, class: :'INatGet::Data::Model::Place', join_table: :project_included_places, left_key: :project_id, right_key: :place_id |
#included_taxa ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Taxon>
Sequel many-to-many association.
25 |
# File 'lib/inat-get/data/models/project.rb', line 25 many_to_many :included_taxa, class: :'INatGet::Data::Model::Taxon', join_table: :project_included_taxa, left_key: :project_id, right_key: :taxon_id |
#included_users ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
29 |
# File 'lib/inat-get/data/models/project.rb', line 29 many_to_many :included_users, class: :'INatGet::Data::Model::User', join_table: :project_included_users, left_key: :project_id, right_key: :user_id |
#is_collection ⇒ Boolean
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#is_umbrella ⇒ Boolean
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#manual_observations ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Observation>
Sequel many-to-many association.
23 |
# File 'lib/inat-get/data/models/project.rb', line 23 many_to_many :manual_observations, class: :'INatGet::Data::Model::Observation', join_table: :observation_projects, left_key: :project_id, right_key: :observation_id |
#members ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
34 |
# File 'lib/inat-get/data/models/project.rb', line 34 many_to_many :members, class: :'INatGet::Data::Model::User', join_table: :project_members, left_key: :project_id, right_key: :user_id |
#members_only ⇒ Boolean
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#places ⇒ Object
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 :places, class: :'INatGet::Data::Model::ProjectPlace' |
#project_type ⇒ String?
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#quality_grades ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectQualityGrade>
Sequel one-to-many association.
37 |
# File 'lib/inat-get/data/models/project.rb', line 37 one_to_many :quality_grades, class: :'INatGet::Data::Model::ProjectQualityGrade' |
#slug ⇒ String
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#subprojects ⇒ Sequel::Dataset, Array<self>
Sequel many-to-many association.
32 |
# File 'lib/inat-get/data/models/project.rb', line 32 many_to_many :subprojects, class: self, join_table: :umbrella_projects, left_key: :umbrella_id, right_key: :subproject_id |
#taxa ⇒ Object
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 :taxa, class: :'INatGet::Data::Model::ProjectTaxon' |
#terms ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectTerm>
Sequel one-to-many association.
38 |
# File 'lib/inat-get/data/models/project.rb', line 38 one_to_many :terms, class: :'INatGet::Data::Model::ProjectTerm' |
#title ⇒ String
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#updated ⇒ Time?
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#user ⇒ INatGet::Data::Model::User?
Sequel many-to-one association.
21 |
# File 'lib/inat-get/data/models/project.rb', line 21 many_to_one :user, class: :'INatGet::Data::Model::User' |
#user_id ⇒ Integer?
Sequel data field
19 |
# File 'lib/inat-get/data/models/project.rb', line 19 set_dataset :projects |
#users ⇒ Object
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.
47 |
# File 'lib/inat-get/data/models/project.rb', line 47 one_to_many :users, class: :'INatGet::Data::Model::ProjectUser' |
Instance Method Details
#<=>(other) ⇒ Object
96 97 98 99 100 |
# File 'lib/inat-get/data/models/project.rb', line 96 def <=> other return nil unless other.is_a?(INatGet::Data::Model::Project) return 0 if self.id == other.id (self.title || self.slug) <=> (other.title || other.slug) end |
#observations ⇒ Sequel::Dataset<INatGet::Data::Model::Observation>
90 91 92 |
# File 'lib/inat-get/data/models/project.rb', line 90 def observations INatGet::Data::Model::Observation.where(self.to_sequel) end |
#to_sequel ⇒ Sequel::SQL::Expression
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 85 86 87 |
# File 'lib/inat-get/data/models/project.rb', line 50 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 |