memorb 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.
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../lib/memorb'
4
+
5
+ module SpecHelper
6
+ class << self
7
+
8
+ def basic_target_class
9
+ ::Class.new do
10
+ attr_reader :counter
11
+ def initialize; @counter = 0; end
12
+ def increment; @counter += 1; end
13
+ def double; @counter *= 2; end
14
+ def noop(*args); nil; end
15
+ end
16
+ end
17
+
18
+ def prng
19
+ ::Random.new(::RSpec.configuration.seed)
20
+ end
21
+
22
+ def force_garbage_collection(wait_cycle: 0.05, min_passes: 1, max_passes: 2)
23
+ ::GC.stress = true
24
+ starting_count = ::GC.count
25
+ min_count = starting_count + min_passes
26
+ pass_count = 0
27
+
28
+ ::GC.start
29
+ current_count = ::GC.count
30
+
31
+ # Wait for a garbage collection to occur.
32
+ while current_count < min_count
33
+ sleep wait_cycle
34
+ current_count = ::GC.count
35
+ pass_count += 1
36
+ if pass_count >= max_passes
37
+ raise "Exceeded maximum passes (#{max_passes}) for garbage collection during test"
38
+ end
39
+ end
40
+
41
+ ::GC.stress = false
42
+ end
43
+
44
+ def test_method_name(stringlike, &block)
45
+ ctx = block.binding.receiver
46
+ [stringlike, stringlike.to_s].each do |converted|
47
+ type = converted.class.name.downcase
48
+ ctx.context "with method name supplied as a #{ type }" do
49
+ instance_exec(stringlike, converted, &block)
50
+ end
51
+ end
52
+ end
53
+
54
+ def for_testing_garbage_collection(&block)
55
+ # JRuby garbage collection isn't as straightforward as CRuby, so tests
56
+ # that rely on garbage collection are skipped. The expectation is that
57
+ # if this works for CRuby's GC, then it should work for the GCs of other
58
+ # Ruby implementations.
59
+ if ::RUBY_ENGINE != 'jruby'
60
+ # RSpec blocks aren't allowing out-of-scope variables to be garbage
61
+ # collected, so `WeakRef` is used to work around that.
62
+ require 'weakref'
63
+
64
+ block.call
65
+ end
66
+ end
67
+
68
+ end
69
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: memorb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Patrick Rebsch
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
55
+ description: 'Memorb makes instance method memoization easy to set up and use.
56
+
57
+ '
58
+ email:
59
+ - pjrebsch@gmail.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".circleci/config.yml"
65
+ - ".gitignore"
66
+ - ".rspec"
67
+ - Gemfile
68
+ - LICENSE.txt
69
+ - README.md
70
+ - Rakefile
71
+ - lib/memorb.rb
72
+ - lib/memorb/agent.rb
73
+ - lib/memorb/errors.rb
74
+ - lib/memorb/integration.rb
75
+ - lib/memorb/integrator_class_methods.rb
76
+ - lib/memorb/key_value_store.rb
77
+ - lib/memorb/method_identifier.rb
78
+ - lib/memorb/ruby_compatibility.rb
79
+ - lib/memorb/version.rb
80
+ - memorb.gemspec
81
+ - spec/memorb/agent_spec.rb
82
+ - spec/memorb/integration_spec.rb
83
+ - spec/memorb/integrator_class_methods_spec.rb
84
+ - spec/memorb/key_value_store_spec.rb
85
+ - spec/memorb/method_identifier_spec.rb
86
+ - spec/memorb_spec.rb
87
+ - spec/spec_helper.rb
88
+ homepage: https://github.com/pjrebsch/memorb
89
+ licenses:
90
+ - MIT
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '2.3'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '2.6'
106
+ requirements: []
107
+ rubygems_version: 3.0.4
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: Memoization made easy
111
+ test_files: []