module FayeShard class Shard attr_accessor :configuration # Creates a shard instance and assigns the config to it. # # * config:: Config to use. # def initialize(config) self.configuration = config.with_indifferent_access end # Returns URL for client. # # * https:: Specifies whether to use SSL connection or not # def url(https = false) secured = (configuration['secured'] || false) & https port = secured ? configuration["secured_port"] : configuration["port"] "http#{secured ? 's' : ''}://#{configuration["host"]}:#{port}/faye" end # Returns default client JS url # # * https:: Specifies whether to use SSL connection or not # def js_url(https = false) url(https) + '.js' end # Local url, needed for RoR <-> Faye communication # def local_url host = configuration["local_host"] || configuration["host"] "http://#{host}:#{configuration["port"]}/faye" end # Pushes data to a Faye shard # # * channel:: User's channel # * data:: Data to push # * ext:: Faye extensions, eg. auth_token # def push(channel, data, ext = {}) uri = URI.parse(self.local_url) http = Net::HTTP.new(uri.host, uri.port) req = Net::HTTP::Post.new uri.path req.set_form_data('message' => {'channel' => channel, 'data' => data, 'ext' => ext}.to_json) http.request req end end end