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.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/Gemfile +9 -16
  4. data/Gemfile.lock +313 -257
  5. data/README.md +1 -1
  6. data/app/aides/entity_logger.rb +27 -0
  7. data/app/aides/maker.rb +1 -1
  8. data/app/aides/origin.rb +1 -1
  9. data/app/aides/{rdfapi.rb → rdf_api.rb} +1 -1
  10. data/app/aides/skos_importer.rb +1 -1
  11. data/app/assets/javascripts/iqvoc/iqvoc.js +4 -3
  12. data/app/assets/javascripts/iqvoc/treeview.js +3 -3
  13. data/app/assets/stylesheets/_framework.scss +1 -1
  14. data/app/controllers/collections/alphabetical_controller.rb +75 -0
  15. data/app/controllers/collections/expired_controller.rb +37 -0
  16. data/app/controllers/collections_controller.rb +22 -28
  17. data/app/controllers/concepts/alphabetical_controller.rb +4 -6
  18. data/app/controllers/concepts/expired_controller.rb +1 -1
  19. data/app/controllers/concepts/hierarchical_controller.rb +18 -15
  20. data/app/controllers/concepts_controller.rb +0 -3
  21. data/app/controllers/concepts_movement_controller.rb +1 -1
  22. data/app/controllers/concerns/controller_extensions.rb +15 -0
  23. data/app/controllers/dashboard_controller.rb +1 -1
  24. data/app/controllers/exports_controller.rb +17 -8
  25. data/app/controllers/rdf_controller.rb +0 -2
  26. data/app/controllers/remote_labels_controller.rb +0 -2
  27. data/app/controllers/search_results_controller.rb +59 -43
  28. data/app/helpers/concepts_helper.rb +2 -2
  29. data/app/helpers/navigation_helper.rb +7 -7
  30. data/app/helpers/rdf_helper.rb +2 -0
  31. data/app/jobs/export_job.rb +4 -7
  32. data/app/models/collection/base.rb +6 -8
  33. data/app/models/collection/member/skos/base.rb +2 -2
  34. data/app/models/collection/skos/base.rb +1 -1
  35. data/app/models/collection/skos/unordered.rb +1 -1
  36. data/app/models/collection/unordered.rb +2 -2
  37. data/app/models/concept/base.rb +2 -10
  38. data/app/models/concept/relation/base.rb +1 -1
  39. data/app/models/concept/relation/skos/base.rb +2 -2
  40. data/app/models/concept/relation/skos/broader/base.rb +2 -2
  41. data/app/models/concept/relation/skos/broader/mono.rb +1 -1
  42. data/app/models/concept/relation/skos/broader/poly.rb +1 -1
  43. data/app/models/concept/relation/skos/narrower/base.rb +1 -1
  44. data/app/models/concept/relation/skos/related.rb +1 -1
  45. data/app/models/concept/skos/base.rb +1 -1
  46. data/app/models/concept/skos/scheme.rb +2 -2
  47. data/app/models/concept/validations.rb +14 -0
  48. data/app/models/concerns/expirable.rb +14 -0
  49. data/app/models/export.rb +21 -9
  50. data/app/models/label/base.rb +19 -1
  51. data/app/models/label/skos/base.rb +1 -1
  52. data/app/models/labeling/base.rb +12 -0
  53. data/app/models/labeling/skos/alt_label.rb +1 -1
  54. data/app/models/labeling/skos/base.rb +4 -4
  55. data/app/models/labeling/skos/hidden_label.rb +1 -1
  56. data/app/models/labeling/skos/pref_label.rb +1 -1
  57. data/app/models/match/skos/base.rb +3 -3
  58. data/app/models/match/skos/broad_match.rb +2 -2
  59. data/app/models/match/skos/close_match.rb +1 -1
  60. data/app/models/match/skos/exact_match.rb +1 -1
  61. data/app/models/match/skos/mapping_relation.rb +1 -1
  62. data/app/models/match/skos/narrow_match.rb +2 -2
  63. data/app/models/match/skos/related_match.rb +1 -1
  64. data/app/models/note/base.rb +2 -2
  65. data/app/models/note/rdfs/see_also.rb +1 -1
  66. data/app/models/note/skos/base.rb +4 -4
  67. data/app/models/note/skos/change_note.rb +2 -2
  68. data/app/models/note/skos/definition.rb +1 -1
  69. data/app/models/note/skos/editorial_note.rb +1 -1
  70. data/app/models/note/skos/example.rb +1 -1
  71. data/app/models/note/skos/history_note.rb +1 -1
  72. data/app/models/note/skos/scope_note.rb +1 -1
  73. data/app/presenters/alphabetical_search_result.rb +2 -2
  74. data/app/services/rdf_sync_service.rb +1 -1
  75. data/app/uploaders/base.rb +4 -3
  76. data/app/view_models/concept_view.rb +1 -1
  77. data/app/views/collections/_data.html.erb +1 -1
  78. data/app/views/collections/_form.html.erb +14 -2
  79. data/app/views/collections/alphabetical/_search_result.html.erb +17 -0
  80. data/app/views/collections/alphabetical/_search_result_remote.html.erb +14 -0
  81. data/app/views/collections/alphabetical/index.html.erb +23 -0
  82. data/app/views/collections/edit.html.erb +1 -1
  83. data/app/views/collections/expired/index.html.erb +23 -0
  84. data/app/views/collections/index.html.erb +1 -1
  85. data/app/views/collections/new.html.erb +1 -1
  86. data/app/views/collections/show_published.html.erb +1 -1
  87. data/app/views/collections/show_unpublished.html.erb +1 -1
  88. data/app/views/collections/sidebars/_plural.html.erb +28 -0
  89. data/app/views/collections/sidebars/_singular.html.erb +22 -0
  90. data/app/views/concepts/_form.html.erb +1 -1
  91. data/app/views/concepts/alphabetical/index.html.erb +1 -1
  92. data/app/views/concepts/expired/index.html.erb +1 -1
  93. data/app/views/concepts/glance.html.erb +1 -1
  94. data/app/views/concepts/scheme/edit.html.erb +1 -1
  95. data/app/views/concepts/sidebars/_plural.html.erb +1 -1
  96. data/app/views/concepts/sidebars/_singular.html.erb +1 -1
  97. data/app/views/dashboard/glance.html.erb +1 -1
  98. data/app/views/exports/index.html.erb +5 -1
  99. data/app/views/exports/show.html.erb +1 -1
  100. data/app/views/partials/collection/_inline_base.html.erb +4 -0
  101. data/app/views/search_results/_sidebar.html.erb +1 -1
  102. data/config/application.rb +7 -2
  103. data/config/ci.rb +20 -0
  104. data/config/database.yml +15 -21
  105. data/config/database.yml.postgresql +13 -20
  106. data/config/engine.rb +1 -0
  107. data/config/environments/development.rb +1 -1
  108. data/config/environments/production.rb +1 -1
  109. data/config/environments/test.rb +1 -1
  110. data/config/initializers/content_security_policy.rb +6 -2
  111. data/config/initializers/filter_parameter_logging.rb +4 -4
  112. data/config/initializers/new_framework_defaults_7_1.rb +280 -0
  113. data/config/initializers/new_framework_defaults_8_0.rb +30 -0
  114. data/config/initializers/new_framework_defaults_8_1.rb +74 -0
  115. data/config/initializers/permissions_policy.rb +11 -9
  116. data/config/initializers/zeitwerk.rb +1 -3
  117. data/config/locales/de.yml +4 -1
  118. data/config/locales/en.yml +4 -1
  119. data/config/locales/pt.yml +2 -1
  120. data/config/puma.rb +34 -35
  121. data/config/routes.rb +3 -1
  122. data/db/migrate/20110510162719_use_mono_hierarchy_instead_of_poly_hierarchy.rb +2 -2
  123. data/db/migrate/20130227145825_fix_collection_type.rb +3 -3
  124. data/db/migrate/20130502151221_fix_collection_member_types.rb +1 -1
  125. data/db/migrate/20250218160045_adapt_zeitwerk_naming_to_iqvoc.rb +25 -0
  126. data/db/migrate/20250326182601_adapt_zeitwerk_skos_naming_to_instance_configuration.rb +11 -0
  127. data/db/schema.rb +100 -1
  128. data/iqvoc.gemspec +4 -4
  129. data/lib/iqvoc/configuration/collection.rb +16 -4
  130. data/lib/iqvoc/configuration/concept.rb +22 -18
  131. data/lib/iqvoc/configuration/core.rb +9 -23
  132. data/lib/iqvoc/configuration/label.rb +1 -1
  133. data/lib/iqvoc/environments/development.rb +62 -57
  134. data/lib/iqvoc/environments/production.rb +70 -67
  135. data/lib/iqvoc/environments/test.rb +44 -38
  136. data/lib/iqvoc/version.rb +1 -1
  137. data/test/controllers/concepts_movement_controller_test.rb +14 -14
  138. data/test/controllers/hierarchy_test.rb +0 -1
  139. data/test/controllers/reverse_match_test.rb +6 -6
  140. data/test/integration/alphabetical_test.rb +5 -5
  141. data/test/integration/browse_concepts_and_labels_test.rb +4 -4
  142. data/test/integration/client_edit_concept_test.rb +1 -1
  143. data/test/integration/collection_browsing_test.rb +2 -2
  144. data/test/integration/collection_circularity_test.rb +10 -10
  145. data/test/integration/collection_test.rb +79 -0
  146. data/test/integration/concept_browsing_test.rb +3 -3
  147. data/test/integration/concept_collection_assignment_test.rb +4 -4
  148. data/test/integration/concept_scheme_browsing_test.rb +7 -7
  149. data/test/integration/edit_collections_test.rb +1 -1
  150. data/test/integration/edit_concepts_test.rb +2 -2
  151. data/test/integration/instance_configuration_browsing_test.rb +1 -1
  152. data/test/integration/note_annotations_test.rb +2 -2
  153. data/test/integration/reverse_match_job_test.rb +9 -9
  154. data/test/integration/search_test.rb +20 -10
  155. data/test/integration/tree_test.rb +5 -5
  156. data/test/integration/untranslated_test.rb +2 -2
  157. data/test/integration_test_helper.rb +7 -0
  158. data/test/models/concept_scheme_test.rb +6 -6
  159. data/test/models/concept_test.rb +38 -38
  160. data/test/models/deep_cloning_test.rb +6 -6
  161. data/test/models/note_test.rb +4 -4
  162. data/test/models/rdf_sync_test.rb +1 -1
  163. data/test/models/rdfapi_test.rb +24 -24
  164. data/test/models/skos_collection_import_test.rb +3 -3
  165. data/test/models/skos_import_test.rb +4 -4
  166. metadata +44 -32
  167. data/app/views/collections/_sidebar.html.erb +0 -20
  168. data/config/environments/heroku.rb +0 -81
  169. data/config/initializers/heroku.rb +0 -24
  170. data/config/secrets.yml +0 -35
  171. /data/{app/helpers → lib}/iqvoc_module_helper.rb +0 -0
  172. /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::SKOS::Unordered' WHERE type='Collection::Unordered'"
