undoer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/undoer.rb +34 -0
  3. metadata +43 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2e3bff7c14d643c61fbf3876bb7c7b5a438492c27ad285e301e376fe2cdc88fe
4
+ data.tar.gz: 75aedf6315011aa7947302fed1e9b40e4ddf1b7234671c3b90367932aaf0bbe0
5
+ SHA512:
6
+ metadata.gz: '07709a8bc1436be343bae5a1d35efc83e685d52c64d75d2ca89755ad346852dcf4bbbb603a889182f5879e5b8d174c20de07a40d863021b3135c42925dc76c93'
7
+ data.tar.gz: 424230cda4d5eb90ef1feae373b302d99bb4571f745df012a5cb196cbe19af70680e6aab6cbe7ca2df8eb98f0d6513ad96ed5edd4b6cc1e80594504adf8ed05d
data/lib/undoer.rb ADDED
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'hash'
4
+ require 'array'
5
+ require 'string'
6
+ require 'object'
7
+ require 'class'
8
+
9
+ module Undoer
10
+ NOT_SUPPORTED = [Numeric, TrueClass, FalseClass, Symbol, Numeric].freeze
11
+
12
+ def self.included(base)
13
+ base.extend(ClassMethods)
14
+ base.send(:include, InstanceMethods)
15
+ end
16
+
17
+ module InstanceMethods
18
+ def restore(options = {}, &block)
19
+ self.class.restore(options, &block)
20
+ end
21
+ end
22
+
23
+ module ClassMethods
24
+ def restore(options = {}, &block)
25
+ target = options[:target]
26
+ errors = options[:if_errors] || [StandardError].freeze
27
+ cloned_target = target.respond_to?('new') ? target.clone : Marshal.load( Marshal.dump(target) )
28
+ yield(target)
29
+ rescue *errors => e
30
+ raise ArgumentError, "not restoreable!" if target.is_any?(NOT_SUPPORTED)
31
+ target.deep_copy!(cloned_target)
32
+ end
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: undoer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Oleg Saltykov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-03-05 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/undoer.rb
20
+ homepage: https://github.com/nucleom42/undoer
21
+ licenses: []
22
+ metadata: {}
23
+ post_install_message:
24
+ rdoc_options: []
25
+ require_paths:
26
+ - lib
27
+ required_ruby_version: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ required_rubygems_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ requirements: []
38
+ rubygems_version: 3.0.8
39
+ signing_key:
40
+ specification_version: 4
41
+ summary: Undoer - simple way of restoring initial mutable object state if yielded
42
+ logic raises specific errors
43
+ test_files: []