Skip to content

Commit e4da53c

Browse files
committed
Support term ordering; fix migrations to run in test
1 parent b04cf4b commit e4da53c

11 files changed

Lines changed: 96 additions & 4 deletions

app/models/term.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ class Term < ApplicationRecord
1919
# ------------------------------------------------------------
2020
# Scopes
2121

22+
default_scope { order(:facet_id, :parent_id, :ord, :value) }
23+
2224
scope :find_by_self_or_parent, ->(**conditions) {
2325
sql = <<~SQL.squish
2426
INNER JOIN (#{Term.where(**conditions).to_sql})#{' '}

app/serializers/term_serializer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class TermSerializer
22
include JSONAPI::Serializer
33

4-
attributes(:value)
4+
attributes(:value, :ord)
55

66
belongs_to :facet
77
belongs_to :parent, serializer: TermSerializer

db/migrate/20220810184802_drop_test_item.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,18 @@ class DropTestItem < ActiveRecord::Migration[7.0]
2424
}
2525

2626
def up
27+
return if Rails.env.test?
28+
2729
item = Item.find_by!(ITEM_ATTRS)
2830
item.destroy!
2931
end
3032

3133
def down
34+
return if Rails.env.test?
35+
3236
item = Item.create!(ITEM_ATTRS)
3337
item.terms = ITEM_TERMS.map do |fn, tv|
34-
facet = Facet.find_by!(name: fn)
38+
facet = Facet.find_by(name: fn)
3539
facet.terms.where(value: tv).first
3640
end
3741
end

db/migrate/20220908164857_suppress_additional_items.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ class SuppressAdditionalItems < ActiveRecord::Migration[7.0]
99
]
1010

1111
def up
12+
return if Rails.env.test?
13+
1214
ITEM_ATTRS.each do |attrs|
1315
item = Item.find_by!(suppressed: false, **attrs)
1416
item.suppressed = true
@@ -17,6 +19,8 @@ def up
1719
end
1820

1921
def down
22+
return if Rails.env.test?
23+
2024
ITEM_ATTRS.each do |attrs|
2125
item = Item.find_by!(suppressed: true, **attrs)
2226
item.suppressed = false

db/migrate/20220914235036_add_risograph_to_medium.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44

55
class AddRisographToMedium < ActiveRecord::Migration[7.0]
66
def up
7+
return if Rails.env.test?
8+
79
Term.create!(value: 'Risograph', facet: facet_medium)
810
end
911

1012
def down
13+
return if Rails.env.test?
14+
1115
term = Term.find_by!(value: 'Risograph', facet: facet_medium)
1216
term.destroy!
1317
end

db/migrate/20220920203301_drop_incomplete_items.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,15 @@ class DropIncompleteItems < ActiveRecord::Migration[7.0]
3838
]
3939

4040
def up
41+
return if Rails.env.test?
42+
4143
DATA.each { |attrs| Item.find_by!(attrs).destroy! }
4244
ActiveRecord::Base.connection.reset_pk_sequence!('items', :id, 'items_id_seq')
4345
end
4446

4547
def down
48+
return if Rails.env.test?
49+
4650
DATA.each { |attrs| Item.create!(attrs) }
4751
end
4852
end

db/migrate/20220920213123_add_fall2022_items.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,16 @@ class AddFall2022Items < ActiveRecord::Migration[7.0]
3636
]
3737

3838
def up
39+
return if Rails.env.test?
40+
3941
raise ArgumentError, "Missing images:\n\t#{image_errors.join("\n\t")}" if image_errors.any?
4042
ActiveRecord::Base.connection.reset_pk_sequence!('items', :id, 'items_id_seq')
4143
importer.import_items!
4244
end
4345

4446
def down
47+
return if Rails.env.test?
48+
4549
Item.where(mms_id: mms_ids).destroy_all
4650
end
4751

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class SupportOrderedTerms < ActiveRecord::Migration[7.0]
2+
3+
ORDERED_FACET_VALUES = {
4+
'Decade' => [
5+
'Before 1900',
6+
'1900-1909',
7+
'1910-1919',
8+
'1920-1929',
9+
'1930-1939',
10+
'1940-1949',
11+
'1950-1959',
12+
'1960-1969',
13+
'1970-1979',
14+
'1980-1989',
15+
'1990-1999',
16+
'After 1999',
17+
'No Date'
18+
].freeze,
19+
'Size' => [
20+
'Small',
21+
'Medium',
22+
'Large',
23+
'Oversized'
24+
].freeze
25+
}.freeze
26+
27+
def change
28+
add_column(:facets, :ordered, :boolean, default: false, null: false)
29+
add_column(:terms, :ord, :integer)
30+
31+
set_order!
32+
33+
add_index(:terms, [:facet_id, :ord], unique: true)
34+
end
35+
36+
private
37+
38+
def set_order!
39+
return if Rails.env.test?
40+
41+
ORDERED_FACET_VALUES.each do |facet_name, values|
42+
facet = Facet.find_by!(name: facet_name)
43+
facet.update(ordered: true)
44+
45+
values.each_with_index do |value, i|
46+
term = Term.find_by!(facet: facet, value: value)
47+
term.update(ord: i)
48+
end
49+
end
50+
end
51+
end

db/schema.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema[7.0].define(version: 2022_09_20_213123) do
13+
ActiveRecord::Schema[7.0].define(version: 2022_09_21_205344) do
1414
# These are extensions that must be enabled in order to support this database
1515
enable_extension "plpgsql"
1616

1717
create_table "facets", force: :cascade do |t|
1818
t.string "name", null: false
1919
t.datetime "created_at", null: false
2020
t.datetime "updated_at", null: false
21+
t.boolean "ordered", default: false, null: false
2122
t.index ["name"], name: "index_facets_on_name", unique: true
2223
end
2324

@@ -60,6 +61,8 @@
6061
t.bigint "parent_id"
6162
t.datetime "created_at", null: false
6263
t.datetime "updated_at", null: false
64+
t.integer "ord"
65+
t.index ["facet_id", "ord"], name: "index_terms_on_facet_id_and_ord", unique: true
6366
t.index ["facet_id"], name: "index_terms_on_facet_id"
6467
t.index ["parent_id"], name: "index_terms_on_parent_id"
6568
t.index ["value"], name: "index_terms_on_value", unique: true

spec/factories/terms.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,81 +25,97 @@
2525

2626
factory(:term_small) do
2727
value { 'Small' }
28+
ord { 0 }
2829
facet { association :facet_size }
2930
end
3031

3132
factory(:term_medium) do
3233
value { 'Medium' }
34+
ord { 1 }
3335
facet { association :facet_size }
3436
end
3537

3638
factory(:term_large) do
3739
value { 'Large' }
40+
ord { 2 }
3841
facet { association :facet_size }
3942
end
4043

4144
factory(:term_oversized) do
4245
value { 'Oversized' }
46+
ord { 3 }
4347
facet { association :facet_size }
4448
end
4549

4650
factory(:term_before_1900) do
4751
value { 'Before 1900' }
52+
ord { 0 }
4853
facet { association :facet_decade }
4954
end
5055

5156
factory(:term_1900_1909) do
5257
value { '1900-1909' }
58+
ord { 1 }
5359
facet { association :facet_decade }
5460
end
5561

5662
factory(:term_1910_1919) do
5763
value { '1910-1919' }
64+
ord { 2 }
5865
facet { association :facet_decade }
5966
end
6067

6168
factory(:term_1920_1929) do
6269
value { '1920-1929' }
70+
ord { 3 }
6371
facet { association :facet_decade }
6472
end
6573

6674
factory(:term_1930_1939) do
6775
value { '1930-1939' }
76+
ord { 4 }
6877
facet { association :facet_decade }
6978
end
7079

7180
factory(:term_1940_1949) do
7281
value { '1940-1949' }
82+
ord { 5 }
7383
facet { association :facet_decade }
7484
end
7585

7686
factory(:term_1950_1959) do
7787
value { '1950-1959' }
88+
ord { 6 }
7889
facet { association :facet_decade }
7990
end
8091

8192
factory(:term_1960_1969) do
8293
value { '1960-1969' }
94+
ord { 7 }
8395
facet { association :facet_decade }
8496
end
8597

8698
factory(:term_1970_1979) do
8799
value { '1970-1979' }
100+
ord { 8 }
88101
facet { association :facet_decade }
89102
end
90103

91104
factory(:term_1980_1989) do
92105
value { '1980-1989' }
106+
ord { 9 }
93107
facet { association :facet_decade }
94108
end
95109

96110
factory(:term_1990_1999) do
97111
value { '1990-1999' }
112+
ord { 10 }
98113
facet { association :facet_decade }
99114
end
100115

101116
factory(:term_after_1999) do
102117
value { 'After 1999' }
118+
ord { 11 }
103119
facet { association :facet_decade }
104120
end
105121

0 commit comments

Comments
 (0)