class RequestMyTurn
Constants
- VERSION
Attributes
id[RW]
locked[RW]
Public Class Methods
configure() { |settings| ... }
click to toggle source
# File lib/request_my_turn.rb, line 33 def configure block_given? ? yield(settings) : settings end
new(queue_name, **options)
click to toggle source
# File lib/request_my_turn.rb, line 59 def initialize(queue_name, **options) @queue_name = queue_name @url = options[:url] @after = options[:after] @before = options[:before] @switch = options[:switch] @timeout = options[:timeout] @lock_seconds = options[:lock_seconds] || 60 @headers = options[:headers] @ignore_timeout_error = options[:ignore_timeout_error] end
settings()
click to toggle source
# File lib/request_my_turn.rb, line 37 def settings @settings ||= OpenStruct.new( url: nil, after: nil, before: nil, switch: true, timeout: nil, lock_seconds: nil, headers: nil, ignore_timeout_error: nil ) end
Public Instance Methods
perform() { || ... }
click to toggle source
# File lib/request_my_turn.rb, line 72 def perform(&block) raise WithoutBlock unless block return yield unless switched_on? self.id = take_my_turn before.call(id) if valid_callback? before result = yield return result unless present? id self.locked = leave_my_turn(id) after.call(locked) if valid_callback? after result end
Private Instance Methods
build_url()
click to toggle source
# File lib/request_my_turn.rb, line 109 def build_url current_url = url raise InvalidUrl, current_url unless current_url =~ URI::DEFAULT_PARSER.make_regexp current_url end
current_headers()
click to toggle source
# File lib/request_my_turn.rb, line 126 def current_headers @current_headers ||= headers end
current_url()
click to toggle source
# File lib/request_my_turn.rb, line 105 def current_url @current_url ||= build_url end
leave_my_turn(id)
click to toggle source
# File lib/request_my_turn.rb, line 130 def leave_my_turn(id) response = request "#{current_url}/#{@queue_name}/#{id}", method: :delete read_response(response, :locked) end
present?(value)
click to toggle source
# File lib/request_my_turn.rb, line 144 def present?(value) if value.nil? false elsif value.is_a?(Numeric) || value.length.positive? true else false end rescue StandardError false end
read_response(response, key)
click to toggle source
# File lib/request_my_turn.rb, line 135 def read_response(response, key) hash = JSON.parse response.body hash[key.to_s] end
request(url, method: :get)
click to toggle source
# File lib/request_my_turn.rb, line 116 def request(url, method: :get) uri = URI(url) https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = url.start_with? 'https' request = method == :delete ? Net::HTTP::Delete.new(uri) : Net::HTTP::Get.new(uri) current_headers.each { |key, value| request[key] = value } if current_headers.is_a?(Hash) https.request(request) end
switched_on?()
click to toggle source
# File lib/request_my_turn.rb, line 89 def switched_on? switch end
take_my_turn()
click to toggle source
# File lib/request_my_turn.rb, line 93 def take_my_turn timeout = self.timeout response = Timeout.timeout(timeout.to_f) do request "#{current_url}/#{@queue_name}?seconds=#{lock_seconds}" rescue Timeout::Error return false if ignore_timeout_error raise TimeoutError, timeout end read_response(response, :id) end
valid_callback?(callback)
click to toggle source
# File lib/request_my_turn.rb, line 140 def valid_callback?(callback) callback.is_a?(Proc) || callback.is_a?(Method) end