4
- execute "UPDATE collection_members SET type='Collection::Member::SKOS::Base' WHERE type='Collection::Member::Concept'"
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::SKOS::Unordered'"
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::SKOS::Base' WHERE type = 'Collection::Member::Collection'"
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.0].define(version: 2023_10_12_135837) do
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', '~> 7.0.8'
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 'net-http'
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::SKOS::Unordered'
14
+ self.base_class_name = 'Collection::Skos::Unordered'
15
+ self.member_class_name = 'Collection::Member::Skos::Base'
14
16
 
15
- self.member_class_name = 'Collection::Member::SKOS::Base'
17
+ self.note_class_names = [ 'Note::Skos::Definition' ]
16
18
 
17
- self.note_class_names = [ 'Note::SKOS::Definition' ]
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::SKOS::Base'
24
- self.root_class_name = 'Concept::SKOS::Scheme'
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::SKOS::Broader::Mono'
27
- self.further_relation_class_names = [ 'Concept::Relation::SKOS::Related' ]
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::SKOS::PrefLabel'
30
- self.alt_labeling_class_name = 'Labeling::SKOS::AltLabel'
31
- self.hidden_labeling_class_name = 'Labeling::SKOS::HiddenLabel'
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::SKOS::Definition',
36
- 'Note::SKOS::EditorialNote',
37
- 'Note::SKOS::Example',
38
- 'Note::SKOS::HistoryNote',
39
- 'Note::SKOS::ScopeNote'
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::SKOS::CloseMatch',
44
- 'Match::SKOS::ExactMatch',
45
- 'Match::SKOS::RelatedMatch',
46
- 'Match::SKOS::BroadMatch',
47
- 'Match::SKOS::NarrowMatch',
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::SKOS::AltLabel" => ["de", "en"] }
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::SKOS::Base' => 'labels',
87
- 'Labeling::SKOS::PrefLabel' => 'pref_labels',
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::SKOS::ChangeNote'
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' => ['en', 'de'],
142
- 'languages.further_labelings.Labeling::SKOS::AltLabel' => ['en', 'de'],
143
- 'languages.notes' => ['en', 'de'],
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
@@ -7,7 +7,7 @@ module Iqvoc
7
7
 
