iqvoc 3.4.0 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +5 -0
- data/Gemfile +5 -4
- data/Gemfile.lock +54 -27
- data/app/assets/javascripts/framework.js +0 -1
- data/app/assets/stylesheets/iqvoc/forms.css.erb +5 -1
- data/app/controllers/application_controller.rb +4 -107
- data/app/controllers/concepts/hierarchical_controller.rb +11 -12
- data/app/controllers/concepts/untranslated_controller.rb +1 -1
- data/app/controllers/instance_configuration_controller.rb +103 -0
- data/app/controllers/search_results_controller.rb +4 -3
- data/app/helpers/application_helper.rb +1 -1
- data/app/helpers/concepts_helper.rb +1 -1
- data/app/models/configuration_setting.rb +22 -0
- data/app/views/instance_configuration/index.html.erb +15 -0
- data/app/views/layouts/_controls.html.erb +3 -3
- data/app/views/layouts/_header.html.erb +1 -1
- data/app/views/layouts/_navigation.html.erb +6 -1
- data/app/views/layouts/application.html.erb +11 -4
- data/config/blazing.rb +36 -0
- data/config/database.yml +3 -16
- data/config/deploy.rb +1 -1
- data/config/engine.rb +8 -0
- data/config/environments/development.rb +2 -60
- data/config/environments/heroku.rb +1 -1
- data/config/environments/production.rb +2 -60
- data/config/environments/test.rb +2 -45
- data/config/initializers/iqvoc.rb +2 -12
- data/config/initializers/secret_token.rb +3 -1
- data/config/locales/de.yml +8 -0
- data/config/locales/en.yml +8 -0
- data/config/routes.rb +7 -1
- data/db/migrate/20120119000000_create_configuration_settings.rb +14 -0
- data/lib/debug.rb +4 -4
- data/lib/iqvoc.rb +11 -219
- data/lib/iqvoc/ability.rb +2 -1
- data/lib/iqvoc/configuration/collection.rb +22 -0
- data/lib/iqvoc/configuration/concept.rb +152 -0
- data/lib/iqvoc/configuration/core.rb +135 -0
- data/lib/iqvoc/configuration/label.rb +23 -0
- data/lib/iqvoc/controller_extensions.rb +115 -0
- data/lib/iqvoc/environments/development.rb +66 -0
- data/lib/iqvoc/environments/production.rb +64 -0
- data/lib/iqvoc/environments/test.rb +52 -0
- data/lib/iqvoc/instance_configuration.rb +122 -0
- data/lib/iqvoc/version.rb +1 -1
- data/public/assets/ajax-loader-5c1bf2208bffabddfb583013023b2b11.gif +0 -0
- data/public/assets/ajax-loader.gif +0 -0
- data/public/assets/arrow_down-e1f4aacd91274ce8d4db40d8b4ad781f.gif +0 -0
- data/public/assets/arrow_down.gif +0 -0
- data/public/assets/arrow_up-a48d7a55002e97f1b70e0e957edf3964.gif +0 -0
- data/public/assets/arrow_up.gif +0 -0
- data/public/assets/back-ffd41b7924770324ead91a4eb51604f6.png +0 -0
- data/public/assets/back.png +0 -0
- data/public/assets/blueprint/ie-d2ff4b1cc209dc6b08716b5e0098e106.css +36 -0
- data/public/assets/blueprint/ie-d2ff4b1cc209dc6b08716b5e0098e106.css.gz +0 -0
- data/public/assets/blueprint/ie.css +36 -0
- data/public/assets/blueprint/ie.css.gz +0 -0
- data/public/assets/blueprint/print-799a53ff649d9f14baf5f5fe643d04c4.css +30 -0
- data/public/assets/blueprint/print-799a53ff649d9f14baf5f5fe643d04c4.css.gz +0 -0
- data/public/assets/blueprint/print.css +30 -0
- data/public/assets/blueprint/print.css.gz +0 -0
- data/public/assets/blueprint/screen-d721f98ceac371a9294fc6f091ca1cb5.css +259 -0
- data/public/assets/blueprint/screen-d721f98ceac371a9294fc6f091ca1cb5.css.gz +0 -0
- data/public/assets/blueprint/screen.css +259 -0
- data/public/assets/blueprint/screen.css.gz +0 -0
- data/public/assets/branch-c950c8ac69ee2f753f86a75d944aa976.png +0 -0
- data/public/assets/branch.png +0 -0
- data/public/assets/categ-e1e1a5958017a5586456895785298c89.png +0 -0
- data/public/assets/categ.png +0 -0
- data/public/assets/categ_open-de616238db93a0645b4c4a2cdd4eece4.png +0 -0
- data/public/assets/categ_open.png +0 -0
- data/public/assets/excanvas-1f8c36f3578409126862b5c17e59b9bd.js +14 -0
- data/public/assets/excanvas-1f8c36f3578409126862b5c17e59b9bd.js.gz +0 -0
- data/public/assets/excanvas.js +14 -0
- data/public/assets/excanvas.js.gz +0 -0
- data/public/assets/file-48364459f087292aafa11168442bde71.gif +0 -0
- data/public/assets/file.gif +0 -0
- data/public/assets/folder-7e0f370ab3fcca5deab89784db42da4a.gif +0 -0
- data/public/assets/folder-closed-cb6c847cac4dea2cb59c98ecfc76b8ae.gif +0 -0
- data/public/assets/folder-closed.gif +0 -0
- data/public/assets/folder.gif +0 -0
- data/public/assets/footer-ea48e7e96122c8ab345da8ff67f29838.png +0 -0
- data/public/assets/footer.png +0 -0
- data/public/assets/go_there-ee7df641e73ef83e43180dbc07c40540.png +0 -0
- data/public/assets/go_there.png +0 -0
- data/public/assets/header_long-5c7970b5911f94433a696ae87918ecb0.png +0 -0
- data/public/assets/header_long.png +0 -0
- data/public/assets/iqvoc-ff2c5252d9877c38297164984d4a7a55.png +0 -0
- data/public/assets/iqvoc.png +0 -0
- data/public/assets/iqvoc/ie_fixes-7797396e9cd2f32961f56af18bacd33a.css +7 -0
- data/public/assets/iqvoc/ie_fixes-7797396e9cd2f32961f56af18bacd33a.css.gz +0 -0
- data/public/assets/iqvoc/ie_fixes.css +7 -0
- data/public/assets/iqvoc/ie_fixes.css.gz +0 -0
- data/public/assets/iqvoc/visualization-49b198ac7d8bc15fa13eafc528e96081.js +4 -0
- data/public/assets/iqvoc/visualization-49b198ac7d8bc15fa13eafc528e96081.js.gz +0 -0
- data/public/assets/iqvoc/visualization.js +4 -0
- data/public/assets/iqvoc/visualization.js.gz +0 -0
- data/public/assets/jit_rgraph-63bc6fa01820d73bb4076f2f62493e66.js +25 -0
- data/public/assets/jit_rgraph-63bc6fa01820d73bb4076f2f62493e66.js.gz +0 -0
- data/public/assets/jit_rgraph.js +25 -0
- data/public/assets/jit_rgraph.js.gz +0 -0
- data/public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100-951e2a65945b93d3f69c1994e5672f39.png +0 -0
- data/public/assets/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/assets/jquery-ui/ui-bg_flat_55_fbec88_40x100-befbc2de63b9556a093c0a5bb2e08a95.png +0 -0
- data/public/assets/jquery-ui/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_75_d0e5f5_1x400-faa3341c6543985d2c94bd65e36bd6d8.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_85_dfeffc_1x400-df1d30b336ee1530edc334458abd2417.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400-5767880afddd9b98f4b4cfd43a09947b.png +0 -0
- data/public/assets/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/assets/jquery-ui/ui-bg_gloss-wave_55_5c9ccc_500x100-c563cdeeac0f1479b69e36b21d785ac4.png +0 -0
- data/public/assets/jquery-ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/public/assets/jquery-ui/ui-bg_inset-hard_100_f5f8f9_1x100-b837a3b8315a7ff270664ce469f2e6d7.png +0 -0
- data/public/assets/jquery-ui/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/public/assets/jquery-ui/ui-bg_inset-hard_100_fcfdfd_1x100-b5d3cda0e6142534937f71cf4438e28a.png +0 -0
- data/public/assets/jquery-ui/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/public/assets/jquery-ui/ui-icons_217bc0_256x240-14e62c24f88d00f227d88e5b16406eec.png +0 -0
- data/public/assets/jquery-ui/ui-icons_217bc0_256x240.png +0 -0
- data/public/assets/jquery-ui/ui-icons_2e83ff_256x240-c15e521f58d397c2fa31f4214f92a399.png +0 -0
- data/public/assets/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
- data/public/assets/jquery-ui/ui-icons_469bdd_256x240-aceccf3311e1b369e71a4ac629953d61.png +0 -0
- data/public/assets/jquery-ui/ui-icons_469bdd_256x240.png +0 -0
- data/public/assets/jquery-ui/ui-icons_6da8d5_256x240-18148340aba4ce354c9d52c5aa2f5c0c.png +0 -0
- data/public/assets/jquery-ui/ui-icons_6da8d5_256x240.png +0 -0
- data/public/assets/jquery-ui/ui-icons_cd0a0a_256x240-279edbd373e73b1ecd1ea7a6ba19750d.png +0 -0
- data/public/assets/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/assets/jquery-ui/ui-icons_d8e7f3_256x240-732b446e2e1d4f4fec4277e2632a9adf.png +0 -0
- data/public/assets/jquery-ui/ui-icons_d8e7f3_256x240.png +0 -0
- data/public/assets/jquery-ui/ui-icons_f9bd01_256x240-1ee933e5956743f5607f2075ed21fac5.png +0 -0
- data/public/assets/jquery-ui/ui-icons_f9bd01_256x240.png +0 -0
- data/public/assets/json2-fdda51ffce29dd4cb684dc7bd0aede01.js +157 -0
- data/public/assets/json2-fdda51ffce29dd4cb684dc7bd0aede01.js.gz +0 -0
- data/public/assets/json2.js +157 -0
- data/public/assets/json2.js.gz +0 -0
- data/public/assets/leaf_end-2ac151e8d7b4928bacb557f96cb5b517.png +0 -0
- data/public/assets/leaf_end.png +0 -0
- data/public/assets/leaf_end_filled-cdb0eb9ce60425bf0a1fd12226e502eb.png +0 -0
- data/public/assets/leaf_end_filled.png +0 -0
- data/public/assets/leaf_mid-966f99acaeaddfaedb6b602eb1eed7e0.png +0 -0
- data/public/assets/leaf_mid.png +0 -0
- data/public/assets/leaf_mid_filled-fecf059c72a649fe77052a886fb030d5.png +0 -0
- data/public/assets/leaf_mid_filled.png +0 -0
- data/public/assets/leaf_nothing-e8b5532117e55a184d93e8bf66afa20a.png +0 -0
- data/public/assets/leaf_nothing.png +0 -0
- data/public/assets/leaf_only-e4fe523e451ad9dea6bba08b44cf8039.png +0 -0
- data/public/assets/leaf_only.png +0 -0
- data/public/assets/leaf_only_filled-7b9a97903759b89facd5fb2e03ba14d1.png +0 -0
- data/public/assets/leaf_only_filled.png +0 -0
- data/public/assets/leaf_top-61fbce4d3adf2235964e828647a52149.png +0 -0
- data/public/assets/leaf_top.png +0 -0
- data/public/assets/leaf_top_filled-003d96425167d3b74e63eb75e12d163e.png +0 -0
- data/public/assets/leaf_top_filled.png +0 -0
- data/public/assets/manifest-c08ebf92c2ea89fbce8705f984a7c604.css +1139 -0
- data/public/assets/manifest-c08ebf92c2ea89fbce8705f984a7c604.css.gz +0 -0
- data/public/assets/manifest-c6d880245ce63929a5842e48cb7c65f2.js +21 -0
- data/public/assets/manifest-c6d880245ce63929a5842e48cb7c65f2.js.gz +0 -0
- data/public/assets/manifest.css +1139 -0
- data/public/assets/manifest.css.gz +0 -0
- data/public/assets/manifest.js +21 -0
- data/public/assets/manifest.js.gz +0 -0
- data/public/assets/manifest.yml +73 -0
- data/public/assets/minus-633f45b71e7552c36214c9d81fce94b0.gif +0 -0
- data/public/assets/minus.gif +0 -0
- data/public/assets/nothing-19b9650c540a8776b047d6dde27687b0.png +0 -0
- data/public/assets/nothing.png +0 -0
- data/public/assets/ok-96195c6d50075a63cbdfa11818301f56.png +0 -0
- data/public/assets/ok.png +0 -0
- data/public/assets/plus-dd3920a86d5ea72497854d875c6afc00.gif +0 -0
- data/public/assets/plus.gif +0 -0
- data/public/assets/rdf_flyer-b2cc2d8b2a537a9c74b39450f8e6b16f.gif +0 -0
- data/public/assets/rdf_flyer.gif +0 -0
- data/public/assets/red_arrow-875d1bca1c4b97ec82635af86032a024.png +0 -0
- data/public/assets/red_arrow.png +0 -0
- data/public/assets/shadow-2975795dc944082531617a0c3ad2da70.png +0 -0
- data/public/assets/shadow.png +0 -0
- data/public/assets/spinner-0b76e32ff4e68b1e8789b4d0fe991cd7.gif +0 -0
- data/public/assets/spinner.gif +0 -0
- data/public/assets/tokenizer_delete-94c9b41ce566e499de2090b552e0d167.png +0 -0
- data/public/assets/tokenizer_delete.png +0 -0
- data/public/assets/tokenizer_pencile-b508830af36466f05620d83c544b22ff.png +0 -0
- data/public/assets/tokenizer_pencile.png +0 -0
- data/public/assets/tokenizer_show-152443b9a6c0b058cfb51c51f567116f.png +0 -0
- data/public/assets/tokenizer_show.png +0 -0
- data/public/assets/top_01-fab0825c0529e87fddf883074490dc19.png +0 -0
- data/public/assets/top_01.png +0 -0
- data/public/assets/treeview-black-116394dbf5afda75949a9925de790795.gif +0 -0
- data/public/assets/treeview-black-line-142d898d1f095b3cec1a5dd204daae0d.gif +0 -0
- data/public/assets/treeview-black-line.gif +0 -0
- data/public/assets/treeview-black.gif +0 -0
- data/public/assets/treeview-default-01747815c9007458fc391092548255f8.gif +0 -0
- data/public/assets/treeview-default-line-9aecef4278b9e684f18f3c52e3607f80.gif +0 -0
- data/public/assets/treeview-default-line.gif +0 -0
- data/public/assets/treeview-default.gif +0 -0
- data/public/assets/treeview-famfamfam-c5f86a8a52aa48e87b4bd58878c81ad8.gif +0 -0
- data/public/assets/treeview-famfamfam-line-897ce097b7d84700985608f22e2403c3.gif +0 -0
- data/public/assets/treeview-famfamfam-line.gif +0 -0
- data/public/assets/treeview-famfamfam.gif +0 -0
- data/public/assets/treeview-gray-56089927c44332a8375be41ab13130c8.gif +0 -0
- data/public/assets/treeview-gray-line-d4be395725623b1f39a0964fa479774e.gif +0 -0
- data/public/assets/treeview-gray-line.gif +0 -0
- data/public/assets/treeview-gray.gif +0 -0
- data/public/assets/treeview-red-cb4ed4e5654d76aef755e5c55b63e91c.gif +0 -0
- data/public/assets/treeview-red-line-fdf843bbfba11d00897c7971dff7e806.gif +0 -0
- data/public/assets/treeview-red-line.gif +0 -0
- data/public/assets/treeview-red.gif +0 -0
- data/public/assets/trunk-5686782333e8b4c7e4468c452fb52cec.png +0 -0
- data/public/assets/trunk.png +0 -0
- data/public/assets/unfinished-1cb6bae22a5b855f4b51cb03a1cce928.png +0 -0
- data/public/assets/unfinished.png +0 -0
- data/test/integration/client_edit_concept_test.rb +0 -1
- data/test/integration/instance_configuration_test.rb +74 -0
- data/test/integration/untranslated_test.rb +1 -1
- data/test/integration_test_helper.rb +2 -0
- data/test/unit/concept_test.rb +1 -1
- data/test/unit/instance_configuration_test.rb +42 -0
- data/test/unit/skos_import_test.rb +4 -3
- data/vendor/assets/javascripts/json2.js +27 -25
- metadata +201 -19
- data/db/iqvoc_test.sqlite3 +0 -0
@@ -26,18 +26,8 @@ ActiveRecord::Base.send :include, Iqvoc::DeepCloning
|
|
26
26
|
|
27
27
|
##### INSTANCE SETTINGS #####
|
28
28
|
|
29
|
-
#
|
30
|
-
# see lib/iqvoc.rb for the
|
29
|
+
# initialize non-dynamic settings below
|
30
|
+
# see lib/iqvoc.rb for the list of available setting
|
31
31
|
|
32
32
|
unless Rails.env.test?
|
33
|
-
# Iqvoc.title = "My Thesaurus"
|
34
|
-
|
35
|
-
# interface languages (cf. config/locales)
|
36
|
-
# Iqvoc.available_languages = [ :en, :de ]
|
37
|
-
|
38
|
-
# label languages (and classes)
|
39
|
-
# Iqvoc::Concept.pref_labeling_languages = [ :de, :en ]
|
40
|
-
# Iqvoc::Concept.further_labeling_class_names = {
|
41
|
-
# "Labeling::SKOS::AltLabel" => [ :de, :en ]
|
42
|
-
# }
|
43
33
|
end
|
@@ -17,6 +17,7 @@
|
|
17
17
|
# Be sure to restart your server when you modify this file.
|
18
18
|
|
19
19
|
if Iqvoc.const_defined?(:Application)
|
20
|
+
|
20
21
|
# Your secret key for verifying the integrity of signed cookies.
|
21
22
|
# If you change this key, all old signed cookies will become invalid!
|
22
23
|
# Make sure the secret is at least 30 characters and all random,
|
@@ -24,5 +25,6 @@ if Iqvoc.const_defined?(:Application)
|
|
24
25
|
|
25
26
|
# Run `rake secret` and uncomment the following line
|
26
27
|
# Replace the secret-placeholder with your generated token
|
27
|
-
Iqvoc::Application.config.secret_token = '
|
28
|
+
Iqvoc::Application.config.secret_token = '17d06ea2c1b5aceb4274a466a83d3b063094ecb22826c82af3572740bf2d61b30f756f1aea5e6c845ad5c078265065c8748760e655da7f6425a11bbf22ec8007'
|
29
|
+
|
28
30
|
end
|
data/config/locales/de.yml
CHANGED
@@ -81,6 +81,8 @@ de:
|
|
81
81
|
select_language: "Sprache auswählen"
|
82
82
|
login: "Anmelden"
|
83
83
|
logout: "Abmelden"
|
84
|
+
instance_configuration:
|
85
|
+
caption: "Instanzkonfiguration"
|
84
86
|
alphabetical_concepts:
|
85
87
|
untranslated_concepts:
|
86
88
|
caption: "Fehlende Übersetzungen"
|
@@ -125,6 +127,7 @@ de:
|
|
125
127
|
back_to_edit_versioned_object: "Zurück zur Bearbeitung"
|
126
128
|
back_to_show: "Zurück zur Originalversion"
|
127
129
|
back_to_preview: "Zurück zur Versionsvorschau"
|
130
|
+
instance_configuration: "Instanzkonfiguration"
|
128
131
|
hierarchical: "Hierarchisch"
|
129
132
|
alphabetical: "Alphabetisch"
|
130
133
|
search: "Suche"
|
@@ -243,6 +246,11 @@ de:
|
|
243
246
|
application:
|
244
247
|
login_required: "Sie müssen angemeldet sein, um diese Seite aufzurufen."
|
245
248
|
logout_required: "Sie müssen abgemeldet sein, um diese Seite aufzurufen."
|
249
|
+
instance_configuration:
|
250
|
+
update_success: "Konfigurationänderungen übernommen."
|
251
|
+
update_error: "Fehler in Konfigurationwerten: %{error_messages}."
|
252
|
+
invalid_key: "unbekanntes Feld: %{key}"
|
253
|
+
invalid_value: "fehlerhafter Wert: %{key} (%{error_message})"
|
246
254
|
search_results:
|
247
255
|
insufficient_data: "Bitte geben Sie mehr Suchkriterien an."
|
248
256
|
users:
|
data/config/locales/en.yml
CHANGED
@@ -81,6 +81,8 @@ en:
|
|
81
81
|
relations: Relations
|
82
82
|
notes: Notes
|
83
83
|
matches: Concept mappings
|
84
|
+
instance_configuration:
|
85
|
+
caption: "Instance Configuration"
|
84
86
|
alphabetical_concepts:
|
85
87
|
untranslated_concepts:
|
86
88
|
caption: "Missing Translations"
|
@@ -133,6 +135,7 @@ en:
|
|
133
135
|
back_to_edit_versioned_object: "Back to editing"
|
134
136
|
back_to_show: "Back to original version"
|
135
137
|
back_to_preview: "Back to version preview"
|
138
|
+
instance_configuration: "Instance configuration"
|
136
139
|
hierarchical: "Hierachical listings"
|
137
140
|
alphabetical: "Alphabetical listings"
|
138
141
|
search: "Search"
|
@@ -251,6 +254,11 @@ en:
|
|
251
254
|
application:
|
252
255
|
login_required: "You must be logged in to access this page."
|
253
256
|
logout_required: "You must be logged out to access this page."
|
257
|
+
instance_configuration:
|
258
|
+
update_success: "Configuration updated."
|
259
|
+
update_error: "Errors occurred while updating configuration: %{error_messages}."
|
260
|
+
invalid_key: "unknown key: #{key}"
|
261
|
+
invalid_value: "unsupported value: %{key} (%{error_message})"
|
254
262
|
search_results:
|
255
263
|
insufficient_data: "You entered insufficient search data"
|
256
264
|
users:
|
data/config/routes.rb
CHANGED
@@ -18,7 +18,10 @@ Rails.application.routes.draw do
|
|
18
18
|
|
19
19
|
match 'schema(.:format)' => 'pages#schema', :as => 'schema'
|
20
20
|
|
21
|
-
scope '(:lang)', :
|
21
|
+
scope '(:lang)', :constraints => lambda { |params, req|
|
22
|
+
lang = params[:lang]
|
23
|
+
return lang.nil? || lang.to_s =~ /#{Iqvoc::Concept.pref_labeling_languages.join("|").presence || " "}/
|
24
|
+
} do
|
22
25
|
|
23
26
|
resource :user_session, :only => [:new, :create, :destroy]
|
24
27
|
resources :users, :except => [:show]
|
@@ -44,6 +47,9 @@ Rails.application.routes.draw do
|
|
44
47
|
match 'about(.:format)' => 'pages#about', :as => 'about'
|
45
48
|
match 'dashboard(.:format)' => 'dashboard#index', :as => 'dashboard'
|
46
49
|
|
50
|
+
get 'config(.:format)' => 'instance_configuration#index', :as => 'instance_configuration'
|
51
|
+
put 'config(.:format)' => 'instance_configuration#update'
|
52
|
+
|
47
53
|
get "import" => "import#index", :as => 'import'
|
48
54
|
post "import" => "import#import"
|
49
55
|
|
data/lib/debug.rb
CHANGED
@@ -4,11 +4,11 @@ def dbg(*args)
|
|
4
4
|
prefix = "#{args.shift} " if [String, Symbol].include?(args.first.class)
|
5
5
|
|
6
6
|
msg = args.map(&:inspect).join(" | ")
|
7
|
-
msg = "
|
7
|
+
msg = "#{prefix}#{msg}"
|
8
8
|
|
9
|
-
if defined?(Rails::Console) || Rails.env
|
10
|
-
puts msg
|
9
|
+
if defined?(Rails::Console) || Rails.env.test? # STDOUT is usually available here
|
10
|
+
puts "[DEBUG] #{msg}"
|
11
11
|
else
|
12
|
-
Rails.logger.debug msg
|
12
|
+
Rails.logger.tagged("DEBUG") { Rails.logger.debug msg }
|
13
13
|
end
|
14
14
|
end
|
data/lib/iqvoc.rb
CHANGED
@@ -15,240 +15,32 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
require 'string'
|
18
|
+
require 'iqvoc/instance_configuration'
|
19
|
+
require 'iqvoc/configuration/core'
|
20
|
+
require 'iqvoc/configuration/concept'
|
21
|
+
require 'iqvoc/configuration/collection'
|
22
|
+
require 'iqvoc/configuration/label'
|
18
23
|
|
19
24
|
module Iqvoc
|
20
|
-
|
21
25
|
unless Iqvoc.const_defined?(:Application)
|
22
26
|
require File.join(File.dirname(__FILE__), '../config/engine')
|
23
27
|
end
|
24
|
-
|
25
|
-
|
26
|
-
:searchable_class_names,
|
27
|
-
:unlimited_search_results,
|
28
|
-
:available_languages,
|
29
|
-
:default_rdf_namespace_helper_methods,
|
30
|
-
:rdf_namespaces,
|
31
|
-
:change_note_class_name,
|
32
|
-
:first_level_class_configuration_modules,
|
33
|
-
:ability_class_name,
|
34
|
-
:core_assets
|
35
|
-
|
36
|
-
self.title = "iQvoc"
|
37
|
-
|
38
|
-
self.core_assets = %w(
|
39
|
-
manifest.css
|
40
|
-
manifest.js
|
41
|
-
blueprint/screen.css
|
42
|
-
blueprint/print.css
|
43
|
-
blueprint/ie.css
|
44
|
-
iqvoc/ie_fixes.css
|
45
|
-
excanvas.js
|
46
|
-
jit_rgraph.js
|
47
|
-
iqvoc/visualization.js
|
48
|
-
)
|
49
|
-
|
50
|
-
self.searchable_class_names = [
|
51
|
-
'Labeling::SKOS::Base',
|
52
|
-
'Labeling::SKOS::PrefLabel',
|
53
|
-
'Note::Base'
|
54
|
-
]
|
55
|
-
self.unlimited_search_results = false
|
56
|
-
|
57
|
-
self.available_languages = [:en, :de]
|
58
|
-
|
59
|
-
self.default_rdf_namespace_helper_methods = [:iqvoc_default_rdf_namespaces]
|
60
|
-
|
61
|
-
self.rdf_namespaces = {
|
62
|
-
:rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
|
63
|
-
:rdfs => "http://www.w3.org/2000/01/rdf-schema#",
|
64
|
-
:owl => "http://www.w3.org/2002/07/owl#",
|
65
|
-
:skos => "http://www.w3.org/2004/02/skos/core#",
|
66
|
-
:dct => "http://purl.org/dc/terms/"
|
67
|
-
}
|
68
|
-
|
69
|
-
# The class to use for automatic generation of change notes on every save
|
70
|
-
self.change_note_class_name = 'Note::SKOS::ChangeNote'
|
71
|
-
|
72
|
-
self.first_level_class_configuration_modules = [] # Will be set in the modules
|
73
|
-
|
74
|
-
self.ability_class_name = 'Iqvoc::Ability'
|
75
|
-
|
76
|
-
def self.change_note_class
|
77
|
-
change_note_class_name.constantize
|
78
|
-
end
|
79
|
-
|
80
|
-
def self.searchable_classes
|
81
|
-
searchable_class_names.map(&:constantize)
|
82
|
-
end
|
83
|
-
|
84
|
-
def self.first_level_classes
|
85
|
-
self.first_level_class_configuration_modules.map { |mod| mod.send(:base_class) }
|
86
|
-
end
|
87
|
-
|
88
|
-
def self.ability_class
|
89
|
-
ability_class_name.constantize
|
90
|
-
end
|
91
|
-
|
92
|
-
def self.generate_secret_token
|
93
|
-
require 'securerandom'
|
94
|
-
|
95
|
-
template = Rails.root.join("config", "initializers", "secret_token.rb.template")
|
96
|
-
raise "File not found: #{template}" unless File.exist?(template)
|
97
|
-
|
98
|
-
file_name = "config/initializers/secret_token.rb"
|
99
|
-
|
100
|
-
token = SecureRandom.hex(64)
|
101
|
-
txt = File.read(template)
|
102
|
-
txt.gsub!("S-E-C-R-E-T", token)
|
103
|
-
|
104
|
-
File.open(file_name, "w") do |f|
|
105
|
-
f.write txt
|
106
|
-
end
|
107
|
-
|
108
|
-
puts "Secret token configuration has been created in #{file_name}."
|
109
|
-
end
|
110
|
-
|
111
|
-
# ************** Concept specific settings **************
|
28
|
+
|
29
|
+
include Iqvoc::Configuration::Core
|
112
30
|
|
113
31
|
module Concept
|
114
|
-
|
115
|
-
Iqvoc.first_level_class_configuration_modules << self
|
116
|
-
|
117
|
-
mattr_accessor :base_class_name,
|
118
|
-
:broader_relation_class_name, :further_relation_class_names,
|
119
|
-
:pref_labeling_class_name, :pref_labeling_languages, :further_labeling_class_names,
|
120
|
-
:match_class_names,
|
121
|
-
:note_class_names,
|
122
|
-
:additional_association_class_names,
|
123
|
-
:view_sections,
|
124
|
-
:include_module_names
|
125
|
-
|
126
|
-
self.base_class_name = 'Concept::SKOS::Base'
|
127
|
-
|
128
|
-
self.broader_relation_class_name = 'Concept::Relation::SKOS::Broader::Mono'
|
129
|
-
self.further_relation_class_names = [ 'Concept::Relation::SKOS::Related' ]
|
130
|
-
|
131
|
-
self.pref_labeling_class_name = 'Labeling::SKOS::PrefLabel'
|
132
|
-
self.pref_labeling_languages = [:en, :de]
|
133
|
-
self.further_labeling_class_names = { 'Labeling::SKOS::AltLabel' => [:de, :en] }
|
134
|
-
|
135
|
-
self.note_class_names = [
|
136
|
-
Iqvoc.change_note_class_name,
|
137
|
-
'Note::SKOS::Definition',
|
138
|
-
'Note::SKOS::EditorialNote',
|
139
|
-
'Note::SKOS::Example',
|
140
|
-
'Note::SKOS::HistoryNote',
|
141
|
-
'Note::SKOS::ScopeNote'
|
142
|
-
]
|
143
|
-
|
144
|
-
self.match_class_names = [
|
145
|
-
'Match::SKOS::CloseMatch',
|
146
|
-
'Match::SKOS::ExactMatch',
|
147
|
-
'Match::SKOS::RelatedMatch',
|
148
|
-
'Match::SKOS::BroadMatch',
|
149
|
-
'Match::SKOS::NarrowMatch',
|
150
|
-
]
|
151
|
-
|
152
|
-
self.additional_association_class_names = {}
|
153
|
-
|
154
|
-
self.view_sections = ["main", "labels", "relations", "notes", "matches"]
|
155
|
-
|
156
|
-
self.include_module_names = []
|
157
|
-
|
158
|
-
# Do not use the following method in models. This will probably cause a
|
159
|
-
# loading loop (something like "expected file xyz to load ...")
|
160
|
-
def self.base_class
|
161
|
-
base_class_name.constantize
|
162
|
-
end
|
163
|
-
|
164
|
-
def self.pref_labeling_class
|
165
|
-
pref_labeling_class_name.constantize
|
166
|
-
end
|
167
|
-
|
168
|
-
def self.labeling_class_names
|
169
|
-
{ pref_labeling_class_name => pref_labeling_languages }.merge(further_labeling_class_names)
|
170
|
-
end
|
171
|
-
|
172
|
-
def self.labeling_classes
|
173
|
-
{ pref_labeling_class => pref_labeling_languages }.merge(further_labeling_classes)
|
174
|
-
end
|
175
|
-
|
176
|
-
def self.broader_relation_class
|
177
|
-
broader_relation_class_name.constantize
|
178
|
-
end
|
179
|
-
|
180
|
-
def self.further_labeling_classes
|
181
|
-
further_labeling_class_names.keys.each_with_object({}) do |class_name, hash|
|
182
|
-
hash[class_name.constantize] = further_labeling_class_names[class_name]
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
def self.relation_class_names
|
187
|
-
further_relation_class_names + [broader_relation_class_name, broader_relation_class.narrower_class.name]
|
188
|
-
end
|
189
|
-
|
190
|
-
def self.relation_classes
|
191
|
-
relation_class_names.map(&:constantize)
|
192
|
-
end
|
193
|
-
|
194
|
-
def self.further_relation_classes
|
195
|
-
further_relation_class_names.map(&:constantize)
|
196
|
-
end
|
197
|
-
|
198
|
-
def self.note_classes
|
199
|
-
note_class_names.map(&:constantize)
|
200
|
-
end
|
201
|
-
|
202
|
-
def self.match_classes
|
203
|
-
match_class_names.map(&:constantize)
|
204
|
-
end
|
205
|
-
|
206
|
-
def self.additional_association_classes
|
207
|
-
additional_association_class_names.keys.each_with_object({}) do |class_name, hash|
|
208
|
-
hash[class_name.constantize] = additional_association_class_names[class_name]
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
def self.supports_multi_language_pref_labelings?
|
213
|
-
pref_labeling_languages.size > 1
|
214
|
-
end
|
215
|
-
|
216
|
-
def self.include_modules
|
217
|
-
include_module_names.map(&:constantize)
|
218
|
-
end
|
219
|
-
|
32
|
+
include Iqvoc::Configuration::Concept
|
220
33
|
end
|
221
34
|
|
222
|
-
# ************** Collection specific settings **************
|
223
|
-
|
224
35
|
module Collection
|
225
|
-
|
226
|
-
mattr_accessor :base_class_name
|
227
|
-
|
228
|
-
self.base_class_name = 'Collection::Unordered'
|
229
|
-
|
230
|
-
def self.base_class
|
231
|
-
base_class_name.constantize
|
232
|
-
end
|
36
|
+
include Iqvoc::Configuration::Collection
|
233
37
|
end
|
234
38
|
|
235
|
-
# ************** Label specific settings **************
|
236
|
-
|
237
39
|
module Label
|
238
|
-
|
239
|
-
mattr_accessor :base_class_name
|
240
|
-
|
241
|
-
self.base_class_name = 'Label::SKOS::Base'
|
242
|
-
|
243
|
-
# Do not use the following method in models. This will probably cause a
|
244
|
-
# loading loop (something like "expected file xyz to load ...")
|
245
|
-
def self.base_class
|
246
|
-
base_class_name.constantize
|
247
|
-
end
|
248
|
-
|
40
|
+
include Iqvoc::Configuration::Label
|
249
41
|
end
|
250
42
|
|
251
43
|
end
|
252
44
|
|
253
|
-
# FIXME: For yet unknown
|
45
|
+
# FIXME: For reasons yet unknown, the load hook is executed twice
|
254
46
|
ActiveSupport.run_load_hooks(:after_iqvoc_config, Iqvoc)
|
data/lib/iqvoc/ability.rb
CHANGED
@@ -32,11 +32,12 @@ module Iqvoc
|
|
32
32
|
can [:update, :destroy, :unlock], [::Concept::Base, ::Label::Base], :published_at => nil # Mustn't be locked by myself
|
33
33
|
|
34
34
|
can :manage, User
|
35
|
+
can :manage, Iqvoc.config
|
35
36
|
|
36
37
|
can :full_export, ::Concept::Base
|
37
38
|
can :import, ::Concept::Base
|
38
39
|
end
|
39
|
-
|
40
|
+
|
40
41
|
end
|
41
42
|
|
42
43
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "active_support/concern"
|
2
|
+
|
3
|
+
module Iqvoc
|
4
|
+
module Configuration
|
5
|
+
module Collection
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
mattr_accessor :base_class_name
|
10
|
+
|
11
|
+
self.base_class_name = 'Collection::Unordered'
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
def base_class
|
16
|
+
base_class_name.constantize
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require "active_support/concern"
|
2
|
+
|
3
|
+
module Iqvoc
|
4
|
+
module Configuration
|
5
|
+
module Concept
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
Iqvoc.first_level_class_configuration_modules << self
|
10
|
+
|
11
|
+
mattr_accessor :base_class_name,
|
12
|
+
:broader_relation_class_name, :further_relation_class_names,
|
13
|
+
:pref_labeling_class_name,
|
14
|
+
:match_class_names,
|
15
|
+
:note_class_names,
|
16
|
+
:additional_association_class_names,
|
17
|
+
:view_sections,
|
18
|
+
:include_module_names
|
19
|
+
|
20
|
+
self.base_class_name = 'Concept::SKOS::Base'
|
21
|
+
|
22
|
+
self.broader_relation_class_name = 'Concept::Relation::SKOS::Broader::Mono'
|
23
|
+
self.further_relation_class_names = [ 'Concept::Relation::SKOS::Related' ]
|
24
|
+
|
25
|
+
self.pref_labeling_class_name = 'Labeling::SKOS::PrefLabel'
|
26
|
+
|
27
|
+
self.note_class_names = [
|
28
|
+
Iqvoc.change_note_class_name,
|
29
|
+
'Note::SKOS::Definition',
|
30
|
+
'Note::SKOS::EditorialNote',
|
31
|
+
'Note::SKOS::Example',
|
32
|
+
'Note::SKOS::HistoryNote',
|
33
|
+
'Note::SKOS::ScopeNote'
|
34
|
+
]
|
35
|
+
|
36
|
+
self.match_class_names = [
|
37
|
+
'Match::SKOS::CloseMatch',
|
38
|
+
'Match::SKOS::ExactMatch',
|
39
|
+
'Match::SKOS::RelatedMatch',
|
40
|
+
'Match::SKOS::BroadMatch',
|
41
|
+
'Match::SKOS::NarrowMatch',
|
42
|
+
]
|
43
|
+
|
44
|
+
self.additional_association_class_names = {}
|
45
|
+
|
46
|
+
self.view_sections = ["main", "labels", "relations", "notes", "matches"]
|
47
|
+
|
48
|
+
self.include_module_names = []
|
49
|
+
end
|
50
|
+
|
51
|
+
module ClassMethods
|
52
|
+
def pref_labeling_languages
|
53
|
+
# FIXME: mutable object; needs custom array setters to guard against
|
54
|
+
# modification (to highlight deprecated usage)
|
55
|
+
return Iqvoc.config["languages.pref_labeling"]
|
56
|
+
end
|
57
|
+
|
58
|
+
# Do not use the following method in models. This will probably cause a
|
59
|
+
# loading loop (something like "expected file xyz to load ...")
|
60
|
+
def base_class
|
61
|
+
base_class_name.constantize
|
62
|
+
end
|
63
|
+
|
64
|
+
def pref_labeling_class
|
65
|
+
pref_labeling_class_name.constantize
|
66
|
+
end
|
67
|
+
|
68
|
+
def labeling_class_names
|
69
|
+
{ pref_labeling_class_name => pref_labeling_languages }.merge(further_labeling_class_names)
|
70
|
+
end
|
71
|
+
|
72
|
+
def labeling_classes
|
73
|
+
{ pref_labeling_class => pref_labeling_languages }.merge(further_labeling_classes)
|
74
|
+
end
|
75
|
+
|
76
|
+
def broader_relation_class
|
77
|
+
broader_relation_class_name.constantize
|
78
|
+
end
|
79
|
+
|
80
|
+
# returns hash of class name / languages pairs
|
81
|
+
# e.g. { "Labeling::SKOS::AltLabel" => ["de", "en"] }
|
82
|
+
def further_labeling_class_names
|
83
|
+
# FIXME: mutable object; needs custom hash setters to guard against
|
84
|
+
# modification of languages arrays (to highlight deprecated usage)
|
85
|
+
return Iqvoc.config.defaults.each_with_object({}) do |(key, default_value), hsh|
|
86
|
+
prefix = "languages.further_labelings."
|
87
|
+
if key.start_with? prefix
|
88
|
+
class_name = key[prefix.length..-1]
|
89
|
+
hsh[class_name] = Iqvoc.config[key]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def further_labeling_classes
|
95
|
+
further_labeling_class_names.keys.each_with_object({}) do |class_name, hash|
|
96
|
+
hash[class_name.constantize] = further_labeling_class_names[class_name]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def relation_class_names
|
101
|
+
further_relation_class_names + [broader_relation_class_name, broader_relation_class.narrower_class.name]
|
102
|
+
end
|
103
|
+
|
104
|
+
def relation_classes
|
105
|
+
relation_class_names.map(&:constantize)
|
106
|
+
end
|
107
|
+
|
108
|
+
def further_relation_classes
|
109
|
+
further_relation_class_names.map(&:constantize)
|
110
|
+
end
|
111
|
+
|
112
|
+
def note_classes
|
113
|
+
note_class_names.map(&:constantize)
|
114
|
+
end
|
115
|
+
|
116
|
+
def match_classes
|
117
|
+
match_class_names.map(&:constantize)
|
118
|
+
end
|
119
|
+
|
120
|
+
def additional_association_classes
|
121
|
+
additional_association_class_names.keys.each_with_object({}) do |class_name, hash|
|
122
|
+
hash[class_name.constantize] = additional_association_class_names[class_name]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def supports_multi_language_pref_labelings?
|
127
|
+
pref_labeling_languages.size > 1
|
128
|
+
end
|
129
|
+
|
130
|
+
def include_modules
|
131
|
+
include_module_names.map(&:constantize)
|
132
|
+
end
|
133
|
+
|
134
|
+
# @deprecated
|
135
|
+
def pref_labeling_languages=(value)
|
136
|
+
ActiveSupport::Deprecation.warn "pref_labeling_languages has been moved into instance configuration", caller
|
137
|
+
Iqvoc.config.register_setting("languages.pref_labeling", arr)
|
138
|
+
end
|
139
|
+
|
140
|
+
# @deprecated
|
141
|
+
def further_labeling_class_names=(hsh)
|
142
|
+
ActiveSupport::Deprecation.warn "further_labeling_class_names has been moved into instance configuration", caller
|
143
|
+
prefix = "languages.further_labelings."
|
144
|
+
hsh.each do |class_name, value|
|
145
|
+
Iqvoc.config.register_setting(prefix + class_name, value.map(&:to_s))
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|