lib/prioticket.rb
# require dependencies
require 'digest'
require 'rest_client'
require 'json'
require 'base64'
require 'ostruct'
require 'date'
# require gem files
require "prioticket/version"
require "prioticket/prioticket_error"
require "prioticket/config"
require "prioticket/engine" if defined?(Rails) && Rails::VERSION::MAJOR.to_i >= 3
# require API parts
require "prioticket/api"
require "prioticket/ticket_list"
require "prioticket/ticket"
require "prioticket/ticket_details"
require "prioticket/availabilities"
require "prioticket/reservation"
require "prioticket/booking"
module PrioTicket
# For testing purpose only: set the username and password
# in environment variables to make the tests pass with your test
# credentials.
def self.set_credentials_from_environment
# puts "Setting API Key: #{ENV["PRIOTICKET_API_KEY"]}"
Config.api_key = ENV["PRIOTICKET_API_KEY"]
Config.environment = :test
Config.verbose = false
end
#
# Formats time in ISO-8601
# Expected output: 2016-05-12T14:00:00+04:00
# Not expected: 2016-05-12T10:00:00+08:00 / 2016-05-12T18:00:00+00:00
#
# @return [type] [description]
def self.parsed_date(date)
if date.is_a?(String)
date
elsif [DateTime, Time].include?(date.class)
# date.strftime(expected_date_format)
date.strftime('%Y-%m-%d')
end
end
#
# Formats time in ISO-8601
#
# @return [type] [description]
def self.expected_date_format
'%Y-%m-%dT%H:%M:%S%z'
end
# Converts OpenStruct back to a hash
def self.openstruct_to_hash(object, hash = {})
object.each_pair do |key, value|
hash[key] = value.is_a?(OpenStruct) ? openstruct_to_hash(value) : value
end
hash
end
#
# Takes a hash and assignes it to the proper attributes.
# - Integers will be parsed as floats
# - Floats will be parsed as floats
# - Boolean values will bu parsed as such
# - Hash and Array will bet a type of 'OpenStruct'
# - DateTime will be a type of DateType
# - All other values will be used as string
#
def self.parse_json_value(obj, k,v)
unless v.nil?
# "2018-03-24T00:00:00+01:00"
is_integer = !!Integer(v) rescue false
is_float = !!Float(v) rescue false
is_date_time = !!DateTime.strptime(v, expected_date_format) rescue false
# puts "#{k} (#{v})"
if ["true", "false"].include?(v)
# puts "is boolean"
val = (v == 'true')
elsif is_date_time
# puts "is date_time"
val = DateTime.strptime(v, expected_date_format)
elsif is_integer
# puts "is integer"
val = v.to_i
elsif is_float
# puts "is integer"
val = v.to_f
elsif [Hash, Array].include?(v.class)
# puts "is hash or array"
val = JSON.parse(v.to_json, object_class: OpenStruct)
begin
if val.modifiable && val.table
val = JSON.parse(v.to_json)
end
rescue
end
begin
if val["table"] && val["modifiable"]
val = val["table"]
end
rescue
end
else
# puts "is undefined class"
val = v
end
obj.instance_variable_set("@#{k}", val)
end
end
end