class ATrigger::Client

Public Class Methods

new(options = {}) click to toggle source
# File lib/ClientKernel.rb, line 22
def initialize(options = {})
  symbolize_keys!(options)

  @@_key = options[:key]
  @@_secret = options[:secret]
  @@_apiServer = options[:apiServer] || @@_apiServer
  @@_apiTimeout = options[:apiTimeout] || @@_apiTimeout
  @@_debug = options[:debug] if options[:debug].is_a?(TrueClass) or options[:debug].is_a?(FalseClass)
  @@_async = options[:async] if options[:async].is_a?(TrueClass) or options[:async].is_a?(FalseClass)

  check_secret
end

Public Instance Methods

doCreate(options) click to toggle source
# File lib/ClientKernel.rb, line 36
def doCreate(options)

  check_secret

  symbolize_keys!(options)

  _timeSlice = CGI::escape(options[:timeSlice])
  _url = CGI::escape(options[:url])
  _tags = options[:tags] #http://www.ruby-doc.org/core-1.9.3/Hash.html
  _first = toISO8601(options[:first]) || ""
  _count = options[:count] || 1
  _retries = options[:retries] || -1
  _postData = options[:postData] || Hash.new() #http://www.ruby-doc.org/core-1.9.3/Hash.html

  _first = CGI::escape(_first.to_s);

  _tagsRaw = ""
  if not _tags.nil?
      _tagsRaw = dictionary2string(_tags, "tag_")
  end


  if _timeSlice.nil? || _timeSlice.empty?
    @@_errors += 1
    fail ArgumentError, 'Must supply timeSlice as a non-empty string'
  end
  if _url.nil? || _url.empty?
    @@_errors += 1
    fail ArgumentError, 'Must supply url as a non-empty string'
  end


  _urlQueries = "timeSlice=#{_timeSlice}&url=#{_url}&first=#{_first}&count=#{_count}&retries=#{_retries}&#{_tagsRaw}"

  callATrigger('tasks/create', _urlQueries , _postData)
end
doDelete(_tags) click to toggle source
# File lib/ClientKernel.rb, line 74
def doDelete(_tags) 
     _out = actionUsingTags("tasks/delete", _tags)
     _out
end
doGet(_tags) click to toggle source
# File lib/ClientKernel.rb, line 91
def doGet(_tags) 
   _out = actionUsingTags("tasks/get", _tags)
   _out
end
doPause(_tags) click to toggle source
# File lib/ClientKernel.rb, line 80
def doPause(_tags) 
     _out = actionUsingTags("tasks/pause", _tags)
     _out
end
doResume(_tags) click to toggle source
# File lib/ClientKernel.rb, line 86
def doResume(_tags) 
   _out = actionUsingTags("tasks/resume", _tags)
   _out
end
errorsCount() click to toggle source
# File lib/ClientKernel.rb, line 96
def errorsCount
  @@_errors
end
verifyRequest(_requestIP) click to toggle source
# File lib/ClientKernel.rb, line 100
def verifyRequest(_requestIP) 
      _out = ""
      begin
        _out = httpRequest("/v1/ipverify?ip=#{ERB::Util.url_encode(_requestIP)}", "")
        return true if _out.to_s.include?("""OK""")
      rescue Exception => err
        if err.to_s.include?("""ERROR""") and  err.to_s.include?("""INVALID IP ADDRESS""")
          return false
        else
          raise err if @@_debug
        end
      end
      false
end

Private Instance Methods

actionUsingTags(_urlType, _tags) click to toggle source
# File lib/ClientKernel.rb, line 117
def actionUsingTags(_urlType, _tags) 
        check_secret
           begin
            #Creating tags query array
            _urlQueries = dictionary2string(_tags, 'tag_')
            _out = callATrigger(_urlType, _urlQueries , nil)
            _out
          rescue Exception => err
            @@_errors += 1
            fail ArgumentError, "ATrigger: actionUsingTags, #{err}" if @@_debug
          end
end
callATrigger(_urlType, _urlQueries, _postData) click to toggle source
# File lib/ClientKernel.rb, line 131
def callATrigger(_urlType, _urlQueries, _postData)
  _queries = "?key=#{ERB::Util.url_encode(@@_key)}&secret=#{ERB::Util.url_encode(@@_secret)}&" + _urlQueries
  _payload = dictionary2string(_postData)
  _apiURL = "/v1/" + _urlType + _queries


  _out = ""
  if @@_async == true 
    Thread.new httpRequest(_apiURL, _payload)
    _out = 'Disable async requests to get success result /or/ error details.'
  else
    _out = httpRequest(_apiURL, _payload)
  end
  _out
end
check_secret() click to toggle source

private: Checks that the secret is properly initialized

# File lib/ClientKernel.rb, line 198
def check_secret
  fail 'Key/Secret must be initialized' if @@_secret.nil?
end
dictionary2string(inHash, inPreKey = "") click to toggle source
# File lib/ClientKernel.rb, line 183
def dictionary2string(inHash, inPreKey = "")
  _out = ""
  if not inHash.nil?
      inHash.each do |key, value|
         key = ERB::Util.url_encode(key)
         value = ERB::Util.url_encode(value)
        _out = _out + "#{inPreKey}#{key}=#{value}&"
      end
      _out = _out.chomp('&')
  end
  _out
end
httpRequest(_apiURL, _payload) click to toggle source
# File lib/ClientKernel.rb, line 148
def httpRequest(_apiURL, _payload)
      _out = ""
      request = Net::HTTP::Post.new(_apiURL, initheader = {'Content-Type' =>'application/x-www-form-urlencoded'})
      request.body = _payload

      response = Net::HTTP.new(@@_apiServer, 443)
      response.use_ssl = true
      response.verify_mode = OpenSSL::SSL::VERIFY_NONE
      response.open_timeout = @@_apiTimeout
      response.read_timeout = @@_apiTimeout
      response = response.start { |http| http.request(request) }

      #puts _apiURL

      if response.code == '200'
        _out = response.body
        raise "A Trigger error responsed: #{response.body}" if _out.to_s.include?("""ERROR""") and @@_debug
      else
        @@_errors += 1
        raise "A Trigger HTTP result error: #{response.code} #{response.message}: #{response.body}" if @@_debug
      end
      
      _out
end
stringify_keys(hash) click to toggle source
# File lib/ClientKernel.rb, line 212
def stringify_keys(hash)
  hash.inject({}) { |memo, (k,v)| memo[k.to_s] = v; memo }
end
symbolize_keys(hash) click to toggle source
# File lib/ClientKernel.rb, line 204
def symbolize_keys(hash)
  hash.inject({}) { |memo, (k,v)| memo[k.to_sym] = v; memo }
end
symbolize_keys!(hash) click to toggle source
# File lib/ClientKernel.rb, line 208
def symbolize_keys!(hash)
  hash.replace symbolize_keys(hash)
end
toISO8601(inDate) click to toggle source
# File lib/ClientKernel.rb, line 173
def toISO8601(inDate)
        _out = inDate
        if inDate.to_s.include?(" ") or inDate.to_s.include?("/")
            #Make ISO format
            _out = DateTime.parse(inDate).iso8601
        end
        _out
end