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
@@ -19,6 +19,6 @@ require 'iqvoc/environments/development'
19
19
  if Iqvoc.const_defined?(:Application)
20
20
  Iqvoc::Application.configure do
21
21
  # Settings specified here will take precedence over those in config/environment.rb
22
- Iqvoc::Environments.setup_development(config)
22
+ Iqvoc::Environments::Development.setup(config)
23
23
  end
24
24
  end
@@ -19,6 +19,6 @@ require 'iqvoc/environments/production'
19
19
  if Iqvoc.const_defined?(:Application)
20
20
  Iqvoc::Application.configure do
21
21
  # Settings specified here will take precedence over those in config/environment.rb
22
- Iqvoc::Environments.setup_production(config)
22
+ Iqvoc::Environments::Production.setup(config)
23
23
  end
24
24
  end
@@ -19,6 +19,6 @@ require 'iqvoc/environments/test'
19
19
  if Iqvoc.const_defined?(:Application)
20
20
  Iqvoc::Application.configure do
21
21
  # Settings specified here will take precedence over those in config/environment.rb
22
- Iqvoc::Environments.setup_test(config)
22
+ Iqvoc::Environments::Test.setup(config)
23
23
  end
24
24
  end
@@ -16,9 +16,13 @@
16
16
  # # policy.report_uri "/csp-violation-report-endpoint"
17
17
  # end
18
18
  #
19
- # # Generate session nonces for permitted importmap and inline scripts
19
+ # # Generate session nonces for permitted importmap, inline scripts, and inline styles.
20
20
  # config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
21
- # config.content_security_policy_nonce_directives = %w(script-src)
21
+ # config.content_security_policy_nonce_directives = %w(script-src style-src)
22
+ #
23
+ # # Automatically add `nonce` to `javascript_tag`, `javascript_include_tag`, and `stylesheet_link_tag`
24
+ # # if the corresponding directives are specified in `content_security_policy_nonce_directives`.
25
+ # # config.content_security_policy_nonce_auto = true
22
26
  #
23
27
  # # Report violations without enforcing the policy.
24
28
  # # config.content_security_policy_report_only = true
@@ -1,8 +1,8 @@
1
1
  # Be sure to restart your server when you modify this file.
2
2
 
3
- # Configure parameters to be filtered from the log file. Use this to limit dissemination of
4
- # sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
5
- # notations and behaviors.
3
+ # Configure parameters to be partially matched (e.g. passw matches password) and filtered from the log file.
4
+ # Use this to limit dissemination of sensitive information.
5
+ # See the ActiveSupport::ParameterFilter documentation for supported notations and behaviors.
6
6
  Rails.application.config.filter_parameters += [
7
- :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
7
+ :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn, :cvv, :cvc
8
8
  ]
