Skip to content

Instantly share code, notes, and snippets.

@Prigin
Created November 6, 2019 09:52
Show Gist options
  • Save Prigin/db9dc8f54253a7c4564a2d5c7af2f5a5 to your computer and use it in GitHub Desktop.
Save Prigin/db9dc8f54253a7c4564a2d5c7af2f5a5 to your computer and use it in GitHub Desktop.
mkdev
require_relative 'movie_coll.rb'
def compare (obj, hash_val)
hash_val = hash_val.to_a
param1 = obj.send(hash_val[0])
param2 = hash_val[1]
p1 = param1.class
p2 = param2.class
if (p1 == Array)&&(p2 == Array)
return !(param1 & param2).empty?
elsif (p1 == String)&&(p2 == Array)
return param2.include?(param1)
elsif (p1 == Array)&&(p2 == String)
return param1.include?(param2)
elsif (p1 == String)&&(p2 == String)
return param1 == param2
elsif (p1 == Integer)&&(p2 == Range)
return param2.member?(param1)
elsif (p1 == Integer)&&(p2 == Integer)
return param1 == param2
else
return false
end
end
def filter(**filters)
filters.each_key{|key|
raise "<filter> wrong parameter #{key.inspect}" unless @mas[0].respond_to?(key)}
buff = @mas.select {|movie|
filters.inject(true){|bool, hash_val| bool & compare(movie, hash_val)}}
return "no matches" if buff.empty?
buff
end
@mas = MovieCollection.new("movies_v2.txt").all
puts filter(genre: "Drama", duration: 120..200, country: ["France", "Italy"])
.map{|u| "#{u.title} #{u.genre} #{u.duration} min(s) #{u.country}"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment