Class: TaxonNamesController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- TaxonNamesController
- Defined in:
- app/controllers/taxon_names_controller.rb
Constant Summary
Constants included from ProjectsHelper
ProjectsHelper::CLASSIFIER, ProjectsHelper::CLASSIFIER_ANNOTATION
Instance Method Summary collapse
-
#api_catalog ⇒ Object
GET /api/v1/taxon_names/:id/inventory/catalog Contains stats block.
-
#api_index ⇒ Object
GET /api/v1/taxon_names.
-
#api_monograph ⇒ Object
GET /api/v1/taxon_names/:id/monograph.
- #api_origin_citation ⇒ Object
- #api_parse ⇒ Object
-
#api_show ⇒ Object
GET /api/v1/taxon_names/:id.
-
#api_summary ⇒ Object
GET /api/v1/taxon_names/:id/inventory/summary.
- #autocomplete ⇒ Object
- #autocomplete_params ⇒ Object private
-
#autoselect ⇒ Object
GET /taxon_names/autoselect.
-
#autoselect_col_create ⇒ Object
POST.
- #autoselect_col_create_params ⇒ Object private
-
#autoselect_col_datasets ⇒ Object
GET /taxon_names/col_datasets?q=...
- #autoselect_params ⇒ Object private
- #batch_load ⇒ Object
- #batch_params ⇒ Object private
-
#batch_update ⇒ Object
PATCH /taxon_names/batch_update.json?taxon_names_query=<>&taxon_name=taxon_name_id=123}.
-
#create ⇒ Object
POST /taxon_names POST /taxon_names.json.
- #create_nomen_batch_load ⇒ Object
- #create_simple_batch_load ⇒ Object
-
#destroy ⇒ Object
DELETE /taxon_names/1 DELETE /taxon_names/1.json.
-
#download ⇒ Object
GET /taxon_names/download.
-
#edit ⇒ Object
GET /taxon_names/1/edit.
-
#index ⇒ Object
GET /taxon_names GET /taxon_names.json.
- #list ⇒ Object
-
#match ⇒ Object
POST /taxon_names/match.json.
- #match_params ⇒ Object private
-
#new ⇒ Object
GET /taxon_names/new.
-
#origin_citation ⇒ Object
GET /api/v1/taxon_names.
-
#original_combination ⇒ Object
GET /taxon_names/1/original_combination.
- #parse ⇒ Object
- #predicted_rank ⇒ Object
- #preview_nomen_batch_load ⇒ Object
- #preview_simple_batch_load ⇒ Object
- #random ⇒ Object
- #rank_table ⇒ Object
- #ranks ⇒ Object
- #remove_authors ⇒ Object
- #search ⇒ Object
-
#select_options ⇒ Object
GET /taxon_names/select_options.
- #set_taxon_name ⇒ Object private
-
#show ⇒ Object
GET /taxon_names/1 GET /taxon_names/1.json.
- #taxon_name_params ⇒ Object private
- #taxonomy ⇒ Object
-
#update ⇒ Object
PATCH/PUT /taxon_names/1 PATCH/PUT /taxon_names/1.json.
Methods included from DataControllerConfiguration::ProjectDataControllerConfiguration
Methods inherited from ApplicationController
Methods included from RedirectHelper
Methods included from RequestType
Methods included from LogRecent
Methods included from Cookies
#digest_cookie, #digested_cookie_exists?
Methods included from Whitelist
Methods included from ProjectsHelper
#cumulative_gb_per_year, #cumulative_projects_created_per_year, #document_cumulative_gb_per_year, #document_gb_per_year, #gb_per_year, #image_cumulative_gb_per_year, #image_gb_per_year, #invalid_object, #project_classification, #project_initials, #project_link, #project_login_link, #project_matches, #project_tag, #projects_list, #projects_search_form, #sound_cumulative_gb_per_year, #sound_gb_per_year, #taxonworks_classification, #week_in_review_graphs
Methods included from Api::Intercept
Methods included from TokenAuthentication
#intercept_project, #intercept_user, #intercept_user_or_project, #project_token_authenticate, #token_authenticate
Instance Method Details
#api_catalog ⇒ Object
GET /api/v1/taxon_names/:id/inventory/catalog Contains stats block
312 313 314 315 316 317 |
# File 'app/controllers/taxon_names_controller.rb', line 312 def api_catalog @data = helpers.recursive_catalog_json( taxon_name: @taxon_name, target_depth: params[:target_depth] || 0, include_distribution: false ) render '/taxon_names/api/v1/catalog' end |
#api_index ⇒ Object
GET /api/v1/taxon_names
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 |
# File 'app/controllers/taxon_names_controller.rb', line 275 def api_index q = ::Queries::TaxonName::Filter.new(params.merge!(api: true)).all .where(project_id: sessions_current_project_id) .order('taxon_names.id') respond_to do |format| format.json { @taxon_names = q.page(params[:page]).per(params[:per]) render '/taxon_names/api/v1/index' } format.csv { @taxon_names = q send_data Export::CSV.generate_csv( @taxon_names, exclude_columns: %w{updated_by_id created_by_id project_id}, ), type: 'text', filename: "taxon_names_#{DateTime.now}.tsv" } end end |
#api_monograph ⇒ Object
GET /api/v1/taxon_names/:id/monograph
306 307 308 |
# File 'app/controllers/taxon_names_controller.rb', line 306 def api_monograph render '/taxon_names/api/v1/monograph' end |
#api_origin_citation ⇒ Object
349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 |
# File 'app/controllers/taxon_names_controller.rb', line 349 def api_origin_citation q = ::Queries::TaxonName::Filter.new(params).all .where(project_id: sessions_current_project_id) .order('taxon_names.id') respond_to do |format| format.json { @taxon_names = q.page(params[:page]).per(params[:per]) render '/taxon_names/origin_citation' } format.csv { @taxon_names = q send_data Export::CSV::TaxonNameOrigin.csv( @taxon_names, ).read, type: 'text', filename: "taxon_name_origin_citation_#{DateTime.now}.tsv" } end end |
#api_parse ⇒ Object
319 320 321 322 323 324 325 326 327 |
# File 'app/controllers/taxon_names_controller.rb', line 319 def api_parse @combination = Combination.where(project_id: sessions_current_project_id).find(params[:combination_id]) if params[:combination_id] @result = Vendor::Biodiversity::Result.new( query_string: params.require(:query_string), project_id: sessions_current_project_id, code: :iczn # !! TODO: generalize ).result render '/taxon_names/api/v1/parse' end |
#api_show ⇒ Object
GET /api/v1/taxon_names/:id
296 297 298 |
# File 'app/controllers/taxon_names_controller.rb', line 296 def api_show render '/taxon_names/api/v1/show' end |
#api_summary ⇒ Object
GET /api/v1/taxon_names/:id/inventory/summary
301 302 303 |
# File 'app/controllers/taxon_names_controller.rb', line 301 def api_summary render '/taxon_names/api/v1/summary' end |
#autocomplete ⇒ Object
97 98 99 100 101 102 103 104 |
# File 'app/controllers/taxon_names_controller.rb', line 97 def autocomplete render json: {} and return if params[:term].blank? @taxon_names = ::Queries::TaxonName::Autocomplete.new( params[:term], exact: 'true', **autocomplete_params ).autocomplete end |
#autocomplete_params ⇒ Object (private)
423 424 425 426 427 428 |
# File 'app/controllers/taxon_names_controller.rb', line 423 def autocomplete_params params.permit( :valid, :exact, :no_leaves, type: [], parent_id: [], nomenclature_group: [] ).to_h.symbolize_keys.merge(project_id: sessions_current_project_id) end |
#autoselect ⇒ Object
GET /taxon_names/autoselect
369 370 371 372 373 374 375 376 377 |
# File 'app/controllers/taxon_names_controller.rb', line 369 def autoselect render json: ::Autoselect::TaxonName::Autoselect.new( term: params[:term], level: params[:level], project_id: sessions_current_project_id, user_id: sessions_current_user_id, **autoselect_params ).response end |
#autoselect_col_create ⇒ Object
POST
386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 |
# File 'app/controllers/taxon_names_controller.rb', line 386 def autoselect_col_create result = ::Autoselect::TaxonName::ColCreator.new( rows: autoselect_col_create_params, col_code: params[:col_code], project_id: sessions_current_project_id, user_id: sessions_current_user_id ).call tn = ::TaxonName.find(result[:taxon_name_id]) render json: result.merge(global_id: tn.to_global_id.to_s) rescue ::Autoselect::TaxonName::ColCreator::CreationError => e render json: { error: e., failed_col_name: e.col_name, failed_col_id: e.col_id }, status: :unprocessable_entity end |
#autoselect_col_create_params ⇒ Object (private)
405 406 407 408 409 |
# File 'app/controllers/taxon_names_controller.rb', line 405 def autoselect_col_create_params params.permit(rows: [:col_name, :col_rank, :col_id, :dataset_id, :taxonworks_id, :col_authorship, :col_year]) .fetch(:rows, []) .map(&:to_h) end |
#autoselect_col_datasets ⇒ Object
GET /taxon_names/col_datasets?q=...
380 381 382 383 |
# File 'app/controllers/taxon_names_controller.rb', line 380 def autoselect_col_datasets results = ::Vendor::Colrapi.datasets(q: params[:q].to_s, limit: 20) render json: results end |
#autoselect_params ⇒ Object (private)
411 412 413 414 415 416 |
# File 'app/controllers/taxon_names_controller.rb', line 411 def autoselect_params params.permit( :valid, :exact, :no_leaves, :dataset_id, :show_info, type: [], parent_id: [], nomenclature_group: [] ).to_h.symbolize_keys end |
#batch_load ⇒ Object
117 118 |
# File 'app/controllers/taxon_names_controller.rb', line 117 def batch_load end |
#batch_params ⇒ Object (private)
460 461 462 463 464 465 466 467 468 469 470 |
# File 'app/controllers/taxon_names_controller.rb', line 460 def batch_params params.permit( :file, :parent_taxon_name_id, :nomenclature_code, :also_create_otu, :import_level).merge( user_id: sessions_current_user_id, project_id: sessions_current_project_id ).to_h.symbolize_keys end |
#batch_update ⇒ Object
PATCH /taxon_names/batch_update.json?taxon_names_query=<>&taxon_name=taxon_name_id=123}
261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'app/controllers/taxon_names_controller.rb', line 261 def batch_update if r = Protonym.batch_update( preview: params[:preview], taxon_name: taxon_name_params.merge(by: sessions_current_user_id), taxon_name_query: params[:taxon_name_query].merge(by: sessions_current_user_id), user_id: sessions_current_user_id, project_id: sessions_current_project_id) render json: r.to_json, status: :ok else render json: {}, status: :unprocessable_content end end |
#create ⇒ Object
POST /taxon_names POST /taxon_names.json
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'app/controllers/taxon_names_controller.rb', line 39 def create @taxon_name = TaxonName.new(taxon_name_params) respond_to do |format| if @taxon_name.save format.html { redirect_to url_for(@taxon_name.), notice: "Taxon name '#{@taxon_name.name}' was successfully created." } format.json { render :show, status: :created, location: @taxon_name. } else format.html { render action: :new } format.json { render json: @taxon_name.errors, status: :unprocessable_content } end end end |
#create_nomen_batch_load ⇒ Object
212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'app/controllers/taxon_names_controller.rb', line 212 def create_nomen_batch_load if params[:file] && (params[:file].tempfile, :nomen_taxon_names_md5) @result = BatchLoad::Import::TaxonNames::NomenInterpreter.new(**batch_params) if @result.create flash[:notice] = "Successfully proccessed file, #{@result.total_records_created} items were created." render 'taxon_names/batch_load/nomen/create' and return else flash[:alert] = 'Batch import failed.' end else flash[:alert] = 'File to batch upload must be supplied.' end render :batch_load end |
#create_simple_batch_load ⇒ Object
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
# File 'app/controllers/taxon_names_controller.rb', line 184 def create_simple_batch_load if params[:file] && (params[:file].tempfile, :simple_taxon_names_md5) @result = BatchLoad::Import::TaxonifiToTaxonworks.new(**batch_params) if @result.create flash[:notice] = "Successfully proccessed file, #{@result.total_records_created} taxon names were created." render 'taxon_names/batch_load/simple/create' and return else flash[:alert] = 'Batch import failed.' end else flash[:alert] = 'File to batch upload must be supplied.' end render :batch_load end |
#destroy ⇒ Object
DELETE /taxon_names/1 DELETE /taxon_names/1.json
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'app/controllers/taxon_names_controller.rb', line 73 def destroy parent_id = @taxon_name.parent_id @taxon_name.destroy respond_to do |format| if @taxon_name.destroyed? format.html { destroy_redirect @taxon_name, notice: 'TaxonName was successfully destroyed.' } format.json { render json: { parent_id: } } else format.html { destroy_redirect @taxon_name, notice: 'TaxonName was not destroyed, ' + @taxon_name.errors..join('; ') } format.json { render json: @taxon_name.errors, status: :unprocessable_content } end end end |
#download ⇒ Object
GET /taxon_names/download
111 112 113 114 115 |
# File 'app/controllers/taxon_names_controller.rb', line 111 def download send_data Export::CSV.generate_csv( TaxonName.where(project_id: sessions_current_project_id) ), type: 'text', filename: "taxon_names_#{DateTime.now}.tsv" end |
#edit ⇒ Object
GET /taxon_names/1/edit
34 35 |
# File 'app/controllers/taxon_names_controller.rb', line 34 def edit end |
#index ⇒ Object
GET /taxon_names GET /taxon_names.json
9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'app/controllers/taxon_names_controller.rb', line 9 def index respond_to do |format| format.html do @recent_objects = TaxonName.recent_from_project_id(sessions_current_project_id).order(updated_at: :desc).limit(10) render '/shared/data/all/index' end format.json { @taxon_names = ::Queries::TaxonName::Filter.new(params).all .page(params[:page]) .per(params[:per]) } end end |
#list ⇒ Object
106 107 108 |
# File 'app/controllers/taxon_names_controller.rb', line 106 def list @taxon_names = TaxonName.with_project_id(sessions_current_project_id).order(:id).page(params[:page]) end |
#match ⇒ Object
POST /taxon_names/match.json
242 243 244 245 246 247 248 249 250 251 252 253 254 |
# File 'app/controllers/taxon_names_controller.rb', line 242 def match @result = Match::Otu::TaxonName.new( names: match_params[:names] || [], project_id: sessions_current_project_id, levenshtein_distance: match_params[:levenshtein_distance] || 0, taxon_name_id: match_params[:taxon_name_id], resolve_synonyms: match_params[:resolve_synonyms] == 'true', try_without_subgenus: match_params[:try_without_subgenus] == 'true' ).call render :match end |
#match_params ⇒ Object (private)
430 431 432 433 434 435 436 437 438 |
# File 'app/controllers/taxon_names_controller.rb', line 430 def match_params params.permit( :levenshtein_distance, :taxon_name_id, :resolve_synonyms, :try_without_subgenus, names: [] ) end |
#new ⇒ Object
GET /taxon_names/new
29 30 31 |
# File 'app/controllers/taxon_names_controller.rb', line 29 def new @taxon_name = Protonym.new(source: Source.new) end |
#origin_citation ⇒ Object
GET /api/v1/taxon_names
330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 |
# File 'app/controllers/taxon_names_controller.rb', line 330 def origin_citation q = ::Queries::TaxonName::Filter.new(params).all .where(project_id: sessions_current_project_id) .order('taxon_names.id') respond_to do |format| format.json { @taxon_names = q.page(params[:page]).per(params[:per]) render '/taxon_names/origin_citation' } format.csv { @taxon_names = q send_data Export::CSV::TaxonNameOrigin.csv( @taxon_names, ).read, type: 'text', filename: "taxon_name_origin_citation_#{DateTime.now}.tsv" } end end |
#original_combination ⇒ Object
GET /taxon_names/1/original_combination
257 258 |
# File 'app/controllers/taxon_names_controller.rb', line 257 def original_combination end |
#parse ⇒ Object
227 228 229 230 231 232 233 234 |
# File 'app/controllers/taxon_names_controller.rb', line 227 def parse @combination = Combination.where(project_id: sessions_current_project_id).find(params[:combination_id]) if params[:combination_id] @result = Vendor::Biodiversity::Result.new( query_string: params.require(:query_string), project_id: sessions_current_project_id, code: :iczn # !! TODO: generalize ).result end |
#predicted_rank ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'app/controllers/taxon_names_controller.rb', line 124 def predicted_rank if params[:parent_id] p = TaxonName.find_by(id: params[:parent_id]) if p.nil? render json: {predicted_rank: ''}.to_json else render json: {predicted_rank: p.predicted_child_rank(params[:name]).to_s}.to_json end else render json: {predicted_rank: ''}.to_json end end |
#preview_nomen_batch_load ⇒ Object
201 202 203 204 205 206 207 208 209 210 |
# File 'app/controllers/taxon_names_controller.rb', line 201 def preview_nomen_batch_load if params[:file] @result = BatchLoad::Import::TaxonNames::NomenInterpreter.new(**batch_params) (params[:file].tempfile, :nomen_taxon_names_md5) render 'taxon_names/batch_load/nomen/preview' else flash[:notice] = 'No file provided!' redirect_to action: :batch_load end end |
#preview_simple_batch_load ⇒ Object
173 174 175 176 177 178 179 180 181 182 |
# File 'app/controllers/taxon_names_controller.rb', line 173 def preview_simple_batch_load if params[:file] @result = BatchLoad::Import::TaxonifiToTaxonworks.new(**batch_params) (params[:file].tempfile, :simple_taxon_names_md5) render 'taxon_names/batch_load/simple/preview' else flash[:notice] = 'No file provided!' redirect_to action: :batch_load end end |
#random ⇒ Object
137 138 139 140 141 |
# File 'app/controllers/taxon_names_controller.rb', line 137 def random redirect_to browse_nomenclature_task_path( taxon_name_id: TaxonName.where(project_id: sessions_current_project_id).order('random()').limit(1).pick(:id) ) end |
#rank_table ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'app/controllers/taxon_names_controller.rb', line 143 def rank_table @query = ::Queries::TaxonName::Tabular.new( taxon_name_id: params.require(:taxon_name_id), # this is one of the few places ranks: params.require(:ranks), fieldsets: params[:fieldsets], limit: params[:limit], validity: params[:validity], combinations: params[:combinations], project_id: sessions_current_project_id, rank_data: params[:rank_data], descriptors_scored_for_otu: params[:descriptors_scored_for_otu], otu_observation_count: params[:otu_observation_count], otu_observation_depictions: params[:otu_observation_depictions], otus: params[:otus] ) end |
#ranks ⇒ Object
120 121 122 |
# File 'app/controllers/taxon_names_controller.rb', line 120 def ranks render json: RANKS_JSON.to_json end |
#remove_authors ⇒ Object
236 237 238 239 |
# File 'app/controllers/taxon_names_controller.rb', line 236 def names = TaxonName.(params['names'].first(5000)) render json: { names: } end |
#search ⇒ Object
89 90 91 92 93 94 95 |
# File 'app/controllers/taxon_names_controller.rb', line 89 def search if params[:id].blank? redirect_to taxon_names_path, alert: 'You must select an item from the list with a click or tab press before clicking show.' else redirect_to taxon_name_path(params[:id]) end end |
#select_options ⇒ Object
GET /taxon_names/select_options
165 166 167 168 169 170 171 |
# File 'app/controllers/taxon_names_controller.rb', line 165 def @taxon_names = TaxonName.select_optimized( sessions_current_user_id, sessions_current_project_id, target: params[:target] ) end |
#set_taxon_name ⇒ Object (private)
418 419 420 421 |
# File 'app/controllers/taxon_names_controller.rb', line 418 def set_taxon_name @taxon_name = TaxonName.with_project_id(sessions_current_project_id).includes(:creator, :updater).find(params[:id]) @recent_object = @taxon_name end |
#show ⇒ Object
GET /taxon_names/1 GET /taxon_names/1.json
25 26 |
# File 'app/controllers/taxon_names_controller.rb', line 25 def show end |
#taxon_name_params ⇒ Object (private)
440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 |
# File 'app/controllers/taxon_names_controller.rb', line 440 def taxon_name_params params.require(:taxon_name).permit( :name, :parent_id, :year_of_publication, :etymology, :verbatim_author, :verbatim_name, :rank_class, :type, :masculine_name, :feminine_name, :neuter_name, :also_create_otu, roles_attributes: [ :id, :_destroy, :type, :person_id, :position, person_attributes: [ :last_name, :first_name, :suffix, :prefix ] ], family_group_name_form_relationship_attributes: [:id, :_destroy, :object_taxon_name_id], origin_citation_attributes: [:id, :_destroy, :source_id, :pages], taxon_name_classifications_attributes: [:id, :_destroy, :type] ) end |
#taxonomy ⇒ Object
160 161 162 |
# File 'app/controllers/taxon_names_controller.rb', line 160 def taxonomy @taxon_name = TaxonName.find(params[:id]) end |
#update ⇒ Object
PATCH/PUT /taxon_names/1 PATCH/PUT /taxon_names/1.json
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'app/controllers/taxon_names_controller.rb', line 55 def update respond_to do |format| if @taxon_name.update(taxon_name_params) # TODO: WHY?! @taxon_name.reload format.html { redirect_to url_for(@taxon_name.), notice: 'Taxon name was successfully updated.' } format.json { render :show, status: :ok, location: @taxon_name. } else format.html { render action: :edit } format.json { render json: @taxon_name.errors, status: :unprocessable_content } end end end |