class AllscriptsUnityClient::Utilities

Utilities for massaging the data that comes back from Unity.

Constants

DATETIME_REGEX
DATE_REGEX

Public Class Methods

encode_data(data) click to toggle source

Encode binary data into Base64 encoding.

data

Data to encode.

The Base64 encoding of the data.

# File lib/allscripts_unity_client/utilities.rb, line 42
def self.encode_data(data)
  if data.nil?
    return nil
  end

  if data.respond_to?(:pack)
    return data.pack('m')
  else
    return [data].pack('m')
  end
end
recursively_symbolize_keys(hash) click to toggle source

Transform string keys into symbols and convert CamelCase to snake_case.

hash

The hash to transform.

Returns the transformed hash.

# File lib/allscripts_unity_client/utilities.rb, line 59
def self.recursively_symbolize_keys(hash)
  # Base case: nil maps to nil
  if hash.nil?
    return nil
  end

  # Recurse case: value is a hash so symbolize keys
  if hash.is_a?(Hash)
    result = hash.map do |key, value|
      { key.snakecase.to_sym => recursively_symbolize_keys(value) }
    end

    return result.reduce(:merge)
  end

  # Recurse case: value is an array so symbolize keys for any hash
  # in it
  if hash.is_a?(Array)
    result = hash.map do |value|
      recursively_symbolize_keys(value)
    end

    return result
  end

  # Base case: value was not an array or a hash, so just
  # return it
  hash
end
try_to_encode_as_date(timezone, possible_date) click to toggle source

Try to encode a string into a Date or ActiveSupport::TimeWithZone object.

Uses DATETIME_REGEX and DATE_REGEX to match possible date string.

timezone

An ActiveSupport::TimeZone instance.

possible_data

A string that could contain a date.

Returns Date or ActiveSupport::TimeWithZone, or the string if it did not contain a date.

# File lib/allscripts_unity_client/utilities.rb, line 20
def self.try_to_encode_as_date(timezone, possible_date)
  case possible_date
  when DATE_REGEX
    Date.parse(possible_date)
  when DATETIME_REGEX
    timezone.parse(possible_date)
  else
    possible_date
  end
# Since we know in either of the cases above we only attempt to
# parse a string this is either an "invalid date" from
# `Date.parse` or an "argument out of range" from
# `ActiveSupport::TimeZone#parse`.
rescue ArgumentError
  possible_date
end