class AirshipClient

Public Class Methods

_validate_api_key(api_key) click to toggle source
# File lib/airship-client.rb, line 71
def _validate_api_key(api_key)
  if !api_key.instance_of?(String)
    raise ArgumentError.new("api_key must be a string")
  end
end
_validate_env_key(env_key) click to toggle source
# File lib/airship-client.rb, line 77
def _validate_env_key(env_key)
  if !env_key.instance_of?(String)
    raise ArgumentError.new("env_key must be a string")
  end
end
_validate_fail_gracefully(fail_gracefully) click to toggle source
# File lib/airship-client.rb, line 89
def _validate_fail_gracefully(fail_gracefully)
  if !(fail_gracefully == true || fail_gracefully == false)
    raise ArgumentError.new("fail_gracefully must be true or false")
  end
end
_validate_timeout(timeout) click to toggle source
# File lib/airship-client.rb, line 83
def _validate_timeout(timeout)
  if !timeout.is_a?(Integer)
    raise ArgumentError.new("timeout must be an integer")
  end
end
init(api_key, env_key = nil, timeout = DEFAULT_TIMEOUT, fail_gracefully = true) click to toggle source
# File lib/airship-client.rb, line 40
def init(api_key, env_key = nil, timeout = DEFAULT_TIMEOUT, fail_gracefully = true)
  if api_key.nil?
    raise ArgumentError.new("api_key cannot be nil")
  end

  if !api_key.nil?
    self._validate_api_key(api_key)
  end

  if !env_key.nil?
    self._validate_env_key(env_key)
  end

  self._validate_timeout(timeout)
  self._validate_fail_gracefully(fail_gracefully)

  @@api_key = api_key
  @@env_key = env_key
  @@timeout = timeout
  @@fail_gracefully = fail_gracefully
  nil
end
new(api_key = nil, env_key = nil) click to toggle source
# File lib/airship-client.rb, line 96
def initialize(api_key = nil, env_key = nil)
  if !api_key.nil?
    self.class._validate_api_key(api_key)
  end

  if !env_key.nil?
    self.class._validate_env_key(env_key)
  end

  @api_key = api_key
  @env_key = env_key
  @conn = Faraday.new(:url => API_BASE_ENDPOINT)
  nil
end
set_env_key(env_key) click to toggle source
# File lib/airship-client.rb, line 63
def set_env_key(env_key)
  if env_key.nil?
    raise ArgumentError.new("env_key cannot be nil")
  end
  self._validate_env_key(env_key)
  @@env_key = env_key
end

Public Instance Methods

gate(control_name, obj) click to toggle source
# File lib/airship-client.rb, line 133
def gate(control_name, obj)
  is_array = obj.instance_of?(Array)
  begin
    response = @conn.post do |req|
      req.url(V1_GATE_ENDPOINT)
      req.headers["Content-Type"] = "application/json"
      req.headers["api-key"] = @api_key || @@api_key
      req.options.timeout = @@timeout
      request_obj = {}
      request_obj["env_key"] = @env_key || @@env_key
      request_obj["control_short_name"] = control_name
      if is_array
        request_obj["objects"] = obj
      else
        request_obj["object"] = obj
      end
      req.body = request_obj.to_json
    end
    result = JSON.parse(response.body)
    if result.instance_of?(Hash) && result[SERVER_INFO_KEY] == SERVER_STATE_MAINTENANCE
      if @@fail_gracefully
        if is_array
          results = []
          for i in 0...obj.length
            o = obj[i]
            results.push(
              {
                "type" => o["type"],
                "id" => o["id"],
                "display_name" => o["display_name"],
                "control" => {
                  "control_short_name" => control_name,
                  "value" => false,
                  "variation" => nil,
                  "from_server" => false,
                  "from_cache" => false
                }
              }
            )
          end
          return results
        else
          return {
            "type" => obj["type"],
            "id" => obj["id"],
            "display_name" => obj["display_name"],
            "control" => {
              "control_short_name" => control_name,
              "value" => false,
              "variation" => nil,
              "from_server" => false,
              "from_cache" => false
            }
          }
        end
      end
    end
    result
  rescue Faraday::TimeoutError => e
    if @@fail_gracefully
      if is_array
        results = []
        for i in 0...obj.length
          o = obj[i]
          results.push(
            {
              "type" => o["type"],
              "id" => o["id"],
              "display_name" => o["display_name"],
              "control" => {
                "control_short_name" => control_name,
                "value" => false,
                "variation" => nil,
                "from_server" => false,
                "from_cache" => false
              }
            }
          )
        end
        return results
      else
        return {
          "type" => obj["type"],
          "id" => obj["id"],
          "display_name" => obj["display_name"],
          "control" => {
            "control_short_name" => control_name,
            "value" => false,
            "variation" => nil,
            "from_server" => false,
            "from_cache" => false
          }
        }
      end
    else
      raise
    end
  end
end
get_value(control_name, obj) click to toggle source
# File lib/airship-client.rb, line 233
def get_value(control_name, obj)
  result = self.gate(control_name, obj)
  result["control"]["value"]
end
get_variation(control_name, obj) click to toggle source
# File lib/airship-client.rb, line 238
def get_variation(control_name, obj)
  result = self.gate(control_name, obj)
  result["control"]["variation"]
end
identify(objs) click to toggle source
# File lib/airship-client.rb, line 111
def identify(objs)
  if !objs.instance_of?(Array)
    objs = [objs]
  end
  begin
    response = @conn.post do |req|
      req.url(V1_IDENTIFY_ENDPOINT)
      req.headers["Content-Type"] = "application/json"
      req.headers["api-key"] = @api_key || @@api_key
      req.options.timeout = @@timeout
      request_obj = {}
      request_obj["env_key"] = @env_key || @@env_key
      request_obj["objects"] = objs
      req.body = request_obj.to_json
    end
    result = JSON.parse(response.body)
    result
  rescue Faraday::TimeoutError => e
    raise
  end
end