Решение на Седма задача - ретроспекция от Лазар Дилов

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

Към профила на Лазар Дилов

Резултати

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

Код

REPOSITORY = 'https://github.com/ldilov/ruby-retrospective-2016'
# Двадесет неща, които научих.
#
# 1. По-добре е да избягвам дълбоките влагания (nest-вания), когато е възможно
# както и често се получава по-добре когато разделям работата на "дълбок" метод чрез
# помощни методи. Получава се по-красиво и четимо.
# 2. По-добре е да използвам map и select вместо each. Дори имам такава забележка на една
# от задачите ми.
# 3. Научих се да използвам модули и да правя помощни методи в тези модули. Досега "блъсках"
# всичко в един метод на клас, а нямам полезната практика да използвам модулите. Освен
# да преизползвам код, мога и да си направя решението много по-четимо, много по-красиво.
# 4. Дано не звуча глупаво, но научих, че мога да ползвам инстанционни променливи на клас в модул
# и при включването на модула в класа, методите от модула ще използват инстанционната промен.
# на класа в който са включени. Чувал съм го на теория, а на практика никога не бих се сетил
# за това. Може би защото слабото ми място е в това, че блъскам всичко в главните методи,
# никога досега не бях използвал и правил помощни модули. Това определено ми е слабо място.
# 5. Научих regular expressions на сравнително basic ниво и разбира се намериха приложение в 3та
# задача :). Тъкмо имах и повод да прочета апито на MatchData и да понауча какви възможности има.
# 6. Научих, че 0 не е false! Предполагам, че това е голям пропуск, знаех че Nil е false, но не
# знаех, че 0 не е. Разбрах го в 3та задача при използването на =~ за regex. Значи това ми е
# една от грешките на Тест №1...
# 7. Да изпозлвам let за кеширане на стойности и многократното им извикване в дадения пример.
# 8. Научих или по-скоро си изясних разликата между class-level instance variable и class variable. Имаше такива въпроси и на Тест №2.
# Докато правих 5та задача видях че class variables са споделени между Base и Derived класовете, за разлика от
# class instance variables. Tова ме накара да осъзная ясно разликата между двете и вече я "чувствам"
#

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

From https://github.com/fmi/ruby-retrospective-2016
 * branch            master     -> FETCH_HEAD
HEAD is now at a22cf37 Set rubocop version to 0.46.0 to fix obsolete cop errors
Cloning into 'submission'...
HEAD is now at 40179bc HashShtore is reworked and fixed
From /tmp/ruby-retrospective-2016/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/ldilov/ruby-retrospective-2016/compare/1f710b00c26...40179bc1d4f

'tasks/1/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/1/solution.rb'
'tasks/2/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/2/solution.rb'
'tasks/3/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/3/solution.rb'
'tasks/4/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/4/solution.rb'
'tasks/5/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/5/solution.rb'
Inspecting 1 file
.

1 file inspected, no offenses detected
.................

Finished in 0.00467 seconds
17 examples, 0 failures
Inspecting 1 file
.

1 file inspected, no offenses detected
...............

Finished in 0.00529 seconds
15 examples, 0 failures
Inspecting 1 file
.

1 file inspected, no offenses detected
...............

Finished in 0.00779 seconds
15 examples, 0 failures
Inspecting 1 file
.

1 file inspected, no offenses detected
....................

Finished in 19.29 seconds
20 examples, 0 failures
Inspecting 1 file
.

1 file inspected, no offenses detected
....FFF.....FFF..........

Failures:

  1) DataModel id generation creates id on first save and does not change it
     Failure/Error: expect(record.id).to eq 1
       
       expected: 1
            got: 2
       
       (compared using ==)
     # ./spec.rb:54:in `block (3 levels) in <top (required)>'

  2) DataModel id generation does not reuse ids
     Failure/Error: expect(ivan.id).to eq 1
       
       expected: 1
            got: 3
       
       (compared using ==)
     # ./spec.rb:65:in `block (3 levels) in <top (required)>'

  3) DataModel id generation does not break when there are two models with the same store
     Failure/Error: expect(ivan.id).to eq 1
       
       expected: 1
            got: 4
       
       (compared using ==)
     # ./spec.rb:83:in `block (3 levels) in <top (required)>'

  4) DataModel.where raises an error if the query is by an unknown key
     Failure/Error: DataModel::UnknownAttributeError,
     NameError:
       uninitialized constant DataModel::UnknownAttributeError
     # ./spec.rb:144:in `block (3 levels) in <top (required)>'

  5) DataModel#delete deletes only the record for which it is called
     Failure/Error: ivan.delete
     NoMethodError:
       undefined method `delete' for #<#<Class:0x00563bff8b7658>:0x00563bff8bffb0>
     # ./spec.rb:156:in `block (3 levels) in <top (required)>'

  6) DataModel#delete raises an error if the record is not saved
     Failure/Error: DataModel::DeleteUnsavedRecordError
     NameError:
       uninitialized constant DataModel::DeleteUnsavedRecordError
     # ./spec.rb:164:in `block (3 levels) in <top (required)>'