@@ -0,0 +1,280 @@
1
+ # Be sure to restart your server when you modify this file.
2
+ #
3
+ # This file eases your Rails 7.1 framework defaults upgrade.
4
+ #
5
+ # Uncomment each configuration one by one to switch to the new default.
6
+ # Once your application is ready to run with all new defaults, you can remove
7
+ # this file and set the `config.load_defaults` to `7.1`.
8
+ #
9
+ # Read the Guide for Upgrading Ruby on Rails for more info on each option.
10
+ # https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
11
+
12
+ ###
13
+ # No longer add autoloaded paths into `$LOAD_PATH`. This means that you won't be able
14
+ # to manually require files that are managed by the autoloader, which you shouldn't do anyway.
15
+ #
16
+ # This will reduce the size of the load path, making `require` faster if you don't use bootsnap, or reduce the size
17
+ # of the bootsnap cache if you use it.
18
+ #
19
+ # To set this configuration, add the following line to `config/application.rb` (NOT this file):
20
+ # config.add_autoload_paths_to_load_path = false
21
+
22
+ ###
23
+ # Remove the default X-Download-Options headers since it is used only by Internet Explorer.
24
+ # If you need to support Internet Explorer, add back `"X-Download-Options" => "noopen"`.
25
+ #++
26
+ # Rails.application.config.action_dispatch.default_headers = {
27
+ # "X-Frame-Options" => "SAMEORIGIN",
28
+ # "X-XSS-Protection" => "0",
29
+ # "X-Content-Type-Options" => "nosniff",
30
+ # "X-Permitted-Cross-Domain-Policies" => "none",
31
+ # "Referrer-Policy" => "strict-origin-when-cross-origin"
32
+ # }
33
+
34
+ ###
35
+ # Do not treat an `ActionController::Parameters` instance
36
+ # as equal to an equivalent `Hash` by default.
37
+ #++
38
+ # Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality = false
39
+
40
+ ###
41
+ # Active Record Encryption now uses SHA-256 as its hash digest algorithm.
42
+ #
43
+ # There are 3 scenarios to consider.
44
+ #
45
+ # 1. If you have data encrypted with previous Rails versions, and you have
46
+ # +config.active_support.key_generator_hash_digest_class+ configured as SHA1 (the default
47
+ # before Rails 7.0), you need to configure SHA-1 for Active Record Encryption too:
48
+ #++
49
+ # Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA1
50
+ #
51
+ # 2. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA256 (the new default
52
+ # in 7.0), then you need to configure SHA-256 for Active Record Encryption:
53
+ #++
54
+ # Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA256
55
+ #
56
+ # 3. If you don't currently have data encrypted with Active Record encryption, you can disable this setting to
57
+ # configure the default behavior starting 7.1+:
58
+ #++
59
+ # Rails.application.config.active_record.encryption.support_sha1_for_non_deterministic_encryption = false
60
+
61
+ ###
62
+ # No longer run after_commit callbacks on the first of multiple Active Record
63
+ # instances to save changes to the same database row within a transaction.
64
+ # Instead, run these callbacks on the instance most likely to have internal
65
+ # state which matches what was committed to the database, typically the last
66
+ # instance to save.
67
+ #++
68
+ # Rails.application.config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = false
69
+
70
+ ###
71
+ # Configures SQLite with a strict strings mode, which disables double-quoted string literals.
72
+ #
73
+ # SQLite has some quirks around double-quoted string literals.
74
+ # It first tries to consider double-quoted strings as identifier names, but if they don't exist
75
+ # it then considers them as string literals. Because of this, typos can silently go unnoticed.
76
+ # For example, it is possible to create an index for a non existing column.
77
+ # See https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted for more details.
78
+ #++
79
+ # Rails.application.config.active_record.sqlite3_adapter_strict_strings_by_default = true
80
+
81
+ ###
82
+ # Disable deprecated singular associations names.
83
+ #++
84
+ # Rails.application.config.active_record.allow_deprecated_singular_associations_name = false
85
+
86
+ ###
87
+ # Enable the Active Job `BigDecimal` argument serializer, which guarantees
88
+ # roundtripping. Without this serializer, some queue adapters may serialize
89
+ # `BigDecimal` arguments as simple (non-roundtrippable) strings.
90
+ #
91
+ # When deploying an application with multiple replicas, old (pre-Rails 7.1)
92
+ # replicas will not be able to deserialize `BigDecimal` arguments from this
93
+ # serializer. Therefore, this setting should only be enabled after all replicas
94
+ # have been successfully upgraded to Rails 7.1.
95
+ #++
96
+ # Rails.application.config.active_job.use_big_decimal_serializer = true
97
+
98
+ ###
99
+ # Specify if an `ArgumentError` should be raised if `Rails.cache` `fetch` or
100
+ # `write` are given an invalid `expires_at` or `expires_in` time.
101
+ # Options are `true`, and `false`. If `false`, the exception will be reported
102
+ # as `handled` and logged instead.
103
+ #++
104
+ # Rails.application.config.active_support.raise_on_invalid_cache_expiration_time = true
105
+
106
+ ###
107
+ # Specify whether Query Logs will format tags using the SQLCommenter format
108
+ # (https://open-telemetry.github.io/opentelemetry-sqlcommenter/), or using the legacy format.
109
+ # Options are `:legacy` and `:sqlcommenter`.
110
+ #++
111
+ # Rails.application.config.active_record.query_log_tags_format = :sqlcommenter
112
+
113
+ ###
114
+ # Specify the default serializer used by `MessageEncryptor` and `MessageVerifier`
115
+ # instances.
116
+ #
117
+ # The legacy default is `:marshal`, which is a potential vector for
118
+ # deserialization attacks in cases where a message signing secret has been
119
+ # leaked.
120
+ #
121
+ # In Rails 7.1, the new default is `:json_allow_marshal` which serializes and
122
+ # deserializes with `ActiveSupport::JSON`, but can fall back to deserializing
123
+ # with `Marshal` so that legacy messages can still be read.
124
+ #
125
+ # In Rails 7.2, the default will become `:json` which serializes and
126
+ # deserializes with `ActiveSupport::JSON` only.
127
+ #
128
+ # Alternatively, you can choose `:message_pack` or `:message_pack_allow_marshal`,
129
+ # which serialize with `ActiveSupport::MessagePack`. `ActiveSupport::MessagePack`
130
+ # can roundtrip some Ruby types that are not supported by JSON, and may provide
131
+ # improved performance, but it requires the `msgpack` gem.
132
+ #
133
+ # For more information, see
134
+ # https://guides.rubyonrails.org/v7.1/configuring.html#config-active-support-message-serializer
135
+ #
136
+ # If you are performing a rolling deploy of a Rails 7.1 upgrade, wherein servers
137
+ # that have not yet been upgraded must be able to read messages from upgraded
138
+ # servers, first deploy without changing the serializer, then set the serializer
139
+ # in a subsequent deploy.
140
+ #++
141
+ # Rails.application.config.active_support.message_serializer = :json_allow_marshal
142
+
143
+ ###
144
+ # Enable a performance optimization that serializes message data and metadata
145
+ # together. This changes the message format, so messages serialized this way
146
+ # cannot be read by older versions of Rails. However, messages that use the old
147
+ # format can still be read, regardless of whether this optimization is enabled.
148
+ #
149
+ # To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
150
+ # not yet been upgraded must be able to read messages from upgraded servers,
151
+ # leave this optimization off on the first deploy, then enable it on a
152
+ # subsequent deploy.
153
+ #++
154
+ # Rails.application.config.active_support.use_message_serializer_for_metadata = true
155
+
156
+ ###
157
+ # Set the maximum size for Rails log files.
158
+ #
159
+ # `config.load_defaults 7.1` does not set this value for environments other than
160
+ # development and test.
161
+ #++
162
+ # if Rails.env.local?
163
+ # Rails.application.config.log_file_size = 100 * 1024 * 1024
164
+ # end
165
+
166
+ ###
167
+ # Enable raising on assignment to attr_readonly attributes. The previous
168
+ # behavior would allow assignment but silently not persist changes to the
169
+ # database.
170
+ #++
171
+ # Rails.application.config.active_record.raise_on_assign_to_attr_readonly = true
172
+
173
+ ###
174
+ # Enable validating only parent-related columns for presence when the parent is mandatory.
175
+ # The previous behavior was to validate the presence of the parent record, which performed an extra query
176
+ # to get the parent every time the child record was updated, even when parent has not changed.
177
+ #++
178
+ # Rails.application.config.active_record.belongs_to_required_validates_foreign_key = false
179
+
180
+ ###
181
+ # Enable precompilation of `config.filter_parameters`. Precompilation can
182
+ # improve filtering performance, depending on the quantity and types of filters.
183
+ #++
184
+ # Rails.application.config.precompile_filter_parameters = true
185
+
186
+ ###
187
+ # Enable before_committed! callbacks on all enrolled records in a transaction.
188
+ # The previous behavior was to only run the callbacks on the first copy of a record
189
+ # if there were multiple copies of the same record enrolled in the transaction.
190
+ #++
191
+ # Rails.application.config.active_record.before_committed_on_all_records = true
192
+
193
+ ###
194
+ # Disable automatic column serialization into YAML.
195
+ # To keep the historic behavior, you can set it to `YAML`, however it is
196
+ # recommended to explicitly define the serialization method for each column
197
+ # rather than to rely on a global default.
198
+ #++
199
+ # Rails.application.config.active_record.default_column_serializer = nil
200
+
201
+ ###
202
+ # Enable a performance optimization that serializes Active Record models
203
+ # in a faster and more compact way.
204
+ #
205
+ # To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
206
+ # not yet been upgraded must be able to read caches from upgraded servers,
207
+ # leave this optimization off on the first deploy, then enable it on a
208
+ # subsequent deploy.
209
+ #++
210
+ # Rails.application.config.active_record.marshalling_format_version = 7.1
211
+
212
+ ###
213
+ # Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.
214
+ # This matches the behaviour of all other callbacks.
215
+ # In previous versions of Rails, they ran in the inverse order.
216
+ #++
217
+ # Rails.application.config.active_record.run_after_transaction_callbacks_in_order_defined = true
218
+
219
+ ###
220
+ # Whether a `transaction` block is committed or rolled back when exited via `return`, `break` or `throw`.
221
+ #++
222
+ # Rails.application.config.active_record.commit_transaction_on_non_local_return = true
223
+
224
+ ###
225
+ # Controls when to generate a value for <tt>has_secure_token</tt> declarations.
226
+ #++
227
+ # Rails.application.config.active_record.generate_secure_token_on = :initialize
228
+
229
+ ###
230
+ # ** Please read carefully, this must be configured in config/application.rb **
231
+ #
232
+ # Change the format of the cache entry.
233
+ #
234
+ # Changing this default means that all new cache entries added to the cache
235
+ # will have a different format that is not supported by Rails 7.0
236
+ # applications.
237
+ #
238
+ # Only change this value after your application is fully deployed to Rails 7.1
239
+ # and you have no plans to rollback.
240
+ # When you're ready to change format, add this to `config/application.rb` (NOT
241
+ # this file):
242
+ # config.active_support.cache_format_version = 7.1
243
+
244
+ ###
245
+ # Configure Action View to use HTML5 standards-compliant sanitizers when they are supported on your
246
+ # platform.
247
+ #
248
+ # `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action View to use HTML5-compliant
249
+ # sanitizers if they are supported, else fall back to HTML4 sanitizers.
250
+ #
251
+ # In previous versions of Rails, Action View always used `Rails::HTML4::Sanitizer` as its vendor.
252
+ #++
253
+ # Rails.application.config.action_view.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
254
+
255
+ ###
256
+ # Configure Action Text to use an HTML5 standards-compliant sanitizer when it is supported on your
257
+ # platform.
258
+ #
259
+ # `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action Text to use HTML5-compliant
260
+ # sanitizers if they are supported, else fall back to HTML4 sanitizers.
261
+ #
262
+ # In previous versions of Rails, Action Text always used `Rails::HTML4::Sanitizer` as its vendor.
263
+ #++
264
+ # Rails.application.config.action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
265
+
266
+ ###
267
+ # Configure the log level used by the DebugExceptions middleware when logging
268
+ # uncaught exceptions during requests.
269
+ #++
270
+ # Rails.application.config.action_dispatch.debug_exception_log_level = :error
271
+
272
+ ###
273
+ # Configure the test helpers in Action View, Action Dispatch, and rails-dom-testing to use HTML5
274
+ # parsers.
275
+ #
276
+ # Nokogiri::HTML5 isn't supported on JRuby, so JRuby applications must set this to :html4.
277
+ #
278
+ # In previous versions of Rails, these test helpers always used an HTML4 parser.
279
+ #++
280
+ # Rails.application.config.dom_testing_default_html_version = :html5
@@ -0,0 +1,30 @@
1
+ # Be sure to restart your server when you modify this file.
2
+ #
3
+ # This file eases your Rails 8.0 framework defaults upgrade.
4
+ #
5
+ # Uncomment each configuration one by one to switch to the new default.
6
+ # Once your application is ready to run with all new defaults, you can remove
7
+ # this file and set the `config.load_defaults` to `8.0`.
8
+ #
9
+ # Read the Guide for Upgrading Ruby on Rails for more info on each option.
10
+ # https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
11
+
12
+ ###
13
+ # Specifies whether `to_time` methods preserve the UTC offset of their receivers or preserves the timezone.
14
+ # If set to `:zone`, `to_time` methods will use the timezone of their receivers.
15
+ # If set to `:offset`, `to_time` methods will use the UTC offset.
16
+ # If `false`, `to_time` methods will convert to the local system UTC offset instead.
17
+ #++
18
+ # Rails.application.config.active_support.to_time_preserves_timezone = :zone
19
+
20
+ ###
21
+ # When both `If-Modified-Since` and `If-None-Match` are provided by the client
22
+ # only consider `If-None-Match` as specified by RFC 7232 Section 6.
23
+ # If set to `false` both conditions need to be satisfied.
24
+ #++
25
+ # Rails.application.config.action_dispatch.strict_freshness = true
26
+
27
+ ###
28
+ # Set `Regexp.timeout` to `1`s by default to improve security over Regexp Denial-of-Service attacks.
29
+ #++
30
+ # Regexp.timeout = 1
@@ -0,0 +1,74 @@
1
+ # Be sure to restart your server when you modify this file.
2
+ #
3
+ # This file eases your Rails 8.1 framework defaults upgrade.
4
+ #
5
+ # Uncomment each configuration one by one to switch to the new default.
6
+ # Once your application is ready to run with all new defaults, you can remove
7
+ # this file and set the `config.load_defaults` to `8.1`.
8
+ #
9
+ # Read the Guide for Upgrading Ruby on Rails for more info on each option.
10
+ # https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
11
+
12
+ ###
13
+ # Skips escaping HTML entities and line separators. When set to `false`, the
14
+ # JSON renderer no longer escapes these to improve performance.
15
+ #
16
+ # Example:
17
+ # class PostsController < ApplicationController
18
+ # def index
19
+ # render json: { key: "\u2028\u2029<>&" }
20
+ # end
21
+ # end
22
+ #
23
+ # Renders `{"key":"\u2028\u2029\u003c\u003e\u0026"}` with the previous default, but `{"key":"

