简体   繁体   中英

Initializing Gem-Specific variables information in Ruby On Rails

I am working right now on a Rails 4.0 application (using Ruby 2.0.0).

I would like to interact with Jenkins using jenkins_api_client gem, from multiple pages of my Rails application .

This gem generally using a @client parameter, which is initialized to contain the credentials and other information of the Jenkins server. This parameter in initialized using something like this:

@client = JenkinsApi::Client.new(:server_ip => '0.0.0.0',
     :username => 'somename', :password => 'secret password')

Once initialized, I would like to access this parameter and run multiple sub-routines on it. This initialization takes time, and I really want to avoid doing this process every time one of the clients would like to use this gem functionality, such as:

# Get a filtered list of jobs from the server
jobs_to_filter = "^test_job.*"
jobs = @client.job.list(jobs_to_filter)

So, I hope to do this only once- when the rails server starts.

I would like to use this parameter from multiple pages of my app, possibly with threaded solution further down the road (not critical at the moment).

Can anyone recommend how to achieve this? I'd appreciate an answer which is consistent with Rails convention.

Thanks a lot!

as example you could create something like that:

module JenkinsApi
  class Client
    class << self
      attr_reader :instance, :config

      def configure(&block)
        @config = OpenStruct.new
        block.call @config
      end

      def instance
        @instance ||= JenkinsApi::Client.new @config
      end
    end
  end
end

which allow you write in initializer:

JenkinsApi::Client.configure do |config|
  config.server_ip = '0.0.0.0'
  config.username = 'somename'
  config.password = 'secret password'
end

and then use it like: JenkinsApi::Client.instance.job.list(...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM