class Zulu::SubscriptionRequest
Constants
- LIST
- MODES
Public Class Methods
new(params)
click to toggle source
# File lib/zulu/subscription_request.rb, line 19 def initialize(params) @mode = params['hub.mode'] @topic = params['hub.topic'] @callback = params['hub.callback'] end
pop(timeout=nil)
click to toggle source
# File lib/zulu/subscription_request.rb, line 14 def self.pop(timeout=nil) _, params = Zulu.redis.brpop(LIST, timeout: timeout) params and new(Oj.load(params)) end
push(request)
click to toggle source
# File lib/zulu/subscription_request.rb, line 10 def self.push(request) Zulu.redis.lpush(LIST, request.to_json) end
Public Instance Methods
==(other)
click to toggle source
# File lib/zulu/subscription_request.rb, line 57 def ==(other) to_hash == other.to_hash end
error_messages()
click to toggle source
# File lib/zulu/subscription_request.rb, line 38 def error_messages errors.map {|e| "hub.#{e[0]} #{e[1]}" } end
errors()
click to toggle source
# File lib/zulu/subscription_request.rb, line 34 def errors @errors ||= [] end
perform()
click to toggle source
# File lib/zulu/subscription_request.rb, line 69 def perform subscription = Subscription.new(topic: @topic, callback: @callback) case @mode when 'subscribe' subscription.save when 'unsubscribe' subscription.destroy end end
process()
click to toggle source
# File lib/zulu/subscription_request.rb, line 79 def process verify and perform end
save()
click to toggle source
# File lib/zulu/subscription_request.rb, line 42 def save valid? and self.class.push(self) end
to_hash()
click to toggle source
# File lib/zulu/subscription_request.rb, line 46 def to_hash [:mode, :topic, :callback].inject({}) do |hash, attr| hash["hub.#{attr}"] = instance_variable_get(:"@#{attr}") hash end end
to_json()
click to toggle source
# File lib/zulu/subscription_request.rb, line 53 def to_json Oj.dump(to_hash) end
valid?()
click to toggle source
# File lib/zulu/subscription_request.rb, line 25 def valid? @valid ||= begin validate_mode validate_topic validate_callback errors.empty? end end
verify()
click to toggle source
# File lib/zulu/subscription_request.rb, line 61 def verify challenge = Challenge.new params = to_hash params['hub.challenge'] = challenge response = Http.get(@callback, params: params) response.code == "200" && response.body == challenge end
Private Instance Methods
validate_callback()
click to toggle source
# File lib/zulu/subscription_request.rb, line 95 def validate_callback @callback or errors << [:callback, 'must be present'] uri = Addressable::URI.parse(@callback) uri and %w(http https).include? uri.scheme or fail Addressable::URI::InvalidURIError rescue Addressable::URI::InvalidURIError errors << [:callback, 'must be a valid http url'] end
validate_mode()
click to toggle source
# File lib/zulu/subscription_request.rb, line 85 def validate_mode @mode or errors << [:mode, 'must be present'] in_list = MODES.include?(@mode) in_list or errors << [:mode, "must be either #{MODES.join(' or ')}"] end
validate_topic()
click to toggle source
# File lib/zulu/subscription_request.rb, line 91 def validate_topic @topic or errors << [:topic, 'must be present'] end