<>&"}` with the config
24
+ # set to `false`.
25
+ #
26
+ # Applications that want to keep the escaping behavior can set the config to `true`.
27
+ #++
28
+ # Rails.configuration.action_controller.escape_json_responses = false
29
+
30
+ ###
31
+ # Skips escaping LINE SEPARATOR (U+2028) and PARAGRAPH SEPARATOR (U+2029) in JSON.
32
+ #
33
+ # Historically these characters were not valid inside JavaScript literal strings but that changed in ECMAScript 2019.
34
+ # As such it's no longer a concern in modern browsers: https://caniuse.com/mdn-javascript_builtins_json_json_superset.
35
+ #++
36
+ # Rails.configuration.active_support.escape_js_separators_in_json = false
37
+
38
+ ###
39
+ # Raises an error when order dependent finder methods (e.g. `#first`, `#second`) are called without `order` values
40
+ # on the relation, and the model does not have any order columns (`implicit_order_column`, `query_constraints`, or
41
+ # `primary_key`) to fall back on.
42
+ #
43
+ # The current behavior of not raising an error has been deprecated, and this configuration option will be removed in
44
+ # Rails 8.2.
45
+ #++
46
+ # Rails.configuration.active_record.raise_on_missing_required_finder_order_columns = true
47
+
48
+ ###
49
+ # Controls how Rails handles path relative URL redirects.
50
+ # When set to `:raise`, Rails will raise an `ActionController::Redirecting::UnsafeRedirectError`
51
+ # for relative URLs without a leading slash, which can help prevent open redirect vulnerabilities.
52
+ #
53
+ # Example:
54
+ # redirect_to "example.com" # Raises UnsafeRedirectError
55
+ # redirect_to "@attacker.com" # Raises UnsafeRedirectError
56
+ # redirect_to "/safe/path" # Works correctly
57
+ #
58
+ # Applications that want to allow these redirects can set the config to `:log` (previous default)
59
+ # to only log warnings, or `:notify` to send ActiveSupport notifications.
60
+ #++
61
+ # Rails.configuration.action_controller.action_on_path_relative_redirect = :raise
62
+
63
+ ###
64
+ # Use a Ruby parser to track dependencies between Action View templates
65
+ #++
66
+ # Rails.configuration.action_view.render_tracker = :ruby
67
+
68
+ ###
69
+ # When enabled, hidden inputs generated by `form_tag`, `token_tag`, `method_tag`, and the hidden parameter fields
70
+ # included in `button_to` forms will omit the `autocomplete="off"` attribute.
71
+ #
72
+ # Applications that want to keep generating the `autocomplete` attribute for those tags can set it to `false`.
73
+ #++
74
+ # Rails.configuration.action_view.remove_hidden_field_autocomplete = true
@@ -1,11 +1,13 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
1
3
  # Define an application-wide HTTP permissions policy. For further
