class HerdstServicecall::Caller

Attributes

config[RW]
responder[RW]

Public Class Methods

new(config) click to toggle source
# File lib/herdst_servicecall/caller.rb, line 12
def initialize(config)
    self.config = config
end

Public Instance Methods

call(service_name, event_name, data) click to toggle source
# File lib/herdst_servicecall/caller.rb, line 17
def call(service_name, event_name, data)
    service_endpoint = @config.get_service(service_name.to_sym)
    
    raise "No service endpoint!" unless service_endpoint
    
    call_endpoint = service_endpoint + @config.event_path  + "?" + { :token => get_token }.to_query
    
    response = send_request!(call_endpoint, Request.new(event_name, data))
    
    Response.parse(response)
end

Private Instance Methods

get_token() click to toggle source
# File lib/herdst_servicecall/caller.rb, line 42
def get_token
    payload = {
        :iat => (Time.now.utc.to_i - 1),
        :nbf => (Time.now.utc.to_i - 10),
        :exp => (Time.now.utc.to_i + 300)
    }
    
    JWT.encode(payload, self.config.jwt_secret, self.config.jwt_algorithm)
end
make_request!(http, request) click to toggle source
# File lib/herdst_servicecall/caller.rb, line 52
def make_request!(http, request)
    http.request(request)
end
send_request!(endpoint, service_request) click to toggle source
# File lib/herdst_servicecall/caller.rb, line 31
def send_request!(endpoint, service_request)
    uri = URI.parse(endpoint)
    http = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == "https")
    request = Net::HTTP::Post.new(uri.to_s)
    
    request.content_type = "application/json"
    request.body = service_request.to_json
    
    make_request!(http, request)
end