From 031df4493541030bc9e4d336c2e66df3352ae26a Mon Sep 17 00:00:00 2001 From: leefaisonr Date: Thu, 10 Aug 2023 16:01:19 -0400 Subject: [PATCH 1/4] Create card image loading spec Co-authored-by: Anna Headley Co-authored-by: Bess Sadler --- app/models/card_image.rb | 2 ++ app/models/sub_guide_card.rb | 3 +-- app/services/card_image_loading_service.rb | 5 +++++ db/migrate/20230810192642_create_card_images.rb | 10 ++++++++++ db/schema.rb | 9 ++++++++- .../s3/imagecat-disk9-0091-A3037-1358.0111.tif | Bin 0 -> 7010 bytes spec/models/card_image_spec.rb | 10 ++++++++++ spec/models/sub_guide_card_spec.rb | 16 ++++++++-------- .../services/card_image_loading_service_spec.rb | 16 ++++++++++++++++ 9 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 app/models/card_image.rb create mode 100644 app/services/card_image_loading_service.rb create mode 100644 db/migrate/20230810192642_create_card_images.rb create mode 100644 spec/fixtures/s3/imagecat-disk9-0091-A3037-1358.0111.tif create mode 100644 spec/models/card_image_spec.rb create mode 100644 spec/services/card_image_loading_service_spec.rb diff --git a/app/models/card_image.rb b/app/models/card_image.rb new file mode 100644 index 00000000..ebfe917e --- /dev/null +++ b/app/models/card_image.rb @@ -0,0 +1,2 @@ +class CardImage < ApplicationRecord +end diff --git a/app/models/sub_guide_card.rb b/app/models/sub_guide_card.rb index 58375a04..78c6fe04 100644 --- a/app/models/sub_guide_card.rb +++ b/app/models/sub_guide_card.rb @@ -7,7 +7,6 @@ def parent GuideCard.find_by(sortid: parentid) || SubGuideCard.find_by(sortid: parentid) end include HasChildren - def url - 'https://puliiif.princeton.edu/iiif/2/imagecat-disk5-0338-A5977-0000.0073/full/,500/0/default.jpg' + def image_urls end end diff --git a/app/services/card_image_loading_service.rb b/app/services/card_image_loading_service.rb new file mode 100644 index 00000000..4ed72382 --- /dev/null +++ b/app/services/card_image_loading_service.rb @@ -0,0 +1,5 @@ +class CardImageLoadingService +def import + byebug +end +end \ No newline at end of file diff --git a/db/migrate/20230810192642_create_card_images.rb b/db/migrate/20230810192642_create_card_images.rb new file mode 100644 index 00000000..a1c7c22a --- /dev/null +++ b/db/migrate/20230810192642_create_card_images.rb @@ -0,0 +1,10 @@ +class CreateCardImages < ActiveRecord::Migration[7.0] + def change + create_table :card_images do |t| + t.text :path + t.text :image_name + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index a036dd8d..d7b7a8f0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,10 +10,17 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_06_02_135223) do +ActiveRecord::Schema[7.0].define(version: 2023_08_10_192642) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "card_images", force: :cascade do |t| + t.text "path" + t.text "image_name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "guide_cards", force: :cascade do |t| t.string "heading" t.string "sortid" diff --git a/spec/fixtures/s3/imagecat-disk9-0091-A3037-1358.0111.tif b/spec/fixtures/s3/imagecat-disk9-0091-A3037-1358.0111.tif new file mode 100644 index 0000000000000000000000000000000000000000..a198ed264fc759098d99dd110f785a2a9c8e12eb GIT binary patch literal 7010 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 Date: Thu, 10 Aug 2023 16:04:34 -0400 Subject: [PATCH 2/4] rubocop corrections --- app/models/card_image.rb | 2 ++ app/models/sub_guide_card.rb | 3 +-- app/services/card_image_loading_service.rb | 7 ++++--- db/migrate/20230810192642_create_card_images.rb | 3 +++ spec/models/card_image_spec.rb | 10 ++++++---- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/app/models/card_image.rb b/app/models/card_image.rb index ebfe917e..105d243a 100644 --- a/app/models/card_image.rb +++ b/app/models/card_image.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + class CardImage < ApplicationRecord end diff --git a/app/models/sub_guide_card.rb b/app/models/sub_guide_card.rb index 78c6fe04..847b8446 100644 --- a/app/models/sub_guide_card.rb +++ b/app/models/sub_guide_card.rb @@ -7,6 +7,5 @@ def parent GuideCard.find_by(sortid: parentid) || SubGuideCard.find_by(sortid: parentid) end include HasChildren - def image_urls - end + def image_urls; end end diff --git a/app/services/card_image_loading_service.rb b/app/services/card_image_loading_service.rb index 4ed72382..5d0a3f9b 100644 --- a/app/services/card_image_loading_service.rb +++ b/app/services/card_image_loading_service.rb @@ -1,5 +1,6 @@ +# frozen_string_literal: true + +# Class for card image loading service class CardImageLoadingService -def import - byebug + def import; end end -end \ No newline at end of file diff --git a/db/migrate/20230810192642_create_card_images.rb b/db/migrate/20230810192642_create_card_images.rb index a1c7c22a..36940267 100644 --- a/db/migrate/20230810192642_create_card_images.rb +++ b/db/migrate/20230810192642_create_card_images.rb @@ -1,3 +1,6 @@ +# frozen_string_literal: true + +# db migration for card image loading service class CreateCardImages < ActiveRecord::Migration[7.0] def change create_table :card_images do |t| diff --git a/spec/models/card_image_spec.rb b/spec/models/card_image_spec.rb index bc6104b7..2a752176 100644 --- a/spec/models/card_image_spec.rb +++ b/spec/models/card_image_spec.rb @@ -1,10 +1,12 @@ +# frozen_string_literal: true + require 'rails_helper' RSpec.describe CardImage, type: :model do it 'can be instantiated' do - ci = CardImage.new - ci.path = "5/0338/A5977" - ci.image_name = "imagecat-disk5-0338-A5977-0000.0001.tif" - ci.save + ci = CardImage.new + ci.path = '5/0338/A5977' + ci.image_name = 'imagecat-disk5-0338-A5977-0000.0001.tif' + ci.save end end From f8c436da3e8d1242289d0288cc6027dd25a318c9 Mon Sep 17 00:00:00 2001 From: leefaisonr Date: Thu, 10 Aug 2023 17:03:16 -0400 Subject: [PATCH 3/4] Start to import image files as CardImage objects Co-authored-by: Bess Sadler --- app/services/card_image_loading_service.rb | 11 ++++++++++- spec/services/card_image_loading_service_spec.rb | 9 ++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/services/card_image_loading_service.rb b/app/services/card_image_loading_service.rb index 5d0a3f9b..b44028e4 100644 --- a/app/services/card_image_loading_service.rb +++ b/app/services/card_image_loading_service.rb @@ -2,5 +2,14 @@ # Class for card image loading service class CardImageLoadingService - def import; end + # For each SubGuideCard, take its path and query s3 to get all of the image names + # for that path. For each image file, create a CardImage object with the path and + # image name. + def import + SubGuideCard.all.each do |sgc| + ci = CardImage.new + ci.path = sgc.path + ci.save + end + end end diff --git a/spec/services/card_image_loading_service_spec.rb b/spec/services/card_image_loading_service_spec.rb index c83099b7..97f52179 100644 --- a/spec/services/card_image_loading_service_spec.rb +++ b/spec/services/card_image_loading_service_spec.rb @@ -4,13 +4,20 @@ describe CardImageLoadingService do let(:cils) { described_class.new } + let(:sgls) do + SubGuideLoadingService.new(csv_location: Rails.root.join('spec', 'fixtures', 'subguide_card_fixture.csv')) + end + let(:s3_response) do + "2023-07-19 14:39:38 3422 imagecat-disk9-0091-A3037-1358.0110.tif\n2023-07-19 14:39:38 7010 imagecat-disk9-0091-A3037-1358.0111.tif\n" + end it 'can instantiate' do expect(cils).to be_instance_of described_class end it 'imports all card images' do + sgls.import expect(CardImage.count).to eq 0 cils.import - expect(CardImage.count).to eq 1 + expect(CardImage.count).to eq 6 end end From 545d638df503246c09d2f0ebeb3e5984d00378c1 Mon Sep 17 00:00:00 2001 From: leefaisonr Date: Thu, 10 Aug 2023 17:06:14 -0400 Subject: [PATCH 4/4] add rubocop exception --- .rubocop.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.rubocop.yml b/.rubocop.yml index 09cc71b4..dfb8ba9c 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -6,6 +6,7 @@ Rails/FilePath: Layout/LineLength: Exclude: - "config/initializers/content_security_policy.rb" + - "spec/services/card_image_loading_service_spec.rb" Metrics/BlockLength: Exclude: