iqvoc_skosxl 2.6.0 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,8 +8,9 @@ module Label
8
8
  validates :origin, uniqueness: { scope: :rev }
9
9
  validate :origin_has_to_be_escaped
10
10
 
11
+ validate :referenced_published_concepts_has_to_be_valid, if: :validatable_for_publishing?
11
12
  validates :value, uniqueness: { scope: [:language, :rev] },
12
- if: :validatable_for_publishing?
13
+ if: :validatable_for_publishing?
13
14
  validates :value, presence: true, if: :validatable_for_publishing?
14
15
  end
15
16
 
@@ -19,6 +20,20 @@ module Label
19
20
  end
20
21
  end
21
22
 
23
+ def referenced_published_concepts_has_to_be_valid
24
+ published_label = self.published_version
25
+
26
+ # check published concepts which use the current label as a pref label
27
+ concepts.published.each do |concept|
28
+ # pref labels without the current published one
29
+ labels = concept.pref_labels.reject{ |l| l == published_label }
30
+
31
+ unless labels.map(&:language).map(&:to_s).include?(Iqvoc::Concept.pref_labeling_languages.first.to_s)
32
+ errors.add :base, I18n.t('txt.models.label.referenced_concepts_invalid')
33
+ end
34
+ end
35
+ end
36
+
22
37
  end
23
38
  end
24
39
  end
@@ -36,25 +36,32 @@ class Labeling::SKOSXL::Base < Labeling::Base
36
36
  query_str = build_query_string(params)
37
37
 
38
38
  scope = includes(:target).order("LOWER(#{Label::Base.table_name}.value)").references(:labels, :concepts)
39
-
40
39
  if params[:query].present?
41
- scope = scope.merge(Label::Base.by_query_value(query_str).by_language(params[:languages].to_a).published)
40
+ labels = Label::Base.by_query_value(query_str).by_language(params[:languages].to_a).published
41
+ scope = scope.merge(labels)
42
42
  else
43
43
  scope = scope.merge(Label::Base.by_language(params[:languages].to_a).published)
44
44
  end
45
45
 
46
46
  if params[:collection_origin].present?
47
- scope = scope.includes(owner: { collection_members: :collection })
48
- scope = scope.merge(Collection::Base.where(origin: params[:collection_origin]))
47
+ collection = Collection::Base.where(origin: params[:collection_origin]).last
48
+ if collection
49
+ scope = scope.includes(owner: { collection_members: :collection })
50
+ scope = scope.where("#{Collection::Member::Base.table_name}.collection_id" => collection.id)
51
+ else
52
+ raise "Collection with Origin #{params[:collection_origin]} not found!"
53
+ end
49
54
  end
50
55
 
51
- # Check that the included concept is in published state:
52
- scope = scope.includes(:owner).merge(Iqvoc::Concept.base_class.published)
53
-
54
- unless params[:collection_origin].blank?
55
- #
56
+ # apply search entity type
57
+ case params[:for]
58
+ when 'concept'
59
+ scope = scope.includes(:owner).merge(Iqvoc::Concept.base_class.published)
60
+ when 'collection'
61
+ scope = scope.includes(:owner).merge(Iqvoc::Collection.base_class.published)
56
62
  end
57
63
 
64
+ scope = yield(scope) if block_given?
58
65
  scope.map { |result| SearchResult.new(result) }
59
66
  end
60
67
 
@@ -6,10 +6,8 @@
6
6
  <fieldset id="label_base_data">
7
7
  <legend><%= t("txt.common.attributes") %></legend>
8
8
  <%= f.text_field :value %>
9
- <%= f.form_group :language, :label => { :text => label.class.human_attribute_name(:language) } do %>
10
- <span><%= label.language %></span>
11
- <%= f.hidden_field :language %>
12
- <% end %>
9
+
10
+ <%= f.select :language, Iqvoc.all_languages %>
13
11
 
14
12
  <% if Iqvoc::XLLabel.has_additional_base_data %>