Finished in 0.03987 seconds
25 examples, 6 failures

Failed examples:

rspec ./spec.rb:48 # DataModel id generation creates id on first save and does not change it
rspec ./spec.rb:62 # DataModel id generation does not reuse ids
rspec ./spec.rb:74 # DataModel id generation does not break when there are two models with the same store
rspec ./spec.rb:142 # DataModel.where raises an error if the query is by an unknown key
rspec ./spec.rb:151 # DataModel#delete deletes only the record for which it is called
rspec ./spec.rb:162 # DataModel#delete raises an error if the record is not saved
F

Failures:

  1) ruby-retrospective-2016 covers the minimum requirements
     Failure/Error: system(command) or raise "Command failed for #{@solutions_repo}: #{command}"
     RuntimeError:
       Command failed for https://github.com/ldilov/ruby-retrospective-2016: bundle exec rake check_all
     # /tmp/d20170211-11010-ot8vq0/spec.rb:82:in `execute'
     # /tmp/d20170211-11010-ot8vq0/spec.rb:75:in `block (3 levels) in solutions_pass_all_checks'
     # /tmp/d20170211-11010-ot8vq0/spec.rb:74:in `chdir'
     # /tmp/d20170211-11010-ot8vq0/spec.rb:74:in `block (2 levels) in solutions_pass_all_checks'
     # /tmp/d20170211-11010-ot8vq0/spec.rb:40:in `chdir'
     # /tmp/d20170211-11010-ot8vq0/spec.rb:40:in `block in solutions_pass_all_checks'
     # /tmp/d20170211-11010-ot8vq0/spec.rb:39:in `solutions_pass_all_checks'
     # /tmp/d20170211-11010-ot8vq0/spec.rb:19:in `ok?'
     # /tmp/d20170211-11010-ot8vq0/spec.rb:101:in `<top (required)>'

Finished in 0.00088 seconds
1 example, 1 failure

Failed examples:

rspec /tmp/d20170211-11010-ot8vq0/spec.rb:107 # ruby-retrospective-2016 covers the minimum requirements

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

Лазар обнови решението на 15.01.2017 22:26 (преди около 7 години)

+REPOSITORY = 'https://github.com/ldilov/ruby-retrospective-2016'
+
+# Двадесет неща, които научих.
+#
+# 1. По-добре е да избягвам дълбоките влагания (nest-вания), когато е възможно
+# както и често се получава по-добре когато разделям работата на "дълбок" метод чрез
+# помощни методи. Получава се по-красиво и четимо.
+# 2. По-добре е да използвам map и select вместо each. Дори имам такава забележка на една
+# от задачите ми.
+# 3. Научих се да използвам модули и да правя помощни методи в тези модули. Досега "блъсках"
+# всичко в един метод на клас, а нямам полезната практика да използвам модулите. Освен
+# да преизползвам код, мога и да си направя решението много по-четимо, много по-красиво.
+# 4. Дано не звуча глупаво, но научих, че мога да ползвам инстанционни променливи на клас в модул
+# и при включването на модула в класа, методите от модула ще използват инстанционната промен.
+# на класа в който са включени. Чувал съм го на теория, а на практика никога не бих се сетил
+# за това. Може би защото слабото ми място е в това, че блъскам всичко в главните методи,
+# никога досега не бях използвал и правил помощни модули. Това определено ми е слабо място.
+# 5. Научих regular expressions на сравнително basic ниво и разбира се намериха приложение в 3та
+# задача :). Тъкмо имах и повод да прочета апито на MatchData и да понауча какви възможности има.
+# 6. Научих, че 0 не е false! Предполагам, че това е голям пропуск, знаех че Nil е false, но не
+# знаех, че 0 не е. Разбрах го в 3та задача при използването на =~ за regex. Значи това ми е
+# една от грешките на Тест №1...
+# 7. Да изпозлвам let за кеширане на стойности и многократното им извикване в дадения пример.
+# 8. Научих или по-скоро си изясних разликата между class-level instance variable и class variable. Имаше такива въпроси и на Тест №2.
+# Докато правих 5та задача видях че class variables са споделени между Base и Derived класовете, за разлика от
+# class instance variables. Tова ме накара да осъзная ясно разликата между двете и вече я "чувствам"
+#