Sha256: 1faab2ff5ab8081ac6c66f389dc762c80b449264c32a2633220ca191dda3573f

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

require 'thunderer/version'
require 'thunderer/parser'
require 'thunderer/messanger'
require 'thunderer/faye_extension'
require 'digest/sha1'
require 'yaml'
require 'thunderer/engine' if defined? Rails

module Thunderer
  class Error < StandardError; end

  class << self
    attr_reader :config
    attr_reader :messanger

    def reset_config
     @config = {}
    end

    def load_config filename, environment
      reset_config
      config_yaml = YAML.load_file(filename)[environment]
      raise ArgumentError, "The #{environment} environment dose not exist" unless config_yaml
      config_yaml.each { |k,v| config[k.to_sym] = v }
      Thunderer::Messanger.configure( config[:local_server_url] || config[:server])
      @messanger = Thunderer::Messanger

    end

    def publish_to channel, data
      publish_message(message(channel, data))
    end

    def publish_message(message)
      raise Error, 'No server specified, ensure thunderer.yml was loaded properly.' unless config[:server]
      url = URI.parse(config[:server])
      messanger.post(message)
    end

    def message(channel, data)
      {:channel => channel,
       :data => {
         :channel => channel,
         :data => data},
       :ext => {:thunderer_secret_token => config[:secret_token]}}
    end

    def subscription(options = {})
      sub = {:server => config[:server], :timestamp => (Time.now.to_f * 1000).round}.merge(options)
      sub[:signature] = Digest::SHA1.hexdigest([config[:secret_token], sub[:channel], sub[:timestamp]].join)
      sub
    end

    def signature_expired?(timestamp)
      timestamp < ((Time.now.to_f - config[:signature_expiration])*1000).round if config[:signature_expiration]
    end

    def faye_app(options = {})
      options = {mount: '/faye', timeout: 45, extensions: [FayeExtension.new] }.merge(options)
      Faye::RackAdapter.new(options)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
thunderer-1.0.0 lib/thunderer.rb