Remove the , :disabled => true from the hash_2_array collection in the spec/hash
ID: 2247828 • Letter: R
Question
Remove the , :disabled => true from the hash_2_array collection in the spec/hashes_spec.rb file. Don't forget to save your changes!
Now look at the hash_2_array method in the lib/hashes.rb file.
You will notice that this method takes one input.
contacts: a hash for contacts. The keys for this hash will be the contact names as type string and the values will be an inner hash that will hold the email address (with "email" as key) as type string and phone number (with "phone" as key) as type string.
Example:
{:"Bob Smith"=>{:email=>"bobsmith@example.com", :phone=>"555-555-5555"}
Hint: Look at the rspec tests to see the input that will be tested and the expected output.
Write the Ruby code in this method that will create three arrays of type string from the hash and then will return an array that contains the these three arrays (a two dimensional array!).
Assumption: Your returned array will contain the inner arrays in the following order: emails, phones, names.
Example:
[["bobsmith@example.com"],["555-555-5555"],["Bob Smith"]]
Run rspec in the terminal window to test.
rspec code
require 'hashes.rb'
RSpec.configure do |config|
config.filter_run_excluding :disabled => true
end
describe 'Ruby Hashes Part I' do
describe "array_2_hash" do
it "should be defined" do
expect { array_2_hash(["bobsmith@example.com","sallyfield@example.com","markdole@example.com"], {'Bob Smith':'', 'Sally Field':'', 'Mark Dole':''}) }.not_to raise_error
end
it "returns the correct hash [20 points]" , points: 20 do
expect(array_2_hash(["bobsmith@example.com","sallyfield@example.com","markdole@example.com"], {'Bob Smith':'', 'Sally Field':'', 'Mark Dole':''})).to be_a_kind_of Hash
expect(array_2_hash(["bobsmith@example.com","sallyfield@example.com","markdole@example.com"], {'Bob Smith':'', 'Sally Field':'', 'Mark Dole':''})).to eq({'Bob Smith':'bobsmith@example.com', 'Sally Field':'sallyfield@example.com', 'Mark Dole':'markdole@example.com'})
end
it "works on the empty array [10 points]" , points: 10 do
expect { array_2_hash([], {'Bob Smith':'', 'Sally Field':'', 'Mark Dole':''}) }.not_to raise_error
expect(array_2_hash([], {'Bob Smith':'', 'Sally Field':'', 'Mark Dole':''})).to eq({'Bob Smith':'', 'Sally Field':'', 'Mark Dole':''})
end
end
end
describe 'Ruby Hashes Part II' do
describe "array2d_2_hash" do
it "should be defined" do
expect { array2d_2_hash([["bobsmith@example.com", "555-555-5555"],["sallyfield@example.com","111-111-1111"]], {'Bob Smith':{}, 'Sally Field':{}}) }.not_to raise_error
end
it "returns the correct hash [30 points]" , points: 30 do
expect(array2d_2_hash([["bobsmith@example.com", "555-555-5555"],["sallyfield@example.com","111-111-1111"]], {'Bob Smith':{}, 'Sally Field':{}})).to be_a_kind_of Hash
expect(array2d_2_hash([["bobsmith@example.com", "555-555-5555"],["sallyfield@example.com","111-111-1111"]], {'Bob Smith':{}, 'Sally Field':{}})).to eq({:"Bob Smith"=>{:email=>"bobsmith@example.com", :phone=>"555-555-5555"}, :"Sally Field"=>{:email=>"sallyfield@example.com", :phone=>"111-111-1111"}})
end
it "works on the empty array [10 points]" , points: 10 do
expect { array2d_2_hash([[]], {'Bob Smith':{}, 'Sally Field':{}}) }.not_to raise_error
expect(array2d_2_hash([[]], {'Bob Smith':{}, 'Sally Field':{}})).to eq({:"Bob Smith"=>{}, :"Sally Field"=>{}})
end
end
end
describe 'Ruby Hashes Part III' do
describe "hash_2_array" do
it "should be defined" do
expect { hash_2_array({:"Bob Smith"=>{:email=>"bobsmith@example.com", :phone=>"555-555-5555"}, :"Sally Field"=>{:email=>"sallyfield@example.com", :phone=>"111-111-1111"}}) }.not_to raise_error
end
it "returns the correct array of arrays [20 points]" , points: 20 do
expect(hash_2_array({:"Bob Smith"=>{:email=>"bobsmith@example.com", :phone=>"555-555-5555"}, :"Sally Field"=>{:email=>"sallyfield@example.com", :phone=>"111-111-1111"}})).to be_a_kind_of Array
expect(hash_2_array({:"Bob Smith"=>{:email=>"bobsmith@example.com", :phone=>"555-555-5555"}, :"Sally Field"=>{:email=>"sallyfield@example.com", :phone=>"111-111-1111"}})).to eq([["bobsmith@example.com","sallyfield@example.com"],["555-555-5555","111-111-1111"],["Bob Smith","Sally Field"]])
end
it "works on the empty hash [10 points]" , points: 10 do
expect { hash_2_array({}) }.not_to raise_error
expect(hash_2_array({})).to eq([[],[],[]])
end
end
end
hashes.rb code
# Part III
def hash_2_array contacts
# YOUR CODE HERE
end
Explanation / Answer
contacts = {"Bob Smith" =>{:email=>"bobsmith@example.com", :phone=>"555-555-5555"} , "Sally Field"=>{:email=>"sallyfield@example.com", :phone=>"111-111-1111"}}
def hash_2_array contacts
keys = contacts.keys
l = contacts.length
ar = Array.new(3){Array.new(l)}
for i in 0..l-1
ar[2][i] = keys[i]
ar[0][i] = contacts[keys[i]][:email]
ar[1][i] = contacts[keys[i]][:phone]
end
puts ar
end
hash_2_array contacts