diff --git a/.github/workflows/check_release_version.yml b/.github/workflows/check_release_version.yml index e5db52d7..3f441c5f 100644 --- a/.github/workflows/check_release_version.yml +++ b/.github/workflows/check_release_version.yml @@ -14,7 +14,7 @@ jobs: - name: Get specific changed files id: changed-files-specific - uses: tj-actions/changed-files@v23 + uses: tj-actions/changed-files@v41 with: files: | .release-version diff --git a/.release-version b/.release-version index b9a05a6d..b5aaf81f 100644 --- a/.release-version +++ b/.release-version @@ -1 +1 @@ -1.17.3 +1.17.4 diff --git a/.rubocop.yml b/.rubocop.yml index 8ba9e9da..5a9dd502 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -24,6 +24,7 @@ AllCops: - 'vendor/**/*' - db/schema.rb - db/views_schema.rb + - db/migrate/* SuggestExtensions: false Style/DocumentDynamicEvalDefinition: diff --git a/.ruby-version b/.ruby-version index 75a22a26..ef538c28 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.0.3 +3.1.2 diff --git a/Dockerfile b/Dockerfile index d4fa9bcf..4a2d6f7f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:2.7 +FROM ruby:3.1.2 RUN gem install bundler diff --git a/Gemfile.lock b/Gemfile.lock index 9015145a..3f73c382 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,52 +7,52 @@ GIT GEM remote: https://rubygems.org/ specs: - actionpack (7.0.6) - actionview (= 7.0.6) - activesupport (= 7.0.6) + actionpack (7.0.8) + actionview (= 7.0.8) + activesupport (= 7.0.8) rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actionview (7.0.6) - activesupport (= 7.0.6) + actionview (7.0.8) + activesupport (= 7.0.8) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activemodel (7.0.6) - activesupport (= 7.0.6) - activerecord (7.0.6) - activemodel (= 7.0.6) - activesupport (= 7.0.6) - activesupport (7.0.6) + activemodel (7.0.8) + activesupport (= 7.0.8) + activerecord (7.0.8) + activemodel (= 7.0.8) + activesupport (= 7.0.8) + activesupport (7.0.8) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) amq-protocol (2.3.2) ast (2.4.2) - bootsnap (1.16.0) + bootsnap (1.18.3) msgpack (~> 1.2) builder (3.2.4) bunny (2.19.0) amq-protocol (~> 2.3, >= 2.3.1) sorted_set (~> 1, >= 1.0.2) coderay (1.1.3) - concurrent-ruby (1.2.2) + concurrent-ruby (1.2.3) connection_pool (2.2.5) crass (1.0.6) diff-lcs (1.5.0) docile (1.4.0) erubi (1.12.0) - factory_bot (6.2.0) + factory_bot (6.4.5) activesupport (>= 5.0.0) - factory_bot_rails (6.2.0) - factory_bot (~> 6.2.0) + factory_bot_rails (6.4.3) + factory_bot (~> 6.4) railties (>= 5.0.0) ffi (1.15.5) formatador (1.1.0) - guard (2.18.0) + guard (2.18.1) formatador (>= 0.2.4) listen (>= 2.7, < 4.0) lumberjack (>= 1.0.12, < 2.0) @@ -73,60 +73,60 @@ GEM hashie (5.0.0) i18n (1.14.1) concurrent-ruby (~> 1.0) - json (2.6.3) + json (2.7.1) language_server-protocol (3.17.0.3) listen (3.8.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - loofah (2.21.3) + loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) - lumberjack (1.2.8) + lumberjack (1.2.9) method_source (1.0.0) - mini_portile2 (2.8.2) - minitest (5.18.1) - msgpack (1.5.2) + mini_portile2 (2.8.5) + minitest (5.21.2) + msgpack (1.7.2) multi_json (1.15.0) mysql2 (0.5.5) nenv (0.3.0) - nokogiri (1.15.2) + nokogiri (1.16.0) mini_portile2 (~> 2.8.2) racc (~> 1.4) notiffany (0.1.3) nenv (~> 0.1) shellany (~> 0.0) - parallel (1.23.0) - parser (3.2.2.3) + parallel (1.24.0) + parser (3.3.0.5) ast (~> 2.4.1) racc pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) - racc (1.7.1) - rack (2.2.7) + racc (1.7.3) + rack (2.2.8) rack-test (2.1.0) rack (>= 1.3) - rails-dom-testing (2.1.1) + rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.0.6) - actionpack (= 7.0.6) - activesupport (= 7.0.6) + railties (7.0.8) + actionpack (= 7.0.8) + activesupport (= 7.0.8) method_source rake (>= 12.2) thor (~> 1.0) zeitwerk (~> 2.5) rainbow (3.1.1) - rake (13.0.6) + rake (13.1.0) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) rbtree (0.4.4) - regexp_parser (2.8.1) + regexp_parser (2.9.0) rexml (3.2.6) rspec (3.12.0) rspec-core (~> 3.12.0) @@ -137,10 +137,10 @@ GEM rspec-expectations (3.12.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) - rspec-mocks (3.12.5) + rspec-mocks (3.12.6) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) - rspec-rails (6.0.3) + rspec-rails (6.1.1) actionpack (>= 6.1) activesupport (>= 6.1) railties (>= 6.1) @@ -148,33 +148,34 @@ GEM rspec-expectations (~> 3.12) rspec-mocks (~> 3.12) rspec-support (~> 3.12) - rspec-support (3.12.0) - rubocop (1.55.1) + rspec-support (3.12.1) + rubocop (1.60.2) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 3.2.2.3) + parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.28.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.29.0) + rubocop-ast (1.30.0) parser (>= 3.2.1.0) - rubocop-capybara (2.18.0) + rubocop-capybara (2.20.0) rubocop (~> 1.41) - rubocop-factory_bot (2.23.1) + rubocop-factory_bot (2.25.0) rubocop (~> 1.33) - rubocop-performance (1.18.0) - rubocop (>= 1.7.0, < 2.0) - rubocop-ast (>= 0.4.0) - rubocop-rails (2.20.2) + rubocop-performance (1.20.2) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rails (2.23.1) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) - rubocop-rspec (2.23.0) - rubocop (~> 1.33) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rspec (2.26.1) + rubocop (~> 1.40) rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) ruby-progressbar (1.13.0) @@ -194,11 +195,11 @@ GEM sorted_set (1.0.3) rbtree set (~> 1.0) - thor (1.2.2) + thor (1.3.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unicode-display_width (2.4.2) - zeitwerk (2.6.8) + unicode-display_width (2.5.0) + zeitwerk (2.6.12) PLATFORMS ruby diff --git a/app/models/associated_with_roles.rb b/app/models/associated_with_roles.rb index fe5c8a50..5e2f0fc2 100644 --- a/app/models/associated_with_roles.rb +++ b/app/models/associated_with_roles.rb @@ -19,7 +19,7 @@ def self.extended(base) end def has_role(name) - define_method("#{name}=") { |users| set_users(name, users) } + define_method(:"#{name}=") { |users| set_users(name, users) } end module InstanceMethods @@ -43,7 +43,7 @@ def maintain_users users.create!( users_to_maintain.map do |role, user_details| user_details.map do |details| - details.reverse_merge(role: role.to_s, associated_id: id, last_updated: last_updated) + details.reverse_merge(role: role.to_s, associated_id: id, last_updated:) end end ) diff --git a/db/migrate/20230522131908_add_library_tube_barcode_to_pacbio_run.rb b/db/migrate/20230522131908_add_library_tube_barcode_to_pacbio_run.rb index c69887a9..d9077f5f 100644 --- a/db/migrate/20230522131908_add_library_tube_barcode_to_pacbio_run.rb +++ b/db/migrate/20230522131908_add_library_tube_barcode_to_pacbio_run.rb @@ -14,7 +14,7 @@ def down t.remove :pac_bio_library_tube_barcode end # Here we add a placeholder value in case any plate barcodes were added as null since the migration - PacBioRun.where(plate_barcode: nil).each do |run| + PacBioRun.where(plate_barcode: nil).find_each do |run| run.plate_barcode = 'plate_barcode placeholder' run.save end diff --git a/db/migrate/20231207143456_add_location_name_to_labware_location.rb b/db/migrate/20231207143456_add_location_name_to_labware_location.rb new file mode 100644 index 00000000..a10136da --- /dev/null +++ b/db/migrate/20231207143456_add_location_name_to_labware_location.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# New column for name of location where plates are stored +class AddLocationNameToLabwareLocation < ActiveRecord::Migration[7.0] + def change + add_column :labware_location, :location_name, :string, null: false, default: '', comment: 'Name of location where labware is stored', after: :full_location_address + end +end diff --git a/db/schema.rb b/db/schema.rb index e960553a..5ce766f3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_08_21_100520) do +ActiveRecord::Schema[7.0].define(version: 2023_12_07_143456) do create_table "bmap_flowcell", primary_key: "id_bmap_flowcell_tmp", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t| t.datetime "last_updated", precision: nil, null: false, comment: "Timestamp of last update" t.datetime "recorded_at", precision: nil, null: false, comment: "Timestamp of warehouse update" @@ -119,6 +119,7 @@ t.datetime "stored_at", null: false, comment: "Datetime the item was stored at this location" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.string "location_name", null: false, comment: "Name of location where labware is stored" t.index ["labware_barcode"], name: "index_labware_location_on_labware_barcode", unique: true t.index ["location_barcode"], name: "index_labware_location_on_location_barcode" end diff --git a/lib/resource_tools/json.rb b/lib/resource_tools/json.rb index 28f19040..87d980dc 100644 --- a/lib/resource_tools/json.rb +++ b/lib/resource_tools/json.rb @@ -146,6 +146,7 @@ def custom_value(name, &block) end end + # rubocop:disable Style/ArgumentsForwarding def initialize(*args, &block) super if self.class.custom_values.present? @@ -156,6 +157,7 @@ def initialize(*args, &block) convert_booleans delete_if { |k, _| ignoreable.include?(k) } end + # rubocop:enable Style/ArgumentsForwarding def convert_booleans self.stored_as_boolean.each do |key| diff --git a/lib/tasks/remove_duplicate_pac_bio_runs.rake b/lib/tasks/remove_duplicate_pac_bio_runs.rake index 25de3039..79c91293 100644 --- a/lib/tasks/remove_duplicate_pac_bio_runs.rake +++ b/lib/tasks/remove_duplicate_pac_bio_runs.rake @@ -186,7 +186,7 @@ namespace :pac_bio_run_table do 9993 ] task remove_duplicate_pac_bio_runs: :environment do - PacBioRun.where(id_pac_bio_run_lims: list_of_runs).each do |pac_bio_run| + PacBioRun.where(id_pac_bio_run_lims: list_of_runs).find_each do |pac_bio_run| puts "Going to remove #{pac_bio_run.id_pac_bio_run_lims}" puts pac_bio_run.attributes pac_bio_run.delete diff --git a/lib/tasks/update_pac_bio_run_name.rake b/lib/tasks/update_pac_bio_run_name.rake index b4df5f2c..f5db66f5 100644 --- a/lib/tasks/update_pac_bio_run_name.rake +++ b/lib/tasks/update_pac_bio_run_name.rake @@ -4,7 +4,7 @@ namespace :pac_bio_run_table do desc 'Update pac_bio_run_name column with the values from id_pac_bio_run_lims' task update_pac_bio_run_name: :environment do - PacBioRun.all.each do |run| + PacBioRun.find_each do |run| next if run.pac_bio_run_name.present? run.pac_bio_run_name = run.id_pac_bio_run_lims diff --git a/lib/tasks/update_pac_bio_run_sequencescape_plate_numbers.rake b/lib/tasks/update_pac_bio_run_sequencescape_plate_numbers.rake index 4c85d1dc..87c23bec 100644 --- a/lib/tasks/update_pac_bio_run_sequencescape_plate_numbers.rake +++ b/lib/tasks/update_pac_bio_run_sequencescape_plate_numbers.rake @@ -6,7 +6,7 @@ namespace :pac_bio_run_table do desc 'Update pac_bio_run plate_number column with the value 1 for sequencescape plates' task update_pac_bio_run_sequencescape_plate_numbers: :environment do - PacBioRun.where(id_lims: 'SQSCP').each do |run| + PacBioRun.where(id_lims: 'SQSCP').find_each do |run| run.plate_number = 1 run.save! end diff --git a/spec/models/flowcell_spec.rb b/spec/models/flowcell_spec.rb index 3e8c9eab..6eb0c3c0 100644 --- a/spec/models/flowcell_spec.rb +++ b/spec/models/flowcell_spec.rb @@ -39,7 +39,7 @@ include_examples 'full flowcell json' it 'flags all entries as spiked' do - Flowcell.all.each { |fc| expect(fc.spiked).to be_true } + Flowcell.find_each { |fc| expect(fc.spiked).to be_true } end context 'when update with identical tag indexes' do @@ -130,7 +130,7 @@ end it 'flags all entries as not-spiked' do - Flowcell.all.each { |fc| expect(fc.spiked).to be_false } + Flowcell.find_each { |fc| expect(fc.spiked).to be_false } end end diff --git a/spec/support/it_behaves_like_a_nested_resource.rb b/spec/support/it_behaves_like_a_nested_resource.rb index ade0a271..cb15471d 100644 --- a/spec/support/it_behaves_like_a_nested_resource.rb +++ b/spec/support/it_behaves_like_a_nested_resource.rb @@ -6,13 +6,13 @@ end it 'ensures that the all rows are current' do - described_class.all.each do |row| + described_class.find_each do |row| expect(row.last_updated).to eq(most_recent_time) end end it 'ensures the row is marked with recorded time' do - described_class.all.each do |row| + described_class.find_each do |row| expect(row.recorded_at).to eq(recorded_time) end end diff --git a/spec/support/it_behaves_like_associated_with_roles.rb b/spec/support/it_behaves_like_associated_with_roles.rb index 81cabcb2..e2dfb8f8 100644 --- a/spec/support/it_behaves_like_associated_with_roles.rb +++ b/spec/support/it_behaves_like_associated_with_roles.rb @@ -2,7 +2,7 @@ shared_examples_for 'maintains roles correctly' do after(:each) do - described_class.create_or_update_from_json(timestamped_json.merge(updated_roles).merge(updated_at: updated_at), 'example') + described_class.create_or_update_from_json(timestamped_json.merge(updated_roles).merge(updated_at:), 'example') users_fit_exactly(expected_roles) end