We are all familiar with activerecord .find_in_batches. The main idea behind it is not allowing to load thousands of ActiveRecord objects in memory which would cause tear down the server. I looked at this method and I looked at `.group` which applies GROUP BY clause. Just for fun, I thought what if I receive these “grouped_by” data in batches, something like
scope.grouped_by_in_batches(group_by_column) do |batch, value|
batch is an array same as we get in case of `find_in_batches`
value is the grouped value of the column
Hence I worked on this idea, made a pull request which obliviously did not work, as this was not a common use case, thats all fine. I agree to it. Even I never got to use it till date. However in attempt to do so, I really enjoyed writing test cases for it, getting interacted with a couple of ruby/rails expertise. Feeling happy about it.
I simply needed one helper method which would help me highlight changes being made on any ActiveRecord object inside email. Below is one example of that I have come up with and would like to extend it in my future projects too.
It gave me some insights into ActiveRecord::Base#previous_changes and ActiveRecord::Base#reflections. Nice to learn such ActiveRecord features.
samg/diffy also helped me out decorating text changes
Adding to my MailerHelper
Taking care of concerns, my views are
They are meant not to have large/GOD classes
They are not specific to ActiveRecord
They are there to help us out find out dependencies easier
They should not be dependent on each other, if module A has concern :b, then there should exist paths “root/a.rb” and “/root/a/b.rb“. Though this we ourself have to make sure about concerns path by writing additional code at initialization
I always willing to write clean and neat code, and have end up maintaining my concerns the following ways
- Reopening Class
- Include Module
- Extend ActiveSupport::Concern
I do have one doubt though, out of 3 approaches, which one is good for faster execution?