Class: ConceptsController

Inherits:
ApplicationController show all
Defined in:
app/controllers/concepts_controller.rb

Overview

Copyright 2011 innoQ Deutschland GmbH

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Instance Method Summary collapse

Instance Method Details

#createObject



103
104
105
106
107
108
109
110
111
112
113
114
# File 'app/controllers/concepts_controller.rb', line 103

def create
  authorize! :create, Iqvoc::Concept.base_class

  @concept = Iqvoc::Concept.base_class.new(params[:concept])
  if @concept.save
    flash[:success] = I18n.t("txt.controllers.versioned_concept.success")
    redirect_to concept_path(:published => 0, :id => @concept.origin)
  else
    flash.now[:error] = I18n.t("txt.controllers.versioned_concept.error")
    render :new
  end
end

#destroyObject

Raises:

  • (ActiveRecord::RecordNotFound)


148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'app/controllers/concepts_controller.rb', line 148

def destroy
  @new_concept = Iqvoc::Concept.base_class.by_origin(params[:id]).unpublished.last
  raise ActiveRecord::RecordNotFound unless @new_concept

  authorize! :destroy, @new_concept

  if @new_concept.destroy
    flash[:success] = I18n.t("txt.controllers.concept_versions.delete")
    redirect_to dashboard_path
  else
    flash[:success] = I18n.t("txt.controllers.concept_versions.delete_error")
    redirect_to concept_path(:published => 0, :id => @new_concept)
  end
end

#editObject

Raises:

  • (ActiveRecord::RecordNotFound)


116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'app/controllers/concepts_controller.rb', line 116

def edit
  @concept = Iqvoc::Concept.base_class.by_origin(params[:id]).unpublished.last
  raise ActiveRecord::RecordNotFound unless @concept

  authorize! :update, @concept

  @association_objects_in_editing_mode = @concept.associated_objects_in_editing_mode

  if params[:full_consistency_check]
    @concept.valid_with_full_validation?
  end

  Iqvoc::Concept.note_class_names.each do |note_class_name|
    @concept.send(note_class_name.to_relation_name).build if @concept.send(note_class_name.to_relation_name).empty?
  end
end

#indexObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/controllers/concepts_controller.rb', line 19

def index
  authorize! :read, Concept::Base

  respond_to do |format|
    format.json do # Search for widget
      scope = Iqvoc::Concept.base_class.editor_selectable.with_pref_labels.
          merge(Label::Base.by_query_value("#{params[:query]}%"))
      scope = scope.where(:top_term => false) if params[:exclude_top_terms]
      @concepts = scope.all.map { |concept| concept_widget_data(concept) }
      render :json => @concepts
    end
    format.all do # RDF full export
      authorize! :full_export, Concept::Base
    end
  end
end

#newObject



93
94
95
96
97
98
99
100
101
# File 'app/controllers/concepts_controller.rb', line 93

def new
  authorize! :create, Iqvoc::Concept.base_class

  @concept = Iqvoc::Concept.base_class.new

  Iqvoc::Concept.note_class_names.each do |note_class_name|
    @concept.send(note_class_name.to_relation_name).build if @concept.send(note_class_name.to_relation_name).empty?
  end
end

#showObject

Raises:

  • (ActiveRecord::RecordNotFound)


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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'app/controllers/concepts_controller.rb', line 36

def show
  scope = Iqvoc::Concept.base_class.
    by_origin(params[:id]).
    with_associations
  published = params[:published] == '1' || !params[:published]
  if published
    scope = scope.published
    @new_concept_version = Iqvoc::Concept.base_class.by_origin(params[:id]).unpublished.last
  else
    scope = scope.unpublished
  end

  @concept = scope.last
  raise ActiveRecord::RecordNotFound unless @concept

  authorize! :read, @concept

  respond_to do |format|
    format.html do
      # When in single query mode, AR handles ALL includes to be loaded by that
      # one query. We don't want that! So let's do it manually :-)
      ActiveRecord::Associations::Preloader.new(@concept,
        Iqvoc::Concept.base_class.default_includes + [:collection_members => {:collection => :labels},
        :broader_relations => {:target => [:pref_labels, :broader_relations]},
        :narrower_relations => {:target => [:pref_labels, :narrower_relations]}]).run

      published ? render('show_published') : render('show_unpublished')
    end
    format.json do
      # When in single query mode, AR handles ALL includes to be loaded by that
      # one query. We don't want that! So let's do it manually :-)
      ActiveRecord::Associations::Preloader.new(@concept, [:labels,
          { :relations => { :target => [:labelings, :relations] } }]).run

      published_relations = lambda { |concept|
        return concept.relations.includes(:target).
            merge(Iqvoc::Concept.base_class.published)
      }
      concept_data = {
        :origin => @concept.origin,
        :labels => @concept.labelings.map { |ln| labeling_as_json(ln) },
        :relations => published_relations.call(@concept).map { |relation|
          concept = relation.target
          {
            :origin => concept.origin,
            :labels => concept.labelings.map { |ln| labeling_as_json(ln) },
            :relations => published_relations.call(concept).count
          }
        }
      }
      render :json => concept_data
    end
    format.ttl
    format.rdf
  end
end

#updateObject

Raises:

  • (ActiveRecord::RecordNotFound)


133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'app/controllers/concepts_controller.rb', line 133

def update
  @concept = Iqvoc::Concept.base_class.by_origin(params[:id]).unpublished.last
  raise ActiveRecord::RecordNotFound unless @concept

  authorize! :update, @concept

  if @concept.update_attributes(params[:concept])
    flash[:success] = I18n.t("txt.controllers.versioned_concept.update_success")
    redirect_to concept_path(:published => 0, :id => @concept)
  else
    flash.now[:error] = I18n.t("txt.controllers.versioned_concept.update_error")
    render :action => :edit
  end
end