diff --git a/Gemfile b/Gemfile index 175813183272eb4f2579ec17e2efc59ab69a80e4..2f9c1e56f5d9b6b9f20048faa6243fcb16f47547 100644 --- a/Gemfile +++ b/Gemfile @@ -25,6 +25,7 @@ gem 'jbuilder', '~> 2.7' # gem 'bcrypt', '~> 3.1.7' gem 'rsolr' +gem 'sidekiq', '~> 6.0' # Use Active Storage variant # gem 'image_processing', '~> 1.2' diff --git a/Gemfile.lock b/Gemfile.lock index 20736405122386c0f4f8f8dbb5c37db1172ce373..104aa984d89fc4d942b5da6d3bfe24e96804d9a9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -78,6 +78,7 @@ GEM xpath (~> 3.2) childprocess (3.0.0) concurrent-ruby (1.1.9) + connection_pool (2.2.5) crass (1.0.6) devise (4.8.0) bcrypt (~> 3.0) @@ -166,6 +167,7 @@ GEM rb-fsevent (0.11.0) rb-inotify (0.10.1) ffi (~> 1.0) + redis (4.4.0) regexp_parser (2.1.1) responders (3.0.1) actionpack (>= 5.0) @@ -189,6 +191,10 @@ GEM childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) semantic_range (3.0.0) + sidekiq (6.2.2) + connection_pool (>= 2.2.2) + rack (~> 2.0) + redis (>= 4.2.0) spring (2.1.1) sprockets (4.0.2) concurrent-ruby (~> 1.0) @@ -244,6 +250,7 @@ DEPENDENCIES rsolr sass-rails (>= 6) selenium-webdriver + sidekiq (~> 6.0) spring turbolinks (~> 5) tzinfo-data diff --git a/README.md b/README.md index 27891ff73bc7ad68d8398b76180f30fa914b4f0e..65efc25ba5cb054d3925af5d6d94e6c417377f89 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,18 @@ Create a docker container and create an empty database named "newspapers" `docker exec -it newspapers_platform_database createdb -U postgres newspapers` -Modify the content of `config/database.yml` accordingly. +Modify the content of `config/database.yml` according to your configuration. + +## Setting up Redis +Used by Sidekiq and Rails + +`docker run --name newspapers_redis -p 127.0.0.1:6379:6379 -d redis` ## Setting up a IIIF server -Cantaloupe \ No newline at end of file +Cantaloupe + + +## Starting the server +`bundle exec sidekiq` + +`rails s` diff --git a/app/channels/application_cable/connection.rb b/app/channels/application_cable/connection.rb index 0ff5442f476f98d578f77221b57164cffcf08de0..6b5519ae2d542f3f6c6bde5df2eda21f4e02efdc 100644 --- a/app/channels/application_cable/connection.rb +++ b/app/channels/application_cable/connection.rb @@ -1,4 +1,19 @@ module ApplicationCable class Connection < ActionCable::Connection::Base + identified_by :current_user + + def connect + self.current_user = find_user + end + + def find_user + user_id = cookies.signed["user.id"] + current_user = User.find_by(id: user_id) + if current_user + current_user + else + reject_unauthorized_connection + end + end end end diff --git a/app/channels/notification_channel.rb b/app/channels/notification_channel.rb new file mode 100644 index 0000000000000000000000000000000000000000..206652aa51701dc3b3588ded3fa025d14d762852 --- /dev/null +++ b/app/channels/notification_channel.rb @@ -0,0 +1,9 @@ +class NotificationChannel < ApplicationCable::Channel + def subscribed + stream_from "notifications.#{current_user.id}" + end + + def unsubscribed + # Any cleanup needed when channel is unsubscribed + end +end diff --git a/app/controllers/experiment_controller.rb b/app/controllers/experiment_controller.rb index ed3635db4716eb8acdd0da77467845918e148f79..805530491b6208a5dccabe1df3d07ac61b1052de 100644 --- a/app/controllers/experiment_controller.rb +++ b/app/controllers/experiment_controller.rb @@ -5,19 +5,70 @@ class ExperimentController < ApplicationController def index end + def create + experiment = Experiment.new + experiment.user = current_user + experiment.title = params[:title] + begin + experiment.save! + render json: {status: 'ok'} + rescue ActiveRecord::RecordNotUnique + render json: {status: "error", message: "An experiment with this title already exists."} + rescue ActiveRecord::RecordInvalid + render json: {status: "error", message: "The title should not be blank."} + end + end + def show @experiment = Experiment.find params[:id] + # TODO: I'm not satisfied with the following @tools_description = File.read("#{Rails.root}/public/newspapers_tools.json") end - def save - experiment = Experiment.find(params[:id]) - experiment.description = JSON.parse(params[:description]) - experiment.save + def update_experiments_list + respond_to do |format| + format.js + end + end + + def add_tool + @experiment = Experiment.find(params[:id]) + tool_params = JSON.parse params[:tool] + tool = Tool.new + tool.tool_type = tool_params['type'] + tool.parameters = tool_params['parameters'] + tool.status = "created" + tool.experiment = @experiment + tool.save! + @experiment.add_tool(params[:parent_id].to_i, tool) + @experiment.save! + render 'experiment/update_experiment_area' + end + + def delete_tool + @experiment = Experiment.find(params[:id]) + tools_to_destroy_ids = @experiment.delete_tool(params[:tool_id].to_i) + @experiment.save! + Tool.destroy(tools_to_destroy_ids) + render 'experiment/update_experiment_area' + end + + def edit_tool_form + @experiment = Experiment.find(params[:id]) + @tool = Tool.find(params[:tool_id]) + render partial: 'tool/parameters', locals: {tool: @tool} end - def load - experiment = Experiment.find(params[:id]) - render json: experiment.description.to_json + def edit_tool + @experiment = Experiment.find(params[:id]) + @tool = Tool.find(params[:tool_id]) + @tool.parameters.map! do |param| + param['value'] = params[:parameters][param['name']] + param + end + @tool.save! + @experiment.update_tool(params[:tool_id].to_i, params[:parameters]) + @experiment.save! + render json: {} end end diff --git a/app/controllers/tool_controller.rb b/app/controllers/tool_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..d9fbf32fe8fd70f9fdd4e0191763b1bc5e9a62ff --- /dev/null +++ b/app/controllers/tool_controller.rb @@ -0,0 +1,26 @@ +class ToolController < ApplicationController + + before_action :authenticate_user! + + def show + + end + + def create + + end + + def update + + end + + def destroy + + end + + private + + def tool_params + params.require(:tool).permit(:parameters, :results, :status) + end +end diff --git a/app/helpers/experiment_helper.rb b/app/helpers/experiment_helper.rb new file mode 100644 index 0000000000000000000000000000000000000000..352a16d53f8dd0b97220d6d2af48ea32577d0cb7 --- /dev/null +++ b/app/helpers/experiment_helper.rb @@ -0,0 +1,17 @@ +module ExperimentHelper + + def recursive_display(tree) + if tree.has_key? "tool" + concat "
blablabla
-