15
13
  <%= render 'partials/label/additional_base_data', :f => f %>
@@ -6,7 +6,8 @@
6
6
  <%= sidebar_item :icon => 'share', :text => 'RDF/XML', :path => rdf_url(label.origin, :format => :rdf, :published => published_param, :lang => nil), :id => 'rdf_link_xml' %>
7
7
  <%= sidebar_item :icon => 'share', :text => 'RDF/Turtle', :path => rdf_url(label.origin, :format => :ttl, :published => published_param, :lang => nil), :id => 'rdf_link_ttl' %>
8
8
  <%= sidebar_item :icon => 'share', :text => 'RDF/NTriples', :path => rdf_url(label.origin, :format => :nt, :published => published_param, :lang => nil), :id => 'rdf_link_nt' %>
9
+
9
10
  <%= sidebar_header 'Links' %>
10
- <%#= sidebar_item :icon => 'zoom-in', :text => 'Visualization', :path => '#visualization', :'data-toggle' => 'modal' %>
11
+ <%= sidebar_item :icon => 'link', :text => t('txt.models.label.uri'), :path => rdf_url(label.origin, :format => nil, :published => published_param, :lang => nil) %>
11
12
  <%= render Iqvoc::XLLabel.base_class.new_link_partial_name %>
12
13
  <% end %>
@@ -30,7 +30,7 @@
30
30
  label_path(:published => 0, :id => @label.origin),
31
31
  :method => :delete,
32
32
  :confirm => I18n.t("txt.views.versioning.delete_confirm"),
33
- :class => 'btn btn-default' %>
33
+ :class => 'btn btn-danger' %>
34
34
  <% else %>
35
35
  <%= button_to t("txt.views.versioning.unlock"),
36
36
  label_versions_unlock_path(:origin => @label.origin),
@@ -1,7 +1,11 @@
1
1
  <div class="relation panel">
2
2
  <h2><%= klass.model_name.human(:count => 2) %></h2>
3
3
  <div class="relation-body">
4
- <%= item_listing(label.related_labels_for_relation_class(klass)) do |label|
4
+ <%-
5
+ items = label.related_labels_for_relation_class(klass)
6
+ items = items.select { |item| can?(:read, item) }
7
+ -%>
8
+ <%= item_listing(items) do |label|
5
9
  link_to label.value, label_path(:id => label)
6
10
  end
7
11
  %>
@@ -1,5 +1 @@
1
- <span class="list-group-item">
2
- <%= icon(:edit) %> <%= t("txt.views.labels.new") %> (<% Iqvoc::Concept::labeling_class_names.values.flatten.map(&:to_s).uniq.each do |language| %>
3
- <%= link_to language.to_s, new_label_path(:published => 0, :language => language), :class => 'inline-language-selector' %>
4
- <% end %>)
5
- </span>
1
+ <%= sidebar_item :icon => 'edit', :text => t('txt.views.labels.new'), :path => new_label_path(published: 0) %>
@@ -0,0 +1,13 @@
1
+ <% if label = result.result_object %>
2
+ <li class="search-result" data-rdf-namespace="<%= result.rdf_namespace %>" data-rdf-value="<%= result.value %>" data-rdf-language="<%= result.language %>">
3
+ <%= link_to_object(label, result.value, :class => 'search-result-link') %>
4
+ <dl class="search-result-meta">
5
+ <dt class="search-result-key"><%= t('txt.views.search_results.type') %></dt>
6
+ <dd class="search-result-value" data-key="<%= t('txt.views.search_results.type') %>"><%= result.model_name.human %></dd>
7
+ <% if result.language %>
8
+ <dt class="search-result-key"><%= t('txt.views.search_results.language') %></dt>
9
+ <dd class="search-result-value" data-key="<%= t('txt.views.search_results.language') %>"><%= result.language %></dd>
10
+ <% end %>
11
+ </dl>
12
+ </li>
13
+ <% end %>
@@ -2,16 +2,24 @@
2
2
  <% if defined?(concept) %>