8
8
  included do
9
9
  mattr_accessor :base_class_name
10
- self.base_class_name = 'Label::SKOS::Base'
10
+ self.base_class_name = 'Label::Skos::Base'
11
11
  end
12
12
 
13
13
  module ClassMethods
@@ -1,74 +1,79 @@
1
1
  require "active_support/core_ext/integer/time"
2
2
  require 'iqvoc'
3
3
 
4
- module Iqvoc::Environments
5
- def self.setup_development(config)
6
- # Settings specified here will take precedence over those in config/application.rb.
7
-
8
- # In the development environment your application's code is reloaded any time
9
- # it changes. This slows down response time but is perfect for development
10
- # since you don't have to restart the web server when you make code changes.
11
- config.cache_classes = false
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
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
- # Store uploaded files on the local file system (see config/storage.yml for options).
39
- config.active_storage.service = :local
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
- # Don't care if the mailer can't send.
42
- config.action_mailer.raise_delivery_errors = false
32
+ # Change to :null_store to avoid any caching.
33
+ config.cache_store = :memory_store
43
34
 
44
- config.action_mailer.perform_caching = false
35
+ # Store uploaded files on the local file system (see config/storage.yml for options).
36
+ # config.active_storage.service = :local
45
37
 
46
- # Print deprecation notices to the Rails logger.
47
- config.active_support.deprecation = :log
38
+ # Don't care if the mailer can't send.
39
+ config.action_mailer.raise_delivery_errors = false
48
40
 
