Skip to content

Instantly share code, notes, and snippets.

@PositiveControl
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PositiveControl/57f842daa7061cc9efd0 to your computer and use it in GitHub Desktop.
Save PositiveControl/57f842daa7061cc9efd0 to your computer and use it in GitHub Desktop.
Iterating-Arrays-of-Hashes Warmup
# About 30% through first refactoring
class Dogs
POOR = (0..5).to_a.sample
AVERAGE = (6..10).to_a.sample
EXCELLENT = (11..15).to_a.sample
def initialize
joe = {
:name => {:first => "Joe", :last => "Smith"},
:owner_quality => EXCELLENT
}
sarah = {
:name => {:first => "Sarah", :last => "Smith"},
:owner_quality => AVERAGE
}
andrew = {
:name => {:first => "Andrew", :last => "Beter"},
:owner_quality => AVERAGE
}
@dogs = [{:name => "Fido", :size => :large, :owner => joe},
{:name => "Yapper", :size => :small, :owner => joe},
{:name => "Bruiser", :size => :large, :owner => joe},
{:name => "Tank", :size => :huge, :owner => sarah},
{:name => "Beast", :size => :large, :owner => sarah},
{:name => "Harleigh", :size => :medium, :owner => andrew},
{:name => "Trixie", :size => :small, :owner => andrew},]
end
def small_dogs
find_dog(:size, :small)
end
def huge_dog
find_dog(:size, :huge)
end
def large_dog_names
dogs_names_array =[]
@dogs.each do |dog|
if dog[:size] == :large
dogs_names_array << dog[:name]
end
end
dogs_names_array
end
def joes_large_dogs
dogs_names_array =[]
@dogs.each do |dog|
if dog[:size] == :large && dog[:owner][:name][:first] == 'Joe'
dogs_names_array << dog[:name]
end
end
dogs_names_array
end
def sizes
dogs_sizes_array =[]
@dogs.each do |dog|
size = dog[:size]
dogs_sizes_array << size
end
dogs_sizes_array.uniq
end
def owners
dogs_owners_name_array =[]
@dogs.each do |dog|
dogs_owners_name_array << get_owner_name(dog)
end
dogs_owners_name_array.uniq
end
def average_owners
average_owners_array =[]
@dogs.each do |dog|
if dog[:owner][:owner_quality] == AVERAGE
average_owners_array << get_owner_name(dog)
end
end
average_owners_array.uniq
end
private
def get_owner_name(dog)
first_name = dog[:owner][:name][:first].to_s
last_name = dog[:owner][:name][:last].to_s
[first_name, last_name].join(" ")
end
def find_dog(characteristic, dog_is)
dogs_array =[]
@dogs.each do |dog|
if dog[characteristic] == dog_is
dogs_array << dog.select { |key| key == :name }
end
end
dogs_array
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment