discerner 1.1.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +97 -0
- data/Rakefile +29 -0
- data/app/assets/images/discerner/add.png +0 -0
- data/app/assets/images/discerner/ajax-loader.gif +0 -0
- data/app/assets/images/discerner/bar.gif +0 -0
- data/app/assets/images/discerner/bullet_arrow_down.png +0 -0
- data/app/assets/images/discerner/bullet_arrow_up.png +0 -0
- data/app/assets/images/discerner/cog.png +0 -0
- data/app/assets/images/discerner/delete.png +0 -0
- data/app/assets/images/discerner/edit.png +0 -0
- data/app/assets/images/discerner/excel.png +0 -0
- data/app/assets/images/discerner/greencheck.gif +0 -0
- data/app/assets/images/discerner/rails.png +0 -0
- data/app/assets/images/discerner/show.png +0 -0
- data/app/assets/images/discerner/switch_minus.gif +0 -0
- data/app/assets/images/discerner/switch_plus.gif +0 -0
- data/app/assets/javascripts/discerner/application.js +20 -0
- data/app/assets/javascripts/discerner/combobox.js +301 -0
- data/app/assets/javascripts/discerner/discerner.js +19 -0
- data/app/assets/javascripts/discerner/export_parameters.js +13 -0
- data/app/assets/javascripts/discerner/jquery/jquery.blockUI.js +576 -0
- data/app/assets/javascripts/discerner/jquery/jquery.form.js +1074 -0
- data/app/assets/javascripts/discerner/nested_attributes.js +69 -0
- data/app/assets/javascripts/discerner/search_combinations.js +49 -0
- data/app/assets/javascripts/discerner/search_parameter.js +131 -0
- data/app/assets/javascripts/discerner/search_parameter_value.js +172 -0
- data/app/assets/javascripts/discerner/searches.js +93 -0
- data/app/assets/javascripts/discerner/url.js +42 -0
- data/app/assets/stylesheets/discerner/application.css +16 -0
- data/app/assets/stylesheets/discerner/buttons.sass +13 -0
- data/app/assets/stylesheets/discerner/categorized_autocompleter.sass +53 -0
- data/app/assets/stylesheets/discerner/discerner.sass +51 -0
- data/app/assets/stylesheets/discerner/export_parameters.sass +43 -0
- data/app/assets/stylesheets/discerner/links.sass +29 -0
- data/app/assets/stylesheets/discerner/searches.sass +205 -0
- data/app/assets/stylesheets/discerner/tables.sass +32 -0
- data/app/controllers/discerner/application_controller.rb +2 -0
- data/app/controllers/discerner/export_parameters_controller.rb +5 -0
- data/app/controllers/discerner/parameters_controller.rb +5 -0
- data/app/controllers/discerner/searches_controller.rb +5 -0
- data/app/helpers/discerner/application_helper.rb +4 -0
- data/app/helpers/discerner/parameters_helper.rb +5 -0
- data/app/helpers/discerner/searches_helper.rb +5 -0
- data/app/models/discerner/dictionary.rb +5 -0
- data/app/models/discerner/export_parameter.rb +5 -0
- data/app/models/discerner/operator.rb +5 -0
- data/app/models/discerner/parameter.rb +5 -0
- data/app/models/discerner/parameter_category.rb +5 -0
- data/app/models/discerner/parameter_type.rb +5 -0
- data/app/models/discerner/parameter_value.rb +5 -0
- data/app/models/discerner/parameter_value_categorization.rb +5 -0
- data/app/models/discerner/parameter_value_category.rb +5 -0
- data/app/models/discerner/search.rb +5 -0
- data/app/models/discerner/search_combination.rb +5 -0
- data/app/models/discerner/search_parameter.rb +5 -0
- data/app/models/discerner/search_parameter_value.rb +5 -0
- data/app/views/discerner/export_parameters/index.html.haml +55 -0
- data/app/views/discerner/parameters/_values_autocompleter.html.haml +49 -0
- data/app/views/discerner/parameters/values.html.haml +1 -0
- data/app/views/discerner/searches/_form.html.haml +21 -0
- data/app/views/discerner/searches/_form_combined_searches.html.haml +32 -0
- data/app/views/discerner/searches/_form_controls.html.haml +8 -0
- data/app/views/discerner/searches/_form_header.html.haml +39 -0
- data/app/views/discerner/searches/_form_search_parameters.html.haml +28 -0
- data/app/views/discerner/searches/_list.html.haml +17 -0
- data/app/views/discerner/searches/_search_combination_fields.html.haml +22 -0
- data/app/views/discerner/searches/_search_parameter_fields.html.haml +48 -0
- data/app/views/discerner/searches/_search_parameter_value_fields.html.haml +62 -0
- data/app/views/discerner/searches/_summary.html.haml +25 -0
- data/app/views/discerner/searches/edit.html.haml +8 -0
- data/app/views/discerner/searches/index.html.haml +13 -0
- data/app/views/discerner/searches/index.js.haml +1 -0
- data/app/views/discerner/searches/new.html.haml +3 -0
- data/app/views/discerner/searches/rename.html.haml +6 -0
- data/app/views/discerner/searches/update.js.haml +7 -0
- data/app/views/discerner/shared/_categorized_autocompleter_items.html.haml +15 -0
- data/app/views/discerner/shared/_error_messages.html.haml +5 -0
- data/app/views/layouts/discerner/searches.html.erb +17 -0
- data/config/cucumber.yml +8 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20121004040716_create_discerner_dictionaries.rb +11 -0
- data/db/migrate/20121004153043_create_discerner_parameter_categories.rb +12 -0
- data/db/migrate/20121005194843_create_discerner_parameter_types.rb +11 -0
- data/db/migrate/20121005203223_create_discerner_parameters.rb +14 -0
- data/db/migrate/20121008154855_create_discerner_operators.rb +13 -0
- data/db/migrate/20121008160313_create_discerner_operators_parameter_types.rb +8 -0
- data/db/migrate/20121008161455_create_discerner_parameter_values.rb +13 -0
- data/db/migrate/20121008180829_create_discerner_searches.rb +11 -0
- data/db/migrate/20121008182443_create_discerner_search_parameters.rb +11 -0
- data/db/migrate/20121011205130_create_discerner_search_parameter_values.rb +15 -0
- data/db/migrate/20121211213215_add_dictionary_id_to_discerner_searches.rb +5 -0
- data/db/migrate/20130205193602_create_discerner_search_combinations.rb +12 -0
- data/db/migrate/20130211230636_create_discerner_export_parameters.rb +9 -0
- data/db/migrate/20130213185818_add_search_columns_to_discerner_parameters.rb +38 -0
- data/db/migrate/20130213205255_rename_database_name_to_search_value_in_discerner_parameter_values.rb +5 -0
- data/db/migrate/20130215165416_add_searchable_to_discerner_parameters.rb +5 -0
- data/db/migrate/20130218230257_add_exclusive_to_discerner_parameters.rb +5 -0
- data/db/migrate/20130220163015_replace_integer_type_with_numeric.rb +22 -0
- data/db/migrate/20130221172826_add_unique_identifier_to_discerner_parameters.rb +5 -0
- data/db/migrate/20130222052924_change_search_attribute_to_method.rb +29 -0
- data/db/migrate/20130222070959_add_export_columns_to_discerner_parameters.rb +6 -0
- data/db/migrate/20130227031747_add_unique_identifier_to_discerner_operators.rb +16 -0
- data/db/migrate/20130306015019_change_discerner_parameter_values_name.rb +9 -0
- data/db/migrate/20130306212430_add_deleted_at_to_discerner_search_parameters.rb +5 -0
- data/db/migrate/20130306212504_add_deleted_at_to_discerner_search_parameter_values.rb +5 -0
- data/db/migrate/20130306212527_add_deleted_at_to_discerner_search_combinations.rb +5 -0
- data/db/migrate/20130306212818_add_deleted_at_to_discerner_export_parameters.rb +5 -0
- data/db/migrate/20130311190717_add_operator_type_to_discerner_operators.rb +5 -0
- data/db/migrate/20131212175110_remove_extra_search_parameter_values.rb +10 -0
- data/db/migrate/20140204170625_create_discerner_parameter_value_categories.rb +16 -0
- data/db/migrate/20140204170646_create_discerner_parameter_value_categorizations.rb +12 -0
- data/db/migrate/20140227191827_remove_blank_parameter_values_from_export_parameters.rb +10 -0
- data/db/seeds.rb +0 -0
- data/lib/discerner/engine.rb +16 -0
- data/lib/discerner/methods/controllers/export_parameters_controller.rb +38 -0
- data/lib/discerner/methods/controllers/parameters_controller.rb +30 -0
- data/lib/discerner/methods/controllers/searches_controller.rb +204 -0
- data/lib/discerner/methods/helpers/searches_helper.rb +145 -0
- data/lib/discerner/methods/models/dictionary.rb +54 -0
- data/lib/discerner/methods/models/export_parameter.rb +35 -0
- data/lib/discerner/methods/models/operator.rb +42 -0
- data/lib/discerner/methods/models/parameter.rb +90 -0
- data/lib/discerner/methods/models/parameter_category.rb +60 -0
- data/lib/discerner/methods/models/parameter_type.rb +33 -0
- data/lib/discerner/methods/models/parameter_value.rb +87 -0
- data/lib/discerner/methods/models/parameter_value_categorization.rb +21 -0
- data/lib/discerner/methods/models/parameter_value_category.rb +45 -0
- data/lib/discerner/methods/models/search.rb +147 -0
- data/lib/discerner/methods/models/search_combination.rb +50 -0
- data/lib/discerner/methods/models/search_parameter.rb +128 -0
- data/lib/discerner/methods/models/search_parameter_value.rb +130 -0
- data/lib/discerner/methods/models/soft_delete.rb +35 -0
- data/lib/discerner/methods/models/warning.rb +15 -0
- data/lib/discerner/parser.rb +497 -0
- data/lib/discerner/version.rb +3 -0
- data/lib/discerner.rb +4 -0
- data/lib/generators/discerner/dictionary/dictionary_generator.rb +38 -0
- data/lib/generators/discerner/dictionary/templates/model.rb +15 -0
- data/lib/generators/discerner/dictionary/templates/show.xls.erb +37 -0
- data/lib/generators/discerner/dictionary/templates/view.html.haml +2 -0
- data/lib/generators/discerner/install/install_generator.rb +153 -0
- data/lib/generators/discerner/install/templates/controllers/export_parameters_controller.rb +20 -0
- data/lib/generators/discerner/install/templates/controllers/parameters_controller.rb +15 -0
- data/lib/generators/discerner/install/templates/controllers/searches_controller.rb +39 -0
- data/lib/generators/discerner/install/templates/dictionaries.yml +236 -0
- data/lib/generators/discerner/install/templates/helpers/searches_helper.rb +9 -0
- data/lib/generators/discerner/install/templates/models/book.rb +15 -0
- data/lib/generators/discerner/install/templates/models/dictionary.rb +9 -0
- data/lib/generators/discerner/install/templates/models/export_parameter.rb +9 -0
- data/lib/generators/discerner/install/templates/models/operator.rb +9 -0
- data/lib/generators/discerner/install/templates/models/parameter.rb +10 -0
- data/lib/generators/discerner/install/templates/models/parameter_category.rb +9 -0
- data/lib/generators/discerner/install/templates/models/parameter_type.rb +9 -0
- data/lib/generators/discerner/install/templates/models/parameter_value.rb +9 -0
- data/lib/generators/discerner/install/templates/models/parameter_value_categorization.rb +9 -0
- data/lib/generators/discerner/install/templates/models/parameter_value_category.rb +9 -0
- data/lib/generators/discerner/install/templates/models/search.rb +9 -0
- data/lib/generators/discerner/install/templates/models/search_combination.rb +9 -0
- data/lib/generators/discerner/install/templates/models/search_parameter.rb +9 -0
- data/lib/generators/discerner/install/templates/models/search_parameter_value.rb +9 -0
- data/lib/generators/discerner/install/templates/views/layouts/searches.html.erb +17 -0
- data/lib/setup/operators.yml +91 -0
- data/lib/tasks/cucumber.rake +65 -0
- data/lib/tasks/discerner_tasks.rake +30 -0
- metadata +531 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
#discerner_search_header
|
2
|
+
- if @discerner_search.persisted?
|
3
|
+
#messages
|
4
|
+
|
5
|
+
.discerner_search_dictionary
|
6
|
+
%b Dictionary:
|
7
|
+
%span{ :class => "#{@discerner_search.dictionary.css_class_name}"}
|
8
|
+
#{@discerner_search.dictionary.name}
|
9
|
+
- if @discerner_search.dictionary.deleted?
|
10
|
+
%span{ :style => "color:red;"}
|
11
|
+
%b This dictionary has been deleted. You will not be able to execute or edit this search.
|
12
|
+
|
13
|
+
.discerner_search_name
|
14
|
+
%b Search name:
|
15
|
+
%span.discerner_search_name
|
16
|
+
= @discerner_search.display_name
|
17
|
+
%span.discerner_search_name_edit
|
18
|
+
= link_to 'Edit', '#', :class => "edit_link icon_link"
|
19
|
+
|
20
|
+
- else
|
21
|
+
.discerner_dictionary_required_message
|
22
|
+
%span
|
23
|
+
Select dictionary in order to add search criteria
|
24
|
+
|
25
|
+
%div.discerner_search_dictionary
|
26
|
+
- if @searchable_dictionaries.length > 1
|
27
|
+
= f.label :dictionary_id
|
28
|
+
= f.select :dictionary_id, dictionary_options(@searchable_dictionaries), :include_blank => true
|
29
|
+
- else
|
30
|
+
%b Dictionary:
|
31
|
+
= f.hidden_field :dictionary_id, :value => @searchable_dictionaries.last.id
|
32
|
+
%span{ :class => "#{@searchable_dictionaries.last.css_class_name}"}
|
33
|
+
= @searchable_dictionaries.last.name
|
34
|
+
|
35
|
+
%div.discerner_search_name
|
36
|
+
= f.label :name, "Search name"
|
37
|
+
= f.text_field :name
|
38
|
+
|
39
|
+
.clear
|
@@ -0,0 +1,28 @@
|
|
1
|
+
%table{ :class => 'records search_parameters' }
|
2
|
+
%thead
|
3
|
+
%tr
|
4
|
+
%th.parameter_boolean_operator
|
5
|
+
%th.parameter
|
6
|
+
Criteria
|
7
|
+
%th.remove
|
8
|
+
%th.parameter_values
|
9
|
+
Selections
|
10
|
+
%tbody.nested_records_search_parameters
|
11
|
+
= f.fields_for :search_parameters, f.object.search_parameters.ordered_by_display_order do |search_parameter|
|
12
|
+
= render :partial => 'search_parameter_fields', :locals => { :f => search_parameter }
|
13
|
+
%tfoot
|
14
|
+
%tr
|
15
|
+
%td{ :colspan => '4', :class => 'add_search_parameters_link' }
|
16
|
+
= link_to_add_fields "Add criteria", :search_parameters
|
17
|
+
.clear
|
18
|
+
|
19
|
+
:javascript
|
20
|
+
$(function () {
|
21
|
+
var discernerSearchParametersTemplate = '#{generate_nested_attributes_template(f, :search_parameters, 'search_parameter')}',
|
22
|
+
parametersUrl = decodeURIComponent('#{values_parameters_url(:parameter_id => ':question_id', :format => 'json')}'); // used to generate parameter values for list parameters
|
23
|
+
|
24
|
+
new Discerner.SearchParameter.UI({
|
25
|
+
searchParametersTemplate: discernerSearchParametersTemplate,
|
26
|
+
parametersUrl: parametersUrl
|
27
|
+
});
|
28
|
+
});
|
@@ -0,0 +1,17 @@
|
|
1
|
+
%table{ :class => 'records' }
|
2
|
+
%thead
|
3
|
+
%tr
|
4
|
+
%th Name
|
5
|
+
%th Last updated on
|
6
|
+
%th
|
7
|
+
%tbody
|
8
|
+
- @discerner_searches.each do |search|
|
9
|
+
%tr{:class=>"#{cycle('odd_record','even_record')} #{'error' if search.disabled?}"}
|
10
|
+
%td
|
11
|
+
= search.display_name
|
12
|
+
%td
|
13
|
+
= format_datetime(search.updated_at)
|
14
|
+
%td
|
15
|
+
= link_to 'Open', edit_search_path(search), :class => 'show_link icon_link'
|
16
|
+
= link_to 'Export options', export_parameters_path(search), :class => 'options_link icon_link' if export_discerner_results?
|
17
|
+
= link_to 'Delete', search_path(search), :data => {:confirm => 'Are you sure?'}, :method => :delete, :class => "icon_link delete_link"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
- if f.object.disabled? && f.object.warnings.any?
|
2
|
+
%tr.error
|
3
|
+
%td
|
4
|
+
%td.warnings{:colspan => "4"}
|
5
|
+
%span
|
6
|
+
= f.object.warnings.full_messages.join(', ')
|
7
|
+
|
8
|
+
- unless f.blank?
|
9
|
+
- search_combination_id = nested_record_id(f, :search_combination)
|
10
|
+
%tr{ :id => "#{search_combination_id}", :class => "search_combination fields #{'error' if f.object.warnings.any?}" }
|
11
|
+
%td.combined_search_operator
|
12
|
+
%span
|
13
|
+
restrict to
|
14
|
+
%td.combined_search
|
15
|
+
%div.combined_search_combobox
|
16
|
+
= f.hidden_field :display_order
|
17
|
+
= f.hidden_field :operator_id, :value => Discerner::Operator.where(:symbol => 'include').first.id
|
18
|
+
-#= f.select(:operator_id, operator_options('search'))
|
19
|
+
= f.select(:combined_search_id, combined_searches_options(@discerner_search), { :include_blank => true },{ :class => 'search_combinations_combobox_autocompleter' })
|
20
|
+
%td.remove
|
21
|
+
= link_to_remove_fields 'Remove', f, :search_combinations
|
22
|
+
%td
|
@@ -0,0 +1,48 @@
|
|
1
|
+
- search_parameter_id = nested_record_id(f, :search_parameter)
|
2
|
+
|
3
|
+
- if f.object.disabled? && f.object.warnings.any?
|
4
|
+
%tr.error
|
5
|
+
%td
|
6
|
+
%td.warnings{:colspan => "4"}
|
7
|
+
%span
|
8
|
+
= f.object.warnings.full_messages.join(', ')
|
9
|
+
|
10
|
+
%tr{ :id => "#{search_parameter_id}", :class => "search_parameter fields #{'error' if f.object.warnings.any?}" }
|
11
|
+
%td.parameter_boolean_operator
|
12
|
+
%span
|
13
|
+
where
|
14
|
+
%td.parameter
|
15
|
+
%div{:class => 'ui-widget categorized_autocompleter'}
|
16
|
+
= f.hidden_field :display_order
|
17
|
+
= f.select(:parameter_id, parameter_options(@searchable_parameters, search_parameter_id), { :include_blank => true },{ :class => 'parameters_combobox_autocompleter' })
|
18
|
+
%a{ :href => 'javascript:void(0);', :class => 'categorized_autocompleter_link collapsed_categorized_autocompleter_link' }
|
19
|
+
Select
|
20
|
+
.div-category-popup{ :style => "display: none;"}
|
21
|
+
.div-category-list
|
22
|
+
- @searchable_parameter_categories.each do |parameter_category|
|
23
|
+
= div_for parameter_category, :class => "#{parameter_category.dictionary.css_class_name}" do
|
24
|
+
%p{ :class => 'parameter_category_name' }
|
25
|
+
= parameter_category.name
|
26
|
+
- items = @searchable_parameters.select{|sp| sp.parameter_category_id == parameter_category.id}.sort{|a,b| a.name <=> b.name}.map{ |p| {:name => p.name, :rel => searchable_object_index(p, search_parameter_id)}}
|
27
|
+
- unless items.empty?
|
28
|
+
= render :partial => 'discerner/shared/categorized_autocompleter_items', :locals => { :columns_count => 4, :items => items }
|
29
|
+
|
30
|
+
.div-instruction-bar
|
31
|
+
%td.remove
|
32
|
+
= link_to_remove_fields 'Remove', f, :search_parameters
|
33
|
+
%td.parameter_values
|
34
|
+
.search_parameter_values
|
35
|
+
%table{ :class => 'records' }
|
36
|
+
%tbody.nested_records_search_parameter_values
|
37
|
+
= f.fields_for :search_parameter_values, f.object.search_parameter_values.ordered_by_display_order do |search_parameter_value_form|
|
38
|
+
= render :partial => 'search_parameter_value_fields', :locals => { :f => search_parameter_value_form }
|
39
|
+
%span{ :class => 'add_header'}
|
40
|
+
= link_to_add_fields "Add selection", :search_parameter_values, {:style => "display:none;"}
|
41
|
+
|
42
|
+
:javascript
|
43
|
+
$(function () {
|
44
|
+
var searchParameterValuesTemplate = '#{generate_nested_attributes_template(f, :search_parameter_values, "search_parameter_value")}',
|
45
|
+
container = $('##{search_parameter_id}'),
|
46
|
+
parametersUrl = decodeURIComponent('#{values_parameters_url(:parameter_id => ':question_id', :search_parameter_value_id => ':search_parameter_value_id')}'), // used to generate parameter values for combobox parameters
|
47
|
+
searchParameterUI = new Discerner.SearchParameterValue.UI({ container: container, searchParameterValuesTemplate: searchParameterValuesTemplate, parametersUrl: parametersUrl });
|
48
|
+
});
|
@@ -0,0 +1,62 @@
|
|
1
|
+
- search_parameter_value_id = nested_record_id(f, :search_parameter_value)
|
2
|
+
- if f.object.disabled? && f.object.warnings.any?
|
3
|
+
%tr.error
|
4
|
+
%td
|
5
|
+
%td.warnings{:colspan => "6"}
|
6
|
+
%span
|
7
|
+
= f.object.warnings.full_messages.join(', ')
|
8
|
+
|
9
|
+
%tr{ :id => "#{search_parameter_value_id}", :class => "search_parameter_value fields #{'error' if f.object.warnings.any?} search_parameter_value_new" }
|
10
|
+
%td.parameter_values_boolean_operator
|
11
|
+
= f.hidden_field :display_order
|
12
|
+
%span
|
13
|
+
|
14
|
+
- if f.object.new_record? # this part is used for rendering newly added parameter values
|
15
|
+
%td.operator
|
16
|
+
= f.select(:operator_id, operator_options, { :include_blank => true })
|
17
|
+
%td.chosen
|
18
|
+
= f.check_box :chosen
|
19
|
+
%td.parameter_value
|
20
|
+
= f.hidden_field :parameter_value_id, :class => 'parameter_value_id'
|
21
|
+
%span{ :class => 'parameter_value_text' }
|
22
|
+
%td.value
|
23
|
+
= f.text_field :value
|
24
|
+
%td.additional_value
|
25
|
+
= f.text_field :additional_value
|
26
|
+
%td.remove
|
27
|
+
= link_to_remove_fields 'Remove', f, :search_parameter_values
|
28
|
+
|
29
|
+
- else # this part is used for rendering existing parameter values
|
30
|
+
- parameter = f.object.search_parameter.parameter
|
31
|
+
- type = parameter.parameter_type.name
|
32
|
+
|
33
|
+
- case type
|
34
|
+
- when 'list'
|
35
|
+
%td.chosen
|
36
|
+
= f.check_box :chosen
|
37
|
+
%td.parameter_value
|
38
|
+
= f.hidden_field :parameter_value_id, :class => 'parameter_value_id'
|
39
|
+
%span{ :class => 'parameter_value_text' }
|
40
|
+
= f.object.parameter_value.name
|
41
|
+
%td{:class => "remove", :class => "invisible"}
|
42
|
+
= link_to_remove_fields 'Remove', f, :search_parameter_values
|
43
|
+
|
44
|
+
- when 'combobox'
|
45
|
+
%td.parameter_value
|
46
|
+
= render :partial => 'discerner/parameters/values_autocompleter', :locals => {:parameter => parameter, :f => f, :search_parameter_value_id => search_parameter_value_id}
|
47
|
+
%td.remove
|
48
|
+
= link_to_remove_fields 'Remove', f, :search_parameter_values
|
49
|
+
|
50
|
+
- else
|
51
|
+
%td.operator
|
52
|
+
- selected = f.object.operator.blank? ? nil : f.object.operator.id
|
53
|
+
= f.select(:operator_id, options_for_select([["", ""]] + operator_options(type), selected))
|
54
|
+
|
55
|
+
%td{:class => "value #{'invisible' if f.object.operator && f.object.operator.operator_type == 'presence'}"}
|
56
|
+
= f.text_field :value, :class => "#{type == 'date' ? 'datepicker' : nil}"
|
57
|
+
|
58
|
+
%td{:class => "additional_value #{'invisible' unless f.object.operator && f.object.operator.operator_type == 'range'}"}
|
59
|
+
= f.text_field :additional_value, :class => "#{type == 'date' ? 'datepicker' : nil}"
|
60
|
+
%td.remove
|
61
|
+
= link_to_remove_fields 'Remove', f, :search_parameter_values
|
62
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#discerner_search_summary
|
2
|
+
%h3 Selected criteria
|
3
|
+
%table
|
4
|
+
- if @discerner_search.combined_searches.any?
|
5
|
+
%tr.discerner_combined_searches_summary
|
6
|
+
%td.parameter_category
|
7
|
+
%b Included searches:
|
8
|
+
%td.search_parameter_summary
|
9
|
+
= @discerner_search.combined_searches.map{|cs| cs.name}.join(', ')
|
10
|
+
|
11
|
+
- @discerner_search.parameter_categories.each do |category|
|
12
|
+
- search_parameters = @discerner_search.search_parameters
|
13
|
+
- search_parameters = search_parameters.by_parameter_category(category) if category
|
14
|
+
- unless search_parameters.blank?
|
15
|
+
%tr.parameter_category
|
16
|
+
%th{:colspan => "2"}
|
17
|
+
= category.name
|
18
|
+
- search_parameters.each do |sp|
|
19
|
+
%tr.search_parameter_summary
|
20
|
+
%td.parameter_name
|
21
|
+
#{sp.parameter.name}:
|
22
|
+
%td.parameter_value
|
23
|
+
= search_parameter_values(sp)
|
24
|
+
.clear
|
25
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#discerner_searches
|
2
|
+
%p
|
3
|
+
%h3 Saved searches
|
4
|
+
|
5
|
+
#filter
|
6
|
+
= form_tag searches_path, :id => 'discerner_searches_filter', :class => "filter", :method => 'get', :remote => true do
|
7
|
+
%div.filter
|
8
|
+
= label_tag :query, "Filter by name"
|
9
|
+
= text_field_tag :query, params[:query]
|
10
|
+
#searches-list
|
11
|
+
= render :partial => "list"
|
12
|
+
.discerner-buttons
|
13
|
+
= link_to 'Start a new search', new_search_path, { :class => 'discerner-button discerner-button-positive' }
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#searches-list").html("#{escape_javascript(render :partial => 'list')}")
|
@@ -0,0 +1,6 @@
|
|
1
|
+
= form_tag search_path(@discerner_search), :method => :put, :remote => :true do
|
2
|
+
= render 'discerner/shared/error_messages', :object => @discerner_search
|
3
|
+
= text_field_tag "search[name]", @discerner_search.name.strip
|
4
|
+
|
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'
|
@@ -0,0 +1,7 @@
|
|
1
|
+
- if @discerner_search.errors.any?
|
2
|
+
$("#messages").html("#{escape_javascript(render :partial => 'shared/error_messages', :locals => {:object => @discerner_search})}")
|
3
|
+
- else
|
4
|
+
$("#messages").html('')
|
5
|
+
$('span.discerner_search_name_edit_dialog').siblings('span.discerner_search_name').html("#{@discerner_search.display_name}").show();
|
6
|
+
$('span.discerner_search_name_edit_dialog').siblings('span.discerner_search_name_edit').show();
|
7
|
+
$('span.discerner_search_name_edit_dialog').remove();
|
@@ -0,0 +1,15 @@
|
|
1
|
+
- columns_count ||= 4
|
2
|
+
- unless items.blank?
|
3
|
+
- items_rendered_count = 0
|
4
|
+
- (0...columns_count).each do |i|
|
5
|
+
.column
|
6
|
+
%ul
|
7
|
+
- column_items_count = ((items.size - items_rendered_count).to_f/(columns_count-i)).ceil
|
8
|
+
- from = items_rendered_count
|
9
|
+
- to = items_rendered_count + column_items_count
|
10
|
+
- to = items.size if to > items.size
|
11
|
+
- items_rendered_count = to
|
12
|
+
- (from...to).each do |j|
|
13
|
+
.criteria
|
14
|
+
%li
|
15
|
+
= link_to items[j][:name], 'javascript:void(0);', :class => 'categorized_autocompleter_item_link', :rel => "#{items[j][:rel]}"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<%= yield :title %>
|
5
|
+
<%= stylesheet_link_tag "discerner/application", :media => "all" %>
|
6
|
+
<%= javascript_include_tag "discerner/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body class="discerner">
|
10
|
+
<% flash.each do |message_type, message| %>
|
11
|
+
<div class="message" id="<%= message_type %>">
|
12
|
+
<%= message %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
<%= yield %>
|
16
|
+
</body>
|
17
|
+
</html>
|
data/config/cucumber.yml
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
<%
|
2
|
+
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
3
|
+
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
|
4
|
+
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip"
|
5
|
+
%>
|
6
|
+
default: <%= std_opts %> features
|
7
|
+
wip: --tags @wip:3 --wip features
|
8
|
+
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
|
data/config/routes.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
Discerner::Engine.routes.draw do
|
2
|
+
resources :searches do
|
3
|
+
member do
|
4
|
+
get :rename
|
5
|
+
resources :export_parameters, :only => :index do
|
6
|
+
collection do
|
7
|
+
post :assign
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
resources :parameters do
|
13
|
+
collection do
|
14
|
+
get :values
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateDiscernerDictionaries < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :discerner_dictionaries do |t|
|
4
|
+
t.string :name, :null => false
|
5
|
+
t.datetime :deleted_at
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :discerner_dictionaries, [:name, :deleted_at], :unique => true, :name => 'index_discerner_dictionaries'
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateDiscernerParameterCategories < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :discerner_parameter_categories do |t|
|
4
|
+
t.integer :dictionary_id, :null => false
|
5
|
+
t.string :name, :null => false
|
6
|
+
t.datetime :deleted_at
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :discerner_parameter_categories, [:name, :dictionary_id, :deleted_at], :unique => true, :name => 'index_discerner_parameter_categories'
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CreateDiscernerParameterTypes < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :discerner_parameter_types do |t|
|
4
|
+
t.string :name
|
5
|
+
t.datetime :deleted_at
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :discerner_parameter_types, [:name, :deleted_at], :unique => true, :name => 'index_discerner_parameter_types'
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateDiscernerParameters < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :discerner_parameters do |t|
|
4
|
+
t.string :name
|
5
|
+
t.datetime :deleted_at
|
6
|
+
t.integer :parameter_category_id
|
7
|
+
t.integer :parameter_type_id
|
8
|
+
t.string :database_name
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
add_index :discerner_parameters, [:database_name, :deleted_at], :unique => true, :name => 'index_discerner_parameters'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateDiscernerOperators < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :discerner_operators do |t|
|
4
|
+
t.string :symbol
|
5
|
+
t.string :text
|
6
|
+
t.boolean :binary
|
7
|
+
t.datetime :deleted_at
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
add_index :discerner_operators, [:symbol, :deleted_at], :unique => true, :name => 'index_discerner_operators'
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateDiscernerParameterValues < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :discerner_parameter_values do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :database_name
|
6
|
+
t.datetime :deleted_at
|
7
|
+
t.integer :parameter_id
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
add_index :discerner_parameter_values, [:database_name, :parameter_id, :deleted_at], :unique => true, :name => 'index_discerner_parameter_values'
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateDiscernerSearchParameterValues < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :discerner_search_parameter_values do |t|
|
4
|
+
t.integer :parameter_value_id
|
5
|
+
t.integer :operator_id
|
6
|
+
t.integer :search_parameter_id
|
7
|
+
t.string :value
|
8
|
+
t.string :additional_value
|
9
|
+
t.boolean :chosen
|
10
|
+
t.integer :display_order
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateDiscernerSearchCombinations < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :discerner_search_combinations do |t|
|
4
|
+
t.integer :search_id
|
5
|
+
t.integer :combined_search_id
|
6
|
+
t.integer :operator_id
|
7
|
+
t.integer :display_order
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class AddSearchColumnsToDiscernerParameters < ActiveRecord::Migration
|
2
|
+
class ParameterCategory < ActiveRecord::Base
|
3
|
+
include Discerner::Methods::Models::ParameterCategory
|
4
|
+
end
|
5
|
+
|
6
|
+
class Parameter < ActiveRecord::Base
|
7
|
+
include Discerner::Methods::Models::Parameter
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.up
|
11
|
+
add_column :discerner_parameters, :search_model, :string
|
12
|
+
add_column :discerner_parameters, :search_attribute, :string
|
13
|
+
|
14
|
+
Discerner::Parameter.order(:id).each do |p|
|
15
|
+
p.search_attribute = p.database_name
|
16
|
+
p.search_model = p.parameter_category.parameterized_name
|
17
|
+
p.save!
|
18
|
+
end
|
19
|
+
|
20
|
+
remove_index :discerner_parameters, :name => 'index_discerner_parameters'
|
21
|
+
remove_column :discerner_parameters, :database_name
|
22
|
+
add_index :discerner_parameters, [:search_model, :search_attribute, :parameter_category_id, :deleted_at], :unique => true, :name => 'index_discerner_parameters'
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.down
|
26
|
+
add_column :discerner_parameters, :database_name, :string
|
27
|
+
|
28
|
+
Discerner::Parameter.order(:id).each do |p|
|
29
|
+
p.database_name = p.search_attribute
|
30
|
+
p.save!
|
31
|
+
end
|
32
|
+
|
33
|
+
remove_index :discerner_parameters, :name => 'index_discerner_parameters'
|
34
|
+
remove_column :discerner_parameters, :search_model
|
35
|
+
remove_column :discerner_parameters, :search_attribute
|
36
|
+
add_index :discerner_parameters, [:database_name, :deleted_at], :unique => true, :name => 'index_discerner_parameters'
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# This migration comes from discerner (originally 20130220163015)
|
2
|
+
class ReplaceIntegerTypeWithNumeric < ActiveRecord::Migration
|
3
|
+
class ParameterType < ActiveRecord::Base
|
4
|
+
include Discerner::Methods::Models::ParameterCategory
|
5
|
+
end
|
6
|
+
|
7
|
+
def up
|
8
|
+
parameter_type = Discerner::ParameterType.find_by_name('integer')
|
9
|
+
unless parameter_type.blank?
|
10
|
+
parameter_type.name = 'numeric'
|
11
|
+
parameter_type.save!
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def down
|
16
|
+
parameter_type = Discerner::ParameterType.find_by_name('numeric')
|
17
|
+
unless parameter_type.blank?
|
18
|
+
parameter_type.name = 'integer'
|
19
|
+
parameter_type.save!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|