49
- # Raise exceptions for disallowed deprecations.
50
- config.active_support.disallowed_deprecation = :raise
41
+ # Make template changes take effect immediately.
42
+ config.action_mailer.perform_caching = false
51
43
 
52
- # Tell Active Support which deprecation messages to disallow.
53
- config.active_support.disallowed_deprecation_warnings = []
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
- # Raise an error on page load if there are pending migrations.
56
- config.active_record.migration_error = :page_load
47
+ # Print deprecation notices to the Rails logger.
48
+ config.active_support.deprecation = :log
57
49
 
58
- # Highlight code that triggered database queries in logs.
59
- config.active_record.verbose_query_logs = true
50
+ # Raise an error on page load if there are pending migrations.
51
+ config.active_record.migration_error = :page_load
60
52
 
61
- # Raises error for missing translations.
62
- config.i18n.raise_on_missing_translations = true
53
+ # Highlight code that triggered database queries in logs.
54
+ config.active_record.verbose_query_logs = true
63
55
 
64
- # Annotate rendered view with file names.
65
- config.action_view.annotate_rendered_view_with_filenames = true
56
+ # Append comments with runtime information tags to SQL queries in logs.
57
+ config.active_record.query_log_tags_enabled = true
66
58
 
67
- # Use an evented file watcher to asynchronously detect changes in source code,
68
- # routes, locales, etc. This feature depends on the listen gem.
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
- # Uncomment if you wish to allow Action Cable access from any origin.
72
- # config.action_cable.disable_request_forgery_protection = true
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