From 1bd8e8fb4128c72981c221c169ae2b7b5c73123b Mon Sep 17 00:00:00 2001 From: "G. Gibson" Date: Sat, 28 Mar 2026 22:33:46 -0700 Subject: [PATCH] added persist to Array/Hash and added merge to Detached/Persisted --- gxg-framework.gemspec | 2 +- lib/gxg/gxg_augmented.rb | 6 +- lib/gxg/gxg_database.rb | 25 ++++++++ lib/gxg/gxg_database_persistedhash.rb | 89 +++++++++++++++++++++++++++ 4 files changed, 120 insertions(+), 2 deletions(-) diff --git a/gxg-framework.gemspec b/gxg-framework.gemspec index 5a58629..674a88b 100644 --- a/gxg-framework.gemspec +++ b/gxg-framework.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |s| s.name = 'gxg-framework' - s.version = '0.0.67' + s.version = '0.0.68' s.licenses = ['HIPPOCRATIC 2.1', 'https://firstdonoharm.dev/version/2/1/license.html'] s.summary = "GxG Framework" s.description = "GxG Framework" diff --git a/lib/gxg/gxg_augmented.rb b/lib/gxg/gxg_augmented.rb index e581d24..35c728c 100644 --- a/lib/gxg/gxg_augmented.rb +++ b/lib/gxg/gxg_augmented.rb @@ -3772,7 +3772,6 @@ class Hash self end # - # end # class Array @@ -4149,6 +4148,11 @@ class Array end # end + + + + + # OpenStruct support for Arrays. module GxG class ArrayWrapper diff --git a/lib/gxg/gxg_database.rb b/lib/gxg/gxg_database.rb index 1261857..f3f725c 100644 --- a/lib/gxg/gxg_database.rb +++ b/lib/gxg/gxg_database.rb @@ -5504,3 +5504,28 @@ end require File.expand_path("./gxg_database_persistedarray.rb",File.dirname(__FILE__)) require File.expand_path("./gxg_database_persistedhash.rb",File.dirname(__FILE__)) # +class Hash + # + def persist(credential=::GxG::DB[:administrator], to_db=:data) + result = nil + database = ::GxG::DB[:roles][(to_db)] + if database.is_a?(::GxG::Database::Database) + result = database.try_persist(self, credential) + end + result + end + # +end +# +class Array + # + def persist(credential=::GxG::DB[:administrator], to_db=:data) + result = nil + database = ::GxG::DB[:roles][(to_db)] + if database.is_a?(::GxG::Database::Database) + result = database.try_persist(self, credential) + end + result + end + # +end diff --git a/lib/gxg/gxg_database_persistedhash.rb b/lib/gxg/gxg_database_persistedhash.rb index f0e1702..8137df4 100644 --- a/lib/gxg/gxg_database_persistedhash.rb +++ b/lib/gxg/gxg_database_persistedhash.rb @@ -965,6 +965,50 @@ module GxG result end # + def merge!(input_object=nil, options={}) + result = self + if input_object.is_any?(::Hash, ::GxG::Database::DetachedHash, ::GxG::Database::PersistedHash) + # + if @format + # merge only keys common to both + input_object.keys.each do |import_key| + if result.keys.include?(import_key) + result[(import_key)] = input_object[(import_key)] + end + end + else + input_object.keys.each do |import_key| + result[(import_key)] = input_object[(import_key)] + end + end + # + end + result + end + # + def merge(input_object=nil, options={}) + result = self + if input_object.is_any?(::Hash, ::GxG::Database::DetachedHash, ::GxG::Database::PersistedHash) + result = ::GxG::Database::DetachedHash::iterative_detached_persist(self.unpersist) + # + if @format + # merge only keys common to both + input_object.keys.each do |import_key| + if result.keys.include?(import_key) + result[(import_key)] = input_object[(import_key)] + end + end + result.format = @format + else + input_object.keys.each do |import_key| + result[(import_key)] = input_object[(import_key)] + end + end + # + end + result + end + # end # class PersistedHash @@ -2849,6 +2893,51 @@ module GxG result end # + def merge!(input_object=nil, options={}) + result = self + if input_object.is_any?(::Hash, ::GxG::Database::DetachedHash, ::GxG::Database::PersistedHash) + # + if @format + # merge only keys common to both + input_object.keys.each do |import_key| + if result.keys.include?(import_key) + result[(import_key)] = input_object[(import_key)] + end + end + else + input_object.keys.each do |import_key| + result[(import_key)] = input_object[(import_key)] + end + end + # + end + result + end + # + def merge(input_object=nil, options={}) + result = self + if input_object.is_any?(::Hash, ::GxG::Database::DetachedHash, ::GxG::Database::PersistedHash) + # + result = ::GxG::Database::DetachedHash::iterative_detached_persist(self.unpersist) + # + if @format + # merge only keys common to both + input_object.keys.each do |import_key| + if self.keys.include?(import_key) + result[(import_key)] = input_object[(import_key)] + end + end + result.format = @format + else + input_object.keys.each do |import_key| + result[(import_key)] = input_object[(import_key)] + end + end + # + end + result + end + # end end end