2
- # information see https://developers.google.com/web/updates/2018/06/feature-policy
3
- #
4
- # Rails.application.config.permissions_policy do |f|
5
- # f.camera :none
6
- # f.gyroscope :none
7
- # f.microphone :none
8
- # f.usb :none
9
- # f.fullscreen :self
10
- # f.payment :self, "https://secure.example.com"
4
+ # information see: https://developers.google.com/web/updates/2018/06/feature-policy
5
+
6
+ # Rails.application.config.permissions_policy do |policy|
7
+ # policy.camera :none
8
+ # policy.gyroscope :none
9
+ # policy.microphone :none
10
+ # policy.usb :none
11
+ # policy.fullscreen :self
12
+ # policy.payment :self, "https://secure.example.com"
11
13
  # end
@@ -1,6 +1,4 @@
1
1
  # FIXME: custom auto loading inflections due class naming inconsistencies with acronyms
2
2
  Rails.autoloaders.main.inflector.inflect(
3
- 'skos' => 'SKOS',
4
- 'rdfs' => 'RDFS',
5
- 'rdfapi' => 'RDFAPI'
3
+ 'version' => 'VERSION'
6
4
  )
@@ -117,7 +117,8 @@ de:
117
117
  languages_pref_labeling: Sprachen für bevorzugte Labels
118
118
  languages_notes: Sprachen für Notes
119
119
  languages_further_labelings_Labeling: Sprachen für alternative Labels
120
- languages_further_labelings_Labeling::SKOS::AltLabel: Sprachen für alternative Labels
120
+ languages_further_labelings_Labeling::Skos::AltLabel: Sprachen für alternative Labels
121
+ languages_further_labelings_Labeling::Skos::HiddenLabel: Sprachen für alternative Labels
121
122
  performance_unbounded_hierarchy: unbegrenzte Hierarchie-Tiefe
122
123
  triplestore_url: Triplestore-URL
123
124
  triplestore_username: Benutzername für Triplestore
@@ -341,6 +342,7 @@ de:
341
342
  error: "Es ist ein Fehler aufgetreten. Export-Job konnte nicht erstellt werden."
342
343
  missing_file: "Es ist ein Fehler aufgetreten. Export konnte nicht gefunden werden."
343
344
  output: "Log-Ausgabe"
345
+ delete_confirm: "Der Export wird entfernt. Sind Sie sicher?"
344
346
 
345
347
  partials:
346
348
  note:
@@ -459,6 +461,7 @@ de:
459
461
  pref_label_not_unique: "Das PrefLabel %{label} ist bereits in Verwendung."
460
462
  pref_labels_not_unique: "Die PrefLabels %{label} sind bereits in Verwendung."
461
463
  pref_label_defined_in_alt_labels: "Das AltLabel %{label} wird bereits als PrefLabel verwendet."
464
+ hidden_label_defined_in_other_labels: "Das HiddenLabel %{label} wird bereits als Pref- oder AltLabel verwendet."
462
465
  alt_labels_not_unique: "Das AltLabel %{label} wird zweimal als AltLabel verwendet."
463
466
  collection:
464
467
  uri: "Kollektion-URI"
@@ -117,7 +117,8 @@ en:
117
117
  languages_pref_labeling: Languages for preferred labels
118
118
  languages_notes: Languages for notes
119
119
  languages_further_labelings_Labeling: Languages for alternative labels
120
- languages_further_labelings_Labeling::SKOS::AltLabel: Languages for alternative labels
120
+ languages_further_labelings_Labeling::Skos::AltLabel: Languages for alternative labels
121
+ languages_further_labelings_Labeling::Skos::HiddenLabel: Languages for hidden labels
121
122
  performance_unbounded_hierarchy: Unlimited hierarchy depth
122
123
  triplestore_url: Triplestore URL
123
124
  triplestore_username: Username for triplestore
@@ -351,6 +352,7 @@ en:
351
352
  error: "Error occurred while creating Export job."
352
353
  missing_file: "An error occurred. Export could not be found."
353
354
  output: "log"
355
+ delete_confirm: "Are you sure you want to delete this export?"
354
356
 
355
357
  partials:
356
358
  note:
@@ -469,6 +471,7 @@ en:
469
471
  pref_label_not_unique: "The preferred label '%{label}' is already in use."
470
472
  pref_labels_not_unique: "The preferred labels '%{label}' are already in use."
471
473
  pref_label_defined_in_alt_labels: "The alternative label %{label} is already used as a preferred label."
474
+ hidden_label_defined_in_other_labels: "The hidden label %{label} is already used as a preferred or alternative label."
472
475
  alt_labels_not_unique: "The alternative label %{label} is used twice."
473
476
  collection:
474
477
  uri: "Collection URI"
@@ -94,7 +94,8 @@ pt:
94
94
  settings:
95
95
  title: "título do sítio"
96
96
  languages_pref_labeling: "idiomas para os rótulos preferenciais"
97
- languages_further_labelings_Labeling::SKOS::AltLabel: "idiomas para os rótulos alternativos"
97
+ languages_further_labelings_Labeling::Skos::AltLabel: "idiomas para os rótulos alternativos"
98
+ languages_further_labelings_Labeling::Skos::HiddenLabel: "idiomas para os etiquetas ocultas"
98
99
  triplestore_url: "URL do repositório de triplas"
99
100
  triplestore_username: "usuário do repositório de triplas"
100
101
  triplestore_password: "senha do repositório de triplas"
data/config/puma.rb CHANGED
@@ -1,43 +1,42 @@
1
- # Puma can serve each request in a thread from an internal thread pool.
2
- # The `threads` method setting takes two numbers: a minimum and maximum.
3
- # Any libraries that use thread pools should be configured to match
4
- # the maximum value specified for Puma. Default is set to 5 threads for minimum
5
- # and maximum; this matches the default thread size of Active Record.
1
+ # This configuration file will be evaluated by Puma. The top-level methods that
2
+ # are invoked here are part of Puma's configuration DSL. For more information
3
+ # about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html.
6
4
  #
7
- max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
8
- min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
9
- threads min_threads_count, max_threads_count
10
-
11
- # Specifies the `worker_timeout` threshold that Puma will use to wait before
12
- # terminating a worker in development environments.
5
+ # Puma starts a configurable number of processes (workers) and each process
6
+ # serves each request in a thread from an internal thread pool.
13
7
  #
14
- worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
15
-
16
- # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
8
+ # You can control the number of workers using ENV["WEB_CONCURRENCY"]. You
9
+ # should only set this value when you want to run 2 or more workers. The
10
+ # default is already 1. You can set it to `auto` to automatically start a worker
11
+ # for each available processor.
17
12
  #
18
- port ENV.fetch("PORT") { 3000 }
19
-
20
- # Specifies the `environment` that Puma will run in.
13
+ # The ideal number of threads per worker depends both on how much time the
14
+ # application spends waiting for IO operations and on how much you wish to
15
+ # prioritize throughput over latency.
21
16
  #
22
- environment ENV.fetch("RAILS_ENV") { "development" }
23
-
24
- # Specifies the `pidfile` that Puma will use.
25
- pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
26
-
27
- # Specifies the number of `workers` to boot in clustered mode.
28
- # Workers are forked web server processes. If using threads and workers together
29
- # the concurrency of the application would be max `threads` * `workers`.
30
- # Workers do not work on JRuby or Windows (both of which do not support
31
- # processes).
17
+ # As a rule of thumb, increasing the number of threads will increase how much
18
+ # traffic a given process can handle (throughput), but due to CRuby's
19
+ # Global VM Lock (GVL) it has diminishing returns and will degrade the
20
+ # response time (latency) of the application.
32
21
  #
33
- # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
34
-
35
- # Use the `preload_app!` method when specifying a `workers` number.
36
- # This directive tells Puma to first boot the application and load code
37
- # before forking the application. This takes advantage of Copy On Write
38
- # process behavior so workers use less memory.
22
+ # The default is set to 3 threads as it's deemed a decent compromise between
23
+ # throughput and latency for the average Rails application.
39
24
  #
40
- # preload_app!
25
+ # Any libraries that use a connection pool or another resource pool should
26
+ # be configured to provide at least as many connections as the number of
27
+ # threads. This includes Active Record's `pool` parameter in `database.yml`.
28
+ threads_count = ENV.fetch("RAILS_MAX_THREADS", 3)
29
+ threads threads_count, threads_count
30
+
31
+ # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
32
+ port ENV.fetch("PORT", 3000)
41
33
 
42
- # Allow puma to be restarted by `rails restart` command.
34
+ # Allow puma to be restarted by `bin/rails restart` command.
43
35
  plugin :tmp_restart
36
+
37
+ # Run the Solid Queue supervisor inside of Puma for single-server deployments.
38
+ plugin :solid_queue if ENV["SOLID_QUEUE_IN_PUMA"]
39
+
40
+ # Specify the PID file. Defaults to tmp/pids/server.pid in development.
41
+ # In other environments, only set the PID file if requested.
42
+ pidfile ENV["PIDFILE"] if ENV["PIDFILE"]
data/config/routes.rb CHANGED
@@ -35,7 +35,7 @@ Rails.application.routes.draw do
35
35
  end
36
36
  resources :collections
37
37
  resources :imports, only: [:index, :show, :create]
38
- resources :exports, only: [:index, :show, :create] do
38
+ resources :exports, only: [:index, :show, :create, :destroy] do
39
39
  get 'download'
40
40
  end
41
41
 
@@ -60,6 +60,8 @@ Rails.application.routes.draw do
60
60
  post 'collections/:origin/merge' => 'collections/versions#merge', as: 'collection_versions_merge'
61
61
  post 'collections/:origin/to_review' => 'collections/versions#to_review', as: 'collection_versions_to_review'
62
62
  get 'collections/:origin/consistency_check' => 'collections/versions#consistency_check', as: 'collection_versions_consistency_check'
63
+ get 'alphabetical_collections(/:prefix)' => 'collections/alphabetical#index', as: 'alphabetical_collections'
64
+ get 'expired_collections' => 'collections/expired#index', as: 'expired_collections'
63
65
 
64
66
  get 'alphabetical_concepts(/:prefix)' => 'concepts/alphabetical#index', as: 'alphabetical_concepts'
65
67
  get 'untranslated_concepts/:prefix' => 'concepts/untranslated#index', as: 'untranslated_concepts'
@@ -1,13 +1,13 @@
1
1
  class UseMonoHierarchyInsteadOfPolyHierarchy < ActiveRecord::Migration[4.2]
2
2
  def self.up
3
3
  ActiveRecord::Base.transaction do
4
- execute "UPDATE concept_relations SET type = 'Concept::Relation::SKOS::Broader::Mono' WHERE type = 'Concept::Relation::SKOS::Broader::Poly'"
4
+ execute "UPDATE concept_relations SET type = 'Concept::Relation::Skos::Broader::Mono' WHERE type = 'Concept::Relation::Skos::Broader::Poly'"
5
5
  end
6
6
  end
7
7
 
8
8
  def self.down
9
9
  ActiveRecord::Base.transaction do
10
- execute "UPDATE concept_relations SET type = 'Concept::Relation::SKOS::Broader::Poly' WHERE type = 'Concept::Relation::SKOS::Broader::Mono'"
10
+ execute "UPDATE concept_relations SET type = 'Concept::Relation::Skos::Broader::Poly' WHERE type = 'Concept::Relation::Skos::Broader::Mono'"
11
11
  end
12
12
  end
13
13
  end