From 2c2a7fab47d87ff461d7e9073e15a9d5155a4a65 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Date: Mon, 27 Apr 2020 20:06:42 +0200 Subject: [PATCH] Moved hydration out into a mixin. --- lib/aethyr/core/objects/game_object.rb | 27 +-------------- lib/aethyr/core/util/hydration.rb | 47 ++++++++++++++++++++++++++ lib/aethyr/core/util/publisher.rb | 6 +++- 3 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 lib/aethyr/core/util/hydration.rb diff --git a/lib/aethyr/core/objects/game_object.rb b/lib/aethyr/core/objects/game_object.rb index 8523299..f238ed9 100644 --- a/lib/aethyr/core/objects/game_object.rb +++ b/lib/aethyr/core/objects/game_object.rb @@ -12,13 +12,6 @@ class GameObject < Publisher include Observable include Pronoun - @@volatile = [] - - def self.volatile(*attrs) - @@volatile += attrs - @@volatile.uniq! - end - attr_reader :short_desc, :game_object_id, :alt_names, :generic, :article, :sex, :show_in_look, :actions, :balance, :admin, :manager attr_accessor :container, :show_in_look, :actions, :pose, :visible, :comment, :movable, :quantity, :info attr_writer :plural @@ -80,32 +73,14 @@ class GameObject < Publisher @admin = false end - # removes all volatle data but provides it as a map for restoration in rehydrate - def dehydrate - volatile_data = {} - @@volatile.each do |attr| - if self.instance_variable_defined?(attr) - volatile_data[attr] = self.instance_variable_get(attr) - begin - self.remove_instance_variable(attr) - rescue NameError - end - end - end - return volatile_data - end - def rehydrate(volatile_data) + super(volatile_data) if volatile_data.nil? if RUBY_VERSION < "1.9.0" self.instance_variable_set(:@observer_peers, []) else self.instance_variable_set(:@observer_peers, {}) end - return - end - volatile_data.each do |attr, data| - self.instance_variable_set(attr, data) if @@volatile.include? attr end end diff --git a/lib/aethyr/core/util/hydration.rb b/lib/aethyr/core/util/hydration.rb new file mode 100644 index 0000000..b17be9c --- /dev/null +++ b/lib/aethyr/core/util/hydration.rb @@ -0,0 +1,47 @@ +module Aethyr + module Core + module Storage + module Hydration + module Volatile + @@volatile ||= [] + + def volatile(*attrs) + @@volatile = [] if @@volatile.nil? + @@volatile += attrs + @@volatile.uniq! + end + + def volatile_vars + return @@volatile + end + end + + # removes all volatle data but provides it as a map for restoration in rehydrate + def dehydrate + volatile_data = {} + self.class.volatile_vars.each do |attr| + if self.instance_variable_defined?(attr) + volatile_data[attr] = self.instance_variable_get(attr) + begin + self.remove_instance_variable(attr) + rescue NameError + end + end + end + return volatile_data + end + + def rehydrate(volatile_data) + return if volatile_data.nil? + volatile_data.each do |attr, data| + self.instance_variable_set(attr, data) if self.class.volatile_vars.include? attr + end + end + + def self.included(klass) + klass.extend(Volatile) + end + end + end + end +end diff --git a/lib/aethyr/core/util/publisher.rb b/lib/aethyr/core/util/publisher.rb index 6d4628b..2b18692 100644 --- a/lib/aethyr/core/util/publisher.rb +++ b/lib/aethyr/core/util/publisher.rb @@ -1,7 +1,11 @@ require 'aethyr/core/util/marshaller' +require 'aethyr/core/util/hydration' require 'wisper' class Publisher + include Aethyr::Core::Storage::Hydration include Marshaller[:@observer_peers, :@local_registrations] include Wisper::Publisher -end \ No newline at end of file + + volatile :@local_registrations +end -- GitLab