module Gush class Configuration attr_accessor :concurrency, :namespace, :redis_url, :ttl, :locking_duration, :polling_interval def self.from_json(json) new(Gush::JSON.decode(json, symbolize_keys: true)) end def initialize(hash = {}) self.concurrency = hash.fetch(:concurrency, 5) self.namespace = hash.fetch(:namespace, 'gush') self.redis_url = hash.fetch(:redis_url, 'redis://localhost:6379') self.gushfile = hash.fetch(:gushfile, 'Gushfile') self.ttl = hash.fetch(:ttl, -1) self.locking_duration = hash.fetch(:locking_duration, 2) # how long you want to wait for the lock to be released, in seconds self.polling_interval = hash.fetch(:polling_internal, 0.3) # how long the polling interval should be, in seconds end def gushfile=(path) @gushfile = Pathname(path) end def gushfile @gushfile.realpath if @gushfile.exist? end def to_hash { concurrency: concurrency, namespace: namespace, redis_url: redis_url, ttl: ttl, locking_duration: locking_duration, polling_interval: polling_interval } end def to_json Gush::JSON.encode(to_hash) end end end