class Evva::GoogleSheet

Public Class Methods

new(events_url, people_properties_url, enum_classes_url) click to toggle source
# File lib/evva/google_sheet.rb, line 6
def initialize(events_url, people_properties_url, enum_classes_url)
  @events_url = events_url
  @people_properties_url = people_properties_url
  @enum_classes_url = enum_classes_url
end

Public Instance Methods

enum_classes() click to toggle source
# File lib/evva/google_sheet.rb, line 37
def enum_classes
  Logger.info("Downloading data from Google Sheet at #{@enum_classes_url}")
  csv = get_csv(@enum_classes_url)

  enum_list = []
  csv.each do |row|
    enum_name = row['Enum Name']
    values = row['Possible Values'].split(',')
    enum_list << Evva::MixpanelEnum.new(enum_name, values)
  end
  enum_list
end
events() click to toggle source
# File lib/evva/google_sheet.rb, line 12
def events
  Logger.info("Downloading data from Google Sheet at #{@events_url}")
  csv = get_csv(@events_url)

  event_list = []
  csv.each do |row|
    event_name = row['Event Name']
    properties = hash_parser(row['Event Properties'])
    event_list << Evva::MixpanelEvent.new(event_name, properties)
  end
  event_list
end
people_properties() click to toggle source
# File lib/evva/google_sheet.rb, line 25
def people_properties
  Logger.info("Downloading data from Google Sheet at #{@people_properties_url}")
  csv = get_csv(@people_properties_url)

  people_list = []
  csv.each do |row|
    value = row['Property Name']
    people_list << value
  end
  people_list
end

Private Instance Methods

get(url, max_redirects = 1) click to toggle source
# File lib/evva/google_sheet.rb, line 62
def get(url, max_redirects = 1)
  raise "Too may redirects" if max_redirects == -1

  uri = URI(url)

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  request = Net::HTTP::Get.new(uri.request_uri)
  response = http.request(request)

  return get(response['location'], max_redirects - 1) if response.is_a? Net::HTTPRedirection

  raise "Http Error #{response.body}" if response.code.to_i >= 400

  response.body
end
get_csv(url) click to toggle source
# File lib/evva/google_sheet.rb, line 52
def get_csv(url)
  data = get(url)

  begin
    CSV.parse(data, headers: true)
  rescue StandardError => e
    raise "Cannot parse. Expected CSV at #{url}: #{e}"
  end
end
hash_parser(property_array) click to toggle source
# File lib/evva/google_sheet.rb, line 81
def hash_parser(property_array)
  h = {}
  unless property_array.nil? || property_array.empty?
    property_array.split(',').each do |prop|
      split_prop = prop.split(':')
      prop_name = split_prop[0].to_sym
      prop_type = split_prop[1].to_s
      h[prop_name] = prop_type
    end
  end
  h
end