discerner 1.1.18
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 +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,153 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require "rails/generators"
|
|
3
|
+
|
|
4
|
+
module Discerner
|
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
|
6
|
+
class_option "no-migrate", :type => :boolean
|
|
7
|
+
class_option "customize-all", :type => :boolean
|
|
8
|
+
class_option "customize-controllers", :type => :boolean
|
|
9
|
+
class_option "customize-models", :type => :boolean
|
|
10
|
+
class_option "customize-helpers", :type => :boolean
|
|
11
|
+
class_option "customize-layout", :type => :boolean
|
|
12
|
+
class_option "current-user-helper", :type => :string
|
|
13
|
+
|
|
14
|
+
def self.source_paths
|
|
15
|
+
paths = self.superclass.source_paths
|
|
16
|
+
paths << File.expand_path("../templates", __FILE__)
|
|
17
|
+
paths.flatten
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
desc "Used to install Discerner"
|
|
21
|
+
|
|
22
|
+
def install_migrations
|
|
23
|
+
puts "Copying over Discerner migrations..."
|
|
24
|
+
Dir.chdir(Rails.root) do
|
|
25
|
+
`rake discerner:install:migrations`
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
## shameless steal from forem git://github.com/radar/forem.git
|
|
30
|
+
def add_discerner_user_method
|
|
31
|
+
current_user_helper = options["current-user-helper"].presence ||
|
|
32
|
+
ask("What is the current_user helper called in your app? [current_user]").presence ||
|
|
33
|
+
'current_user if defined?(current_user)'
|
|
34
|
+
puts "Defining discerner_user method inside ApplicationController..."
|
|
35
|
+
|
|
36
|
+
discerner_user_method = %Q{
|
|
37
|
+
def discerner_user
|
|
38
|
+
#{current_user_helper}
|
|
39
|
+
end
|
|
40
|
+
helper_method :discerner_user
|
|
41
|
+
}
|
|
42
|
+
inject_into_file("#{Rails.root}/app/controllers/application_controller.rb",
|
|
43
|
+
discerner_user_method,
|
|
44
|
+
:after => "ActionController::Base\n", :force => false)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def add_discerner_view_helpers
|
|
48
|
+
puts "Defining discerner view helpers inside ApplicationHelper..."
|
|
49
|
+
|
|
50
|
+
discerner_helper_methods = %Q{
|
|
51
|
+
def export_discerner_results?
|
|
52
|
+
true
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def show_discerner_results?
|
|
56
|
+
true
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def enable_combined_searches?
|
|
60
|
+
true
|
|
61
|
+
end
|
|
62
|
+
}
|
|
63
|
+
inject_into_file("#{Rails.root}/app/helpers/application_helper.rb",
|
|
64
|
+
discerner_helper_methods,
|
|
65
|
+
:after => "ApplicationHelper\n")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def run_migrations
|
|
69
|
+
unless options["no-migrate"]
|
|
70
|
+
puts "Running rake db:migrate"
|
|
71
|
+
`rake db:migrate`
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def seed_database_with_operators
|
|
76
|
+
unless options["no-migrate"]
|
|
77
|
+
puts "Running rake discerner:setup:operators"
|
|
78
|
+
`rake discerner:setup:operators`
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def mount_engine
|
|
83
|
+
puts "Mounting Discerner::Engine at \"/\" in config/routes.rb..."
|
|
84
|
+
insert_into_file("#{Rails.root}/config/routes.rb", :after => /routes.draw.do\n/) do
|
|
85
|
+
%Q{ mount Discerner::Engine, :at => "/"\n}
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def sample_dictionary
|
|
90
|
+
path = "#{Rails.root}/lib/setup"
|
|
91
|
+
empty_directory "#{path}"
|
|
92
|
+
copy_file "dictionaries.yml", "#{path}/dictionaries.yml"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def make_customizable
|
|
96
|
+
if options["customize-all"] || options["customize-controllers"]
|
|
97
|
+
path = "#{Rails.root}/app/controllers/discerner"
|
|
98
|
+
empty_directory path
|
|
99
|
+
copy_file "controllers/searches_controller.rb", "#{path}/searches_controller.rb"
|
|
100
|
+
copy_file "controllers/parameters_controller.rb", "#{path}/parameters_controller.rb"
|
|
101
|
+
copy_file "controllers/export_parameters_controller.rb", "#{path}/export_parameters_controller.rb"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
if options["customize-all"] || options["customize-helpers"]
|
|
105
|
+
path = "#{Rails.root}/app/helpers/discerner"
|
|
106
|
+
empty_directory "#{path}"
|
|
107
|
+
copy_file "helpers/searches_helper.rb", "#{path}/searches_helper.rb"
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
if options["customize-all"] || options["customize-models"]
|
|
111
|
+
path = "#{Rails.root}/app/models/discerner"
|
|
112
|
+
empty_directory "#{path}"
|
|
113
|
+
copy_file "models/dictionary.rb", "#{path}/dictionary.rb"
|
|
114
|
+
copy_file "models/export_parameter.rb", "#{path}/export_parameter.rb"
|
|
115
|
+
copy_file "models/operator.rb", "#{path}/operator.rb"
|
|
116
|
+
copy_file "models/parameter_category.rb", "#{path}/parameter_category.rb"
|
|
117
|
+
copy_file "models/parameter_type.rb", "#{path}/parameter_type.rb"
|
|
118
|
+
copy_file "models/parameter_value.rb", "#{path}/parameter_value.rb"
|
|
119
|
+
copy_file "models/parameter.rb", "#{path}/parameter.rb"
|
|
120
|
+
copy_file "models/search_combination.rb", "#{path}/search_combination.rb"
|
|
121
|
+
copy_file "models/search_parameter_value.rb", "#{path}/search_parameter_value.rb"
|
|
122
|
+
copy_file "models/search_parameter.rb", "#{path}/search_parameter.rb"
|
|
123
|
+
copy_file "models/search.rb", "#{path}/search.rb"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
if options["customize-all"] || options["customize-layout"]
|
|
127
|
+
path = "#{Rails.root}/app/views/layouts/discerner"
|
|
128
|
+
empty_directory "#{path}"
|
|
129
|
+
copy_file "views/layouts/searches.html.erb", "#{path}/searches.html.erb"
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def finished
|
|
134
|
+
output = "\n\n" + ("*" * 53)
|
|
135
|
+
output += "\nDone! Discerner has been successfully installed. Here's what happened:\n\n"
|
|
136
|
+
output += "-- Discerner's migrations were copied over into db/migrate.\n"
|
|
137
|
+
output += "-- A new method called `discerner_user` was inserted into your ApplicationController. This lets Discerner know what the current user of your application is.\n"
|
|
138
|
+
|
|
139
|
+
unless options["no-migrate"]
|
|
140
|
+
output += "-- `rake db:migrate` was run, running all the migrations against your database.\n"
|
|
141
|
+
output += "-- Seed operators were loaded into your database.\n"
|
|
142
|
+
end
|
|
143
|
+
output += "-- The engine was mounted in your config/routes.rb file using this line:
|
|
144
|
+
mount Discerner::Engine, :at => \"/\""
|
|
145
|
+
output += "\nIf you want to change where the searches are located, just change the \"/searches\" path at the end of this line to whatever you want."
|
|
146
|
+
output += "\n-- Sample search dictionary was copied into lib/setup. If you want to try it out, run `rails generate discerner:dictionary lib/setup/dictionaries.yml`. This will:\n"
|
|
147
|
+
output += "\n-- parse dictionary definitions from lib/setup/dictionaries.yml into the database."
|
|
148
|
+
output += "\n-- create corresponsing classes"
|
|
149
|
+
output += "\n-- create corresponsing views for results display"
|
|
150
|
+
puts output
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Discerner
|
|
2
|
+
module ExportParametersControllerCustomMethods
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.send :layout, "search"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
super
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def assign
|
|
12
|
+
super
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class ExportParametersController < ApplicationController
|
|
17
|
+
include Discerner::Methods::Controllers::ExportParametersController
|
|
18
|
+
include Discerner::ExportParametersControllerCustomMethods
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Discerner
|
|
2
|
+
module ParametersControllerCustomMethods
|
|
3
|
+
def self.included(base)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def show
|
|
7
|
+
super
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class ParametersController < ApplicationController
|
|
12
|
+
include Discerner::Methods::Controllers::ParametersController
|
|
13
|
+
include Discerner::ParametersControllerCustomMethods
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Discerner
|
|
2
|
+
module SearchesControllerCustomMethods
|
|
3
|
+
def self.included(base)
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def new
|
|
7
|
+
super
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def create
|
|
11
|
+
super
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def edit
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def update
|
|
19
|
+
super
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def index
|
|
23
|
+
super
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def destroy
|
|
27
|
+
super
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def show
|
|
31
|
+
super
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class SearchesController < ApplicationController
|
|
36
|
+
include Discerner::Methods::Controllers::SearchesController
|
|
37
|
+
include Discerner::SearchesControllerCustomMethods
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# ---- General structure:
|
|
2
|
+
# :dictionaries:
|
|
3
|
+
# - :name: string # has to be unique within not-deleted dictionaries
|
|
4
|
+
# :parameter_categories:
|
|
5
|
+
# - :name: string # has to be unique within the dictionary
|
|
6
|
+
# :parameters:
|
|
7
|
+
# - :name: string # used for display
|
|
8
|
+
# :unique_identifier: # has to be unique within the dictionary
|
|
9
|
+
# :export:
|
|
10
|
+
# :model # name of the model to be used for exporting
|
|
11
|
+
# :method # name of the model method to be used for exporting
|
|
12
|
+
# :search: # parameter search model and method combination has to be unique within the category
|
|
13
|
+
# :model: string # name of the model to be used for searching
|
|
14
|
+
# :method: string # name of the model method to be used for searching
|
|
15
|
+
# :parameter_type: numeric/date/list/combobox/text/string # used to define applicable operators/display options. does not have to be restricted to the given list, but additional parameters will require adding operators to match
|
|
16
|
+
# :parameter_value_categories_source: # used to define parameter value categories
|
|
17
|
+
# :model: string # source model to be used to load parameter value categiories
|
|
18
|
+
# :method: string # method in the source model that returns parameter_value_categories in a form of [{:name => 'string, :unique_identifier => 'adventure', :display_order => 1, :collapse => true}]
|
|
19
|
+
# :parameter_value_categories: # used to define parameter value categories
|
|
20
|
+
# - :name: string
|
|
21
|
+
# :unique_identifier: string # has to be unique within parameter
|
|
22
|
+
# :collapse: boolean # used to define if parameter category should be collapsed in the list and its values hidden from the view
|
|
23
|
+
# :display_order: integer
|
|
24
|
+
# :allow_empty_values: boolean # default: true. If set to true, "none" value will be added to the list ov values
|
|
25
|
+
# :parameter_values: # needs to be defined for list/combobox parameters unless parameter values come from the model, see ':source'
|
|
26
|
+
# - :name: string # used for display, if not provided, 'search_value' will be used instead
|
|
27
|
+
# :search_value: string # has to be unique within parameter, intendend to be used as a database value while searching
|
|
28
|
+
# :parameter_value_category: string # used to define category for parameter value, should match one of parameter_value_categories unique_identifiers listed above
|
|
29
|
+
# :source:
|
|
30
|
+
# :model: string # source model to be used to load parameter values
|
|
31
|
+
# :method: string # method/method in the source model to be used to load parameter values
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
:dictionaries:
|
|
35
|
+
- :name: Sample dictionary
|
|
36
|
+
:parameter_categories:
|
|
37
|
+
- :name: Demographic criteria
|
|
38
|
+
:parameters:
|
|
39
|
+
- :name: Age at case collection date
|
|
40
|
+
:unique_identifier: age_at_case_collect
|
|
41
|
+
:search:
|
|
42
|
+
:model: Patient
|
|
43
|
+
:method: age_at_case_collect
|
|
44
|
+
:parameter_type: numeric
|
|
45
|
+
|
|
46
|
+
- :name: Age based on current date
|
|
47
|
+
:unique_identifier: age_based_on_current_date
|
|
48
|
+
:export:
|
|
49
|
+
:model: Patient
|
|
50
|
+
:method: age_based_on_current_date
|
|
51
|
+
|
|
52
|
+
- :name: Date of birth
|
|
53
|
+
:unique_identifier: birth_dt_tm
|
|
54
|
+
:search:
|
|
55
|
+
:model: Patient
|
|
56
|
+
:method: birth_dt_tm
|
|
57
|
+
:parameter_type: date
|
|
58
|
+
:export:
|
|
59
|
+
:model: Patient
|
|
60
|
+
:method: age_based_on_current_date
|
|
61
|
+
|
|
62
|
+
- :name: Ethnic group
|
|
63
|
+
:unique_identifier: ethnic_grp
|
|
64
|
+
:search:
|
|
65
|
+
:model: Patient
|
|
66
|
+
:method: ethnic_grp
|
|
67
|
+
:parameter_type: combobox
|
|
68
|
+
:parameter_values:
|
|
69
|
+
- :name: Hispanic or Latino
|
|
70
|
+
:search_value: hisp_or_latino
|
|
71
|
+
- :name: NOT Hispanic or Latino
|
|
72
|
+
:search_value: not_hisp_or_latino
|
|
73
|
+
- :name: Unable to answer
|
|
74
|
+
:search_value: unknown
|
|
75
|
+
- :name: Declined to answer
|
|
76
|
+
:search_value: declined
|
|
77
|
+
|
|
78
|
+
- :name: Consented
|
|
79
|
+
:unique_identifier: surg_inpatient_mortality
|
|
80
|
+
:search:
|
|
81
|
+
:model: Surgery
|
|
82
|
+
:method: consented
|
|
83
|
+
:parameter_type: list
|
|
84
|
+
:parameter_values:
|
|
85
|
+
- :search_value: yes
|
|
86
|
+
- :search_value: no
|
|
87
|
+
|
|
88
|
+
- :name: Gender
|
|
89
|
+
:unique_identifier: sex
|
|
90
|
+
:search:
|
|
91
|
+
:model: Patient
|
|
92
|
+
:method: sex
|
|
93
|
+
:parameter_type: list
|
|
94
|
+
:parameter_values:
|
|
95
|
+
- :name: Male
|
|
96
|
+
:search_value: male
|
|
97
|
+
- :name: Female
|
|
98
|
+
:search_value: female
|
|
99
|
+
- :name: Indeterminent
|
|
100
|
+
:search_value: indeterminent
|
|
101
|
+
- :name: Unknown
|
|
102
|
+
:search_value: unknown
|
|
103
|
+
- :name: Unspecified
|
|
104
|
+
:search_value: uncpecified
|
|
105
|
+
:export:
|
|
106
|
+
:model: Patient
|
|
107
|
+
:method: gender
|
|
108
|
+
|
|
109
|
+
- :name: Race
|
|
110
|
+
:exclusive: false
|
|
111
|
+
:unique_identifier: race
|
|
112
|
+
:search:
|
|
113
|
+
:model: Patient
|
|
114
|
+
:method: race
|
|
115
|
+
:parameter_type: list
|
|
116
|
+
:parameter_values:
|
|
117
|
+
- :search_value: American Indian or Alaska Native
|
|
118
|
+
- :search_value: Asian
|
|
119
|
+
- :search_value: Black or African American
|
|
120
|
+
- :search_value: Hispanic or Latino
|
|
121
|
+
- :search_value: Native Hawaiian or Other Pacific Islander
|
|
122
|
+
- :search_value: White or Caucasian
|
|
123
|
+
- :search_value: Other
|
|
124
|
+
- :search_value: Declined to answer
|
|
125
|
+
- :search_value: Unable to answer
|
|
126
|
+
:export:
|
|
127
|
+
:model: Patient
|
|
128
|
+
:method: race
|
|
129
|
+
|
|
130
|
+
- :name: Case criteria
|
|
131
|
+
:parameters:
|
|
132
|
+
- :name: Accession date
|
|
133
|
+
:unique_identifier: accessioned_dt_tm
|
|
134
|
+
:search:
|
|
135
|
+
:model: Case
|
|
136
|
+
:method: accessioned_dt_tm
|
|
137
|
+
:parameter_type: date
|
|
138
|
+
|
|
139
|
+
- :name: Text search diagnosis
|
|
140
|
+
:exclusive: false
|
|
141
|
+
:unique_identifier: case_specimen_diagnosis
|
|
142
|
+
:search:
|
|
143
|
+
:model: Case
|
|
144
|
+
:method: case_specimen_diagnosis
|
|
145
|
+
:parameter_type: text
|
|
146
|
+
|
|
147
|
+
- :name: Librarian dictionary
|
|
148
|
+
:parameter_categories:
|
|
149
|
+
- :name: By author
|
|
150
|
+
:parameters:
|
|
151
|
+
- :name: "Last name"
|
|
152
|
+
:unique_identifier: autor_last_name
|
|
153
|
+
:search:
|
|
154
|
+
:model: Author
|
|
155
|
+
:method: autor_last_name
|
|
156
|
+
:parameter_type: string
|
|
157
|
+
|
|
158
|
+
- :name: "First name"
|
|
159
|
+
:unique_identifier: autor_first_name
|
|
160
|
+
:search:
|
|
161
|
+
:model: Author
|
|
162
|
+
:method: autor_first_name
|
|
163
|
+
:parameter_type: text
|
|
164
|
+
|
|
165
|
+
- :name: "Country"
|
|
166
|
+
:unique_identifier: country
|
|
167
|
+
:search:
|
|
168
|
+
:model: Author
|
|
169
|
+
:method: country
|
|
170
|
+
:parameter_type: text
|
|
171
|
+
|
|
172
|
+
- :name: "Type"
|
|
173
|
+
:unique_identifier: author_type
|
|
174
|
+
:search:
|
|
175
|
+
:model: Book
|
|
176
|
+
:method: type
|
|
177
|
+
:parameter_type: list
|
|
178
|
+
:parameter_values:
|
|
179
|
+
- :search_value: author
|
|
180
|
+
- :search_value: co-author
|
|
181
|
+
- :search_value: reviewer
|
|
182
|
+
- :name: Book criteria
|
|
183
|
+
:parameters:
|
|
184
|
+
- :name: "Type"
|
|
185
|
+
:unique_identifier: book_type
|
|
186
|
+
:search:
|
|
187
|
+
:model: Book
|
|
188
|
+
:method: type
|
|
189
|
+
:parameter_type: combobox
|
|
190
|
+
:parameter_values:
|
|
191
|
+
- :search_value: book
|
|
192
|
+
- :search_value: journal
|
|
193
|
+
- :search_value: article
|
|
194
|
+
- :search_value: electronic journal
|
|
195
|
+
|
|
196
|
+
- :name: "Genre"
|
|
197
|
+
:unique_identifier: book_genre
|
|
198
|
+
:search:
|
|
199
|
+
:model: Book
|
|
200
|
+
:method: Genre
|
|
201
|
+
:parameter_type: combobox
|
|
202
|
+
:parameter_value_categories:
|
|
203
|
+
- :name: Adventure
|
|
204
|
+
:unique_identifier: adventure
|
|
205
|
+
:collapse: true
|
|
206
|
+
:display_order: 1
|
|
207
|
+
- :name: Comic novel
|
|
208
|
+
:unique_identifier: comic
|
|
209
|
+
- :name: Historical
|
|
210
|
+
:unique_identifier: historical
|
|
211
|
+
:parameter_values:
|
|
212
|
+
- :search_value: "Robinsonade"
|
|
213
|
+
:parameter_value_category: adventure
|
|
214
|
+
- :search_value: "Black comedy"
|
|
215
|
+
:parameter_value_category: comic
|
|
216
|
+
- :search_value: "Parody"
|
|
217
|
+
:parameter_value_category: comic
|
|
218
|
+
- :search_value: "Lost World"
|
|
219
|
+
:parameter_value_category: adventure
|
|
220
|
+
- :search_value: "Brit lit"
|
|
221
|
+
- :search_value: "Pulp fiction"
|
|
222
|
+
|
|
223
|
+
- :name: "Title"
|
|
224
|
+
:unique_identifier: title
|
|
225
|
+
:search:
|
|
226
|
+
:model: Book
|
|
227
|
+
:method: title
|
|
228
|
+
:parameter_type: text
|
|
229
|
+
|
|
230
|
+
- :name: "Keyword"
|
|
231
|
+
:unique_identifier: text
|
|
232
|
+
:search:
|
|
233
|
+
:model: Book
|
|
234
|
+
:method: text
|
|
235
|
+
:parameter_type: text
|
|
236
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class Book
|
|
2
|
+
def self.genres
|
|
3
|
+
[
|
|
4
|
+
{:name => 'Adventure', :unique_identifier => 'adventure', :display_order => 1, :collapse => true},
|
|
5
|
+
{:name => 'Drama', :unique_identifier => 'drama', :display_order => 2, :collapse => false},
|
|
6
|
+
]
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.generes
|
|
10
|
+
[
|
|
11
|
+
{:name => 'Adventure', :display_order => 1, :collapse => true},
|
|
12
|
+
{:name => 'Drama', :unique_identifier => 'drama', :display_order => 2, :collapse => false},
|
|
13
|
+
]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Discerner
|
|
2
|
+
module ParameterValueCategorizationCustomMethods
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
class ParameterValueCategorization < ActiveRecord::Base
|
|
6
|
+
include Discerner::Methods::Models::ParameterValueCategorization
|
|
7
|
+
include Discerner::ParameterValueCategorizationCustomMethods
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -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>
|