Решение на Втора задача от Ивана Йовчева

Обратно към всички решения

Към профила на Ивана Йовчева

Резултати

  • 0 точки от тестове
  • 0 бонус точки
  • 0 точки общо
  • 0 успешни тест(а)
  • 12 неуспешни тест(а)

Код

class Song
attr_accessor :song
def dictionary
@dictionary = {}
end
def name
@name = @song.split('.')[0]
end
def artist
@artist = @song.split('.')[1]
end
def genre
@genre = @song.split('.')[2].split(',')[0]
end
def subgenre
@subgenre = @song.split('.')[2].split(',').drop(1)
end
def tags
@tags = @song.split('.')[3]
@tags << genre
@tags << subgenre
@tags << dictionary[name]
end
def criteria
@criteria = {}
@criteria[:tags] = tags
@criteria[:name] = name
@criteria[:artist] = artist
@criteria[:genre] = genre
@criteria[:sugenre] = subgenre
@criteria[:filter] = yield song
end
end
class Collection < Song
def songs
songs = []
end
def collection(songs_as_string,artist_tags)
songs_as_string.each_line {|next_song| songs << next_song}
artist_tags.each { |key,value| dictionary[key] = value}
end
def find(criteria)
songs.each do |row|
song= row
if criteria.each { |key| song.criteria[key] == criteria[key] }
song
end
end
end
end

Лог от изпълнението

FFFFFFFFFFFF

Failures:

  1) Collection returns all entries if called without parameters
     Failure/Error: collection.find({}).should have(input.lines.count).items
       expected 20 items, got 0
     # /tmp/d20111115-13548-58nzsu/spec.rb:37:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  2) Collection can look up songs by artist
     Failure/Error: songs(artist: 'Bill Evans').map(&:name).should =~ ['Autumn Leaves', 'Waltz for Debbie']
       expected collection contained:  ["Autumn Leaves", "Waltz for Debbie"]
       actual collection contained:    []
       the missing elements were:      ["Autumn Leaves", "Waltz for Debbie"]
     # /tmp/d20111115-13548-58nzsu/spec.rb:41:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  3) Collection can look up songs by name
     Failure/Error: songs(name: "'Round Midnight").map(&:artist).should =~ ['John Coltrane', 'Thelonious Monk']
       expected collection contained:  ["John Coltrane", "Thelonious Monk"]
       actual collection contained:    []
       the missing elements were:      ["John Coltrane", "Thelonious Monk"]
     # /tmp/d20111115-13548-58nzsu/spec.rb:45:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  4) Collection uses the genre and subgenre as tags
     Failure/Error: song(name: 'Miles Runs the Voodoo Down').tags.should include('jazz', 'fusion')
     NoMethodError:
       undefined method `tags' for nil:NilClass
     # /tmp/d20111115-13548-58nzsu/spec.rb:49:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  5) Collection can find songs by tag
     Failure/Error: songs(tags: 'baroque').map(&:name).should =~ ['Toccata e Fuga', 'Goldberg Variations']
       expected collection contained:  ["Goldberg Variations", "Toccata e Fuga"]
       actual collection contained:    []
       the missing elements were:      ["Goldberg Variations", "Toccata e Fuga"]
     # /tmp/d20111115-13548-58nzsu/spec.rb:53:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  6) Collection can find songs by multiple tags
     Failure/Error: songs(tags: %w[popular violin]).map(&:name).should eq ['Eine Kleine Nachtmusik']
       
       expected: ["Eine Kleine Nachtmusik"]
            got: []
       
       (compared using ==)
       
       Diff:
       @@ -1,2 +1,2 @@
       -["Eine Kleine Nachtmusik"]
       +[]
     # /tmp/d20111115-13548-58nzsu/spec.rb:57:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  7) Collection can find songs that don't have a tag
     Failure/Error: songs(tags: %w[weird cool!]).map(&:name).should eq ['Miles Runs the Voodoo Down']
       
       expected: ["Miles Runs the Voodoo Down"]
            got: []
       
       (compared using ==)
       
       Diff:
       @@ -1,2 +1,2 @@
       -["Miles Runs the Voodoo Down"]
       +[]
     # /tmp/d20111115-13548-58nzsu/spec.rb:61:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  8) Collection can filter songs by a lambda
     Failure/Error: songs(filter: ->(song) { song.name == 'Autumn Leaves' }).map(&:name).should eq ['Autumn Leaves']
       
       expected: ["Autumn Leaves"]
            got: []
       
       (compared using ==)
       
       Diff:
       @@ -1,2 +1,2 @@
       -["Autumn Leaves"]
       +[]
     # /tmp/d20111115-13548-58nzsu/spec.rb:65:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  9) Collection adds the artist tags to the songs
     Failure/Error: songs(tags: 'polyphone').map(&:name).should =~ ['Toccata e Fuga', 'Goldberg Variations']
       expected collection contained:  ["Goldberg Variations", "Toccata e Fuga"]
       actual collection contained:    []
       the missing elements were:      ["Goldberg Variations", "Toccata e Fuga"]
     # /tmp/d20111115-13548-58nzsu/spec.rb:69:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  10) Collection allows multiple criteria
     Failure/Error: songs(name: "'Round Midnight", tags: 'bebop').map(&:artist).should eq ['Thelonious Monk']
       
       expected: ["Thelonious Monk"]
            got: []
       
       (compared using ==)
       
       Diff:
       @@ -1,2 +1,2 @@
       -["Thelonious Monk"]
       +[]
     # /tmp/d20111115-13548-58nzsu/spec.rb:73:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  11) Collection allows all criteria
     Failure/Error: ).map(&:artist).should eq ['Thelonious Monk']
       
       expected: ["Thelonious Monk"]
            got: []
       
       (compared using ==)
       
       Diff:
       @@ -1,2 +1,2 @@
       -["Thelonious Monk"]
       +[]
     # /tmp/d20111115-13548-58nzsu/spec.rb:82:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  12) Collection constructs an object for each song
     Failure/Error: song.name.should      eq 'Tutu'
     NoMethodError:
       undefined method `name' for nil:NilClass
     # /tmp/d20111115-13548-58nzsu/spec.rb:88:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.55285 seconds
