Sha256: 1d80597a051921fe80385328e7b1b04d8d222e31904e18e68b887bbaca91cf6e
Contents?: true
Size: 1.81 KB
Versions: 1
Compression:
Stored size: 1.81 KB
Contents
require 'securerandom' require 'json' require 'time' module ConnectClient class Event @@RESERVED_PROPERTY_REGEX = /tp_.+/i attr_reader :data def initialize(data) event_data_defaults = { id: SecureRandom.uuid, timestamp: Time.now } @data = map_iso_dates event_data_defaults.merge(data) validate end def validate invalid_properties = @data.keys.grep(@@RESERVED_PROPERTY_REGEX) raise EventDataValidationError.new(invalid_properties) if invalid_properties.any? end def to_json(options = nil) @data.to_json end def to_s "Event Data: #{@data}" end private def map_iso_dates(data) utc_converter = lambda { |value| value_to_convert = value map_utc = lambda { |value_item| utc_converter.call(value_item) } return value_to_convert.map(&map_utc) if value_to_convert.respond_to? :map value_to_convert = value_to_convert.to_time if value_to_convert.respond_to? :to_time value_to_convert = value_to_convert.utc if value_to_convert.respond_to? :utc value_to_convert = value_to_convert.iso8601 if value_to_convert.respond_to? :iso8601 value_to_convert } mappedData = data.map do |key, value| if value.is_a? Hash [key, map_iso_dates(value)] else [key, utc_converter.call(value)] end end Hash[mappedData] end end class EventDataValidationError < StandardError attr_reader :invalid_property_names def initialize(invalid_property_names) @invalid_property_names = invalid_property_names end def message messages = ['The following properties use the reserved prefix tp_:'] + @invalid_property_names.map do |property_name| "->#{property_name}" end messages.join "\n" end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
connect_client-0.2.1 | lib/connect_client/event.rb |