class HQMF2JS::Generator::JS
Public Class Methods
crosswalk_functions()
click to toggle source
Allow crosswalk functionality to be loaded separately from main JS
libraries
# File lib/generator/js.rb, line 325 def self.crosswalk_functions ctx = Sprockets::Environment.new(File.expand_path("../../..", __FILE__)) Tilt::CoffeeScriptTemplate.default_bare = true ctx.append_path "app/assets/javascripts" ctx.find_asset('crosswalk').to_s end
library_functions(check_crosswalk=false, include_underscore=true)
click to toggle source
# File lib/generator/js.rb, line 289 def self.library_functions(check_crosswalk=false, include_underscore=true) ctx = Sprockets::Environment.new(File.expand_path("../../..", __FILE__)) Tilt::CoffeeScriptTemplate.default_bare = true ctx.append_path "app/assets/javascripts" libraries = [] if include_underscore libraries += ["// #########################\n// ###### Underscore.js #######\n// #######################\n", ctx.find_asset('underscore').to_s] end libraries += ["// #########################\n// ###### PATIENT API #######\n// #########################\n", HqueryPatientApi::Generator.patient_api_javascript.to_s, "// #########################\n// ## SPECIFIC OCCURRENCES ##\n// #########################\n", ctx.find_asset('specifics').to_s, "// #########################\n// ### LIBRARY FUNCTIONS ####\n// #########################\n", ctx.find_asset('hqmf_util').to_s, "// #########################\n// ### PATIENT EXTENSION ####\n// #########################\n", ctx.find_asset('patient_api_extension').to_s, "// #########################\n// ## CUSTOM CALCULATIONS ###\n// #########################\n", ctx.find_asset('custom_calculations').to_s, "// #########################\n// ##### LOGGING UTILS ######\n// #########################\n", ctx.find_asset('logging_utils').to_s] # check for code set crosswalks if (check_crosswalk) libraries += ["// #########################\n// ##### CROSSWALK EXTENSION ######\n// #########################\n", ctx.find_asset('crosswalk').to_s] end libraries.join("\n") end
map_reduce_utils()
click to toggle source
# File lib/generator/js.rb, line 184 def self.map_reduce_utils File.read(File.expand_path(File.join('..', '..', "assets",'javascripts','libraries','map_reduce_utils.js'), __FILE__)) end
new(doc)
click to toggle source
Entry point to JavaScript generator
# File lib/generator/js.rb, line 180 def initialize(doc) @doc = doc end
Public Instance Methods
js_for(criteria_code, type=nil, when_not_found=false)
click to toggle source
Generate JS
for a HQMF2::PopulationCriteria
# File lib/generator/js.rb, line 257 def js_for(criteria_code, type=nil, when_not_found=false) # for multiple populations, criteria code will be something like IPP_1 and type will be IPP type ||= criteria_code criteria = @doc.population_criteria(criteria_code) if criteria && criteria.preconditions && criteria.preconditions.length > 0 if type==HQMF::PopulationCriteria::OBSERV HQMF2JS::Generator.render_template('observation_criteria', {'doc' => @doc, 'criteria' => criteria, 'type'=>type}) else HQMF2JS::Generator.render_template('population_criteria', {'doc' => @doc, 'criteria' => criteria, 'type'=>type}) end else "hqmfjs.#{type} = function(patient) { return new Boolean(#{when_not_found}); }" end end
js_for_data_criteria(force_sources=nil)
click to toggle source
Generate JS
for a HQMF2::DataCriteria
# File lib/generator/js.rb, line 273 def js_for_data_criteria(force_sources=nil) HQMF2JS::Generator.render_template('data_criteria', {'all_criteria' => @doc.specific_occurrence_source_data_criteria(force_sources).concat(@doc.all_data_criteria), 'measure_period' => @doc.measure_period}) end
js_for_variables()
click to toggle source
# File lib/generator/js.rb, line 277 def js_for_variables() variables_js = "" variables_js += "hqmfjs.VARIABLES = function(patient, initialSpecificContext) {\n" @doc.source_data_criteria.each do |criteria| if criteria.variable && !criteria.specific_occurrence variables_js += "hqmfjs." + criteria.id + "(patient, initialSpecificContext);\n" end end variables_js += "return false;\n}" variables_js end
js_initialize_specifics(data_criteria)
click to toggle source
# File lib/generator/js.rb, line 243 def js_initialize_specifics(data_criteria) specific_occurrences = [] data_criteria.each do |criteria| if (criteria.specific_occurrence) specific_occurrences << {id: "#{criteria.id}", type: "#{criteria.specific_occurrence_const}", function: "#{criteria.source_data_criteria}"} end end json_list = specific_occurrences.map {|occurrence| occurrence.to_json} specifics_list = json_list.join(',') specifics_list = ",#{specifics_list}" unless specifics_list.empty? "hqmfjs.initializeSpecifics = function(patient_api, hqmfjs) { hqmf.SpecificsManager.initialize(patient_api,hqmfjs#{specifics_list}) }" end
to_js(population_index=0, codes=nil, force_sources=nil)
click to toggle source
# File lib/generator/js.rb, line 188 def to_js(population_index=0, codes=nil, force_sources=nil) population_index ||= 0 population = @doc.populations[population_index] if codes oid_dictionary = HQMF2JS::Generator::CodesToJson.hash_to_js(codes) else oid_dictionary = "<%= oid_dictionary %>" end sub_ids = ('a'..'zz').to_a sub_id = @doc.populations.size > 1 ? "'#{sub_ids[population_index]}'" : "null"; stratified = !population[HQMF::PopulationCriteria::STRAT].nil? " // ######################### // ##### DATA ELEMENTS ##### // ######################### hqmfjs.nqf_id = '#{@doc.id}'; hqmfjs.hqmf_id = '#{@doc.hqmf_id}'; hqmfjs.sub_id = #{sub_id}; if (typeof(test_id) == 'undefined') hqmfjs.test_id = null; OidDictionary = #{oid_dictionary}; #{js_for_data_criteria(force_sources)} // ######################### // ##### MEASURE LOGIC ##### // ######################### #{js_initialize_specifics(@doc.source_data_criteria)} // INITIAL PATIENT POPULATION #{js_for(population[HQMF::PopulationCriteria::IPP], HQMF::PopulationCriteria::IPP)} // STRATIFICATION #{(stratified ? js_for(population[HQMF::PopulationCriteria::STRAT], HQMF::PopulationCriteria::STRAT, true) : 'hqmfjs.'+HQMF::PopulationCriteria::STRAT+'=null;')} // DENOMINATOR #{js_for(population[HQMF::PopulationCriteria::DENOM], HQMF::PopulationCriteria::DENOM, true)} // NUMERATOR #{js_for(population[HQMF::PopulationCriteria::NUMER], HQMF::PopulationCriteria::NUMER)} #{js_for(population[HQMF::PopulationCriteria::NUMEX], HQMF::PopulationCriteria::NUMEX)} #{js_for(population[HQMF::PopulationCriteria::DENEX], HQMF::PopulationCriteria::DENEX)} #{js_for(population[HQMF::PopulationCriteria::DENEXCEP], HQMF::PopulationCriteria::DENEXCEP)} // CV #{js_for(population[HQMF::PopulationCriteria::MSRPOPL], HQMF::PopulationCriteria::MSRPOPL, true)} #{js_for(population[HQMF::PopulationCriteria::MSRPOPLEX], HQMF::PopulationCriteria::MSRPOPLEX)} #{js_for(population[HQMF::PopulationCriteria::OBSERV], HQMF::PopulationCriteria::OBSERV)} // VARIABLES #{js_for_variables()} " end