Class: LeadsController
- Inherits:
- 
      ApplicationController
      
        - Object
- ActionController::Base
- ApplicationController
- LeadsController
 
- Defined in:
- app/controllers/leads_controller.rb
Constant Summary
Constants included from ProjectsHelper
ProjectsHelper::CLASSIFIER, ProjectsHelper::CLASSIFIER_ANNOTATION
Instance Method Summary collapse
- 
  
    
      #add_children  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    POST /leads/1/add_children.json. 
- #api_key ⇒ Object
- #autocomplete ⇒ Object
- 
  
    
      #batch_create_lead_items  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Creates a new key populated with otus from params. 
- 
  
    
      #create  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    POST /leads POST /leads.json. 
- 
  
    
      #delete_children  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    For deleting all children at a particular level of the key where at most one of the children has its own children; the grandchildren, if any, are reparented. 
- 
  
    
      #destroy  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    DELETE /leads/1 DELETE /leads/1.json. 
- 
  
    
      #destroy_children  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    For destroying all children at a particular level of the key where none of the children have their own children. 
- 
  
    
      #destroy_subtree  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    A separate action from destroy to be called in different contexts: this one can be called on any lead, not just root. 
- 
  
    
      #download  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    GET /leads/download. 
- 
  
    
      #duplicate  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    POST /leads/1/duplicate.html. 
- 
  
    
      #edit  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    GET /leads/1/edit. 
- #expand_lead ⇒ Object private
- 
  
    
      #index  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    GET /leads GET /leads.json. 
- 
  
    
      #insert_couplet  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    POST /leads/1/insert_couplet.json. 
- 
  
    
      #insert_key  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    POST /leads/1/insert_key.json?key_to_insert=:id. 
- #lead_params ⇒ Object private
- #list ⇒ Object
- 
  
    
      #new  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    GET /leads/new. 
- #new_couplet ⇒ Object private
- 
  
    
      #otus  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    GET /leads/1/otus.json. 
- 
  
    
      #redirect_option_texts  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    GET /leads/1/redirect_option_texts.json. 
- 
  
    
      #reorder_children  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    PATCH /leads/1/reorder_children.json. 
- #reorder_params ⇒ Object private
- #search ⇒ Object
- #set_lead ⇒ Object private
- #set_observation_matrix ⇒ Object
- 
  
    
      #show  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    GET /leads/1 GET /leads/1.json. 
- 
  
    
      #update  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    PATCH/PUT /leads/1.json. 
