ruby-on-railsrubyredditkit

How to make a rails server wide object?


I am using the RedditKit gem and in order to access certain elements, I need to send a request to reddit api to create a "client" object. Below is my current logic:

## application_controller
before_action :redditkit_login

private

def redditkit_login
  @client = RedditKit::Client.new ENV["reddit_username"], ENV["reddit_password"]
end

As you can see in my logic here, before EVERY REQUEST, I am subsequently making a new client object and then using that everywhere.

My question is, how do I only make one client object which can be used to serve ALL requests from anywhere?

My motive behind this is speed. For every request to server, I am making a new request to reddit and then responding to the original request. I want to have the client object readily available at all times.


Solution

  • You have a lot of options. A simple one would be to create a config/initializers/reddit_client.rb file and put in there:

      RedditClient = RedditKit::Client.new ENV.fetch("reddit_username"), ENV("reddit_password")
    

    (note I switched to ENV.fetch because it will error if the key is not found, which can be helpful).

    You could also rename the file as app/models/reddit_client.rb. Although it's not really a model, that folder is also autoloaded so it should work as well.