discerner 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|