12 examples, 12 failures

Failed examples:

rspec /tmp/d20111115-13548-58nzsu/spec.rb:36 # Collection returns all entries if called without parameters
rspec /tmp/d20111115-13548-58nzsu/spec.rb:40 # Collection can look up songs by artist
rspec /tmp/d20111115-13548-58nzsu/spec.rb:44 # Collection can look up songs by name
rspec /tmp/d20111115-13548-58nzsu/spec.rb:48 # Collection uses the genre and subgenre as tags
rspec /tmp/d20111115-13548-58nzsu/spec.rb:52 # Collection can find songs by tag
rspec /tmp/d20111115-13548-58nzsu/spec.rb:56 # Collection can find songs by multiple tags
rspec /tmp/d20111115-13548-58nzsu/spec.rb:60 # Collection can find songs that don't have a tag
rspec /tmp/d20111115-13548-58nzsu/spec.rb:64 # Collection can filter songs by a lambda
rspec /tmp/d20111115-13548-58nzsu/spec.rb:68 # Collection adds the artist tags to the songs
rspec /tmp/d20111115-13548-58nzsu/spec.rb:72 # Collection allows multiple criteria
rspec /tmp/d20111115-13548-58nzsu/spec.rb:76 # Collection allows all criteria
rspec /tmp/d20111115-13548-58nzsu/spec.rb:85 # Collection constructs an object for each song

История (1 версия и 0 коментара)

Ивана обнови решението на 31.10.2011 16:41 (преди над 12 години)

+class Song
+ attr_accessor :song
+ def dictionary
+ @dictionary = {}
+ end
+ def name
+ @name = @song.split('.')[0]
+ end
+ def artist
+ @artist = @song.split('.')[1]
+ end
+ def genre
+ @genre = @song.split('.')[2].split(',')[0]
+ end
+ def subgenre
+ @subgenre = @song.split('.')[2].split(',').drop(1)
+ end
+ def tags
+ @tags = @song.split('.')[3]
+ @tags << genre
+ @tags << subgenre
+ @tags << dictionary[name]
+ end
+ def criteria
+ @criteria = {}
+ @criteria[:tags] = tags
+ @criteria[:name] = name
+ @criteria[:artist] = artist
+ @criteria[:genre] = genre
+ @criteria[:sugenre] = subgenre
+ @criteria[:filter] = yield song
+ end
+end
+class Collection < Song
+ def songs
+ songs = []
+ end
+ def collection(songs_as_string,artist_tags)
+ songs_as_string.each_line {|next_song| songs << next_song}
+ artist_tags.each { |key,value| dictionary[key] = value}
+ end
+ def find(criteria)
+ songs.each do |row|
+ song= row
+ if criteria.each { |key| song.criteria[key] == criteria[key] }
+ song
+ end
+ end
+ end
+end