discerner 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -2
- data/app/views/discerner/export_parameters/index.html.haml +8 -8
- data/app/views/discerner/parameters/_values_autocompleter.html.haml +18 -18
- data/app/views/discerner/parameters/values.html.haml +1 -1
- data/app/views/discerner/searches/_form.html.haml +6 -6
- data/app/views/discerner/searches/_form_combined_searches.html.haml +4 -4
- data/app/views/discerner/searches/_form_controls.html.haml +3 -3
- data/app/views/discerner/searches/_form_header.html.haml +6 -6
- data/app/views/discerner/searches/_form_search_parameters.html.haml +4 -4
- data/app/views/discerner/searches/_list.html.haml +4 -4
- data/app/views/discerner/searches/_search_combination_fields.html.haml +4 -4
- data/app/views/discerner/searches/_search_parameter_fields.html.haml +15 -15
- data/app/views/discerner/searches/_search_parameter_value_fields.html.haml +13 -13
- data/app/views/discerner/searches/_summary.html.haml +1 -1
- data/app/views/discerner/searches/edit.html.haml +2 -2
- data/app/views/discerner/searches/index.html.haml +3 -3
- data/app/views/discerner/searches/rename.html.haml +4 -4
- data/app/views/discerner/searches/update.js.haml +1 -1
- data/app/views/discerner/shared/_categorized_autocompleter_items.html.haml +1 -1
- data/app/views/discerner/shared/_error_messages.html.haml +1 -1
- data/app/views/layouts/discerner/searches.html.erb +1 -1
- data/config/routes.rb +1 -1
- data/db/migrate/20140815214547_add_namespace_to_discerner_searches.rb +6 -0
- data/db/migrate/20140815214629_add_namespace_to_discerner_dictionaries.rb +6 -0
- data/lib/discerner/methods/controllers/export_parameters_controller.rb +2 -2
- data/lib/discerner/methods/controllers/parameters_controller.rb +3 -3
- data/lib/discerner/methods/controllers/searches_controller.rb +14 -14
- data/lib/discerner/methods/helpers/searches_helper.rb +9 -9
- data/lib/discerner/methods/models/dictionary.rb +3 -3
- data/lib/discerner/methods/models/export_parameter.rb +3 -3
- data/lib/discerner/methods/models/operator.rb +5 -5
- data/lib/discerner/methods/models/parameter.rb +9 -9
- data/lib/discerner/methods/models/parameter_category.rb +5 -5
- data/lib/discerner/methods/models/parameter_type.rb +3 -3
- data/lib/discerner/methods/models/parameter_value.rb +11 -11
- data/lib/discerner/methods/models/parameter_value_categorization.rb +2 -2
- data/lib/discerner/methods/models/parameter_value_category.rb +4 -4
- data/lib/discerner/methods/models/search.rb +12 -12
- data/lib/discerner/methods/models/search_combination.rb +3 -3
- data/lib/discerner/methods/models/search_parameter.rb +5 -5
- data/lib/discerner/methods/models/search_parameter_value.rb +6 -6
- data/lib/discerner/methods/models/soft_delete.rb +1 -1
- data/lib/discerner/version.rb +1 -1
- data/lib/generators/discerner/dictionary/dictionary_generator.rb +5 -5
- data/lib/generators/discerner/install/install_generator.rb +12 -12
- data/lib/generators/discerner/install/templates/dictionaries.yml +1 -1
- data/lib/generators/discerner/install/templates/models/book.rb +4 -4
- data/lib/generators/discerner/install/templates/views/layouts/searches.html.erb +1 -1
- data/lib/tasks/cucumber.rake +10 -10
- data/lib/tasks/discerner_tasks.rake +5 -5
- metadata +8 -6
@@ -3,7 +3,7 @@
|
|
3
3
|
%h3 Saved searches
|
4
4
|
|
5
5
|
#filter
|
6
|
-
= form_tag searches_path, :
|
6
|
+
= form_tag searches_path, id: 'discerner_searches_filter', class: "filter", method: 'get' do
|
7
7
|
%div.filter
|
8
8
|
= label_tag :query, "Filter by name"
|
9
9
|
= text_field_tag :query, params[:query]
|
@@ -11,6 +11,6 @@
|
|
11
11
|
= submit_tag "Search", class: 'button positive'
|
12
12
|
= link_to "Clear search", searches_path
|
13
13
|
#searches-list
|
14
|
-
= render :
|
14
|
+
= render partial: "list"
|
15
15
|
.discerner-buttons
|
16
|
-
= link_to 'Start a new search', new_search_path, { :
|
16
|
+
= link_to 'Start a new search', new_search_path, { class: 'discerner-button discerner-button-positive' }
|
@@ -1,6 +1,6 @@
|
|
1
|
-
= form_tag search_path(@discerner_search), :
|
2
|
-
= render 'discerner/shared/error_messages', :
|
1
|
+
= form_tag search_path(@discerner_search), method: :put, remote: :true do
|
2
|
+
= render 'discerner/shared/error_messages', object: @discerner_search
|
3
3
|
= text_field_tag "search[name]", @discerner_search.name.strip
|
4
4
|
|
5
|
-
= submit_tag 'Submit', :
|
6
|
-
= link_to 'Cancel', edit_search_path(@discerner_search), :
|
5
|
+
= submit_tag 'Submit', class: 'discerner-button discerner-button-positive'
|
6
|
+
= link_to 'Cancel', edit_search_path(@discerner_search), class: 'discerner-button discerner-button-negative cancel'
|
@@ -1,5 +1,5 @@
|
|
1
1
|
- if @discerner_search.errors.any?
|
2
|
-
$("#messages").html("#{escape_javascript(render :
|
2
|
+
$("#messages").html("#{escape_javascript(render partial: 'shared/error_messages', locals: {object: @discerner_search})}")
|
3
3
|
- else
|
4
4
|
$("#messages").html('')
|
5
5
|
$('span.discerner_search_name_edit_dialog').siblings('span.discerner_search_name').html("#{@discerner_search.display_name}").show();
|
@@ -12,4 +12,4 @@
|
|
12
12
|
- (from...to).each do |j|
|
13
13
|
.criteria
|
14
14
|
%li
|
15
|
-
= link_to items[j][:name], 'javascript:void(0);', :
|
15
|
+
= link_to items[j][:name], 'javascript:void(0);', class: 'categorized_autocompleter_item_link', rel: "#{items[j][:rel]}"
|
data/config/routes.rb
CHANGED
@@ -24,8 +24,8 @@ module Discerner
|
|
24
24
|
export_parameter_ids = params[:parameter_ids] || []
|
25
25
|
|
26
26
|
existing_export_parameters.map{ |export_parameter| export_parameter.delete unless export_parameter_ids.include?(export_parameter.parameter_id) }
|
27
|
-
export_parameter_ids.map{ |parameter_id| @discerner_search.export_parameters.create(:
|
28
|
-
redirect_to search_path(@discerner_search, :
|
27
|
+
export_parameter_ids.map{ |parameter_id| @discerner_search.export_parameters.create(parameter_id: parameter_id) unless existing_export_parameters.where(parameter_id: parameter_id).any?}
|
28
|
+
redirect_to search_path(@discerner_search, format: 'xls')
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
@@ -12,9 +12,9 @@ module Discerner
|
|
12
12
|
@searchable_parameter_values = {}
|
13
13
|
@searchable_parameter_values[@parameter.id] = @parameter_values
|
14
14
|
respond_to do |format|
|
15
|
-
format.html { render :
|
16
|
-
format.json { render :
|
17
|
-
:
|
15
|
+
format.html { render layout: false }
|
16
|
+
format.json { render text: { type: @parameter.parameter_type.name,
|
17
|
+
parameter_values: @parameter_values.map { |v| { parameter_value_id: v.id, name: v.name } }}.to_json }
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -3,7 +3,7 @@ module Discerner
|
|
3
3
|
module Controllers
|
4
4
|
module SearchesController
|
5
5
|
def self.included(base)
|
6
|
-
base.send :before_filter, :load_search, :
|
6
|
+
base.send :before_filter, :load_search, only: [:edit, :update, :rename, :destroy, :show]
|
7
7
|
end
|
8
8
|
|
9
9
|
def new
|
@@ -26,7 +26,7 @@ module Discerner
|
|
26
26
|
if @discerner_search.save
|
27
27
|
format.html { redirect_to(edit_search_path(@discerner_search)) }
|
28
28
|
else
|
29
|
-
format.html { render :
|
29
|
+
format.html { render action: "new" }
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -61,10 +61,10 @@ module Discerner
|
|
61
61
|
set_searchables
|
62
62
|
respond_to do |format|
|
63
63
|
if @discerner_search.update_attributes(search_params)
|
64
|
-
format.html { redirect_to(edit_search_path(@discerner_search), :
|
64
|
+
format.html { redirect_to(edit_search_path(@discerner_search), notice: 'Search was successfully updated.') }
|
65
65
|
format.js
|
66
66
|
else
|
67
|
-
format.html { render :
|
67
|
+
format.html { render action: "edit" }
|
68
68
|
format.js
|
69
69
|
end
|
70
70
|
end
|
@@ -73,9 +73,9 @@ module Discerner
|
|
73
73
|
def index
|
74
74
|
searches = Discerner::Search.not_deleted.includes(
|
75
75
|
:dictionary,
|
76
|
-
:export_parameters => [:
|
77
|
-
:
|
78
|
-
:search_parameters => [:
|
76
|
+
:export_parameters => [parameter: [:parameter_type]],
|
77
|
+
search_combinations: [combined_search: [search_parameters: [parameter: [:parameter_type], search_parameter_values: [:parameter_value]]]],
|
78
|
+
:search_parameters => [parameter: [:parameter_type], search_parameter_values: [:parameter_value]])
|
79
79
|
|
80
80
|
username = discerner_user.username unless discerner_user.blank?
|
81
81
|
searches = searches.by_user(username) unless username.blank?
|
@@ -123,8 +123,8 @@ module Discerner
|
|
123
123
|
format.csv do
|
124
124
|
|
125
125
|
send_data @export_data,
|
126
|
-
:
|
127
|
-
:
|
126
|
+
type: 'text/csv; charset=iso-8859-1; header=present',
|
127
|
+
disposition: "attachment; filename=#{filename}.csv"
|
128
128
|
end
|
129
129
|
format.xls do
|
130
130
|
headers["Content-type"] = "application/vnd.ms-excel"
|
@@ -154,7 +154,7 @@ module Discerner
|
|
154
154
|
end
|
155
155
|
|
156
156
|
def dictionary_search_options
|
157
|
-
options = { :
|
157
|
+
options = { username: nil }
|
158
158
|
options[:username] = discerner_user.username unless discerner_user.blank?
|
159
159
|
options
|
160
160
|
end
|
@@ -175,8 +175,8 @@ module Discerner
|
|
175
175
|
dictionary_ids = @searchable_dictionaries.map(&:id)
|
176
176
|
end
|
177
177
|
|
178
|
-
@searchable_parameter_categories = Discerner::ParameterCategory.includes(:dictionary).where(:
|
179
|
-
parameters_available = Discerner::Parameter.includes(:parameter_type, :
|
178
|
+
@searchable_parameter_categories = Discerner::ParameterCategory.includes(:dictionary).where(dictionary_id: dictionary_ids).not_deleted.searchable.ordered_by_name.to_a
|
179
|
+
parameters_available = Discerner::Parameter.includes(:parameter_type, parameter_category: [:dictionary]).where(parameter_category_id: @searchable_parameter_categories.map(&:id)).not_deleted.searchable.to_a
|
180
180
|
parameters_used = @discerner_search && @discerner_search.persisted? ? @discerner_search.search_parameters.map{ |sp| sp.parameter } : []
|
181
181
|
@searchable_parameters = parameters_available.flatten | parameters_used.flatten
|
182
182
|
@searchable_parameter_values = map_searchable_values
|
@@ -186,10 +186,10 @@ module Discerner
|
|
186
186
|
searchable_values = {}
|
187
187
|
|
188
188
|
# getting all values at once to save database calls
|
189
|
-
values_available = Discerner::ParameterValue.includes(:parameter_value_category).not_deleted.where(:
|
189
|
+
values_available = Discerner::ParameterValue.includes(:parameter_value_category).not_deleted.where(parameter_id: @searchable_parameters.map(&:id)).ordered_by_parameter_and_name.to_a
|
190
190
|
values_used = []
|
191
191
|
if @discerner_search && @discerner_search.persisted?
|
192
|
-
values_used = Discerner::ParameterValue.includes(:parameter_value_category).joins(:
|
192
|
+
values_used = Discerner::ParameterValue.includes(:parameter_value_category).joins(search_parameter_values: :search_parameter).where(discerner_search_parameters: {search_id: @discerner_search.id}).ordered_by_parameter_and_name.to_a
|
193
193
|
end
|
194
194
|
|
195
195
|
@searchable_parameters.each do |sp|
|
@@ -11,8 +11,8 @@ module Discerner
|
|
11
11
|
association_prefix = association.to_s.singularize
|
12
12
|
end
|
13
13
|
new_object = f.object.class.reflect_on_association(association).klass.new
|
14
|
-
fields = f.fields_for(association, new_object, :
|
15
|
-
render(association_prefix + "_fields", :
|
14
|
+
fields = f.fields_for(association, new_object, child_index: "new_#{association}") do |form_builder|
|
15
|
+
render(association_prefix + "_fields", f: form_builder)
|
16
16
|
end
|
17
17
|
escape_javascript(fields)
|
18
18
|
end
|
@@ -25,11 +25,11 @@ module Discerner
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def link_to_remove_fields(name, f, association)
|
28
|
-
f.hidden_field(:_destroy) + link_to(name, "javascript:void(0);", :
|
28
|
+
f.hidden_field(:_destroy) + link_to(name, "javascript:void(0);", class: "delete_#{association.to_s} delete_link icon_link")
|
29
29
|
end
|
30
30
|
|
31
31
|
def link_to_soft_delete_fields(name, f, association)
|
32
|
-
f.hidden_field(:soft_delete) + link_to(name, "javascript:void(0);", :
|
32
|
+
f.hidden_field(:soft_delete) + link_to(name, "javascript:void(0);", class: "delete_#{association.to_s} delete_link icon_link")
|
33
33
|
end
|
34
34
|
|
35
35
|
def nested_record_id(builder, assocation)
|
@@ -41,11 +41,11 @@ module Discerner
|
|
41
41
|
unless type.blank?
|
42
42
|
operators = operators.joins(:parameter_types).where("discerner_parameter_types.name in (?)", type)
|
43
43
|
end
|
44
|
-
operators.includes(:parameter_types).uniq.map {|o| [o.text, o.id, {:
|
44
|
+
operators.includes(:parameter_types).uniq.map {|o| [o.text, o.id, {class: o.css_class_name}]}
|
45
45
|
end
|
46
46
|
|
47
47
|
def dictionary_options(searchable_dictionaries)
|
48
|
-
searchable_dictionaries.map{|d| [d.name, d.id, {:
|
48
|
+
searchable_dictionaries.map{|d| [d.name, d.id, {class: d.css_class_name}]}
|
49
49
|
end
|
50
50
|
|
51
51
|
def combined_searches_options(search=nil)
|
@@ -63,14 +63,14 @@ module Discerner
|
|
63
63
|
searches_used = search.combined_searches
|
64
64
|
searches = searches_available | searches_used
|
65
65
|
end
|
66
|
-
searches.map {|s| [s.display_name, s.id, {:
|
66
|
+
searches.map {|s| [s.display_name, s.id, {class: s.dictionary.css_class_name}]}
|
67
67
|
end
|
68
68
|
|
69
69
|
def parameter_options(searchable_parameters, base_id=nil)
|
70
70
|
options = []
|
71
71
|
searchable_parameters.each do |p|
|
72
72
|
option = [p.display_name, p.id]
|
73
|
-
html_options = {:
|
73
|
+
html_options = {class: p.css_class_name}
|
74
74
|
html_options[:id] = searchable_object_index(p, base_id) unless base_id.blank?
|
75
75
|
option << html_options
|
76
76
|
options << option
|
@@ -128,7 +128,7 @@ module Discerner
|
|
128
128
|
end
|
129
129
|
|
130
130
|
def discerner_export_link
|
131
|
-
link_to "Export options", export_parameters_path(@discerner_search), :
|
131
|
+
link_to "Export options", export_parameters_path(@discerner_search), class: "discerner-button discerner-button-positive"
|
132
132
|
end
|
133
133
|
|
134
134
|
def format_datetime(datetime)
|
@@ -6,14 +6,14 @@ module Discerner
|
|
6
6
|
base.send :include, SoftDelete
|
7
7
|
|
8
8
|
# Associations
|
9
|
-
base.send :has_many, :parameter_categories, :
|
9
|
+
base.send :has_many, :parameter_categories, dependent: :destroy
|
10
10
|
base.send :has_many, :searches
|
11
11
|
|
12
12
|
#Validations
|
13
|
-
base.send :validates, :name, :
|
13
|
+
base.send :validates, :name, presence: true, uniqueness: {message: "for dictionary has already been taken"}
|
14
14
|
|
15
15
|
# Hooks
|
16
|
-
base.send :after_commit, :cascade_delete_parameter_categories, :
|
16
|
+
base.send :after_commit, :cascade_delete_parameter_categories, on: :update, if: Proc.new { |record| record.previous_changes.include?('deleted_at') }
|
17
17
|
end
|
18
18
|
|
19
19
|
# Instance Methods
|
@@ -6,15 +6,15 @@ module Discerner
|
|
6
6
|
base.send :include, SoftDelete
|
7
7
|
|
8
8
|
# Associations
|
9
|
-
base.send :belongs_to, :parameter, :
|
10
|
-
base.send :belongs_to, :search, :
|
9
|
+
base.send :belongs_to, :parameter, inverse_of: :export_parameters
|
10
|
+
base.send :belongs_to, :search, inverse_of: :export_parameters
|
11
11
|
|
12
12
|
# Scopes
|
13
13
|
base.send(:scope, :ordered, -> { base.order('discerner_export_parameters.id ASC') })
|
14
14
|
base.send(:scope, :by_parameter_category, ->(parameter_category) { base.includes(:parameter).where('discerner_parameters.parameter_category_id' => parameter_category.id) unless parameter_category.blank?})
|
15
15
|
|
16
16
|
# Validations
|
17
|
-
base.send :validates, :parameter, :search, :
|
17
|
+
base.send :validates, :parameter, :search, presence: { message: "for export parameter can't be blank" }
|
18
18
|
end
|
19
19
|
|
20
20
|
# Instance Methods
|
@@ -6,13 +6,13 @@ module Discerner
|
|
6
6
|
base.send :include, SoftDelete
|
7
7
|
|
8
8
|
# Associations
|
9
|
-
base.send :has_many, :search_parameter_values, :
|
10
|
-
base.send :has_many, :search_combinations, :
|
11
|
-
base.send :has_and_belongs_to_many, :parameter_types, :
|
9
|
+
base.send :has_many, :search_parameter_values, inverse_of: :operator
|
10
|
+
base.send :has_many, :search_combinations, inverse_of: :operator
|
11
|
+
base.send :has_and_belongs_to_many, :parameter_types, join_table: :discerner_operators_parameter_types
|
12
12
|
|
13
13
|
# Validations
|
14
|
-
base.send :validates, :symbol, :
|
15
|
-
base.send :validates, :operator_type, :
|
14
|
+
base.send :validates, :symbol, presence: true, uniqueness: {message: "for operator has already been taken"}
|
15
|
+
base.send :validates, :operator_type, presence: true
|
16
16
|
base.send :validate, :type_supported?
|
17
17
|
end
|
18
18
|
|
@@ -6,15 +6,15 @@ module Discerner
|
|
6
6
|
base.send :include, SoftDelete
|
7
7
|
|
8
8
|
# Associations
|
9
|
-
base.send :belongs_to, :parameter_category, :
|
10
|
-
base.send :belongs_to, :parameter_type, :
|
11
|
-
base.send :has_many, :parameter_values, :
|
12
|
-
base.send :has_many, :search_parameters, :
|
13
|
-
base.send :has_many, :export_parameters, :
|
14
|
-
base.send :has_many, :parameter_value_categories, :
|
9
|
+
base.send :belongs_to, :parameter_category, inverse_of: :parameters
|
10
|
+
base.send :belongs_to, :parameter_type, inverse_of: :parameters
|
11
|
+
base.send :has_many, :parameter_values, inverse_of: :parameter, dependent: :destroy
|
12
|
+
base.send :has_many, :search_parameters, inverse_of: :parameter, dependent: :destroy
|
13
|
+
base.send :has_many, :export_parameters, inverse_of: :parameter, dependent: :destroy
|
14
|
+
base.send :has_many, :parameter_value_categories, inverse_of: :parameter, dependent: :destroy
|
15
15
|
|
16
16
|
#Validations
|
17
|
-
base.send :validates, :name, :unique_identifier, :parameter_category, :
|
17
|
+
base.send :validates, :name, :unique_identifier, :parameter_category, presence: { message: "for parameter can't be blank" }
|
18
18
|
base.send :validate, :validate_unique_identifier
|
19
19
|
base.send :validate, :validate_search_attributes
|
20
20
|
base.send :validate, :validate_export_attributes
|
@@ -24,7 +24,7 @@ module Discerner
|
|
24
24
|
base.send(:scope, :exportable, -> {base.not_deleted.where('export_model is not null and export_method is not null')})
|
25
25
|
|
26
26
|
# Hooks
|
27
|
-
base.send :after_commit, :cascade_delete_parameter_values, :
|
27
|
+
base.send :after_commit, :cascade_delete_parameter_values, on: :update, if: Proc.new { |record| record.previous_changes.include?('deleted_at') }
|
28
28
|
end
|
29
29
|
|
30
30
|
# Instance Methods
|
@@ -55,7 +55,7 @@ module Discerner
|
|
55
55
|
def validate_unique_identifier
|
56
56
|
return if self.parameter_category.blank?
|
57
57
|
existing_parameters = Discerner::Parameter.
|
58
|
-
joins({ :
|
58
|
+
joins({ parameter_category: :dictionary }).
|
59
59
|
where('discerner_dictionaries.id = ? and discerner_parameters.unique_identifier = ?', self.parameter_category.dictionary.id, self.unique_identifier)
|
60
60
|
existing_parameters = existing_parameters.where('discerner_parameters.id != ?', self.id) unless self.id.blank?
|
61
61
|
errors.add(:base,"Unique identifier has to be unique within dictionary.") if existing_parameters.any?
|
@@ -6,12 +6,12 @@ module Discerner
|
|
6
6
|
base.send :include, SoftDelete
|
7
7
|
|
8
8
|
# Associations
|
9
|
-
base.send :belongs_to, :dictionary, :
|
10
|
-
base.send :has_many, :parameters, :
|
9
|
+
base.send :belongs_to, :dictionary, inverse_of: :parameter_categories
|
10
|
+
base.send :has_many, :parameters, inverse_of: :parameter_category, dependent: :destroy
|
11
11
|
|
12
12
|
# Validations
|
13
|
-
base.send :validates, :name, :
|
14
|
-
base.send :validates, :dictionary, :
|
13
|
+
base.send :validates, :name, presence: true, uniqueness: { scope: :dictionary_id, message: "for parameter category has already been taken"}
|
14
|
+
base.send :validates, :dictionary, presence: { message: "for parameter category can't be blank" }
|
15
15
|
|
16
16
|
# Scopes
|
17
17
|
base.send(:scope, :searchable, -> {base.includes(:parameters).where('discerner_parameters.search_model is not null and discerner_parameters.search_method is not null and discerner_parameters.deleted_at is null').references(:discerner_parameters)})
|
@@ -19,7 +19,7 @@ module Discerner
|
|
19
19
|
base.send(:scope, :ordered_by_name, -> {base.order('discerner_parameter_categories.name ASC')})
|
20
20
|
|
21
21
|
# Hooks
|
22
|
-
base.send :after_commit, :cascade_delete_parameters, :
|
22
|
+
base.send :after_commit, :cascade_delete_parameters, on: :update, if: Proc.new { |record| record.previous_changes.include?('deleted_at') }
|
23
23
|
end
|
24
24
|
|
25
25
|
# Instance Methods
|
@@ -6,11 +6,11 @@ module Discerner
|
|
6
6
|
base.send :include, SoftDelete
|
7
7
|
|
8
8
|
# Associations
|
9
|
-
base.send :has_many, :parameters, :
|
10
|
-
base.send :has_and_belongs_to_many, :operators, :
|
9
|
+
base.send :has_many, :parameters, inverse_of: :parameter_type
|
10
|
+
base.send :has_and_belongs_to_many, :operators, join_table: :discerner_operators_parameter_types
|
11
11
|
|
12
12
|
# Validations
|
13
|
-
base.send :validates, :name, :
|
13
|
+
base.send :validates, :name, presence: true, uniqueness: {message: "for parameter type has already been taken"}
|
14
14
|
base.send :validate, :name_supported?
|
15
15
|
end
|
16
16
|
|
@@ -6,9 +6,9 @@ module Discerner
|
|
6
6
|
base.send :include, SoftDelete
|
7
7
|
|
8
8
|
# Associations
|
9
|
-
base.send :belongs_to, :parameter, :
|
10
|
-
base.send :has_many, :search_parameter_values, :
|
11
|
-
base.send :has_one, :parameter_value_categorization, :
|
9
|
+
base.send :belongs_to, :parameter, inverse_of: :parameter_values
|
10
|
+
base.send :has_many, :search_parameter_values, inverse_of: :parameter_value, dependent: :destroy
|
11
|
+
base.send :has_one, :parameter_value_categorization, inverse_of: :parameter_value, dependent: :destroy
|
12
12
|
base.send :has_one, :parameter_value_category, :through=> :parameter_value_categorization
|
13
13
|
|
14
14
|
# Scopes
|
@@ -16,16 +16,16 @@ module Discerner
|
|
16
16
|
base.send(:scope, :ordered_by_parameter_and_name, -> { base.order('discerner_parameter_values.parameter_id ASC, discerner_parameter_values.name ASC') })
|
17
17
|
|
18
18
|
#Validations
|
19
|
-
base.send :validates, :parameter, :
|
20
|
-
base.send :validates, :search_value, :
|
21
|
-
base.send :validates, :name, :
|
19
|
+
base.send :validates, :parameter, presence: true
|
20
|
+
base.send :validates, :search_value, length: { maximum: 1000 }, uniqueness: {scope: :parameter_id, message: "for parameter value has already been taken"}
|
21
|
+
base.send :validates, :name, presence: true, length: { maximum: 1000 }
|
22
22
|
base.send :validate, :parameter_category_belongs_to_parameter
|
23
23
|
|
24
24
|
# Hooks
|
25
|
-
base.send :after_commit, :create_search_parameter_values, :
|
26
|
-
base.send :after_commit, :update_search_parameter_values, :
|
25
|
+
base.send :after_commit, :create_search_parameter_values, on: :create
|
26
|
+
base.send :after_commit, :update_search_parameter_values, on: :update, if: Proc.new { |record| record.previous_changes.include?('deleted_at') }
|
27
27
|
base.send :scope, :categorized, -> {base.joins(:parameter_value_category)}
|
28
|
-
base.send :scope, :uncategorized, -> {base.includes(:parameter_value_category).where(:
|
28
|
+
base.send :scope, :uncategorized, -> {base.includes(:parameter_value_category).where(discerner_parameter_value_categories: {name: nil})}
|
29
29
|
end
|
30
30
|
|
31
31
|
# Instance Methods
|
@@ -61,9 +61,9 @@ module Discerner
|
|
61
61
|
return if parameter.blank? || parameter.parameter_type.blank?
|
62
62
|
if parameter.parameter_type.name == 'list'
|
63
63
|
parameter.search_parameters.each do |sp|
|
64
|
-
if sp.search_parameter_values.where(:
|
64
|
+
if sp.search_parameter_values.where(parameter_value_id: id).blank?
|
65
65
|
max_display_order = sp.search_parameter_values.ordered_by_display_order.last.display_order || -1
|
66
|
-
sp.search_parameter_values.build(:
|
66
|
+
sp.search_parameter_values.build(parameter_value_id: id, display_order: max_display_order + 1)
|
67
67
|
sp.save
|
68
68
|
end
|
69
69
|
end
|