Class: ImagesController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- ImagesController
- Defined in:
- app/controllers/images_controller.rb
Instance Method Summary collapse
-
#api_image_inventory ⇒ Object
GET /api/v1/otus/:id/inventory/images - routed here to take advantage of Pagination.
-
#api_index ⇒ Object
GET /api/v1/images.
-
#api_params ⇒ Object
private
TODO: need `is_public` here.
-
#api_show ⇒ Object
GET /api/v1/images/:id.
- #autocomplete ⇒ Object
-
#create ⇒ Object
POST /images POST /images.json.
-
#destroy ⇒ Object
DELETE /images/1 DELETE /images/1.json.
-
#download ⇒ Object
GET /images/download.
-
#edit ⇒ Object
GET /images/1/edit.
-
#extract ⇒ Object
GET /images/:id/extract/:x/:y/:height/:width.
- #filter_params ⇒ Object private
- #image_params ⇒ Object private
-
#index ⇒ Object
GET /images GET /images.json.
- #list ⇒ Object
-
#new ⇒ Object
GET /images/new.
-
#ocr ⇒ Object
GET /images/:id/ocr/:x/:y/:height/:width.
-
#rotate ⇒ Object
!! This is a kludge until we get active storage working PATCH /images/123/rotate.
-
#scale ⇒ Object
GET /images/:id/extract/:x/:y/:height/:width/:new_height/:new_width.
-
#scale_to_box ⇒ Object
GET 'images/:id/scale_to_box/:x/:y/:width/:height/:box_width/:box_height'.
-
#search ⇒ Object
TODO: remove for /images.json.
-
#select_options ⇒ Object
GET /images/select_options?target=TaxonDetermination.
- #set_image ⇒ Object private
-
#show ⇒ Object
GET /images/1 GET /images/1.json.
-
#update ⇒ Object
PATCH/PUT /images/1 PATCH/PUT /images/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
#invalid_object, #project_link, #project_matches, #project_tag, #projects_list, #projects_search_form
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_image_inventory ⇒ Object
GET /api/v1/otus/:id/inventory/images
- routed here to take advantage of Pagination
25 26 27 28 29 30 31 |
# File 'app/controllers/images_controller.rb', line 25 def api_image_inventory @images = ::Queries::Image::Filter.new( params.permit( :otu_id, otu_scope: []) ).all.page(params[:page]).per(params[:per]) render '/images/api/v1/index' end |
#api_index ⇒ Object
GET /api/v1/images
39 40 41 42 43 44 |
# File 'app/controllers/images_controller.rb', line 39 def api_index @images = Queries::Image::Filter.new(api_params).all .where(project_id: sessions_current_project_id) .page(params[:page]).per(params[:per]) render '/images/api/v1/index' end |
#api_params ⇒ Object (private)
TODO: need `is_public` here
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'app/controllers/images_controller.rb', line 210 def api_params params.permit( :ancestor_id_target, :biocuration_class_id, :collection_object_id, :depiction, :identifier, :identifier_end, :identifier_exact, :identifier_start, :image_id, :otu_id, :sled_image_id, :taxon_name_id, :user_date_end, :user_date_start, :user_id, # user :user_target, biocuration_class_id: [], collection_object_id: [], image_id: [], keyword_id_and: [], keyword_id_or: [], otu_id: [], sled_image_id: [], taxon_name_id: [], otu_scope: [], ).to_h.symbolize_keys.merge(project_id: sessions_current_project_id) end |
#api_show ⇒ Object
GET /api/v1/images/:id
47 48 49 50 51 52 53 54 |
# File 'app/controllers/images_controller.rb', line 47 def api_show @image = Image.where(project_id: sessions_current_project_id).find_by(id: params[:id]) @image ||= Image.where(project_id: sessions_current_project_id).find_by(image_file_fingerprint: params[:id]) render plain: 'Not found. You may need to add a &project_token= param to the URL currently in your address bar to access these data. See https://api.taxonworks.org/ for more.', status: 404 and return if @image.nil? render '/images/api/v1/show' end |
#autocomplete ⇒ Object
123 124 125 |
# File 'app/controllers/images_controller.rb', line 123 def autocomplete @images = Queries::Image::Autocomplete.new(params[:term], project_id: sessions_current_project_id).autocomplete end |
#create ⇒ Object
POST /images POST /images.json
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'app/controllers/images_controller.rb', line 67 def create @image = Image.new(image_params) respond_to do |format| if @image.save format.html { redirect_to @image, notice: 'Image was successfully created.' } format.json { render :show, status: :created, location: @image } else format.html { render :new } format.json { render json: @image.errors, status: :unprocessable_entity } end end end |
#destroy ⇒ Object
DELETE /images/1 DELETE /images/1.json
96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'app/controllers/images_controller.rb', line 96 def destroy if @image.destroy respond_to do |format| format.html { redirect_to images_url, notice: 'Image was successfully destroyed.' } format.json { head :no_content } end else respond_to do |format| format.html { redirect_to images_url, notice: @image.errors..join('. ') } format.json { head :no_content, status: :im_used } end end end |
#download ⇒ Object
GET /images/download
128 129 130 131 132 133 |
# File 'app/controllers/images_controller.rb', line 128 def download send_data( Export::Download.generate_csv(Image.where(project_id: sessions_current_project_id)), type: 'text', filename: "images_#{DateTime.now}.csv") end |
#edit ⇒ Object
GET /images/1/edit
62 63 |
# File 'app/controllers/images_controller.rb', line 62 def edit end |
#extract ⇒ Object
GET /images/:id/extract/:x/:y/:height/:width
136 137 138 |
# File 'app/controllers/images_controller.rb', line 136 def extract send_data Image.cropped_blob(params), type: 'image/jpg', disposition: 'inline' end |
#filter_params ⇒ Object (private)
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 |
# File 'app/controllers/images_controller.rb', line 179 def filter_params params.permit( :ancestor_id_target, :biocuration_class_id, :collection_object_id, :depiction, :identifier, :identifier_end, :identifier_exact, :identifier_start, :image_id, :otu_id, :sled_image_id, :taxon_name_id, :user_date_end, :user_date_start, :user_id, # user :user_target, biocuration_class_id: [], collection_object_id: [], image_id: [], keyword_id_and: [], keyword_id_or: [], otu_id: [], sled_image_id: [], taxon_name_id: [], otu_scope: [], ).to_h.symbolize_keys.merge(project_id: sessions_current_project_id) end |
#image_params ⇒ Object (private)
245 246 247 248 249 250 251 252 |
# File 'app/controllers/images_controller.rb', line 245 def image_params params.require(:image).permit( :image_file, :rotate, :pixels_to_centimeter, citations_attributes: [:id, :is_original, :_destroy, :source_id, :pages, :citation_object_id, :citation_object_type], sled_image_attributes: [:id, :_destroy, :metadata, :object_layout] ) end |
#index ⇒ Object
GET /images GET /images.json
9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'app/controllers/images_controller.rb', line 9 def index respond_to do |format| format.html do @recent_objects = Image.recent_from_project_id(sessions_current_project_id).order(updated_at: :desc).limit(10) render '/shared/data/all/index' end format.json { @images = Queries::Image::Filter.new(filter_params).all .where(project_id: sessions_current_project_id) .all.page(params[:page]).per(params[:per] || 50) } end end |
#list ⇒ Object
110 111 112 |
# File 'app/controllers/images_controller.rb', line 110 def list @images = Image.with_project_id(sessions_current_project_id).order(:id).page(params[:page]) #.per(10) #.per(3) end |
#new ⇒ Object
GET /images/new
57 58 59 |
# File 'app/controllers/images_controller.rb', line 57 def new @image = Image.new end |
#ocr ⇒ Object
GET /images/:id/ocr/:x/:y/:height/:width
151 152 153 154 155 156 157 |
# File 'app/controllers/images_controller.rb', line 151 def ocr tempfile = Tempfile.new(['ocr', '.jpg'], "#{Rails.root}/public/images/tmp", encoding: 'utf-8') tempfile.write(Image.cropped_blob(params).force_encoding('utf-8')) tempfile.rewind render json: {text: RTesseract.new(tempfile.path).to_s&.strip} end |
#rotate ⇒ Object
!! This is a kludge until we get active storage working PATCH /images/123/rotate
161 162 163 164 165 166 167 168 169 170 |
# File 'app/controllers/images_controller.rb', line 161 def rotate begin @image.rotate = params.require(:image).require(:rotate) @image.image_file.reprocess! flash[:notice] = 'Image rotated.' rescue ActionController::ParameterMissing flash[:notice] ='Select a rotation option.' end render :show end |
#scale ⇒ Object
GET /images/:id/extract/:x/:y/:height/:width/:new_height/:new_width
141 142 143 |
# File 'app/controllers/images_controller.rb', line 141 def scale send_data Image.resized_blob(params), type: 'image/jpg', disposition: 'inline' end |
#scale_to_box ⇒ Object
GET 'images/:id/scale_to_box/:x/:y/:width/:height/:box_width/:box_height'
146 147 148 |
# File 'app/controllers/images_controller.rb', line 146 def scale_to_box send_data Image.scaled_to_box_blob(params), type: 'image/jpg', disposition: 'inline' end |
#search ⇒ Object
TODO: remove for /images.json
115 116 117 118 119 120 121 |
# File 'app/controllers/images_controller.rb', line 115 def search if params[:id].blank? redirect_to images_path, alert: 'You must select an item from the list with a click or tab press before clicking show.' else redirect_to image_path(params[:id]) end end |
#select_options ⇒ Object
GET /images/select_options?target=TaxonDetermination
173 174 175 |
# File 'app/controllers/images_controller.rb', line 173 def @images = Image.select_optimized(sessions_current_user_id, sessions_current_project_id, params.require(:target)) end |
#set_image ⇒ Object (private)
240 241 242 243 |
# File 'app/controllers/images_controller.rb', line 240 def set_image @image = Image.with_project_id(sessions_current_project_id).find(params[:id]) @recent_object = @image end |
#show ⇒ Object
GET /images/1 GET /images/1.json
35 36 |
# File 'app/controllers/images_controller.rb', line 35 def show end |
#update ⇒ Object
PATCH/PUT /images/1 PATCH/PUT /images/1.json
82 83 84 85 86 87 88 89 90 91 92 |
# File 'app/controllers/images_controller.rb', line 82 def update respond_to do |format| if @image.update(image_params) format.html { redirect_to @image, notice: 'Image was successfully updated.' } format.json { render :show, status: :ok, location: @image } else format.html { render :edit } format.json { render json: @image.errors, status: :unprocessable_entity } end end end |