3
3
  <h2><%= klass.model_name.human(:count => 2) %> <small><%= "#{t("languages.#{lang}", :default => lang.to_s)}" %></small></h2>
4
4
  <div class="relation-body">
5
- <%= item_listing(concept.labels_for_labeling_class_and_language(klass, lang.to_s)) do |label|
6
- link_to label.value, label_path(:id => label)
5
+ <%-
6
+ items = concept.labels_for_labeling_class_and_language(klass, lang.to_s)
7
+ items = items.select { |item| can?(:read, item) }
8
+ -%>
9
+ <%= item_listing(items) do |label|
10
+ link_to label.value, label_path(:id => label), class: label.published? ? '' : 'unpublished'
7
11
  end
8
12
  %>
9
13
  </div>
10
14
  <% elsif defined?(label) %>
11
15
  <h2><%= klass.model_name.human %> <%= t("txt.common.of") %></h2>
12
16
  <div class="relation-body">
13
- <%= item_listing(label.concepts_for_labeling_class(klass)) do |c|
14
- link_to c.to_s, concept_path(:id => c)
17
+ <%-
18
+ items = label.concepts_for_labeling_class(klass)
19
+ items = items.select { |item| can?(:read, item) }
20
+ -%>
21
+ <%= item_listing(items) do |c|
22
+ link_to c.to_s, concept_path(:id => c), class: c.published? ? '' : 'unpublished'
15
23
  end
16
24
  %>
17
25
  </div>
data/config/database.yml CHANGED
@@ -1,36 +1,20 @@
1
- <% socket = [
2
- "/tmp/mysql.sock",
3
- "/opt/local/var/run/mysql5/mysqld.sock",
4
- "/tmp/mysqld.sock",
5
- "/var/run/mysqld.sock"
6
- ].detect { |socket| File.exist?(socket) } %>
7
-
8
- defaults: &defaults
9
- encoding: utf8
10
- username: root
11
- password:
12
- <% if defined?(JRuby) %>
13
- adapter: jdbcmysql
14
- hostname: localhost
15
- <% else %>
16
- adapter: mysql2
17
- socket: <%= socket %>
18
- <% end %>
19
-
20
1
  development:
21
- <<: *defaults
2
+ adapter: mysql2
22
3
  database: iqvoc_skosxl_development
4
+ username: root
5
+ password:
6
+ encoding: utf8
23
7
 
24
- # Warning: The database defined as 'test' will be erased and
25
- # re-generated from your development database when you run 'rake'.
26
- # Do not set this db to the same as development or production.
27
8
  test:
28
- <<: *defaults
9
+ adapter: mysql2
29
10
  database: iqvoc_skosxl_test
11
+ username: root
12
+ password:
13
+ encoding: utf8
30
14
 
31
15
  production:
16
+ adapter: mysql2
17
+ database: iqvoc_skosxl_production
18
+ username: root
19
+ password:
32
20
  encoding: utf8
33
- username: iqvoc_skosxl
34
- password:
35
- database: iqvoc_skosxl
36
- adapter: oracle_enhanced
@@ -0,0 +1,23 @@
1
+ development:
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ database: iqvoc_skosxl_development
5
+ pool: 5
6
+ username: postgres
7
+ password:
8
+
9
+ test:
10
+ adapter: postgresql
11
+ encoding: unicode
12
+ database: iqvoc_skosxl_test
13
+ pool: 5
14
+ username: postgres
15
+ password:
16
+
17
+ production:
18
+ adapter: postgresql
19
+ encoding: unicode
20
+ database: iqvoc_skosxl_production
21
+ pool: 5
22
+ username: postgres
23
+ password:
@@ -3,6 +3,7 @@ silence_warnings do
3
3
  end
4
4
 
5
5
  Iqvoc.searchable_class_names = {
6
+ 'Label::SKOSXL::Base' => 'xllabels',
6
7
  'Labeling::SKOSXL::Base' => 'labels',
7
8
  'Labeling::SKOSXL::PrefLabel' => 'pref_labels',
8
9
  'Labeling::SKOSXL::AltLabel' => 'alt_labels'
@@ -6,4 +6,6 @@ de:
6
6
  concepts: Konzepte
7
7
  models:
8
8
  label:
9
+ uri: Label-URI
9
10
  origin_invalid: enthält ungültige Zeichen.
11
+ referenced_concepts_invalid: Referenzierte Konzepte werden durch diese Änderung invalide. Bitte Labelzuordnung am Konzept aufheben.
@@ -6,4 +6,6 @@ en:
6
6
  concepts: Concepts
7
7
  models:
8
8
  label:
9
+ uri: Label URI
9
10
  origin_invalid: Origin contains invalid characters.
11
+ referenced_concepts_invalid: Some referenced concepts become invalid. Please remove label from referenced concepts first.
@@ -0,0 +1,5 @@
1
+ class RemoveFkConstraintsIqvocSkosxl < ActiveRecord::Migration
2
+ def change
3
+ remove_foreign_key :labels, column: 'published_version_id'
4
+ end
5
+ end
data/db/schema.rb CHANGED
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20150108154312) do
14
+ ActiveRecord::Schema.define(version: 20150414083600) do
15
15
 
16
16
  create_table "collection_members", force: :cascade do |t|
17
17
  t.integer "collection_id", limit: 4
@@ -20,7 +20,7 @@ ActiveRecord::Schema.define(version: 20150108154312) do
20
20
  end
21
21
 
22
22
  add_index "collection_members", ["collection_id", "target_id", "type"], name: "ix_collections_fk_type", using: :btree
23
- add_index "collection_members", ["target_id"], name: "fk_rails_5a05e228ee", using: :btree
23
+ add_index "collection_members", ["target_id"], name: "fk_rails_ca5b83d3a1", using: :btree
24
24
 
25
25
  create_table "concept_relations", force: :cascade do |t|
26
26
  t.string "type", limit: 255
@@ -32,7 +32,7 @@ ActiveRecord::Schema.define(version: 20150108154312) do
32
32
  end
33
33
 
34
34
  add_index "concept_relations", ["owner_id", "target_id"], name: "ix_concept_relations_fk", using: :btree
35
- add_index "concept_relations", ["target_id"], name: "fk_rails_1b7d5559ab", using: :btree
35
+ add_index "concept_relations", ["target_id"], name: "fk_rails_b9505863fe", using: :btree
36
36
 
37
37
  create_table "concepts", force: :cascade do |t|
38
38
  t.string "type", limit: 255
@@ -50,7 +50,7 @@ ActiveRecord::Schema.define(version: 20150108154312) do
50
50
  t.boolean "top_term", limit: 1, default: false
51
51
  end
52
52
 
53
- add_index "concepts", ["locked_by"], name: "fk_rails_ca7e673cc3", using: :btree
53
+ add_index "concepts", ["locked_by"], name: "fk_rails_c1c63f3716", using: :btree
54
54
  add_index "concepts", ["origin"], name: "ix_concepts_on_origin", length: {"origin"=>255}, using: :btree
55
55
  add_index "concepts", ["published_version_id"], name: "ix_concepts_publ_version_id", using: :btree
56
56
 
@@ -60,20 +60,28 @@ ActiveRecord::Schema.define(version: 20150108154312) do
60
60
  end
61
61
 
62
62
  create_table "delayed_jobs", force: :cascade do |t|
63
- t.integer "priority", limit: 4, default: 0, null: false
64
- t.integer "attempts", limit: 4, default: 0, null: false
65
- t.text "handler", limit: 65535, null: false
66
- t.text "last_error", limit: 65535
63
+ t.integer "priority", limit: 4, default: 0, null: false
64
+ t.integer "attempts", limit: 4, default: 0, null: false
65
+ t.text "handler", limit: 65535, null: false
66
+ t.text "last_error", limit: 65535
67
67
  t.datetime "run_at"
