Created
February 27, 2014 01:47
-
-
Save igmarin/9242666 to your computer and use it in GitHub Desktop.
In Ruby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'minitest/autorun' | |
require 'minitest/pride' | |
# Will return a single code and code set if one exists in the code sets that are | |
# passed in. Returns a hash with a key of code and code_set if found, nil otherwise | |
def preferred_code(preferred_code_sets, codes_attribute=:codes, value_set_map=nil) | |
codes_value = send(codes_attribute) | |
preferred_code_sets = value_set_map ? (preferred_code_sets & value_set_map.collect{|cs| cs["set"]}) : preferred_code_sets | |
matching_code_sets = preferred_code_sets & codes_value.keys | |
#if matching_code_sets.present? <= present is only used in rails empty? is the ruby version of present? | |
unless matching_code_sets.empty? | |
if value_set_map | |
matching_code_sets.each do |matching_code_set| | |
matching_codes = codes_value[matching_code_set] & value_set_map.collect{|cs| cs["set"] == matching_code_set ? cs["values"] : []}.flatten.compact | |
if !matching_codes.empty? | |
return {'code' => matching_codes.first, 'code_set' => matching_code_set} | |
end | |
end | |
else | |
code_set = matching_code_sets.first | |
{'code' => codes_value[code_set].first, 'code_set' => code_set} | |
end | |
else | |
nil | |
end | |
end | |
describe 'TestMethods' do | |
describe 'preferred_code' do | |
def codes;{}; end | |
it "#returns nil" do | |
preferred_code([]).must_be_nil | |
end | |
describe 'the else scenario' do | |
def codes;{'code' => 0, 'code_set' => 0}; end | |
it "value_set_map is nil" do | |
preferred_code(['set','code', 'code_set','done']).must_equal({'code' => 1, 'code_set' => 1}) | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment