Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Let's refactor some Ruby code - EuRuKo 2018

107 visualizaciones

Publicado el

This year both Ruby and I are turning 25 years old. It is amazing to see all the great Ruby code that has been written over time. But we all also have to admit that at some point we have found, or written, Ruby code that was not that great. Even the code that was pretty good at one point, could now be improved, due to the evolution of Ruby.
In this talk I will speak about how it was facing some code in Ruby and RoR open source projects, how this code was refactored and what I learned while doing it.

The presentation is licensed under a CC-BY except the pictures of Ana dressed up, the picture of Evan, the picture with Matz and the gifs. Some pictures of the presentations are taken from and licensed under CC 0. Thanks to all photographers that share they pictures under permissive licenses!

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Let's refactor some Ruby code - EuRuKo 2018

  1. 1. Let’s Refactor Some Ruby Code Ana María Martínez Gómez | | @anamma_06
  2. 2. Ruby and I are turning 25
  3. 3. https://build.opensuse.or g service OBS = Open Build Service
  4. 4. Let’s Refactor Some Ruby Code
  5. 5. Scary comment
  6. 6. src/api/lib/activexml/node.rb
  7. 7. src/api/lib/activexml/node.rb
  8. 8. src/api/lib/activexml/node.rb
  9. 9. service/pull/3947 src/api/lib/activexml/node.r b
  10. 10. comments are a bad ideacomments are a bad idea nodocnodoc protectedprotected
  11. 11. Reusing code
  12. 12. piece_of_code_to_reuse (param1, param2) piece_of_code_to_reuse piece_of_code_to_reuse "Param1_1", params1_2 "Param2_1", params2_2 def # code to be reused which uses two parameters code to be reused which uses two parametersend
  13. 13. piece_of_code_to_reuse (param1, param2) piece_of_code_to_reuse piece_of_code_to_reuse "Param1_1", params1_2 "Param2_1", params2_2 def # code to be reused which uses two parametersend { "Param1_1" => params1_2, "Params2_1" => params2_2 } param1 = key.to_s# code to be reused which uses two parametersend .each do |key, param2| param1 = key.capitalize.to_s { param1_1: params1_2, params2_1: params2_2 }.each do |key, param2| { Param1_1: params1_2, Params2_1: params2_2 }.each do |key, param2|
  14. 14. service/pull/4105 src/api/app/models/kiwi/image.rb
  15. 15. service/pull/4119 src/api/app/models/kiwi/image.rb
  16. 16. Logical conditions
  17. 17. src/api/app/models/flag.rb ONLY ONE OF THEM IS TRUE
  18. 18. service/pull/2324 src/api/app/models/flag.rb
  19. 19. concat + uniq
  20. 20. service/pull/4104 src/api/lib/backend/api/build_results/binaries.rb
  21. 21. service/pull/4104 src/api/lib/backend/api/build_results/binaries.rb
  22. 22. service/pull/4104 src/api/lib/backend/api/build_results/binaries.rb
  23. 23. service/pull/4104 src/api/lib/backend/api/build_results/binaries.rb
  24. 24. a + ba + b a.concat ba.concat b a + b + ca + b + c a.concat b, ca.concat b, c a | ba | b a.union ba.union b a | b | ca | b | c a.union b, ca.union b, c
  25. 25. https://bugs.ruby-
  26. 26. StandStand up!up!
  27. 27. array1.concat(array2, array3).uniq! array1 = (array1 | array2 | array3) array1.union(array2, array 3) 11 22 33
  28. 28. https://bugs.ruby-
  29. 29.
  30. 30. Yak ShavingAny apparently useless activity which, by allowing you to overcome intermediate difficulties, allows you to solve a larger problem Refactor OBS horrible code Add new method to Ruby Improve Ruby Array efficiency
  31. 31.
  32. 32. Ruby is using SVNRuby is using SVN
  33. 33. We work with peopleWe work with people Every team works differentlyEvery team works differently I need to be more patientI need to be more patient
  34. 34. It is a reasonable proposal
  35. 35.
  36. 36. Rails helpers
  37. 37. service/pull/5567 ["Executive", "Developer", "Consultant", "Strategist", "Agent", "Producer", "Executive", "Officer", "Agent", "Director", "Orchestrator", "Administrator", "Officer", "Strategist", "Analyst", "Officer", "Liaison", "Designer", "Producer", "Orchestrator", "Director", "Representative", "Facilitator", "Strategist", "Representative", "Agent", "Orchestrator", "Associate", "Agent", "Coordinator", "Developer", "Strategist", "Technician", "Consultant", "Facilitator", "Planner", "Executive", "Strategist", "Facilitator", "Specialist", "Strategist", "Producer", "Executive", "Agent", "Planner", "Specialist", "Orchestrator", "Orchestrator", "Producer", "Agent"] [["Executive", "executive"], ["Developer", "developer"], ["Consultant", "consultant"], ["Strategist", "strategist"], ["Agent", "agent"], ["Producer", "producer"], ["Executive", "executive"], ["Officer", "officer"], ["Agent", "agent"], ["Director", "director"], ["Orchestrator", "orchestrator"], ["Administrator", "administrator"], ["Officer", "officer"], ["Strategist", "strategist"], ["Analyst", "analyst"], ["Officer", "officer"], ["Liaison", "liaison"], ["Designer", "designer"], ["Producer", "producer"], ["Orchestrator", "orchestrator"], ["Director", "director"], ["Representative", "representative"], ["Facilitator", "facilitator"], ["Strategist", "strategist"], ["Representative", "representative"], ["Agent", "agent"], ["Orchestrator", "orchestrator"], ["Associate", "associate"], ["Agent", "agent"], ["Coordinator", "coordinator"], ["Developer", "developer"], ["Strategist", "strategist"], ["Technician", "technician"], ["Consultant", "consultant"], ["Facilitator", "facilitator"], ["Planner", "planner"], ["Executive", "executive"], ["Strategist", "strategist"], ["Facilitator", "facilitator"], ["Specialist", "specialist"], ["Strategist", "strategist"], ["Producer", "producer"], ["Executive", "executive"], ["Agent", "agent"], ["Planner", "planner"], ["Specialist", "specialist"], ["Orchestrator", "orchestrator"], ["Orchestrator", "orchestrator"], ["Producer", "producer"], ["Agent", "agent"]]
  38. 38. Can it be improved?Can it be improved?
  39. 39. service/pull/5567
  40. 40. - improved code- improved code - options_from_collection_for_select- options_from_collection_for_select - itself- itself - but that’s not all...- but that’s not all...
  41. 41. 6 Rails helpers areRails helpers are exposing privateexposing private methods!methods!
  42. 42.
  44. 44. Thanks! | | @anamma_06