Skip to content

Instantly share code, notes, and snippets.

@jenrzzz
Created September 4, 2018 20:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jenrzzz/9e0269d2a8c4e6a564ecc67629cd4fe4 to your computer and use it in GitHub Desktop.
Save jenrzzz/9e0269d2a8c4e6a564ecc67629cd4fe4 to your computer and use it in GitHub Desktop.
require 'forwardable'
class RecordRelation
extend Forwardable
include Enumerable
attr_reader :records
def_delegators :@records, :each
def initialize(records_array)
@records = records_array
end
end
class Bar
end
class Foo
def bars
RecordRelation.new(5.times.map { Bar.new })
end
end
foos = [Foo.new, Foo.new]
puts foos.collect_concat(&:bars).inspect
# Gives
# [
# #<RecordRelation:0x00007fe3218e1ed8 @record_class=Bar, @records=[#<Bar:0x00007fe3218e2388>, #<Bar:0x00007fe3218e2338>, #<Bar:0x00007fe3218e2298>, #<Bar:0x00007fe3218e2180>, #<Bar:0x00007fe3218e2018>]>,
# #<RecordRelation:0x00007fe3218e1640 @record_class=Bar, @records=[#<Bar:0x00007fe3218e1c58>, #<Bar:0x00007fe3218e1960>, #<Bar:0x00007fe3218e1938>, #<Bar:0x00007fe3218e1848>, #<Bar:0x00007fe3218e1758>]>
# ]
#
# but I want
# <#RecordRelation:0x000000000DEADBEEF @record_class=Bar,
# @records=[
# #<Bar:0x00007fe3218e2388>,
# #<Bar:0x00007fe3218e2338>,
# #<Bar:0x00007fe3218e2298>,
# #<Bar:0x00007fe3218e2180>,
# #<Bar:0x00007fe3218e2018>,
# #<Bar:0x00007fe3218e1c58>,
# #<Bar:0x00007fe3218e1960>,
# #<Bar:0x00007fe3218e1938>,
# #<Bar:0x00007fe3218e1848>,
# #<Bar:0x00007fe3218e1758>
# ]
# >
#
# or just
# [
# #<Bar:0x00007fe3218e2388>,
# #<Bar:0x00007fe3218e2338>,
# #<Bar:0x00007fe3218e2298>,
# #<Bar:0x00007fe3218e2180>,
# #<Bar:0x00007fe3218e2018>,
# #<Bar:0x00007fe3218e1c58>,
# #<Bar:0x00007fe3218e1960>,
# #<Bar:0x00007fe3218e1938>,
# #<Bar:0x00007fe3218e1848>,
# #<Bar:0x00007fe3218e1758>
# ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment