I have the following hypothetical code:
class User < ActiveRecord::Base
def oauth_consumer
@oauth_consumer ||= OauthConsumer.new(self)
end
end
class OauthConsumer
attr_reader :user, :access_token
def initialize(user)
@user = user
@access_token = OAuth::AccessToken.new(@user.token, @user.secret)
end
def get_posts_in_thread(thread_id)
response = access_token.get("/thread/#{thread_id}/user/#{user.id}")
JSON.parse(response.body)
end
end
user = User.new(:token => 'token', :secret => 'secret')
# I want to get the user's posts in thread #12345.
user.oauth_consumer.get_posts_in_thread(12345)
I'm wondering if this creates a circular memory reference, in which user
has a reference to the oauth_consumer
, and the oauth_consumer
has a reference to user
, thus making it impossible to be garbage collected?
Or does the underlying GC implementation (REE 1.8.7) handle this case?