68
68
  t.datetime "locked_at"
69
69
  t.datetime "failed_at"
70
- t.string "locked_by", limit: 255
71
- t.string "queue", limit: 255
70
+ t.string "locked_by", limit: 255
71
+ t.string "queue", limit: 255
72
72
  t.datetime "created_at"
73
73
  t.datetime "updated_at"
74
+ t.string "error_message", limit: 255
75
+ t.string "delayed_reference_type", limit: 255
76
+ t.integer "delayed_reference_id", limit: 4
77
+ t.string "delayed_global_reference_id", limit: 255
74
78
  end
75
79
 
80
+ add_index "delayed_jobs", ["delayed_global_reference_id"], name: "delayed_jobs_delayed_global_reference_id", using: :btree
81
+ add_index "delayed_jobs", ["delayed_reference_id"], name: "delayed_jobs_delayed_reference_id", using: :btree
82
+ add_index "delayed_jobs", ["delayed_reference_type"], name: "delayed_jobs_delayed_reference_type", using: :btree
76
83
  add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree
84
+ add_index "delayed_jobs", ["queue"], name: "delayed_jobs_queue", using: :btree
77
85
 
78
86
  create_table "exports", force: :cascade do |t|
79
87
  t.integer "user_id", limit: 4
@@ -103,15 +111,6 @@ ActiveRecord::Schema.define(version: 20150108154312) do
103
111
 
104
112
  add_index "imports", ["user_id"], name: "index_imports_on_user_id", using: :btree
105
113
 
106
- create_table "job_relations", force: :cascade do |t|
107
- t.string "type", limit: 255
108
- t.string "owner_reference", limit: 255
109
- t.string "job_id", limit: 255
110
- t.datetime "created_at"
111
- t.datetime "updated_at"
112
- t.string "response_error", limit: 255
113
- end
114
-
115
114
  create_table "label_relations", force: :cascade do |t|
116
115
  t.string "type", limit: 255
117
116
  t.integer "domain_id", limit: 4
@@ -121,7 +120,7 @@ ActiveRecord::Schema.define(version: 20150108154312) do
121
120
  end
122
121
 
123
122
  add_index "label_relations", ["domain_id", "range_id", "type"], name: "ix_label_rel_dom_rng_type", using: :btree
124
- add_index "label_relations", ["range_id"], name: "fk_rails_bb0176a385", using: :btree
123
+ add_index "label_relations", ["range_id"], name: "fk_rails_bb6dbc5289", using: :btree
125
124
  add_index "label_relations", ["type"], name: "ix_label_relations_on_type", using: :btree
126
125
 
127
126
  create_table "labelings", force: :cascade do |t|
@@ -133,7 +132,7 @@ ActiveRecord::Schema.define(version: 20150108154312) do
133
132
  end
134
133
 
135
134
  add_index "labelings", ["owner_id", "target_id", "type"], name: "ix_labelings_fk_type", using: :btree
136
- add_index "labelings", ["target_id"], name: "fk_rails_3a628f1b05", using: :btree
135
+ add_index "labelings", ["target_id"], name: "fk_rails_51629a50d5", using: :btree
137
136
  add_index "labelings", ["type"], name: "ix_labelings_on_type", using: :btree
138
137
 
139
138
  create_table "labels", force: :cascade do |t|
@@ -143,9 +142,9 @@ ActiveRecord::Schema.define(version: 20150108154312) do
143
142
  t.string "value", limit: 1024
144
143
  t.datetime "created_at"
145
144
  t.datetime "updated_at"
146
- t.date "published_at"
147
145
  t.integer "rev", limit: 4, default: 1
148
146
  t.integer "published_version_id", limit: 4
147
+ t.date "published_at"
149
148
  t.integer "locked_by", limit: 4
150
149
  t.date "expired_at"