Methods included from DataControllerConfiguration::ProjectDataControllerConfiguration
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_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
#add_children ⇒ Object
POST /leads/1/add_children.json
| 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | # File 'app/controllers/leads_controller.rb', line 81 def add_children num_to_add = params[:num_to_add] if num_to_add < 1 || num_to_add > 2 @lead.errors.add(:add_children, "request must be for 1 or 2, was '#{num_to_add}'" ) render json: @lead.errors, status: :unprocessable_entity return end # currently infers num_to_add @lead.add_children(sessions_current_project_id, sessions_current_user_id) render action: :show, status: :created, location: @lead end | 
#api_key ⇒ Object
| 268 269 270 271 | # File 'app/controllers/leads_controller.rb', line 268 def api_key @lead = Lead.where(project_id: sessions_current_project_id, is_public: true).find(params.require(:id)) render '/leads/api/v1/key' end | 
#autocomplete ⇒ Object
| 243 244 245 246 247 248 | # File 'app/controllers/leads_controller.rb', line 243 def autocomplete @leads = ::Queries::Lead::Autocomplete.new( params.require(:term), project_id: sessions_current_project_id, ).autocomplete end | 
#batch_create_lead_items ⇒ Object
Creates a new key populated with otus from params.
| 274 275 276 277 278 279 280 281 282 283 | # File 'app/controllers/leads_controller.rb', line 274 def batch_create_lead_items @lead = Lead.create!(params.require(:lead).permit(:text)) @lead.batch_populate_lead_items(params[:otu_query], sessions_current_project_id, sessions_current_user_id ) @lead.add_children(sessions_current_project_id, sessions_current_user_id) render json: @lead end | 
#create ⇒ Object
POST /leads POST /leads.json
| 67 68 69 70 71 72 73 74 75 76 77 78 | # File 'app/controllers/leads_controller.rb', line 67 def create @lead = Lead.new(lead_params) respond_to do |format| if @lead.save new_couplet # we make a blank couplet so we can show the key format.json { render action: :show, status: :created, location: @lead } else format.json { render json: @lead.errors, status: :unprocessable_entity} end end end | 
#delete_children ⇒ Object
For deleting all children at a particular level of the key where at most one of the children has its own children; the grandchildren, if any, are reparented.
| 182 183 184 185 186 187 188 189 190 191 192 193 | # File 'app/controllers/leads_controller.rb', line 182 def delete_children respond_to do |format| if @lead.destroy_children format.json { head :no_content } else @lead.errors.add(:delete, 'failed!') format.json { render json: @lead.errors, status: :unprocessable_entity } end end end | 
#destroy ⇒ Object
DELETE /leads/1 DELETE /leads/1.json
| 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | # File 'app/controllers/leads_controller.rb', line 117 def destroy if @lead.parent_id respond_to do |format| flash[:error] = 'Delete aborted - you can only delete on root nodes.' format.html { redirect_back(fallback_location: (request.referer || root_path)) } format.json { head :no_content, status: :unprocessable_entity } end return end begin @lead.transaction_nuke respond_to do |format| flash[:notice] = 'Key was successfully destroyed.' format.html { destroy_redirect @lead } format.json { head :no_content } end rescue ActiveRecord::RecordInvalid respond_to do |format| flash[:error] = 'Delete failed!' format.html { redirect_back(fallback_location: (request.referer || root_path)) } format.json { render json: @lead.errors, status: :unprocessable_entity } end end end | 
#destroy_children ⇒ Object
For destroying all children at a particular level of the key where none of the children have their own children.
| 165 166 167 168 169 170 171 172 173 174 175 176 177 | # File 'app/controllers/leads_controller.rb', line 165 def destroy_children if @lead.parent_id.present? if @lead.destroy_children head :no_content else @lead.errors.add(:delete, 'failed!') render json: @lead.errors, status: :unprocessable_entity end else @lead.errors.add(:destroy, "failed - can't delete the only couplet.") render json: @lead.errors, status: :unprocessable_entity end end | 
#destroy_subtree ⇒ Object
A separate action from destroy to be called in different contexts: this one can be called on any lead, not just root. POST /leads/1/destroy_subtree.json
| 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | # File 'app/controllers/leads_controller.rb', line 146 def destroy_subtree parent = @lead.parent begin Lead.destroy_lead_and_descendants( @lead, sessions_current_project_id, sessions_current_user_id ) rescue TaxonWorks::Error => e parent.errors.add(:error, e) render json: parent.errors, status: :unprocessable_entity return end @lead = parent.reload render :show, status: :ok, location: @lead end | 
#download ⇒ Object
GET /leads/download
| 260 261 262 263 264 265 266 | # File 'app/controllers/leads_controller.rb', line 260 def download send_data Export::CSV.generate_csv( Lead.where(project_id: sessions_current_project_id) ), type: 'text', filename: "leads_#{DateTime.now}.tsv" end | 
#duplicate ⇒ Object
POST /leads/1/duplicate.html
| 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | # File 'app/controllers/leads_controller.rb', line 196 def duplicate respond_to do |format| format.html { if !@lead.parent_id if @lead.dupe flash[:notice] = 'Key cloned.' else flash[:error] = @lead.errors..join('; ') end else flash[:error] = 'Clone aborted - you can only clone on a root node.' end redirect_to action: :list } end end | 
#edit ⇒ Object
GET /leads/1/edit
| 61 62 63 | # File 'app/controllers/leads_controller.rb', line 61 def edit redirect_to new_lead_task_path lead_id: @lead.id end | 
#expand_lead ⇒ Object (private)
| 313 314 315 316 | # File 'app/controllers/leads_controller.rb', line 313 def @children = @lead.children @lead_item_otus = @lead.apportioned_lead_item_otus end | 
#index ⇒ Object
GET /leads GET /leads.json
| 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # File 'app/controllers/leads_controller.rb', line 12 def index respond_to do |format| format.html { one_week_ago = Time.now.utc.to_date - 7 @recent_objects = Lead .roots_with_data(sessions_current_project_id) .where('key_updated_at > ?', one_week_ago) .reorder(key_updated_at: :desc) .limit(10) render '/shared/data/all/index' } format.json { if params[:load_root_otus] @leads = Lead.roots_with_data(sessions_current_project_id, true) else @leads = Lead.roots_with_data(sessions_current_project_id) end } end end | 
#insert_couplet ⇒ Object
POST /leads/1/insert_couplet.json
| 98 99 100 101 | # File 'app/controllers/leads_controller.rb', line 98 def insert_couplet @lead.insert_couplet head :no_content end | 
#insert_key ⇒ Object
POST /leads/1/insert_key.json?key_to_insert=:id
| 215 216 217 218 219 220 221 222 | # File 'app/controllers/leads_controller.rb', line 215 def insert_key if !@lead.insert_key(params[:key_to_insert]) render json: @lead.errors, status: :unprocessable_entity return end head :no_content end | 
#lead_params ⇒ Object (private)
| 301 302 303 304 305 306 307 | # File 'app/controllers/leads_controller.rb', line 301 def lead_params() params.require(:lead).permit( :parent_id, :otu_id, :text, :origin_label, :description, :redirect_id, :link_out, :link_out_text, :is_public, :position ) end | 
#list ⇒ Object
| 34 35 36 37 | # File 'app/controllers/leads_controller.rb', line 34 def list @leads = Lead. roots_with_data(sessions_current_project_id).page(params[:page]) end | 
#new ⇒ Object
GET /leads/new
| 56 57 58 | # File 'app/controllers/leads_controller.rb', line 56 def new redirect_to new_lead_task_path end | 
#new_couplet ⇒ Object (private)
| 318 319 320 321 322 | # File 'app/controllers/leads_controller.rb', line 318 def new_couplet 2.times do @lead.children.create! end end | 
#otus ⇒ Object
GET /leads/1/otus.json
| 239 240 241 | # File 'app/controllers/leads_controller.rb', line 239 def otus @otus = Otu.associated_with_key(@lead) end | 
#redirect_option_texts ⇒ Object
GET /leads/1/redirect_option_texts.json
| 40 41 42 | # File 'app/controllers/leads_controller.rb', line 40 def redirect_option_texts @texts = @lead.(sessions_current_project_id) end | 
#reorder_children ⇒ Object
PATCH /leads/1/reorder_children.json
| 225 226 227 228 229 230 231 232 233 234 235 236 | # File 'app/controllers/leads_controller.rb', line 225 def reorder_children begin @lead.reorder_children(reorder_params[:reorder_list]) rescue TaxonWorks::Error => e @lead.errors.add(:reorder_failed, e.to_s) render json: @lead.errors, status: :unprocessable_entity return end @leads = @lead.reload.children @lead_item_otus = @lead.apportioned_lead_item_otus end | 
#reorder_params ⇒ Object (private)
| 309 310 311 | # File 'app/controllers/leads_controller.rb', line 309 def reorder_params params.permit(reorder_list: []) end | 
#search ⇒ Object
| 250 251 252 253 254 255 256 257 | # File 'app/controllers/leads_controller.rb', line 250 def search if params[:id].blank? redirect_to(lead_path, alert: 'You must select an item from the list with a click or tab press before clicking show.') else redirect_to lead_path(params[:id]) end end | 
#set_lead ⇒ Object (private)
| 297 298 299 | # File 'app/controllers/leads_controller.rb', line 297 def set_lead @lead = Lead.find(params[:id]) end | 
#set_observation_matrix ⇒ Object
| 285 286 287 288 289 290 291 292 293 | # File 'app/controllers/leads_controller.rb', line 285 def set_observation_matrix if params[:observation_matrix_id].nil? @lead.errors.add(:observation_matrix_id, 'is required.') render json: @lead.errors, status: :unprocessable_entity end @lead.update!(observation_matrix_id: params[:observation_matrix_id]) head :no_content end | 
#show ⇒ Object
GET /leads/1 GET /leads/1.json
| 46 47 48 49 50 51 52 53 | # File 'app/controllers/leads_controller.rb', line 46 def show if @lead.children.present? else @children = nil @lead_item_otus = @lead.apportioned_lead_item_otus end end | 
#update ⇒ Object
PATCH/PUT /leads/1.json
| 104 105 106 107 108 109 110 111 112 113 | # File 'app/controllers/leads_controller.rb', line 104 def update begin @lead.update!(lead_params) @lead_item_otus = @lead.parent_id ? @lead.parent.apportioned_lead_item_otus : { parent: [], children: [] } rescue ActiveRecord::RecordInvalid render json: @lead.errors, status: :unprocessable_entity end end |