iqvoc 4.14.5 → 4.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/Gemfile +9 -16
- data/Gemfile.lock +313 -257
- data/README.md +1 -1
- data/app/aides/entity_logger.rb +27 -0
- data/app/aides/maker.rb +1 -1
- data/app/aides/origin.rb +1 -1
- data/app/aides/{rdfapi.rb → rdf_api.rb} +1 -1
- data/app/aides/skos_importer.rb +1 -1
- data/app/assets/javascripts/iqvoc/iqvoc.js +4 -3
- data/app/assets/javascripts/iqvoc/treeview.js +3 -3
- data/app/assets/stylesheets/_framework.scss +1 -1
- data/app/controllers/collections/alphabetical_controller.rb +75 -0
- data/app/controllers/collections/expired_controller.rb +37 -0
- data/app/controllers/collections_controller.rb +22 -28
- data/app/controllers/concepts/alphabetical_controller.rb +4 -6
- data/app/controllers/concepts/expired_controller.rb +1 -1
- data/app/controllers/concepts/hierarchical_controller.rb +18 -15
- data/app/controllers/concepts_controller.rb +0 -3
- data/app/controllers/concepts_movement_controller.rb +1 -1
- data/app/controllers/concerns/controller_extensions.rb +15 -0
- data/app/controllers/dashboard_controller.rb +1 -1
- data/app/controllers/exports_controller.rb +17 -8
- data/app/controllers/rdf_controller.rb +0 -2
- data/app/controllers/remote_labels_controller.rb +0 -2
- data/app/controllers/search_results_controller.rb +59 -43
- data/app/helpers/concepts_helper.rb +2 -2
- data/app/helpers/navigation_helper.rb +7 -7
- data/app/helpers/rdf_helper.rb +2 -0
- data/app/jobs/export_job.rb +4 -7
- data/app/models/collection/base.rb +6 -8
- data/app/models/collection/member/skos/base.rb +2 -2
- data/app/models/collection/skos/base.rb +1 -1
- data/app/models/collection/skos/unordered.rb +1 -1
- data/app/models/collection/unordered.rb +2 -2
- data/app/models/concept/base.rb +2 -10
- data/app/models/concept/relation/base.rb +1 -1
- data/app/models/concept/relation/skos/base.rb +2 -2
- data/app/models/concept/relation/skos/broader/base.rb +2 -2
- data/app/models/concept/relation/skos/broader/mono.rb +1 -1
- data/app/models/concept/relation/skos/broader/poly.rb +1 -1
- data/app/models/concept/relation/skos/narrower/base.rb +1 -1
- data/app/models/concept/relation/skos/related.rb +1 -1
- data/app/models/concept/skos/base.rb +1 -1
- data/app/models/concept/skos/scheme.rb +2 -2
- data/app/models/concept/validations.rb +14 -0
- data/app/models/concerns/expirable.rb +14 -0
- data/app/models/export.rb +21 -9
- data/app/models/label/base.rb +19 -1
- data/app/models/label/skos/base.rb +1 -1
- data/app/models/labeling/base.rb +12 -0
- data/app/models/labeling/skos/alt_label.rb +1 -1
- data/app/models/labeling/skos/base.rb +4 -4
- data/app/models/labeling/skos/hidden_label.rb +1 -1
- data/app/models/labeling/skos/pref_label.rb +1 -1
- data/app/models/match/skos/base.rb +3 -3
- data/app/models/match/skos/broad_match.rb +2 -2
- data/app/models/match/skos/close_match.rb +1 -1
- data/app/models/match/skos/exact_match.rb +1 -1
- data/app/models/match/skos/mapping_relation.rb +1 -1
- data/app/models/match/skos/narrow_match.rb +2 -2
- data/app/models/match/skos/related_match.rb +1 -1
- data/app/models/note/base.rb +2 -2
- data/app/models/note/rdfs/see_also.rb +1 -1
- data/app/models/note/skos/base.rb +4 -4
- data/app/models/note/skos/change_note.rb +2 -2
- data/app/models/note/skos/definition.rb +1 -1
- data/app/models/note/skos/editorial_note.rb +1 -1
- data/app/models/note/skos/example.rb +1 -1
- data/app/models/note/skos/history_note.rb +1 -1
- data/app/models/note/skos/scope_note.rb +1 -1
- data/app/presenters/alphabetical_search_result.rb +2 -2
- data/app/services/rdf_sync_service.rb +1 -1
- data/app/uploaders/base.rb +4 -3
- data/app/view_models/concept_view.rb +1 -1
- data/app/views/collections/_data.html.erb +1 -1
- data/app/views/collections/_form.html.erb +14 -2
- data/app/views/collections/alphabetical/_search_result.html.erb +17 -0
- data/app/views/collections/alphabetical/_search_result_remote.html.erb +14 -0
- data/app/views/collections/alphabetical/index.html.erb +23 -0
- data/app/views/collections/edit.html.erb +1 -1
- data/app/views/collections/expired/index.html.erb +23 -0
- data/app/views/collections/index.html.erb +1 -1
- data/app/views/collections/new.html.erb +1 -1
- data/app/views/collections/show_published.html.erb +1 -1
- data/app/views/collections/show_unpublished.html.erb +1 -1
- data/app/views/collections/sidebars/_plural.html.erb +28 -0
- data/app/views/collections/sidebars/_singular.html.erb +22 -0
- data/app/views/concepts/_form.html.erb +1 -1
- data/app/views/concepts/alphabetical/index.html.erb +1 -1
- data/app/views/concepts/expired/index.html.erb +1 -1
- data/app/views/concepts/glance.html.erb +1 -1
- data/app/views/concepts/scheme/edit.html.erb +1 -1
- data/app/views/concepts/sidebars/_plural.html.erb +1 -1
- data/app/views/concepts/sidebars/_singular.html.erb +1 -1
- data/app/views/dashboard/glance.html.erb +1 -1
- data/app/views/exports/index.html.erb +5 -1
- data/app/views/exports/show.html.erb +1 -1
- data/app/views/partials/collection/_inline_base.html.erb +4 -0
- data/app/views/search_results/_sidebar.html.erb +1 -1
- data/config/application.rb +7 -2
- data/config/ci.rb +20 -0
- data/config/database.yml +15 -21
- data/config/database.yml.postgresql +13 -20
- data/config/engine.rb +1 -0
- data/config/environments/development.rb +1 -1
- data/config/environments/production.rb +1 -1
- data/config/environments/test.rb +1 -1
- data/config/initializers/content_security_policy.rb +6 -2
- data/config/initializers/filter_parameter_logging.rb +4 -4
- data/config/initializers/new_framework_defaults_7_1.rb +280 -0
- data/config/initializers/new_framework_defaults_8_0.rb +30 -0
- data/config/initializers/new_framework_defaults_8_1.rb +74 -0
- data/config/initializers/permissions_policy.rb +11 -9
- data/config/initializers/zeitwerk.rb +1 -3
- data/config/locales/de.yml +4 -1
- data/config/locales/en.yml +4 -1
- data/config/locales/pt.yml +2 -1
- data/config/puma.rb +34 -35
- data/config/routes.rb +3 -1
- data/db/migrate/20110510162719_use_mono_hierarchy_instead_of_poly_hierarchy.rb +2 -2
- data/db/migrate/20130227145825_fix_collection_type.rb +3 -3
- data/db/migrate/20130502151221_fix_collection_member_types.rb +1 -1
- data/db/migrate/20250218160045_adapt_zeitwerk_naming_to_iqvoc.rb +25 -0
- data/db/migrate/20250326182601_adapt_zeitwerk_skos_naming_to_instance_configuration.rb +11 -0
- data/db/schema.rb +100 -1
- data/iqvoc.gemspec +4 -4
- data/lib/iqvoc/configuration/collection.rb +16 -4
- data/lib/iqvoc/configuration/concept.rb +22 -18
- data/lib/iqvoc/configuration/core.rb +9 -23
- data/lib/iqvoc/configuration/label.rb +1 -1
- data/lib/iqvoc/environments/development.rb +62 -57
- data/lib/iqvoc/environments/production.rb +70 -67
- data/lib/iqvoc/environments/test.rb +44 -38
- data/lib/iqvoc/version.rb +1 -1
- data/test/controllers/concepts_movement_controller_test.rb +14 -14
- data/test/controllers/hierarchy_test.rb +0 -1
- data/test/controllers/reverse_match_test.rb +6 -6
- data/test/integration/alphabetical_test.rb +5 -5
- data/test/integration/browse_concepts_and_labels_test.rb +4 -4
- data/test/integration/client_edit_concept_test.rb +1 -1
- data/test/integration/collection_browsing_test.rb +2 -2
- data/test/integration/collection_circularity_test.rb +10 -10
- data/test/integration/collection_test.rb +79 -0
- data/test/integration/concept_browsing_test.rb +3 -3
- data/test/integration/concept_collection_assignment_test.rb +4 -4
- data/test/integration/concept_scheme_browsing_test.rb +7 -7
- data/test/integration/edit_collections_test.rb +1 -1
- data/test/integration/edit_concepts_test.rb +2 -2
- data/test/integration/instance_configuration_browsing_test.rb +1 -1
- data/test/integration/note_annotations_test.rb +2 -2
- data/test/integration/reverse_match_job_test.rb +9 -9
- data/test/integration/search_test.rb +20 -10
- data/test/integration/tree_test.rb +5 -5
- data/test/integration/untranslated_test.rb +2 -2
- data/test/integration_test_helper.rb +7 -0
- data/test/models/concept_scheme_test.rb +6 -6
- data/test/models/concept_test.rb +38 -38
- data/test/models/deep_cloning_test.rb +6 -6
- data/test/models/note_test.rb +4 -4
- data/test/models/rdf_sync_test.rb +1 -1
- data/test/models/rdfapi_test.rb +24 -24
- data/test/models/skos_collection_import_test.rb +3 -3
- data/test/models/skos_import_test.rb +4 -4
- metadata +44 -32
- data/app/views/collections/_sidebar.html.erb +0 -20
- data/config/environments/heroku.rb +0 -81
- data/config/initializers/heroku.rb +0 -24
- data/config/secrets.yml +0 -35
- /data/{app/helpers → lib}/iqvoc_module_helper.rb +0 -0
- /data/{app/models/concerns → lib}/search_extension.rb +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
class FixCollectionType < ActiveRecord::Migration[4.2]
|
|
2
2
|
def up
|
|
3
|
-
execute "UPDATE concepts SET type='Collection::
|
|
4
|
-
execute "UPDATE collection_members SET type='Collection::Member::
|
|
3
|
+
execute "UPDATE concepts SET type='Collection::Skos::Unordered' WHERE type='Collection::Unordered'"
|
|
4
|
+
execute "UPDATE collection_members SET type='Collection::Member::Skos::Base' WHERE type='Collection::Member::Concept'"
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
def down
|
|
8
|
-
execute "UPDATE concepts SET type='Collection::Unordered' WHERE type='Collection::
|
|
8
|
+
execute "UPDATE concepts SET type='Collection::Unordered' WHERE type='Collection::Skos::Unordered'"
|
|
9
9
|
end
|
|
10
10
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class FixCollectionMemberTypes < ActiveRecord::Migration[4.2]
|
|
2
2
|
def up
|
|
3
|
-
execute "UPDATE collection_members SET type ='Collection::Member::
|
|
3
|
+
execute "UPDATE collection_members SET type ='Collection::Member::Skos::Base' WHERE type = 'Collection::Member::Collection'"
|
|
4
4
|
end
|
|
5
5
|
|
|
6
6
|
def down
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class AdaptZeitwerkNamingToIqvoc < ActiveRecord::Migration[7.1]
|
|
2
|
+
def up
|
|
3
|
+
c = ActiveRecord::Base.connection
|
|
4
|
+
|
|
5
|
+
c.tables.collect do |table|
|
|
6
|
+
type_cols = c.columns(table).select { |col| col.name.include? 'type' }.select { |col| col.type == :string }.collect(&:name) # also respect *_type (like owner_type)
|
|
7
|
+
type_cols.each do |col|
|
|
8
|
+
execute "UPDATE #{table} SET #{col} = REGEXP_REPLACE(#{col}, '::SKOS::', '::Skos::', 'g') WHERE #{col} LIKE '%::SKOS::%';"
|
|
9
|
+
execute "UPDATE #{table} SET #{col} = REGEXP_REPLACE(#{col}, '::SKOSXL::', '::Skosxl::', 'g') WHERE #{col} LIKE '%::SKOSXL::%';"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def down
|
|
15
|
+
c = ActiveRecord::Base.connection
|
|
16
|
+
|
|
17
|
+
c.tables.collect do |table|
|
|
18
|
+
type_cols = c.columns(table).select { |col| col.name.include? 'type' }.select { |col| col.type == :string }.collect(&:name) # also respect *_type (like owner_type)
|
|
19
|
+
type_cols.each do |col|
|
|
20
|
+
execute "UPDATE #{table} SET #{col} = REGEXP_REPLACE(#{col}, '::Skos::', '::SKOS::', 'g') WHERE #{col} LIKE '%::Skos::%';"
|
|
21
|
+
execute "UPDATE #{table} SET #{col} = REGEXP_REPLACE(#{col}, '::Skosxl::', '::SKOSXL::', 'g') WHERE #{col} LIKE '%::Skosxl::%';"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class AdaptZeitwerkSkosNamingToInstanceConfiguration < ActiveRecord::Migration[7.1]
|
|
2
|
+
def up
|
|
3
|
+
execute "UPDATE configuration_settings SET key = REGEXP_REPLACE(key, '::SKOS::', '::Skos::', 'g') WHERE key LIKE '%::SKOS::%';"
|
|
4
|
+
execute "UPDATE configuration_settings SET key = REGEXP_REPLACE(key, '::SKOSXL::', '::Skosxl::', 'g') WHERE key LIKE '%::SKOSXL::%';"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def down
|
|
8
|
+
execute "UPDATE configuration_settings SET key = REGEXP_REPLACE(key, '::Skos::', '::SKOS::', 'g') WHERE key LIKE '%::Skos::%';"
|
|
9
|
+
execute "UPDATE configuration_settings SET key = REGEXP_REPLACE(key, '::Skosxl::', '::SKOSXL::', 'g') WHERE key LIKE '%::Skosxl::%';"
|
|
10
|
+
end
|
|
11
|
+
end
|
data/db/schema.rb
CHANGED
|
@@ -10,10 +10,30 @@
|
|
|
10
10
|
#
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
|
12
12
|
|
|
13
|
-
ActiveRecord::Schema[7.
|
|
13
|
+
ActiveRecord::Schema[7.1].define(version: 2025_03_26_182601) do
|
|
14
14
|
# These are extensions that must be enabled in order to support this database
|
|
15
15
|
enable_extension "plpgsql"
|
|
16
16
|
|
|
17
|
+
create_table "classification_traces", id: :serial, force: :cascade do |t|
|
|
18
|
+
t.integer "document_id"
|
|
19
|
+
t.text "trace"
|
|
20
|
+
t.datetime "created_at", precision: nil
|
|
21
|
+
t.datetime "updated_at", precision: nil
|
|
22
|
+
t.index ["document_id"], name: "index_classification_traces_on_document_id"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
create_table "classifications", id: :serial, force: :cascade do |t|
|
|
26
|
+
t.integer "document_id"
|
|
27
|
+
t.datetime "created_at", precision: nil
|
|
28
|
+
t.datetime "updated_at", precision: nil
|
|
29
|
+
t.decimal "weighting", precision: 10, scale: 4
|
|
30
|
+
t.string "title"
|
|
31
|
+
t.string "concept_origin", limit: 4000
|
|
32
|
+
t.text "findings"
|
|
33
|
+
t.index ["concept_origin"], name: "ix_classifications_on_origin"
|
|
34
|
+
t.index ["document_id"], name: "index_classifications_on_document_id"
|
|
35
|
+
end
|
|
36
|
+
|
|
17
37
|
create_table "collection_members", id: :serial, force: :cascade do |t|
|
|
18
38
|
t.integer "collection_id"
|
|
19
39
|
t.integer "target_id"
|
|
@@ -22,6 +42,33 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_12_135837) do
|
|
|
22
42
|
t.index ["type"], name: "index_collection_members_on_type"
|
|
23
43
|
end
|
|
24
44
|
|
|
45
|
+
create_table "comments", id: :serial, force: :cascade do |t|
|
|
46
|
+
t.text "body"
|
|
47
|
+
t.integer "document_id"
|
|
48
|
+
t.integer "user_id"
|
|
49
|
+
t.datetime "created_at", precision: nil
|
|
50
|
+
t.datetime "updated_at", precision: nil
|
|
51
|
+
t.index ["document_id"], name: "index_comments_on_document_id"
|
|
52
|
+
t.index ["user_id"], name: "index_comments_on_user_id"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
create_table "compound_form_contents", id: :serial, force: :cascade do |t|
|
|
56
|
+
t.datetime "created_at", precision: nil
|
|
57
|
+
t.datetime "updated_at", precision: nil
|
|
58
|
+
t.integer "compound_form_id"
|
|
59
|
+
t.integer "label_id"
|
|
60
|
+
t.integer "order"
|
|
61
|
+
t.index ["compound_form_id"], name: "ix_cfc_compound_form_id"
|
|
62
|
+
t.index ["label_id"], name: "ix_cfc_label_id"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
create_table "compound_forms", id: :serial, force: :cascade do |t|
|
|
66
|
+
t.datetime "created_at", precision: nil
|
|
67
|
+
t.datetime "updated_at", precision: nil
|
|
68
|
+
t.integer "domain_id"
|
|
69
|
+
t.index ["domain_id"], name: "ix_cf_fk"
|
|
70
|
+
end
|
|
71
|
+
|
|
25
72
|
create_table "concept_relations", id: :serial, force: :cascade do |t|
|
|
26
73
|
t.string "type"
|
|
27
74
|
t.integer "owner_id"
|
|
@@ -45,6 +92,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_12_135837) do
|
|
|
45
92
|
t.datetime "created_at", precision: nil
|
|
46
93
|
t.datetime "updated_at", precision: nil
|
|
47
94
|
t.boolean "top_term", default: false
|
|
95
|
+
t.boolean "auto_classify", default: true, null: false
|
|
48
96
|
t.index ["origin"], name: "ix_concepts_on_origin"
|
|
49
97
|
t.index ["published_version_id"], name: "ix_concepts_publ_version_id"
|
|
50
98
|
end
|
|
@@ -77,6 +125,18 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_12_135837) do
|
|
|
77
125
|
t.index ["queue"], name: "delayed_jobs_queue"
|
|
78
126
|
end
|
|
79
127
|
|
|
128
|
+
create_table "documents", id: :serial, force: :cascade do |t|
|
|
129
|
+
t.string "content_hash"
|
|
130
|
+
t.text "content"
|
|
131
|
+
t.datetime "created_at", precision: nil
|
|
132
|
+
t.datetime "updated_at", precision: nil
|
|
133
|
+
t.string "uri"
|
|
134
|
+
t.string "title"
|
|
135
|
+
t.string "workflow_state"
|
|
136
|
+
t.string "type"
|
|
137
|
+
t.jsonb "options"
|
|
138
|
+
end
|
|
139
|
+
|
|
80
140
|
create_table "exports", id: :serial, force: :cascade do |t|
|
|
81
141
|
t.integer "user_id"
|
|
82
142
|
t.text "output"
|
|
@@ -103,6 +163,27 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_12_135837) do
|
|
|
103
163
|
t.index ["user_id"], name: "index_imports_on_user_id"
|
|
104
164
|
end
|
|
105
165
|
|
|
166
|
+
create_table "inflectionals", id: :serial, force: :cascade do |t|
|
|
167
|
+
t.datetime "created_at", precision: nil
|
|
168
|
+
t.datetime "updated_at", precision: nil
|
|
169
|
+
t.integer "label_id"
|
|
170
|
+
t.string "value", limit: 4000
|
|
171
|
+
t.string "normal_hash"
|
|
172
|
+
t.index ["label_id"], name: "ix_inflectionals_fk"
|
|
173
|
+
t.index ["normal_hash"], name: "ix_inflectionals_normal_hash"
|
|
174
|
+
t.index ["value"], name: "index_inflectionals_on_value"
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
create_table "label_relations", id: :serial, force: :cascade do |t|
|
|
178
|
+
t.string "type"
|
|
179
|
+
t.integer "domain_id"
|
|
180
|
+
t.integer "range_id"
|
|
181
|
+
t.datetime "created_at", precision: nil
|
|
182
|
+
t.datetime "updated_at", precision: nil
|
|
183
|
+
t.index ["domain_id", "range_id", "type"], name: "ix_label_rel_dom_rng_type"
|
|
184
|
+
t.index ["type"], name: "ix_label_relations_on_type"
|
|
185
|
+
end
|
|
186
|
+
|
|
106
187
|
create_table "labelings", id: :serial, force: :cascade do |t|
|
|
107
188
|
t.string "type"
|
|
108
189
|
t.integer "owner_id"
|
|
@@ -120,9 +201,19 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_12_135837) do
|
|
|
120
201
|
t.string "value", limit: 1024
|
|
121
202
|
t.datetime "created_at", precision: nil
|
|
122
203
|
t.datetime "updated_at", precision: nil
|
|
204
|
+
t.integer "rev", default: 1
|
|
205
|
+
t.integer "published_version_id"
|
|
123
206
|
t.date "published_at"
|
|
207
|
+
t.date "expired_at"
|
|
208
|
+
t.date "follow_up"
|
|
209
|
+
t.boolean "to_review"
|
|
210
|
+
t.date "rdf_updated_at"
|
|
211
|
+
t.boolean "auto_classify", default: true, null: false
|
|
212
|
+
t.string "base_form"
|
|
213
|
+
t.string "inflectional_code"
|
|
124
214
|
t.index ["language"], name: "ix_labels_on_language"
|
|
125
215
|
t.index ["origin"], name: "ix_labels_on_origin"
|
|
216
|
+
t.index ["published_version_id"], name: "ix_labels_on_published_v"
|
|
126
217
|
end
|
|
127
218
|
|
|
128
219
|
create_table "matches", id: :serial, force: :cascade do |t|
|
|
@@ -192,12 +283,20 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_12_135837) do
|
|
|
192
283
|
t.string "last_login_ip"
|
|
193
284
|
end
|
|
194
285
|
|
|
286
|
+
add_foreign_key "classification_traces", "documents", on_update: :cascade, on_delete: :cascade
|
|
287
|
+
add_foreign_key "classifications", "documents", on_update: :cascade, on_delete: :cascade
|
|
195
288
|
add_foreign_key "collection_members", "concepts", column: "collection_id", on_update: :cascade
|
|
196
289
|
add_foreign_key "collection_members", "concepts", column: "target_id", on_update: :cascade
|
|
290
|
+
add_foreign_key "compound_form_contents", "compound_forms", on_update: :cascade, on_delete: :cascade
|
|
291
|
+
add_foreign_key "compound_form_contents", "labels", on_update: :cascade, on_delete: :cascade
|
|
292
|
+
add_foreign_key "compound_forms", "labels", column: "domain_id", on_update: :cascade, on_delete: :cascade
|
|
197
293
|
add_foreign_key "concept_relations", "concepts", column: "owner_id", on_update: :cascade
|
|
198
294
|
add_foreign_key "concept_relations", "concepts", column: "target_id", on_update: :cascade
|
|
199
295
|
add_foreign_key "exports", "users", on_update: :cascade, on_delete: :nullify
|
|
200
296
|
add_foreign_key "imports", "users", on_update: :cascade, on_delete: :nullify
|
|
297
|
+
add_foreign_key "inflectionals", "labels", on_update: :cascade, on_delete: :cascade
|
|
298
|
+
add_foreign_key "label_relations", "labels", column: "domain_id", on_update: :cascade, on_delete: :cascade
|
|
299
|
+
add_foreign_key "label_relations", "labels", column: "range_id", on_update: :cascade, on_delete: :cascade
|
|
201
300
|
add_foreign_key "labelings", "concepts", column: "owner_id", on_update: :cascade
|
|
202
301
|
add_foreign_key "labelings", "labels", column: "target_id", on_update: :cascade, on_delete: :cascade
|
|
203
302
|
add_foreign_key "matches", "concepts", on_update: :cascade, on_delete: :cascade
|
data/iqvoc.gemspec
CHANGED
|
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
|
13
13
|
s.description = 'iQvoc - a SKOS(-XL) vocabulary management system built on the Semantic Web'
|
|
14
14
|
s.license = 'Apache-2.0'
|
|
15
15
|
|
|
16
|
-
s.add_dependency 'rails', '~>
|
|
16
|
+
s.add_dependency 'rails', '~> 8.1.2'
|
|
17
17
|
s.add_dependency 'puma'
|
|
18
18
|
s.add_dependency 'bootsnap'
|
|
19
19
|
s.add_dependency 'bundler'
|
|
@@ -23,8 +23,9 @@ Gem::Specification.new do |s|
|
|
|
23
23
|
s.add_dependency 'cancancan'
|
|
24
24
|
s.add_dependency 'iq_rdf'
|
|
25
25
|
s.add_dependency 'json'
|
|
26
|
+
s.add_dependency 'csv'
|
|
26
27
|
s.add_dependency 'rails_autolink'
|
|
27
|
-
s.add_dependency 'faraday'
|
|
28
|
+
s.add_dependency 'faraday', '1.10.3'
|
|
28
29
|
s.add_dependency 'faraday_middleware'
|
|
29
30
|
s.add_dependency 'bootstrap_form', '~> 4.0'
|
|
30
31
|
s.add_dependency 'iq_triplestorage'
|
|
@@ -34,8 +35,7 @@ Gem::Specification.new do |s|
|
|
|
34
35
|
s.add_dependency 'deep_cloneable'
|
|
35
36
|
s.add_dependency 'apipie-rails'
|
|
36
37
|
s.add_dependency 'maruku'
|
|
37
|
-
s.add_dependency '
|
|
38
|
-
s.add_dependency 'database_cleaner', '~> 1.8.5'
|
|
38
|
+
s.add_dependency 'database_cleaner'
|
|
39
39
|
s.add_dependency 'delayed_job_active_record'
|
|
40
40
|
s.add_dependency 'carrierwave'
|
|
41
41
|
s.add_dependency 'carrierwave-i18n'
|
|
@@ -8,13 +8,17 @@ module Iqvoc
|
|
|
8
8
|
included do
|
|
9
9
|
Iqvoc.first_level_class_configuration_modules << self
|
|
10
10
|
|
|
11
|
-
mattr_accessor :base_class_name, :member_class_name, :note_class_names, :include_module_names
|
|
11
|
+
mattr_accessor :base_class_name, :member_class_name, :note_class_names, :include_module_names,
|
|
12
|
+
:pref_labeling_class_name, :alt_labeling_class_name, :hidden_labeling_class_name
|
|
12
13
|
|
|
13
|
-
self.base_class_name = 'Collection::
|
|
14
|
+
self.base_class_name = 'Collection::Skos::Unordered'
|
|
15
|
+
self.member_class_name = 'Collection::Member::Skos::Base'
|
|
14
16
|
|
|
15
|
-
self.
|
|
17
|
+
self.note_class_names = [ 'Note::Skos::Definition' ]
|
|
16
18
|
|
|
17
|
-
self.
|
|
19
|
+
self.pref_labeling_class_name = 'Labeling::Skos::PrefLabel'
|
|
20
|
+
self.alt_labeling_class_name = 'Labeling::Skos::AltLabel'
|
|
21
|
+
self.hidden_labeling_class_name = 'Labeling::Skos::HiddenLabel'
|
|
18
22
|
|
|
19
23
|
self.include_module_names = []
|
|
20
24
|
end
|
|
@@ -32,6 +36,14 @@ module Iqvoc
|
|
|
32
36
|
note_class_names.map(&:constantize)
|
|
33
37
|
end
|
|
34
38
|
|
|
39
|
+
def pref_labeling_class
|
|
40
|
+
pref_labeling_class_name.constantize
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def alt_labeling_class
|
|
44
|
+
alt_labeling_class_name.constantize
|
|
45
|
+
end
|
|
46
|
+
|
|
35
47
|
def include_modules
|
|
36
48
|
include_module_names.map(&:constantize)
|
|
37
49
|
end
|
|
@@ -20,31 +20,31 @@ module Iqvoc
|
|
|
20
20
|
:view_sections,
|
|
21
21
|
:include_module_names
|
|
22
22
|
|
|
23
|
-
self.base_class_name = 'Concept::
|
|
24
|
-
self.root_class_name = 'Concept::
|
|
23
|
+
self.base_class_name = 'Concept::Skos::Base'
|
|
24
|
+
self.root_class_name = 'Concept::Skos::Scheme'
|
|
25
25
|
|
|
26
|
-
self.broader_relation_class_name = 'Concept::Relation::
|
|
27
|
-
self.further_relation_class_names = [ 'Concept::Relation::
|
|
26
|
+
self.broader_relation_class_name = 'Concept::Relation::Skos::Broader::Mono'
|
|
27
|
+
self.further_relation_class_names = [ 'Concept::Relation::Skos::Related' ]
|
|
28
28
|
|
|
29
|
-
self.pref_labeling_class_name = 'Labeling::
|
|
30
|
-
self.alt_labeling_class_name = 'Labeling::
|
|
31
|
-
self.hidden_labeling_class_name = 'Labeling::
|
|
29
|
+
self.pref_labeling_class_name = 'Labeling::Skos::PrefLabel'
|
|
30
|
+
self.alt_labeling_class_name = 'Labeling::Skos::AltLabel'
|
|
31
|
+
self.hidden_labeling_class_name = 'Labeling::Skos::HiddenLabel'
|
|
32
32
|
|
|
33
33
|
self.note_class_names = [
|
|
34
34
|
Iqvoc.change_note_class_name,
|
|
35
|
-
'Note::
|
|
36
|
-
'Note::
|
|
37
|
-
'Note::
|
|
38
|
-
'Note::
|
|
39
|
-
'Note::
|
|
35
|
+
'Note::Skos::Definition',
|
|
36
|
+
'Note::Skos::EditorialNote',
|
|
37
|
+
'Note::Skos::Example',
|
|
38
|
+
'Note::Skos::HistoryNote',
|
|
39
|
+
'Note::Skos::ScopeNote'
|
|
40
40
|
]
|
|
41
41
|
|
|
42
42
|
self.match_class_names = [
|
|
43
|
-
'Match::
|
|
44
|
-
'Match::
|
|
45
|
-
'Match::
|
|
46
|
-
'Match::
|
|
47
|
-
'Match::
|
|
43
|
+
'Match::Skos::CloseMatch',
|
|
44
|
+
'Match::Skos::ExactMatch',
|
|
45
|
+
'Match::Skos::RelatedMatch',
|
|
46
|
+
'Match::Skos::BroadMatch',
|
|
47
|
+
'Match::Skos::NarrowMatch',
|
|
48
48
|
]
|
|
49
49
|
|
|
50
50
|
self.notation_class_names = [
|
|
@@ -83,6 +83,10 @@ module Iqvoc
|
|
|
83
83
|
alt_labeling_class_name.constantize
|
|
84
84
|
end
|
|
85
85
|
|
|
86
|
+
def hidden_labeling_class
|
|
87
|
+
hidden_labeling_class_name.constantize
|
|
88
|
+
end
|
|
89
|
+
|
|
86
90
|
def labeling_class_names
|
|
87
91
|
{ pref_labeling_class_name => pref_labeling_languages }.merge(further_labeling_class_names)
|
|
88
92
|
end
|
|
@@ -96,7 +100,7 @@ module Iqvoc
|
|
|
96
100
|
end
|
|
97
101
|
|
|
98
102
|
# returns hash of class name / languages pairs
|
|
99
|
-
# e.g. { "Labeling::
|
|
103
|
+
# e.g. { "Labeling::Skos::AltLabel" => ["de", "en"] }
|
|
100
104
|
def further_labeling_class_names
|
|
101
105
|
# FIXME: mutable object; needs custom hash setters to guard against
|
|
102
106
|
# modification of languages arrays (to highlight deprecated usage)
|
|
@@ -83,8 +83,8 @@ module Iqvoc
|
|
|
83
83
|
}]
|
|
84
84
|
|
|
85
85
|
self.searchable_class_names = {
|
|
86
|
-
'Labeling::
|
|
87
|
-
'Labeling::
|
|
86
|
+
'Labeling::Skos::Base' => 'labels',
|
|
87
|
+
'Labeling::Skos::PrefLabel' => 'pref_labels',
|
|
88
88
|
'Note::Base' => 'notes'
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -108,39 +108,25 @@ module Iqvoc
|
|
|
108
108
|
self.rdf_show_change_notes = true
|
|
109
109
|
|
|
110
110
|
# The class to use for automatic generation of change notes on every save
|
|
111
|
-
self.change_note_class_name = 'Note::
|
|
111
|
+
self.change_note_class_name = 'Note::Skos::ChangeNote'
|
|
112
112
|
|
|
113
113
|
self.first_level_class_configuration_modules = [] # Will be set in the modules
|
|
114
114
|
|
|
115
115
|
self.ability_class_name = 'Ability'
|
|
116
116
|
|
|
117
|
-
self.search_sections = [
|
|
118
|
-
'terms',
|
|
119
|
-
'mode',
|
|
120
|
-
'klass',
|
|
121
|
-
'type',
|
|
122
|
-
'collection',
|
|
123
|
-
'languages',
|
|
124
|
-
'change_note',
|
|
125
|
-
'datasets',
|
|
126
|
-
'options',
|
|
127
|
-
]
|
|
117
|
+
self.search_sections = %w[terms mode klass type collection languages change_note datasets options]
|
|
128
118
|
|
|
129
119
|
# ignored database tables during thesaurus truncation
|
|
130
|
-
self.truncation_blacklist = [
|
|
131
|
-
'schema_migrations',
|
|
132
|
-
'users',
|
|
133
|
-
'exports',
|
|
134
|
-
'imports'
|
|
135
|
-
]
|
|
120
|
+
self.truncation_blacklist = %w[schema_migrations users exports imports]
|
|
136
121
|
|
|
137
122
|
# initialize
|
|
138
123
|
self.config.register_settings({
|
|
139
124
|
'title' => 'iQvoc',
|
|
140
125
|
'concept_modal_preview' => true,
|
|
141
|
-
'languages.pref_labeling' => [
|
|
142
|
-
'languages.further_labelings.Labeling::
|
|
143
|
-
'languages.
|
|
126
|
+
'languages.pref_labeling' => %w[en de],
|
|
127
|
+
'languages.further_labelings.Labeling::Skos::AltLabel' => %w[en de],
|
|
128
|
+
'languages.further_labelings.Labeling::Skos::HiddenLabel' => %w[en de],
|
|
129
|
+
'languages.notes' => %w[en de],
|
|
144
130
|
'performance.unbounded_hierarchy' => false,
|
|
145
131
|
'sources.iqvoc' => [''],
|
|
146
132
|
'sources.create_reverse_matches' => true
|
|
@@ -1,74 +1,79 @@
|
|
|
1
1
|
require "active_support/core_ext/integer/time"
|
|
2
2
|
require 'iqvoc'
|
|
3
3
|
|
|
4
|
-
module Iqvoc
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# Enable/disable caching. By default caching is disabled.
|
|
23
|
-
# Run rails dev:cache to toggle caching.
|
|
24
|
-
if Rails.root.join("tmp/caching-dev.txt").exist?
|
|
25
|
-
config.action_controller.perform_caching = true
|
|
26
|
-
config.action_controller.enable_fragment_cache_logging = true
|
|
27
|
-
|
|
28
|
-
config.cache_store = :memory_store
|
|
29
|
-
config.public_file_server.headers = {
|
|
30
|
-
"Cache-Control" => "public, max-age=#{2.days.to_i}"
|
|
31
|
-
}
|
|
32
|
-
else
|
|
33
|
-
config.action_controller.perform_caching = false
|
|
34
|
-
|
|
35
|
-
config.cache_store = :null_store
|
|
36
|
-
end
|
|
4
|
+
module Iqvoc
|
|
5
|
+
module Environments
|
|
6
|
+
module Development
|
|
7
|
+
def self.setup(config)
|
|
8
|
+
# Settings specified here will take precedence over those in config/application.rb.
|
|
9
|
+
|
|
10
|
+
# Make code changes take effect immediately without server restart.
|
|
11
|
+
config.enable_reloading = true
|
|
12
|
+
|
|
13
|
+
# Do not eager load code on boot.
|
|
14
|
+
config.eager_load = false
|
|
15
|
+
|
|
16
|
+
# Show full error reports.
|
|
17
|
+
config.consider_all_requests_local = true
|
|
18
|
+
|
|
19
|
+
# Enable server timing.
|
|
20
|
+
config.server_timing = true
|
|
37
21
|
|
|
38
|
-
|
|
39
|
-
|
|
22
|
+
# Enable/disable Action Controller caching. By default Action Controller caching is disabled.
|
|
23
|
+
# Run rails dev:cache to toggle Action Controller caching.
|
|
24
|
+
if Rails.root.join("tmp/caching-dev.txt").exist?
|
|
25
|
+
config.action_controller.perform_caching = true
|
|
26
|
+
config.action_controller.enable_fragment_cache_logging = true
|
|
27
|
+
config.public_file_server.headers = { "cache-control" => "public, max-age=#{2.days.to_i}" }
|
|
28
|
+
else
|
|
29
|
+
config.action_controller.perform_caching = false
|
|
30
|
+
end
|
|
40
31
|
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
# Change to :null_store to avoid any caching.
|
|
33
|
+
config.cache_store = :memory_store
|
|
43
34
|
|
|
44
|
-
|
|
35
|
+
# Store uploaded files on the local file system (see config/storage.yml for options).
|
|
36
|
+
# config.active_storage.service = :local
|
|
45
37
|
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
# Don't care if the mailer can't send.
|
|
39
|
+
config.action_mailer.raise_delivery_errors = false
|
|
48
40
|
|
|
49
|
-
|
|
50
|
-
|
|
41
|
+
# Make template changes take effect immediately.
|
|
42
|
+
config.action_mailer.perform_caching = false
|
|
51
43
|
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
# Set localhost to be used by links generated in mailer templates.
|
|
45
|
+
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
|
|
54
46
|
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
# Print deprecation notices to the Rails logger.
|
|
48
|
+
config.active_support.deprecation = :log
|
|
57
49
|
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
# Raise an error on page load if there are pending migrations.
|
|
51
|
+
config.active_record.migration_error = :page_load
|
|
60
52
|
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
# Highlight code that triggered database queries in logs.
|
|
54
|
+
config.active_record.verbose_query_logs = true
|
|
63
55
|
|
|
64
|
-
|
|
65
|
-
|
|
56
|
+
# Append comments with runtime information tags to SQL queries in logs.
|
|
57
|
+
config.active_record.query_log_tags_enabled = true
|
|
66
58
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
|
|
59
|
+
# Highlight code that enqueued background job in logs.
|
|
60
|
+
config.active_job.verbose_enqueue_logs = true
|
|
70
61
|
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
# Highlight code that triggered redirect in logs.
|
|
63
|
+
config.action_dispatch.verbose_redirect_logs = true
|
|
64
|
+
|
|
65
|
+
# Raises error for missing translations.
|
|
66
|
+
# config.i18n.raise_on_missing_translations = true
|
|
67
|
+
|
|
68
|
+
# Annotate rendered view with file names.
|
|
69
|
+
config.action_view.annotate_rendered_view_with_filenames = true
|
|
70
|
+
|
|
71
|
+
# Uncomment if you wish to allow Action Cable access from any origin.
|
|
72
|
+
# config.action_cable.disable_request_forgery_protection = true
|
|
73
|
+
|
|
74
|
+
# Raise error when a before_action's only/except options reference missing actions.
|
|
75
|
+
config.action_controller.raise_on_missing_callback_actions = true
|
|
76
|
+
end
|
|
77
|
+
end
|
|
73
78
|
end
|
|
74
79
|
end
|