Skip to content

Commit

Permalink
Sequence params into obs
Browse files Browse the repository at this point in the history
  • Loading branch information
nimmolo committed Dec 20, 2024
1 parent 359cd3a commit 7751f00
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 120 deletions.
4 changes: 2 additions & 2 deletions app/classes/query/image_with_observations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def initialize_flavor
initialize_association_parameters
add_where_conditions
initialize_boolean_parameters
initialize_search_parameters
initialize_obs_search_parameters
add_bounding_box_conditions_for_observations
initialize_content_filters(Observation)
super
Expand All @@ -51,7 +51,7 @@ def initialize_boolean_parameters
initialize_is_collection_location_parameter
initialize_with_public_lat_lng_parameter
initialize_with_name_parameter
initialize_with_notes_parameter
initialize_with_obs_notes_parameter
add_join(:observations, :comments) if params[:with_comments]
add_join(:observations, :sequences) if params[:with_sequences]
add_with_notes_fields_condition(params[:with_notes_fields])
Expand Down
51 changes: 36 additions & 15 deletions app/classes/query/initializers/observations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,19 @@ def add_ids_condition(table = model.table_name, ids = :ids)
add_is_collection_location_condition_for_locations
end

def initialize_herbaria_parameter
add_id_condition(
"herbarium_records.herbarium_id",
lookup_herbaria_by_name(params[:herbaria]),
:observations, :observation_herbarium_records, :herbarium_records
def initialize_obs_date_parameter(param_name = :date)
add_date_condition(
"observations.when",
params[param_name],
:observations
)
end

def initialize_herbarium_records_parameter
add_id_condition(
"observation_herbarium_records.herbarium_record_id",
lookup_herbarium_records_by_name(params[:herbarium_records]),
:observations, :observation_herbarium_records
def initialize_confidence_parameter
add_range_condition(
"observations.vote_cache",
params[:confidence],
:observations
)
end

Expand All @@ -76,15 +76,35 @@ def initialize_is_collection_location_parameter
add_boolean_condition(
"observations.is_collection_location IS TRUE",
"observations.is_collection_location IS FALSE",
params[:is_collection_location]
params[:is_collection_location],
:observations
)
end

def initialize_with_public_lat_lng_parameter
add_boolean_condition(
"observations.lat IS NOT NULL AND observations.gps_hidden IS FALSE",
"observations.lat IS NULL OR observations.gps_hidden IS TRUE",
params[:with_public_lat_lng]
params[:with_public_lat_lng],
:observations
)
end

def initialize_with_images_parameter
add_boolean_condition(
"observations.thumb_image_id IS NOT NULL",
"observations.thumb_image_id IS NULL",
params[:with_images],
:observations
)
end

def initialize_with_specimen_parameter
add_boolean_condition(
"observations.specimen IS TRUE",
"observations.specimen IS FALSE",
params[:with_specimen],
:observations
)
end

Expand All @@ -99,15 +119,16 @@ def initialize_with_name_parameter
)
end

def initialize_with_notes_parameter
def initialize_with_obs_notes_parameter(param_name = :with_notes)
add_boolean_condition(
"observations.notes != #{escape(Observation.no_notes_persisted)}",
"observations.notes = #{escape(Observation.no_notes_persisted)}",
params[:with_notes]
params[param_name],
:observations
)
end

def initialize_search_parameters
def initialize_obs_search_parameters
add_search_condition(
"observations.notes",
params[:notes_has]
Expand Down
4 changes: 2 additions & 2 deletions app/classes/query/location_with_observations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def initialize_flavor
initialize_association_parameters
add_range_condition("observations.vote_cache", params[:confidence])
initialize_boolean_parameters
initialize_search_parameters
initialize_obs_search_parameters
initialize_content_filters(Observation)
super
end
Expand All @@ -53,7 +53,7 @@ def initialize_boolean_parameters
initialize_is_collection_location_parameter
initialize_with_public_lat_lng_parameter
initialize_with_name_parameter
initialize_with_notes_parameter
initialize_with_obs_notes_parameter
add_with_notes_fields_condition(params[:with_notes_fields])
add_join(:observations, :comments) if params[:with_comments]
add_join(:observations, :sequences) if params[:with_sequences]
Expand Down
16 changes: 16 additions & 0 deletions app/classes/query/modules/associations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,22 @@ module Query
module Modules
# Helper methods for turning Query parameters into SQL conditions.
module Associations
def initialize_herbaria_parameter
add_id_condition(
"herbarium_records.herbarium_id",
lookup_herbaria_by_name(params[:herbaria]),
:observations, :observation_herbarium_records, :herbarium_records
)
end

def initialize_herbarium_records_parameter
add_id_condition(
"observation_herbarium_records.herbarium_record_id",
lookup_herbarium_records_by_name(params[:herbarium_records]),
:observations, :observation_herbarium_records
)
end

def add_where_condition(table, vals, *)
return if vals.empty?

Expand Down
4 changes: 2 additions & 2 deletions app/classes/query/name_with_observations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def initialize_flavor
add_where_conditions
initialize_association_parameters
initialize_boolean_parameters
initialize_search_parameters
initialize_obs_search_parameters
initialize_name_parameters(:observations)
add_range_condition("observations.vote_cache", params[:confidence])
add_bounding_box_conditions_for_observations
Expand All @@ -53,7 +53,7 @@ def initialize_boolean_parameters
initialize_is_collection_location_parameter
initialize_with_public_lat_lng_parameter
initialize_with_name_parameter
initialize_with_notes_parameter
initialize_with_obs_notes_parameter
add_with_notes_fields_condition(params[:with_notes_fields])
add_join(:observations, :comments) if params[:with_comments]
add_join(:observations, :sequences) if params[:with_sequences]
Expand Down
23 changes: 4 additions & 19 deletions app/classes/query/observation_base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,25 +45,23 @@ def local_parameter_declarations
}
end

# rubocop:disable Metrics/AbcSize
def initialize_flavor
add_ids_condition
add_owner_and_time_stamp_conditions("observations")
add_by_user_condition("observations")
add_date_condition("observations.when", params[:date])
initialize_obs_date_parameter(:date)
add_pattern_condition
add_advanced_search_conditions
add_needs_naming_condition
initialize_name_parameters
initialize_association_parameters
initialize_boolean_parameters
initialize_search_parameters
add_range_condition("observations.vote_cache", params[:confidence])
initialize_obs_search_parameters
initialize_confidence_parameter
add_bounding_box_conditions_for_observations
initialize_content_filters(Observation)
super
end
# rubocop:enable Metrics/AbcSize

def add_pattern_condition
return if params[:pattern].blank?
Expand Down Expand Up @@ -160,24 +158,11 @@ def add_location_in_region_condition
where << conds
end

# The tricky thing here is, without the user.id being the value passed in
# params[:filter][:term], we're hunting for a user from a string like
# "Name <name>". Better to have the id as the value!
# Below uses the method in query/initializers/advanced_search to get a
# string but is expensive. Something like
# joins(:users).where((User[:login] + User[:name]).matches(str))
# def add_by_user_condition
# return unless params[:by_user]
#
# user = find_cached_parameter_instance(User, :by_user)
# user = params[:by_user].to_s.gsub(/ *<[^<>]*>/, "")
# end

def initialize_boolean_parameters
initialize_is_collection_location_parameter
initialize_with_public_lat_lng_parameter
initialize_with_name_parameter
initialize_with_notes_parameter
initialize_with_obs_notes_parameter
add_with_notes_fields_condition(params[:with_notes_fields])
add_join(:comments) if params[:with_comments]
add_join(:sequences) if params[:with_sequences]
Expand Down
87 changes: 7 additions & 80 deletions app/classes/query/sequence_base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module Query
# Methods to validate parameters and initialize Query's which return Sequences
class SequenceBase < Query::Base
include Query::Initializers::Names
include Query::Initializers::Observations

def model
Sequence
Expand Down Expand Up @@ -89,13 +90,14 @@ def search_fields
def initialize_association_parameters
add_id_condition("sequences.observation_id", params[:observations])
initialize_observers_parameter
initialize_locations_parameter
add_where_condition("observations", params[:locations], :observations)
initialize_herbaria_parameter
initialize_herbarium_records_parameter
initialize_projects_parameter
initialize_species_lists_parameter
end

# Different because it can take multiple users
def initialize_observers_parameter
add_id_condition(
"observations.user_id",
Expand All @@ -104,47 +106,10 @@ def initialize_observers_parameter
)
end

def initialize_locations_parameter
add_id_condition(
"observations.location_id",
lookup_locations_by_name(params[:locations]),
:observations
)
end

def initialize_herbaria_parameter
add_id_condition(
"herbarium_records.herbarium_id",
lookup_herbaria_by_name(params[:herbaria]),
:observations, :observation_herbarium_records, :herbarium_records
)
end

def initialize_herbarium_records_parameter
add_id_condition(
"observation_herbarium_records.herbarium_record_id",
lookup_herbarium_records_by_name(params[:herbarium_records]),
:observations, :observation_herbarium_records
)
end

def initialize_observation_parameters
add_date_condition(
"observations.when",
params[:obs_date],
:observations
)
add_boolean_condition(
"observations.is_collection_location IS TRUE",
"observations.is_collection_location IS FALSE",
params[:is_collection_location],
:observations
)
add_range_condition(
"observations.vote_cache",
params[:confidence],
:observations
)
initialize_obs_date_parameter(:obs_date)
initialize_is_collection_location_parameter
initialize_confidence_parameter
end

def initialize_exact_match_parameters
Expand All @@ -157,48 +122,10 @@ def initialize_boolean_parameters
initialize_with_images_parameter
initialize_with_specimen_parameter
initialize_with_name_parameter
initialize_with_obs_notes_parameter
initialize_with_obs_notes_parameter(:with_obs_notes)
add_with_notes_fields_condition(params[:with_notes_fields], :observations)
end

def initialize_with_images_parameter
add_boolean_condition(
"observations.thumb_image_id IS NOT NULL",
"observations.thumb_image_id IS NULL",
params[:with_images],
:observations
)
end

def initialize_with_specimen_parameter
add_boolean_condition(
"observations.specimen IS TRUE",
"observations.specimen IS FALSE",
params[:with_specimen],
:observations
)
end

def initialize_with_name_parameter
genus = Name.ranks[:Genus]
group = Name.ranks[:Group]
add_boolean_condition(
"names.`rank` <= #{genus} or names.`rank` = #{group}",
"names.`rank` > #{genus} and names.`rank` < #{group}",
params[:with_name],
:observations, :names
)
end

def initialize_with_obs_notes_parameter
add_boolean_condition(
"observations.notes != #{escape(Observation.no_notes_persisted)}",
"observations.notes = #{escape(Observation.no_notes_persisted)}",
params[:with_obs_notes],
:observations
)
end

def initialize_search_parameters
add_search_condition("sequences.locus", params[:locus_has])
add_search_condition("sequences.accession", params[:accession_has])
Expand Down

0 comments on commit 7751f00

Please sign in to comment.