From b21b36d0c70ae89086ba999db40923d8fc9b9860 Mon Sep 17 00:00:00 2001 From: Wendel Fabian Chinsamy Date: Tue, 16 Apr 2024 14:33:28 +0200 Subject: [PATCH 1/4] upgrade to ruby 3.1.4 --- .github/workflows/deploy.yml | 4 ++-- .github/workflows/pull_request.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- .rubocop.yml | 2 +- Dockerfile | 6 +++--- Gemfile.lock | 6 ++---- docker-compose.local.yml | 5 +++++ 7 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 docker-compose.local.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 052eb9e..3116bbc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -17,10 +17,10 @@ jobs: ELASTIC_PASSWORD: ${{ secrets.RE3DATA_ES_PASSWORD }} steps: - uses: actions/checkout@v2 - - name: Set up Ruby 2.7 + - name: Set up Ruby 3.1.4 uses: actions/setup-ruby@v1 with: - ruby-version: '2.7.6' + ruby-version: '3.1.4' - uses: actions/cache@v2 with: path: vendor/bundle diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 2cf0733..070d127 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -13,10 +13,10 @@ jobs: - 11211/tcp steps: - uses: actions/checkout@v2 - - name: Set up Ruby 2.7 + - name: Set up Ruby 3.1.4 uses: actions/setup-ruby@v1 with: - ruby-version: '2.7.6' + ruby-version: '3.1.4' - uses: actions/cache@v2 with: path: vendor/bundle diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d07a931..44c2c1b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,10 +17,10 @@ jobs: ELASTIC_PASSWORD: ${{ secrets.RE3DATA_ES_PASSWORD }} steps: - uses: actions/checkout@v2 - - name: Set up Ruby 2.7 + - name: Set up Ruby 3.1.4 uses: actions/setup-ruby@v1 with: - ruby-version: '2.7.6' + ruby-version: '3.1.4' - uses: actions/cache@v2 with: path: vendor/bundle diff --git a/.rubocop.yml b/.rubocop.yml index a70dfcb..894fc9b 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -3,7 +3,7 @@ inherit_from: .rubocop_todo.yml # from https://github.com/rails/rails/blob/master/.rubocop.yml AllCops: - TargetRubyVersion: 2.5 + TargetRubyVersion: 3.1 # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop # to ignore them, so only the ones explicitly set in this file are enabled. DisabledByDefault: true diff --git a/Dockerfile b/Dockerfile index 57e0352..52bd9ef 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM phusion/passenger-full:2.3.0 +FROM phusion/passenger-full:2.5.1 LABEL maintainer="tech@datacite.org" # Set correct environment variables. @@ -10,8 +10,8 @@ RUN usermod -a -G docker_env app # Use baseimage-docker's init process. CMD ["/sbin/my_init"] -# Install Ruby 2.7.6 -RUN bash -lc 'rvm --default use ruby-2.7.6' +# Install Ruby 3.1.4 +RUN bash -lc 'rvm --default use ruby-3.1.4' # Update installed APT packages RUN apt-get update -y -o Dpkg::Options::="--force-confold" && \ diff --git a/Gemfile.lock b/Gemfile.lock index 92c8260..eb44296 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -186,10 +186,9 @@ GEM activerecord kaminari-core (= 1.2.2) kaminari-core (1.2.2) - listen (3.1.5) + listen (3.0.8) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) lograge (0.12.0) actionpack (>= 4) activesupport (>= 4) @@ -305,7 +304,6 @@ GEM rubocop-performance (1.3.0) rubocop (>= 0.68.0) ruby-progressbar (1.11.0) - ruby_dep (1.5.0) sentry-raven (2.13.0) faraday (>= 0.7.6, < 1.0) shoulda-matchers (3.1.3) @@ -395,4 +393,4 @@ DEPENDENCIES webmock (~> 3.1) BUNDLED WITH - 2.3.20 + 2.3.20 \ No newline at end of file diff --git a/docker-compose.local.yml b/docker-compose.local.yml new file mode 100644 index 0000000..905bef3 --- /dev/null +++ b/docker-compose.local.yml @@ -0,0 +1,5 @@ +version: "2.1" + +services: + web: + build: . From 5d846fe653c1201351cecbb03d3be8b2c4655bdc Mon Sep 17 00:00:00 2001 From: Wendel Fabian Chinsamy Date: Fri, 3 May 2024 12:04:22 +0200 Subject: [PATCH 2/4] upgrade to ruby 3.1.4 --- Gemfile | 6 +-- Gemfile.lock | 8 ++-- app/serializers/re3data_serializer.rb | 8 ++-- config/initializers/serialization_core.rb | 52 +++++++++++++++++++++++ 4 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 config/initializers/serialization_core.rb diff --git a/Gemfile b/Gemfile index 623bf5f..f873143 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "dalli", "~> 2.7.6" gem 'lograge', '~> 0.5' gem 'sentry-raven', '~> 2.9' gem 'active_model_serializers', '~> 0.10.0' -gem 'fast_jsonapi', '~> 1.3' +gem 'jsonapi-serializer', '~> 2.2' gem 'kaminari', '~> 1.2' gem 'elasticsearch', '~> 1.1', '>= 1.1.3' gem 'elasticsearch-model', '~> 0.1.9', require: 'elasticsearch/model' @@ -45,9 +45,9 @@ end group :test do gem 'capybara' gem 'webmock', '~> 3.1' - gem 'vcr', '~> 3.0.3' + gem 'vcr', '~> 6.1' gem 'codeclimate-test-reporter', '~> 1.0.0' gem 'simplecov' gem 'shoulda-matchers', '~> 3.1' gem 'elasticsearch-extensions' -end \ No newline at end of file +end diff --git a/Gemfile.lock b/Gemfile.lock index eb44296..c7d7671 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -152,8 +152,6 @@ GEM faraday faraday_middleware (0.14.0) faraday (>= 0.7.4, < 1.0) - fast_jsonapi (1.5) - activesupport (>= 4.2) ffi (1.15.5) git (1.12.0) addressable (~> 2.8) @@ -174,6 +172,8 @@ GEM ice_nine (0.11.2) json (2.6.2) jsonapi-renderer (0.2.2) + jsonapi-serializer (2.2.0) + activesupport (>= 4.2) kaminari (1.2.2) activesupport (>= 4.1.0) kaminari-actionview (= 1.2.2) @@ -348,7 +348,7 @@ GEM zeitwerk (2.6.0) PLATFORMS - ruby + aarch64-linux DEPENDENCIES active_model_serializers (~> 0.10.0) @@ -367,13 +367,13 @@ DEPENDENCIES elasticsearch-model (~> 0.1.9) elasticsearch-persistence (~> 0.1.9) elasticsearch-rails (~> 0.1.9) - fast_jsonapi (~> 1.3) git (~> 1.5) google-protobuf (~> 3.0) graphql (~> 1.9, >= 1.9.4) graphql-batch (~> 0.4.0) graphql-cache (~> 0.6.0)! graphql-errors (~> 0.3.0) + jsonapi-serializer (~> 2.2) kaminari (~> 1.2) listen (>= 3.0.5, < 3.2) lograge (~> 0.5) diff --git a/app/serializers/re3data_serializer.rb b/app/serializers/re3data_serializer.rb index 782537d..a941abb 100644 --- a/app/serializers/re3data_serializer.rb +++ b/app/serializers/re3data_serializer.rb @@ -1,10 +1,10 @@ class Re3dataSerializer - include FastJsonapi::ObjectSerializer + include JSONAPI::Serializer set_key_transform :camel_lower set_type :re3data - attributes :re3data_id, :repositoryName, :repositoryUrl, :repositoryContacts, :description, :repositoryLanguages, :certificates, :types, - :additionalNames, :subjects, :contentTypes, :providerTypes, + attributes :re3data_id, :repositoryName, :repositoryUrl, :repositoryContacts, :description, :repositoryLanguages, :certificates, :types, + :additionalNames, :subjects, :contentTypes, :providerTypes, :keywords, :institutions, :dataAccesses, :dataUploads, :dataUploadLicenses, :pidSystems, :apis, :pidSystems, :software, :startDate, :endDate, :created, :updated @@ -23,4 +23,4 @@ class Re3dataSerializer attribute :updated do |object| object.updated.strftime("%FT%TZ") end -end \ No newline at end of file +end diff --git a/config/initializers/serialization_core.rb b/config/initializers/serialization_core.rb new file mode 100644 index 0000000..63660e9 --- /dev/null +++ b/config/initializers/serialization_core.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +# Monkey patch for jsonapi-serializer gem + +module FastJsonapi + module SerializationCore + class_methods do + def get_included_records(record, includes_list, known_included_objects, fieldsets, params = {}) + return unless includes_list.present? + return [] unless relationships_to_serialize + + includes_list = parse_includes_list(includes_list) + + includes_list.each_with_object([]) do |include_item, included_records| + relationship_item = relationships_to_serialize[include_item.first] + + next unless relationship_item&.include_relationship?(record, params) + + associated_objects = relationship_item.fetch_associated_object(record, params) + + if associated_objects.is_a?(Elasticsearch::Model::HashWrapper) + associated_objects = OpenStruct.new(associated_objects) + end + + included_objects = Array(associated_objects) + + next if included_objects.empty? + + static_serializer = relationship_item.static_serializer + static_record_type = relationship_item.static_record_type + + included_objects.each do |inc_obj| + serializer = static_serializer || relationship_item.serializer_for(inc_obj, params) + record_type = static_record_type || serializer.record_type + + if include_item.last.any? + serializer_records = serializer.get_included_records(inc_obj, include_item.last, known_included_objects, fieldsets, params) + included_records.concat(serializer_records) unless serializer_records.empty? + end + + code = "#{record_type}_#{serializer.id_from_record(inc_obj, params)}" + next if known_included_objects.include?(code) + + known_included_objects << code + + included_records << serializer.record_hash(inc_obj, fieldsets[record_type], includes_list, params) + end + end + end + end + end +end From cd4747d868645e3a8be8102f0a022c2945263ed0 Mon Sep 17 00:00:00 2001 From: Wendel Fabian Chinsamy Date: Fri, 3 May 2024 12:50:24 +0200 Subject: [PATCH 3/4] change serialization method --- app/controllers/re3data_controller.rb | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/controllers/re3data_controller.rb b/app/controllers/re3data_controller.rb index e8495a7..2ee6309 100644 --- a/app/controllers/re3data_controller.rb +++ b/app/controllers/re3data_controller.rb @@ -2,6 +2,7 @@ class Re3dataController < ApplicationController before_action :set_repository, only: [:show, :badge] def index + debugger sort = case params[:sort] when "relevance" then { _score: { order: 'desc' }} when "name" then { "repositoryName.sortable" => { order: 'asc' }} @@ -12,7 +13,7 @@ def index end page = params[:page] || {} - if page[:size].present? + if page[:size].present? page[:size] = [page[:size].to_i, 1000].min max_number = page[:size] > 0 ? 10000/page[:size] : 1 else @@ -26,11 +27,11 @@ def index elsif params[:ids].present? response = Repository.find_by_id(params[:ids], page: page, sort: sort) else - response = Repository.query(params[:query], - page: page, - sort: sort, + response = Repository.query(params[:query], + page: page, + sort: sort, subject: params[:subject], - open: params[:open], + open: params[:open], certified: params[:certified], pid: params[:pid], software: params[:software], @@ -59,7 +60,7 @@ def index }.compact options[:is_collection] = true - render json: Re3dataSerializer.new(@repositories, options).serialized_json, status: :ok + render json: Re3dataSerializer.new(@repositories, options).serializable_hash.to_json, status: :ok rescue Elasticsearch::Transport::Transport::Errors::LengthRequired render json: [] end @@ -68,7 +69,7 @@ def show options = {} options[:is_collection] = false - render json: Re3dataSerializer.new(@repository, options).serialized_json, status: :ok + render json: Re3dataSerializer.new(@repository, options).serializable_hash.to_json, status: :ok end def suggest From 2ef7df61866ddbd93ac4b7809218193c6dd686f8 Mon Sep 17 00:00:00 2001 From: Wendel Fabian Chinsamy Date: Mon, 6 May 2024 10:41:16 +0200 Subject: [PATCH 4/4] remove debug statement --- app/controllers/re3data_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/re3data_controller.rb b/app/controllers/re3data_controller.rb index 2ee6309..d068307 100644 --- a/app/controllers/re3data_controller.rb +++ b/app/controllers/re3data_controller.rb @@ -2,7 +2,6 @@ class Re3dataController < ApplicationController before_action :set_repository, only: [:show, :badge] def index - debugger sort = case params[:sort] when "relevance" then { _score: { order: 'desc' }} when "name" then { "repositoryName.sortable" => { order: 'asc' }}