151
150
  t.date "follow_up"
@@ -156,7 +155,6 @@ ActiveRecord::Schema.define(version: 20150108154312) do
156
155
  add_index "labels", ["language"], name: "ix_labels_on_language", using: :btree
157
156
  add_index "labels", ["origin"], name: "ix_labels_on_origin", length: {"origin"=>255}, using: :btree
158
157
  add_index "labels", ["published_version_id"], name: "ix_labels_on_published_v", using: :btree
159
- add_index "labels", ["value"], name: "ix_labels_on_value", length: {"value"=>255}, using: :btree
160
158
 
161
159
  create_table "matches", force: :cascade do |t|
162
160
  t.integer "concept_id", limit: 4
@@ -216,7 +214,7 @@ ActiveRecord::Schema.define(version: 20150108154312) do
216
214
  t.string "perishable_token", limit: 255
217
215
  t.string "role", limit: 255
218
216
  t.string "telephone_number", limit: 255
219
- t.string "type", limit: 255
217
+ t.string "type", limit: 255, default: "User"
220
218
  end
221
219
 
222
220
  add_foreign_key "collection_members", "concepts", column: "collection_id", on_update: :cascade
@@ -230,8 +228,6 @@ ActiveRecord::Schema.define(version: 20150108154312) do
230
228
  add_foreign_key "label_relations", "labels", column: "range_id", on_update: :cascade, on_delete: :cascade
231
229
  add_foreign_key "labelings", "concepts", column: "owner_id", on_update: :cascade
232
230
  add_foreign_key "labelings", "labels", column: "target_id", on_update: :cascade, on_delete: :cascade
233
- add_foreign_key "labels", "labels", column: "published_version_id", on_update: :cascade, on_delete: :cascade
234
- add_foreign_key "labels", "labels", column: "published_version_id", on_update: :cascade, on_delete: :cascade
235
231
  add_foreign_key "matches", "concepts", on_update: :cascade, on_delete: :cascade
236
232
  add_foreign_key "notations", "concepts", on_update: :cascade
237
233
  add_foreign_key "note_annotations", "notes", on_update: :cascade, on_delete: :cascade
data/iqvoc_skosxl.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.license = 'Apache License 2.0'
14
14
  s.description = 'iQvoc - a SKOS(-XL) vocabulary management system built on the Semantic Web'
15
15
 
16
- s.add_dependency 'iqvoc', '>= 4.8.0', '~> 4.8'
16
+ s.add_dependency 'iqvoc', '>= 4.8.0', '~> 4.9'
17
17
  s.add_development_dependency 'bundler', '~> 1.6'
18
18
 
19
19
  s.files = %w(README.md Gemfile Gemfile.lock Rakefile iqvoc_skosxl.gemspec) +
@@ -1,5 +1,5 @@
1
1
  module Iqvoc
2
2
  module SKOSXL
3
- VERSION = '2.6.0'
3
+ VERSION = '2.7.0'
4
4
  end
5
5
  end
data/lib/iqvoc_skosxl.rb CHANGED
@@ -21,6 +21,7 @@ module IqvocSKOSXL
21
21
 
22
22
  Iqvoc::Concept.include_module_names << 'Concept::SKOSXL::Extension'
23
23
  Iqvoc::Concept.pref_labeling_class_name = 'Labeling::SKOSXL::PrefLabel'
24
+ Iqvoc::Concept.alt_labeling_class_name = 'Labeling::SKOSXL::AltLabel'
24
25
 
25
26
  # TODO
26
27
  # Iqvoc.searchable_class_names = Iqvoc::Concept.labeling_class_names.keys +
@@ -36,7 +36,7 @@ class DashboardTest < ActionDispatch::IntegrationTest
36
36
  login('administrator')
37
37
 
38
38
  visit dashboard_path(lang: 'de', format: 'html')
39
- click_link_or_button('de')
39
+ click_link_or_button('Neues Label')
40
40
  assert_equal new_label_path(lang: 'de', format: 'html'), current_path
41
41
  end
42
42
  end
@@ -29,6 +29,18 @@ class LabelCreationTest < ActionDispatch::IntegrationTest
29
29
  assert page.has_content? 'Das Label wurde erstellt.'
30
30
  click_link_or_button 'Konsistenz prüfen'
31
31
  assert page.has_content? 'Instanz ist konsistent.'
32
+ click_link_or_button 'Veröffentlichen'
33
+ assert page.has_content? 'Instanz wurde erfolgreich veröffentlicht.'
34
+ assert page.has_content? 'Testlabel'
35
+
36
+ # modify created version
37
+ click_link_or_button 'Neue Version erstellen'
38
+ fill_in 'Vorlageform', with: 'Testlabel_modified'
39
+ click_link_or_button 'Speichern'
40
+ assert page.has_content? 'Das Label wurde aktualisiert.'
41
+ assert page.has_content? 'Testlabel_modified'
42
+ click_link_or_button 'Veröffentlichen'
43
+ assert page.has_content? 'Instanz wurde erfolgreich veröffentlicht.'
32
44
  end
33
45
 
34
46
  test 'inconsistent label creation' do
@@ -0,0 +1,86 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), '../test_helper')
4
+
5
+ class ConceptTest < ActiveSupport::TestCase
6
+ setup do
7
+ end
8
+
9
+ test 'exclusive pref label' do
10
+ monkey = RDFAPI.devour 'Monkey', 'a', 'skos:Concept'
11
+ monkey_label = Iqvoc::XLLabel.base_class.create(
12
+ language: 'en', value: 'Monkey', published_at: 3.days.ago)
13
+
14
+ monkey.pref_labels << monkey_label
15
+ assert monkey.save
16
+ assert monkey.publishable?
17
+
18
+ monkey.alt_labels << monkey_label
19
+ assert monkey.save
20
+ refute monkey.publishable?, 'There should be no duplicates between prefLabel/altLabel'
21
+ end
22
+
23
+ test 'unique alt labels' do
24
+ tiger = RDFAPI.devour 'Tiger', 'a', 'skos:Concept'
25
+ tiger_label = Iqvoc::XLLabel.base_class.create(
26
+ language: 'en', value: 'Tiger', published_at: 3.days.ago)
27
+ tiger_alt_label = Iqvoc::XLLabel.base_class.create(
28
+ language: 'en', value: 'Big Cat', published_at: 3.days.ago)
29
+
30
+ tiger.pref_labels << tiger_label
31
+ tiger.alt_labels << tiger_alt_label
32
+ assert tiger.save
33
+ assert tiger.publishable?
34
+
35
+ tiger.alt_labels << tiger_alt_label
36
+ assert tiger.save
37
+ refute tiger.publishable?, 'There should be no identical alt labels'
38
+ end
39
+
40
+ test 'concepts alt label language change' do
41
+ dog = RDFAPI.devour 'Dog', 'a', 'skos:Concept'
42
+ dog.pref_labels << Iqvoc::XLLabel.base_class.create(
43
+ language: 'en', value: 'Dog', published_at: 3.days.ago)
44
+ dog.alt_labels << Iqvoc::XLLabel.base_class.create(
45
+ language: 'en', value: 'Hound', published_at: 3.days.ago)
46
+
47
+ assert dog.save
48
+ assert dog.publish
49
+
50
+ alt_label = dog.alt_labels.first
51
+ assert_equal 'Hound', alt_label.value
52
+ assert_equal 'en', alt_label.language
53
+
54
+ # should be publishable with a german alt label
55
+ alt_label.value = 'Jagdhund'
56
+ alt_label.language = 'de'
57
+ assert alt_label.save
58
+ assert alt_label.publishable?
59
+ end
60
+
61
+ test 'concepts pref label language change' do
62
+ dog = RDFAPI.devour 'Dog', 'a', 'skos:Concept'
63
+ refute dog.publishable?
64
+ dog.pref_labels << Iqvoc::XLLabel.base_class.create(
65
+ language: 'en', value: 'Dog', published_at: 3.days.ago)
66
+
67
+ assert dog.save!
68
+ assert dog.publishable?
69
+ assert dog.publish!
70
+ pref_label = dog.pref_label
71
+ assert_equal 'Dog', pref_label.value
72
+ assert_equal 'en', pref_label.language
73
+
74
+ # should not be publishable with an german prefLabel
75
+ pref_label.value = 'Hund'
76
+ pref_label.language = 'de'
77
+ assert pref_label.save!
78
+ refute pref_label.publishable?, 'Label should not be publishable (no english pref Label)'
79
+
80
+ # no problem with a english prefLabel
81
+ pref_label.value = 'Dog'
82
+ pref_label.language = 'en'
83
+ assert pref_label.save!
84
+ assert pref_label.publishable?, 'Label should not be publishable (no english pref Label)'
85
+ end
86
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iqvoc_skosxl
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Glaser
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-01-29 00:00:00.000000000 Z
13
+ date: 2015-11-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: iqvoc
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 4.8.0
22
22
  - - "~>"
