Ruby Programming and Refactoring

This page is a work in progress as I review over 500 previous posts.

Tools

I’m always looking for or creating my own tools to help with Ruby development. Sometimes these tools become useful enough that I’ll share them or open source them.

Testing

Every Ruby developer loves testing right? Right?

Ruby and Rails

Grab bag of miscellaneous Ruby posts and tips I’ve written over the years.

Rails Refactoring

Redmine Refactoring series

Since Redmine’s codebase was in a pretty poor shape I started a daily series to refactor it and show how I did it. This series ended up being used as the source for Refactoring Redmine (after a bunch of editing).

  1. Daily Refactor #1: Extract Method in the BulkTimeEntriesController – saving a new TimeEntry
  2. Daily Refactor #2: Move Method in the BulkTimeEntriesController – saving a new TimeEntry
  3. Daily Refactor #3: Behavior Change in the Bulk Time Entry patch
  4. Daily Refactor #4: Extract Method in the BulkTimeEntriesHelper – options generator
  5. Daily Refactor #5: Remove iteration by using Enumerable
  6. Daily Refactor #6: Move recipients method to acts_as_event
  7. Daily Refactor #7: Extract method in fetch_changesets
  8. Daily Refactor #8: Move method in the ReportsController
  9. Daily Refactor #9: Move Issue#by methods
  10. Daily Refactor #10: Pull up the #find_project method to the ApplicationController
  11. Daily Refactor #11: Extract action in ReportsController
  12. Daily Refactor #12: Extract rendering in the case statement
  13. Daily Refactor #13: Inline utility methods in ReportsController
  14. Daily Refactor #14: Extract method to before_filter in ReportsController
  15. Daily Refactor #15: Rename method in IssueStatusesController
  16. Daily Refactor #16: Rename method in RolesController
  17. Daily Refactor #17: Extract method in AuthSourceLdap
  18. Daily Refactor #18: Extract method in AuthSourceLdap
  19. Daily Refactor #19: Cleanup in AuthSourceLdap#authenticate
  20. Daily Refactor #20: Extract Method in AuthSourceLdap
  21. Daily Refactor #20.1: Bonus Extract Method in AuthSourceLdap
  22. Daily Refactor #21: Move methods in the RoutingTest
  23. Daily Refactor #22: Move method in IssuesController#bulk_edit
  24. Daily Refactor #23: Extract method in IssuesController#edit
  25. Daily Refactor #24: Extract method body in IssuesController#edit
  26. Daily Refactor #25: Extract method in IssuesController#update
  27. Daily Refactor #26: Convert Procedural Design to Objects in #issue_update
  28. Daily Refactor #27: Move Method to the Attachment Model
  29. Daily Refactor #28: Decouple flash messages from Attachment#attach_files
  30. Daily Refactor #29: Replace Temp with Query in IssuesController#issue_update
  31. Daily Refactor #30: Move Method into Issue
  32. Daily Refactor #31: Extract Method in IssuesHelper#show_detail
  33. Daily Refactor #32: Inline Method in IssuesHelper#show_detail
  34. Daily Refactor #33: Extract Method in IssuesController
  35. Daily Refactor #34: Split Methods in the controllers
  36. Daily Refactor #35: Pull up method for finding a controller’s model object
  37. Daily Refactor #36: Extract Method to the Member model
  38. Daily Refactor #37: Extract Method to Query#sortable_columns
  39. Daily Refactor #38: Extract Method in StuffToDo
  40. Daily Refactor #39: Substitute Algorithm for Checking the Settings
  41. Daily Refactor #40: Extract Method in StuffToDo#available
  42. Daily Refactor #41: Consolidate Duplicate Conditional Fragments in StuffToDo
  43. Daily Refactor #42: Consolidate Conditionals in StuffToDo#available
  44. Daily Refactor #43: Extract Method in StuffToDoController
  45. Daily Refactor #44: Extract Method in Kanban.
  46. Daily Refactor #45: Extract Method for Kanban panes – Part 1
  47. Daily Refactor #46: Extract Method for Kanban panes – Part 2
  48. Daily Refactor #47: Extract Method for Kanban panes – Part 3
  49. Daily Refactor #48: Consolidate Duplicate Conditional Fragments in Kanban
  50. Daily Refactor #49: Replace Incoming Pane’s Data Value with Object
  51. Daily Refactor #50: Remove Middle Man methods in Kanban
  52. Daily Refactor #51: Lazy Load Issues in Kanban
  53. Daily Refactor #52: Remove Middle Man Kanban#find
  54. Daily Refactor #53: Move Method to KanbanPane
  55. Daily Refactor #54: Move Method to KanbanPane
  56. Daily Refactor #55: Move Pane Configuration To KanbanPane
  57. Daily Refactor #56: Replace Accumulator with Inject
  58. Daily Refactor #57: Extract Class to CustomFieldFormat
  59. Daily Refactor #58: Move Method to Query Model
  60. Daily Refactor #59: Move Routing Tests
  61. Daily Refactor #60: Move Routing Tests – Part Two
  62. Daily Refactor #61: Extract Method in IssuesController for REST
  63. Daily Refactor #62: Extract Method in IssuesController
  64. Daily Refactor #63: Extract Method to before_filter in IssuesController
  65. Daily Refactor #64: Move Method to QueriesHelper
  66. Daily Refactor #65: Extract Gantt to a new controller
  67. Daily Refactor #66: Pull Up Method to ApplicationController
  68. Daily Refactor #67: Pull Up Method to ApplicationController
  69. Daily Refactor #68: Extract Class to New Controller
  70. Daily Refactor #69: Inline Temp in SourceNews#migrate
  71. Daily Refactor #70: Inline Temp in SourceVersion#migrate
  72. Daily Refactor #71: Extract Method in KanbansController to before_filter
  73. Daily Refactor #72: Move Method in KanbansController
  74. Daily Refactor #73: Move Method to before_filter in InvoiceController
  75. Daily Refactor #74: Extract Method in Invoice
  76. Daily Refactor #75: Inline Temp in Invoices#outstanding
  77. Daily Refactor #76: Replace Temp with Query in Invoice#fully_paid?
  78. Daily Refactor #77: Extract and Move Method in InvoiceController
  79. Daily Refactor #78: Replace Data Value in InvoiceController with Object
  80. Daily Refactor #79: Convert Controller to REST Controller
  81. Daily Refactor #80: Convert PaymentsController to REST Controller
  82. Daily Refactor #81: Move last_invoice_number to Model
  83. Redmine Refactor #82: Extract Method to shoulda Macro in AccountControllerTest
  84. Redmine Refactor #83: Self Encapsulate Field in User
  85. Redmine Refactor #84: Extract Method in IssuesController#context_menu
  86. Redmine Refactor #85: Extract Method in IssuesController#move
  87. Redmine Refactor #86: Extract Method to split IssuesController#move into two actions
  88. Redmine Refactor #87: Extract Method Body to IssuesController#perform_move
  89. Redmine Refactor #88: Extract Method from move and perform_move
  90. Redmine Refactor #89: Extract Controller: IssueMovesController
  91. Redmine Refactor #90: Pull Up Method to ApplicationController
  92. Redmine Refactor #91: Pull Up set_flash_from_bulk_issue_save to ApplicationController
  93. Redmine Refactor #92: Move Method #reply to JournalsController
  94. Redmine Refactor #93: Extract Controller from IssuesController
  95. Redmine Refactor #94: Extract PreviewsController from IssuesController
  96. Redmine Refactor #95: Extract ContextMenusController from IssuesController
  97. Redmine Refactor #96: Merge Method in IssuesController
  98. Redmine Refactor #97: Move method from IssuesController to JournalsController
  99. Redmine Refactor #98: Extract method from IssuesController#bulk_edit
  100. Redmine Refactor #99: Extract method from IssuesController#bulk_update
  101. Redmine Refactor #100: Convert Issue Routes to REST Resources
  102. Redmine Refactor #101: Extract activity from ProjectsController to a new controller
  103. Redmine Refactor #102: Move method from ProjectsController#roadmap to VersionsController#index
  104. Redmine Refactor #103: Move method from ProjectsController#list_files to FilesController#index
  105. Redmine Refactor #104: Move method from ProjectsController#add_file to FilesController#new
  106. Redmine Refactor #105: Move method from ProjectsController#save_activities to ProjectEnumerationsController#save
  107. Redmine Refactor #106: Move method from ProjectsController#reset_activities to ProjectEnumerationsController#destroy
  108. Redmine Refactor #107: Extract method #create from ProjectsController#add
  109. Redmine Refactor #108: Rename method ProjectsController#add to #new
  110. Redmine Refactor #109: Extract method ProjectsController#edit to #update
  111. Redmine Refactor #110: Convert ProjectsController’s routes to resources
  112. Redmine Refactor #111: Convert ProjectEnumerations to resource
  113. Redmine Refactor #112: Split Method in FilesController
  114. Redmine Refactor #113: Convert FilesController to resource
  115. Redmine Refactor #114: Split Method in VersionsController
  116. Redmine Refactor #115: Split Method in VersionsController
  117. Redmine Refactor #116: Convert VersionsController to resource
  118. Redmine Refactor #117: Split New Method in NewsController
  119. Redmine Refactor #118: Split Edit Method in NewsController
  120. Redmine Refactor #119: Extract Class from NewsController
  121. Redmine Refactor #120: Move Method from NewsController to CommentsController
  122. Redmine Refactor #121: Move Method from NewsController to PreviewsController
  123. Redmine Refactor #122: Convert NewsController to REST resource
  124. Redmine Refactor #123: Split #add method in UsersController to #add and #create
  125. Redmine Refactor #124: Rename Method UsersController#add
  126. Redmine Refactor #125: Split UsersController#edit into #edit and #update
  127. Redmine Refactor #126: Convert UsersController to Resource
  128. Redmine Refactor #127: Extract TimelogController#report to new TimeEntryReportsController
  129. Redmine Refactor #128: Rename method TimelogController#details to #index
  130. Redmine Refactor #129: Extract Method TimelogController#edit to TimelogController#new
  131. Redmine Refactor #130: Extract Method TimelogController#edit to TimelogController#new
  132. Redmine Refactor #131: Extract Method TimelogController#edit to TimelogController#update
  133. Redmine Refactor #132: Convert Timelogs to REST Resource
  134. Redmine Refactor #133: Extract Method in WikiController#special
  135. Redmine Refactor #134: Extract Method in WikiController#special to utility method
  136. Redmine Refactor #135: Extract Method page_index in WikiController#special
  137. Redmine Refactor #136: Extract Method date_index in WikiController#special
  138. Redmine Refactor #137: Remove Method WikiController#special
  139. Redmine Refactor #138: Unify Interfaces
  140. Redmine Refactor #139: Rename WikiController#index method to WikiController#show
  141. Redmine Refactor #140: Extract Method WikiController#edit to #update
  142. Redmine Refactor #141: Rename Method WikiController#page_index
  143. Redmine Refactor #142: Convert WikiController#destroy to use HTTP DELETE
  144. Redmine Refactor #143: Convert WikiController to use :id params
  145. Redmine Refactor #144: Convert WikiController to a REST resource
  146. Redmine API: Testing for the Authentication Key
  147. Redmine API: Testing for HTTP Basic auth refactoring
  148. Redmine API: Testing for HTTP Basic auth with an API Token
  149. Redmine API: Changing API Tests for Issues #index and #show
  150. Redmine API: Adding Key Authentication for Issues#create

 

Become more productive with Redmine     Get Redmine Tips »