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
helper, manager, parser, updater
Instance Attribute Details
#admins ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectAdmin>
Sequel one-to-many association.
33 |
# File 'lib/inat-get/data/models/project.rb', line 33 one_to_many :admins, class: :'INatGet::Data::Model::ProjectAdmin' |
#cached ⇒ Time
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#created ⇒ Time
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#description ⇒ String?
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#excluded_places ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Place>
Sequel many-to-many association.
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_taxa ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Taxon>
Sequel many-to-many association.
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_users ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
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 |
#id ⇒ Integer
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#included_places ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Place>
Sequel many-to-many association.
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_taxa ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Taxon>
Sequel many-to-many association.
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_users ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
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_collection ⇒ Boolean
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#is_umbrella ⇒ Boolean
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#manual_observations ⇒ Sequel::Dataset, Array<INatGet::Data::Model::Observation>
Sequel many-to-many association.
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 |
#members ⇒ Sequel::Dataset, Array<INatGet::Data::Model::User>
Sequel many-to-many association.
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_only ⇒ Boolean
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 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.
41 |
# File 'lib/inat-get/data/models/project.rb', line 41 one_to_many :places, class: :'INatGet::Data::Model::ProjectPlace' |
#project_type ⇒ String?
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#quality_grades ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectQualityGrade>
Sequel one-to-many association.
34 |
# File 'lib/inat-get/data/models/project.rb', line 34 one_to_many :quality_grades, class: :'INatGet::Data::Model::ProjectQualityGrade' |
#slug ⇒ String
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#subprojects ⇒ Sequel::Dataset, Array<self>
Sequel many-to-many association.
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 |
#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.
38 |
# File 'lib/inat-get/data/models/project.rb', line 38 one_to_many :taxa, class: :'INatGet::Data::Model::ProjectTaxon' |
#terms ⇒ Sequel::Dataset, Array<INatGet::Data::Model::ProjectTerm>
Sequel one-to-many association.
35 |
# File 'lib/inat-get/data/models/project.rb', line 35 one_to_many :terms, class: :'INatGet::Data::Model::ProjectTerm' |
#title ⇒ String
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#updated ⇒ Time?
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 set_dataset :projects |
#user ⇒ INatGet::Data::Model::User?
Sequel many-to-one association.
18 |
# File 'lib/inat-get/data/models/project.rb', line 18 many_to_one :user, class: :'INatGet::Data::Model::User' |
#user_id ⇒ Integer?
Sequel data field
16 |
# File 'lib/inat-get/data/models/project.rb', line 16 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.
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 |
#observations ⇒ Sequel::Dataset<INatGet::Data::Model::Observation>
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_sequel ⇒ 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 |