Решение на Пета задача - 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 (преди почти 9 години)
Чудех се дали има начин да третирам двата контейнера еднакво(Array, Hash), т.е. да изнеса тази функция в модула. Макар двата класа да имат общи методи, повечето се различават коренно по поведението си - едните обхождат стойности, другите двойки (key, value) - разбираемо. Мислех си да имплементирам Array#to_hash и да го извиквам за контейнера. Това добра идея ли е или можа да го направя и без допълнителни функции като се поразровя още в документацията? Обхождане по индекс/ключ ми се струва грешно като идея, а в случая ми и неприложимо.
Нормално е да са отделни - не го мисли много. Аз не бих използвал StoreOperations - просто ще си ги напиша отделно. Да дублираш малко код е по-добре от това да направиш лоша абстракция.
StoreOperations ще работи само за твоите два стора, не и за други. Освен това така ако искаш да промениш малко само единия клас няма да можеш лесно, понеже си ги завързал един за друг.
