class Altadata::Client

Attributes

api_key[RW]

Public Class Methods

new(api_key) click to toggle source

Sets the api key and api urls required to access the Altadata API.

# File lib/altadata/client.rb, line 12
def initialize(api_key)
  @api_key = api_key
  @data_api_url = 'https://www.altadata.io/data/api/'
  @subscription_api_url = "https://www.altadata.io/subscription/api/subscriptions?api_key=#{@api_key}"
end

Public Instance Methods

condition_in(condition_column, condition_value) click to toggle source

'In' condition by given column and value in the retrieve data process

# File lib/altadata/client.rb, line 169
def condition_in(condition_column, condition_value)
  check_parameter('condition_column', condition_column, String)
  check_parameter('condition_value', condition_value, Array)

  condition_value_text = condition_value.join(',')
  @request_url_base += "&#{condition_column}_in=#{condition_value_text}"

  self
end
condition_not_in(condition_column, condition_value) click to toggle source

'Not in' condition by given column and value in the retrieve data process

# File lib/altadata/client.rb, line 181
def condition_not_in(condition_column, condition_value)
  check_parameter('condition_column', condition_column, String)
  check_parameter('condition_value', condition_value, Array)

  condition_value_text = condition_value.join(',')
  @request_url_base += "&#{condition_column}_notin=#{condition_value_text}"

  self
end
equal(condition_column, condition_value) click to toggle source

'Equal' condition by given column and value in the retrieve data process

# File lib/altadata/client.rb, line 109
def equal(condition_column, condition_value)
  check_parameter('condition_column', condition_column, String)

  @request_url_base += "&#{condition_column}_eq=#{condition_value}"

  self
end
get_data(product_code, limit = nil) click to toggle source

Initializes retrieve data process

# File lib/altadata/client.rb, line 69
def get_data(product_code, limit = nil)
  check_parameter('product_code', product_code, String)

  unless limit.nil?
    check_parameter('limit', limit, Integer)
    raise 'limit parameter must be greater than 0' unless limit.positive?
  end

  @limit = limit
  @request_url_base = "#{@data_api_url}#{product_code}/?format=json"

  self
end
get_header(product_code) click to toggle source

Retrieves data header as an array

# File lib/altadata/client.rb, line 59
def get_header(product_code)
  check_parameter('product_code', product_code, String)

  request_url = "#{@data_api_url}#{product_code}/?format=json&page=1&api_key=#{@api_key}"
  response = Faraday.get(request_url)
  JSON.parse(response.body)[0].keys
end
greater_than(condition_column, condition_value) click to toggle source

'Greater than' condition by given column and value in the retrieve data process

# File lib/altadata/client.rb, line 129
def greater_than(condition_column, condition_value)
  check_parameter('condition_column', condition_column, String)

  @request_url_base += "&#{condition_column}_gt=#{condition_value}"

  self
end
greater_than_equal(condition_column, condition_value) click to toggle source

'Greater than equal' condition by given column and value in the retrieve data process

# File lib/altadata/client.rb, line 139
def greater_than_equal(condition_column, condition_value)
  check_parameter('condition_column', condition_column, String)

  @request_url_base += "&#{condition_column}_gte=#{condition_value}"

  self
end
less_than(condition_column, condition_value) click to toggle source

'Less than' condition by given column and value in the retrieve data process

# File lib/altadata/client.rb, line 149
def less_than(condition_column, condition_value)
  check_parameter('condition_column', condition_column, String)

  @request_url_base += "&#{condition_column}_lt=#{condition_value}"

  self
end
less_than_equal(condition_column, condition_value) click to toggle source

'Less than equal' condition by given column and value in the retrieve data process

# File lib/altadata/client.rb, line 159
def less_than_equal(condition_column, condition_value)
  check_parameter('condition_column', condition_column, String)

  @request_url_base += "&#{condition_column}_lte=#{condition_value}"

  self
end
list_subscription() click to toggle source

Retrieves customer's subscription info

# File lib/altadata/client.rb, line 45
def list_subscription
  response = Faraday.get(@subscription_api_url)
  response_json = JSON.parse(response.body)
  fix_response(response_json)
end
load() click to toggle source

Fetch data with configurations given before

# File lib/altadata/client.rb, line 193
def load
  data = []
  page = 1
  total_size = 0

  loop do
    request_url = "#{@request_url_base}&page=#{page}&api_key=#{@api_key}"
    response = Faraday.get(request_url)

    response_json = JSON.parse(response.body)

    break if response_json.empty?

    response_json.each do |item|
      data << item
    end

    unless @limit.nil?
      total_size += response_json.length

      break if total_size > @limit
    end

    page += 1
  end

  data = data.first(@limit) unless @limit.nil?

  data
end
not_equal(condition_column, condition_value) click to toggle source

'Not Equal' condition by given column and value in the retrieve data process

# File lib/altadata/client.rb, line 119
def not_equal(condition_column, condition_value)
  check_parameter('condition_column', condition_column, String)

  @request_url_base += "&#{condition_column}_neq=#{condition_value}"

  self
end
select(selected_column) click to toggle source

Select specific columns in the retrieve data process

# File lib/altadata/client.rb, line 85
def select(selected_column)
  check_parameter('selected_column', selected_column, Array)

  selected_column_text = selected_column.join(',')
  @request_url_base += "&columns=#{selected_column_text}"

  self
end
sort(order_column, order_method = 'asc') click to toggle source

Sort data by given column and method in the retrieve data process

# File lib/altadata/client.rb, line 96
def sort(order_column, order_method = 'asc')
  check_parameter('order_column', order_column, String)
  check_parameter('order_method', order_method, String)
  order_method_array = %w[asc desc]
  raise "order_method parameter must be 'asc' or 'desc'" unless order_method_array.include? order_method

  @request_url_base += "&order_by=#{order_column}_#{order_method}"

  self
end

Private Instance Methods

check_parameter(parameter_name, parameter, data_type) click to toggle source

Controls types of parameters

# File lib/altadata/client.rb, line 53
def check_parameter(parameter_name, parameter, data_type)
  raise "#{parameter_name} parameter must be #{data_type}" unless parameter.is_a? data_type
end
fix_response(response_json) click to toggle source

Converts subscription api response to unnested version

# File lib/altadata/client.rb, line 20
def fix_response(response_json)
  data = []

  response_json.each do |product|
    product_item = product
    product_item['createdAt'] = product_item['createdAt'].gsub('T', ' ').split('+')[0]
    product_item['validUntil'] = product_item['validUntil'].gsub('T', ' ').split('+')[0]
    product_item['title'] = product_item['offer']['title']
    product_item['code'] = product_item['offer']['code']
    product_item['price'] = product_item['plan']['price']
    product_item['plan_name'] = product_item['plan']['title']
    product_item['period'] = product_item['plan']['period']

    product_item.delete('id')
    product_item.delete('offer')
    product_item.delete('plan')

    data << product_item
  end

  data
end