23
23
  - !ruby/object:Gem::Version
24
- version: '4.8'
24
+ version: '4.9'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,7 +31,7 @@ dependencies:
31
31
  version: 4.8.0
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '4.8'
34
+ version: '4.9'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: bundler
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +92,7 @@ files:
92
92
  - app/views/partials/label/relation/_edit_base.html.erb
93
93
  - app/views/partials/label/skosxl/_edit_link_base.html.erb
94
94
  - app/views/partials/label/skosxl/_new_link_base.html.erb
95
+ - app/views/partials/label/skosxl/_search_result.html.erb
95
96
  - app/views/partials/labeling/skosxl/_base.html.erb
96
97
  - app/views/partials/labeling/skosxl/_edit_base.html.erb
97
98
  - app/views/partials/labeling/skosxl/_search_result.html.erb
@@ -101,6 +102,7 @@ files:
101
102
  - config/database.template.yml
102
103
  - config/database.yml
103
104
  - config/database.yml.mysql
105
+ - config/database.yml.postgresql
104
106
  - config/database.yml.sqlite
105
107
  - config/engine.rb
106
108
  - config/environment.rb
@@ -125,6 +127,7 @@ files:
125
127
  - db/migrate/20110408121540_extend_label.rb
126
128
  - db/migrate/20110408123644_add_label_relations.rb
127
129
  - db/migrate/20150108154312_add_fk_contraints_iqvoc_skosxl.rb
130
+ - db/migrate/20150414083600_remove_fk_constraints_iqvoc_skosxl.rb
128
131
  - db/schema.rb
129
132
  - db/seeds.rb
130
133
  - iqvoc_skosxl.gemspec
@@ -140,6 +143,7 @@ files:
140
143
  - test/integration/label_creation_test.rb
141
144
  - test/integration/labels_order_test.rb
142
145
  - test/integration_test_helper.rb
146
+ - test/models/concept_test.rb
143
147
  - test/models/label_test.rb
144
148
  - test/models/skos_importer_test.rb
145
149
  - test/test_helper.rb
@@ -163,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
167
  version: '0'
164
168
  requirements: []
165
169
  rubyforge_project:
166
- rubygems_version: 2.4.5
170
+ rubygems_version: 2.4.5.1
167
171
  signing_key:
168
172
  specification_version: 4
169
173
  summary: iQvoc SKOS-XL extension
@@ -176,6 +180,7 @@ test_files:
176
180
  - test/integration/label_creation_test.rb
177
181
  - test/integration/labels_order_test.rb
178
182
  - test/integration_test_helper.rb
183
+ - test/models/concept_test.rb
179
184
  - test/models/label_test.rb
180
185
  - test/models/skos_importer_test.rb
181
186
  - test/test_helper.rb