Class: Labeling::SKOSXL::Base

Inherits:
Base
  • Object
show all
Defined in:
app/models/labeling/skosxl/base.rb

Direct Known Subclasses

AltLabel, HiddenLabel, PrefLabel

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build_from_rdf(rdf_subject, rdf_predicate, rdf_object) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
# File 'app/models/labeling/skosxl/base.rb', line 80

def self.build_from_rdf(rdf_subject, rdf_predicate, rdf_object)
  unless rdf_subject.is_a?(Concept::Base)
    raise "#{self.name}#build_from_rdf: Subject (#{rdf_subject}) must be a Concept."
  end

  predicate_class = RDFAPI::PREDICATE_DICTIONARY[rdf_predicate] || self
  predicate_class.create do |klass|
    klass.owner = rdf_subject
    klass.target = rdf_object
  end
end

.by_label_language(language) ⇒ Object



14
15
16
# File 'app/models/labeling/skosxl/base.rb', line 14

def self.by_label_language(language)
  includes(:target).references(:labels).merge(self.label_class.by_language(language))
end

.by_label_origin(origin) ⇒ Object



10
11
12
# File 'app/models/labeling/skosxl/base.rb', line 10

def self.by_label_origin(origin)
  includes(:target).references(:labels).merge(self.label_class.by_origin(origin))
end

.create_for(o, t) ⇒ Object



22
23
24
# File 'app/models/labeling/skosxl/base.rb', line 22

def self.create_for(o, t)
  find_or_create_by(owner_id: o.id, target_id: t.id)
end

.edit_partial_name(obj) ⇒ Object



76
77
78
# File 'app/models/labeling/skosxl/base.rb', line 76

def self.edit_partial_name(obj)
  'partials/labeling/skosxl/edit_base'
end

.label_classObject



31
32
33
# File 'app/models/labeling/skosxl/base.rb', line 31

def self.label_class
  Iqvoc::XLLabel.base_class
end

.label_editor_selectableObject



18
19
20
# File 'app/models/labeling/skosxl/base.rb', line 18

def self.label_editor_selectable
  includes(:target).references(:labels).merge(self.label_class.editor_selectable)
end

.partial_name(obj) ⇒ Object



72
73
74
# File 'app/models/labeling/skosxl/base.rb', line 72

def self.partial_name(obj)
  'partials/labeling/skosxl/base'
end

.search_result_partial_nameObject



68
69
70
# File 'app/models/labeling/skosxl/base.rb', line 68

def self.search_result_partial_name
  'partials/labeling/skosxl/search_result'
end

.single_query(params = {}) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/models/labeling/skosxl/base.rb', line 35

def self.single_query(params = {})
  query_str = build_query_string(params)

  scope = includes(:target).order("LOWER(#{Label::Base.table_name}.value)").references(:labels, :concepts)
  if params[:query].present?
    labels = Label::Base.by_query_value(query_str).by_language(params[:languages].to_a).published
    scope = scope.merge(labels)
  else
    scope = scope.merge(Label::Base.by_language(params[:languages].to_a).published)
  end

  if params[:collection_origin].present?
    collection = Collection::Base.where(origin: params[:collection_origin]).last
    if collection
      scope = scope.includes(owner: { collection_members: :collection })
      scope = scope.where("#{Collection::Member::Base.table_name}.collection_id" => collection.id)
    else
      raise "Collection with Origin #{params[:collection_origin]} not found!"
    end
  end

  # apply search entity type
  case params[:for]
  when 'concept'
    scope = scope.includes(:owner).merge(Iqvoc::Concept.base_class.published)
  when 'collection'
    scope = scope.includes(:owner).merge(Iqvoc::Collection.base_class.published)
  end

  scope = yield(scope) if block_given?
  scope.map { |result| SearchResult.new(result) }
end

.target_in_edit_modeObject



6
7
8
# File 'app/models/labeling/skosxl/base.rb', line 6

def self.target_in_edit_mode
  includes(:target).references(:labels).merge(Iqvoc::XLLabel.base_class.in_edit_mode)
end

Instance Method Details

#<=>(other) ⇒ Object

FIXME: Hmm… Why should I sort labelings (not necessarily pref_labelings) by pref_label???



27
28
29
# File 'app/models/labeling/skosxl/base.rb', line 27

def <=>(other)
  owner.pref_label <=> other.owner.pref_label
end

#build_rdf(document, subject) ⇒ Object



92
93
94
95
# File 'app/models/labeling/skosxl/base.rb', line 92

def build_rdf(document, subject)
  subject.send(self.rdf_namespace.camelcase).send(self.rdf_predicate, IqRdf.build_uri(target.origin))
  subject.Skos.send(self.rdf_predicate, target.value.to_s, lang: target.language)
end

#build_search_result_rdf(document, result) ⇒ Object



97
98
99
100
# File 'app/models/labeling/skosxl/base.rb', line 97

def build_search_result_rdf(document, result)
  result.Sdc::link(IqRdf.build_uri(owner.origin))
  build_rdf(document, result)
end