Решение на Пета задача - DataModel от Георги Иванов
Резултати
- 5 точки от тестове
- 0 бонус точки
- 5 точки общо
- 22 успешни тест(а)
- 3 неуспешни тест(а)
Код
Лог от изпълнението
...F.F..................F Failures: 1) DataModel has #find_by_<attribute> methods Failure/Error: expect(user_model.find_by_first_name('Ivan').map(&:id)).to eq [record.id] NoMethodError: undefined method `find_by_first_name' for #<Class:0x007ff2aa064178> # /tmp/d20161202-15620-5xy4t7/spec.rb:43:in `block (2 levels) in <top (required)>' # ./lib/language/ruby/run_with_timeout.rb:7:in `block (3 levels) in <top (required)>' # ./lib/language/ruby/run_with_timeout.rb:7:in `block (2 levels) in <top (required)>' 2) DataModel id generation does not reuse ids Failure/Error: expect(georgi.id).to eq 2 expected: 2 got: 1 (compared using ==) # /tmp/d20161202-15620-5xy4t7/spec.rb:71:in `block (3 levels) in <top (required)>' # ./lib/language/ruby/run_with_timeout.rb:7:in `block (3 levels) in <top (required)>' # ./lib/language/ruby/run_with_timeout.rb:7:in `block (2 levels) in <top (required)>' 3) ArrayStore behaves like a data store #delete can delete multiple records with a single query Failure/Error: expect(store.find({})).to eq [gosho] expected: [{:id=>3, :name=>"Gosho"}] got: [nil, {:id=>3, :name=>"Gosho"}] (compared using ==) Diff: @@ -1,2 +1,2 @@ -[{:id=>3, :name=>"Gosho"}] +[nil, {:id=>3, :name=>"Gosho"}] Shared Example Group: "a data store" called from /tmp/d20161202-15620-5xy4t7/spec.rb:239 # /tmp/d20161202-15620-5xy4t7/spec.rb:229:in `block (3 levels) in <top (required)>' # ./lib/language/ruby/run_with_timeout.rb:7:in `block (3 levels) in <top (required)>' # ./lib/language/ruby/run_with_timeout.rb:7:in `block (2 levels) in <top (required)>' Finished in 0.02526 seconds 25 examples, 3 failures Failed examples: rspec /tmp/d20161202-15620-5xy4t7/spec.rb:39 # DataModel has #find_by_<attribute> methods rspec /tmp/d20161202-15620-5xy4t7/spec.rb:62 # DataModel id generation does not reuse ids rspec /tmp/d20161202-15620-5xy4t7/spec.rb:218 # ArrayStore behaves like a data store #delete can delete multiple records with a single query
История (5 версии и 2 коментара)
Георги обнови решението на 30.11.2016 15:05 (преди над 8 години)
Чудех се дали има начин да третирам двата контейнера еднакво(Array, Hash), т.е. да изнеса тази функция в модула. Макар двата класа да имат общи методи, повечето се различават коренно по поведението си - едните обхождат стойности, другите двойки (key, value) - разбираемо. Мислех си да имплементирам Array#to_hash и да го извиквам за контейнера. Това добра идея ли е или можа да го направя и без допълнителни функции като се поразровя още в документацията? Обхождане по индекс/ключ ми се струва грешно като идея, а в случая ми и неприложимо.
Нормално е да са отделни - не го мисли много. Аз не бих използвал StoreOperations
- просто ще си ги напиша отделно. Да дублираш малко код е по-добре от това да направиш лоша абстракция.
StoreOperations ще работи само за твоите два стора, не и за други. Освен това така ако искаш да промениш малко само единия клас няма да можеш лесно, понеже си ги завързал един за друг.