Sha256: 6449c9d5f0cde17968298e7904279d49ec23ef09399cb5da7a350c2b569967bd
Contents?: true
Size: 1.83 KB
Versions: 3
Compression:
Stored size: 1.83 KB
Contents
# frozen_string_literal: true require 'json' module ZendeskAppsSupport module Validations class ValidationError < StandardError KEY_PREFIX = 'txt.apps.admin.error.app_build.' class DeserializationError < StandardError def initialize(serialized) super "Cannot deserialize ValidationError from #{serialized}" end end class << self # Turn a JSON string into a ValidationError. def from_json(json) hash = JSON.parse(json) raise DeserializationError, json unless hash.is_a?(Hash) from_hash(hash) rescue JSON::ParserError, NameError raise DeserializationError, json end def from_hash(hash) raise DeserializationError, hash unless hash['class'] klass = constantize(hash['class']) raise DeserializationError, hash unless klass <= self klass.vivify(hash) end # Turn a Hash into a ValidationError. Used within from_json. def vivify(hash) new(hash['key'], hash['data']) end private def constantize(klass) klass.to_s.split('::').inject(Object) { |superclass, part| superclass.const_get(part) } end end attr_reader :key, :data def initialize(key, data = nil) @key = key @data = symbolize_keys(data || {}) end def to_s ZendeskAppsSupport::I18n.t("#{KEY_PREFIX}#{key}", **data) end def to_json(*) JSON.generate(as_json) end def as_json(*) { 'class' => self.class.to_s, 'key' => key, 'data' => data } end private def symbolize_keys(hash) hash.each_with_object({}) do |(key, value), result| result[key.to_sym] = value end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems