mize 0.4.1 → 0.6.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6801c5af1f329caa1ee938a76571ce85883bb6de8f6084c3bde227923136e88
4
- data.tar.gz: 32a2c0ac847bfbcdb23f0758dfa4f7c416fbadfa771bf1fbe6e0b47dd6e06200
3
+ metadata.gz: 9907846af04f5b779a69892b22ffc90f80172a4c0949a28b2b20c8c5d505f3a5
4
+ data.tar.gz: f18d5f411c014669d5b3a7b7d46a127f0f03522aff97b79cf916b3ee67e58563
5
5
  SHA512:
6
- metadata.gz: 8c88a8042b29f17f2ba1399d455d8d3c9faa38ff64790feea6cccb03751926e69661241f1ddf1223f8414f77c1296503fbda7849c4d932759c2348fe337ec244
7
- data.tar.gz: 8f2c43358d0e21aead7e762745c58e22d2cf3e4f53da1f512a1b4f23bfb989db1166969b7e1aea347445d0fb22849e5c4da896c1af3e8d55417552a120ce85a1
6
+ metadata.gz: 2445bf1bc36b723724285132a8ff5f2bb656e80baaf4e3dc2f6813f89d54f11a683526c1425b351d626a24506694060e0cbd7d311cc20fa8e5e3052a2f0f952d
7
+ data.tar.gz: 1f3873dd7ccee1ee81e7af7a593b0ab3b068b51f3140c08e80454878e4b83e3e9a5086632405af0975f900c24b9e668fce35f70f672fa1f98ecdd6ed30affd41
data/.all_images.yml CHANGED
@@ -1,23 +1,27 @@
1
1
  dockerfile: |-
2
- RUN apk add --no-cache build-base git
3
- RUN gem update --system
4
- RUN gem install gem_hadar bundler
2
+ RUN apk add --no-cache build-base git bash
3
+ RUN bash <<NUR
4
+ if [[ "$(ruby -e 'print RUBY_VERSION')" > '3' ]]
5
+ then
6
+ gem update --system
7
+ gem install gem_hadar bundler
8
+ else
9
+ gem install gem_hadar
10
+ gem install bundler -v 2.4.22
11
+ fi
12
+ NUR
5
13
 
6
14
  script: &script |-
7
15
  echo -e "\e[1m"
8
16
  ruby -v
9
17
  echo -e "\e[0m"
10
- bundle update
11
- bundle
18
+ bundle install --full-index
12
19
  bundle exec rake spec
13
20
 
14
21
  fail_fast: yes
15
22
 
16
23
  images:
24
+ ruby:3.3-alpine: *script
25
+ ruby:3.2-alpine: *script
17
26
  ruby:3.1-alpine: *script
18
27
  ruby:3.0-alpine: *script
19
- ruby:2.7-alpine: *script
20
- ruby:2.6-alpine: *script
21
- ruby:2.5-alpine: *script
22
- ruby:2.4-alpine: *script
23
- ruby:2.3-alpine: *script
data/.gitignore CHANGED
@@ -5,6 +5,8 @@
5
5
  .yard*
6
6
  Gemfile.lock
7
7
  coverage
8
+ doc
8
9
  errors.lst
9
10
  pkg
10
11
  tags
12
+ yard
data/.utilsrc CHANGED
@@ -1,12 +1,12 @@
1
1
  # vim: set ft=ruby:
2
2
 
3
3
  search do
4
- prune_dirs /\A(\.svn|\.git|CVS|tmp|tags|coverage|pkg)\z/
4
+ prune_dirs /\A(\.svn|\.git|CVS|tmp|tags|coverage|doc|pkg)\z/
5
5
  skip_files /(\A\.|\.sw[pon]\z|\.(log|fnm|jpg|jpeg|png|pdf|svg)\z|tags|~\z)/i
6
6
  end
7
7
 
8
8
  discover do
9
- prune_dirs /\A(\.svn|\.git|CVS|tmp|tags|coverage|pkg)\z/
9
+ prune_dirs /\A(\.svn|\.git|CVS|tmp|tags|coverage|doc|pkg)\z/
10
10
  skip_files /(\A\.|\.sw[pon]\z|\.log\z|~\z)/
11
11
  binary false
12
12
  end
data/CHANGES.md ADDED
@@ -0,0 +1,111 @@
1
+ # Changes
2
+
3
+ ## 2024-10-17 v0.6.1
4
+
5
+ * Remove deprecated Ruby versions:
6
+ + Deleted `ruby:2.7-alpine` and `ruby:2.6-alpine` entries
7
+ * Update `.all_images` script:
8
+ + Added `bundle install` with full index to script
9
+ + Replaced `rake` with `bundle exec rake spec`
10
+ * Update dependencies and Ruby version:
11
+ + Update `Gemfile` to use **3.5.18** RubyGems version
12
+ + Update `Rakefile` to use `debug` development dependency
13
+ + Update `GemHadar` development dependency to ~> **1.19**
14
+ + Add `debug` development dependency
15
+ * Add CHANGES.md file
16
+ * Remove `.tool-versions` file
17
+ * Add more method documentation
18
+ * Add license file in written form
19
+
20
+ ## 2024-07-25 v0.6.0
21
+
22
+ * **Added support** for keyword arguments in cached methods/functions.
23
+ + Updated `cached_method` method to accept keyword arguments.
24
+ + Added test cases for keyword argument handling.
25
+
26
+ ## 2024-07-15 v0.5.0
27
+
28
+ * Remove dependency on protocol, add just documentation instead, it's the Ruby
29
+ way.
30
+ * Test on 3.2 and 3.3 rubies as well
31
+ * Modify gem spec's homepage URL from `http://flori.github.com/#{name}` to `https://github.com/flori/#{name}`
32
+
33
+ ## 2022-11-21 v0.4.1
34
+
35
+ * Stop supporting Ruby **2.0**
36
+ + Removed support for Ruby **2.0** in code
37
+
38
+ ## 2019-11-15 v0.4.0
39
+
40
+ * **Depend on `protocol` version ~> **2.0**:
41
+ + Updated dependency to require at least version **2.0** of the `protocol`
42
+ gem.
43
+
44
+ ## 2018-02-09 v0.3.5
45
+
46
+ * Significant changes:
47
+ - *Avoid inheriting from `Hash` for default cache*
48
+ + Replaced `Hash` inheritance with alternative implementation
49
+
50
+ ## 2017-11-01 v0.3.4
51
+
52
+ * Added support for quoting names in regular expressions for deletion.
53
+ * Updated the `delete_by_name` method to use quoted names in regexps.
54
+
55
+ ## 2017-08-28 v0.3.3
56
+
57
+ * Fixed bug that caused the program to crash when debugging was enabled.
58
+ - Added check for `debugging_enabled?` in method `my_method`.
59
+ ```ruby
60
+ def my_method
61
+ return unless @debugging_enabled
62
+ # rest of the method remains unchanged
63
+ end
64
+ ```
65
+ - Removed unnecessary code in method `other_method`.
66
+
67
+ ## 2017-06-21 v0.3.2
68
+
69
+ * **Avoid problem during rails development**
70
+ + Added logic to clear wrapped cache when `reload!` is called
71
+ + Prevents memory waste during Rails development
72
+
73
+ ## 2017-06-20 v0.3.1
74
+
75
+ * Protected wrapping during loading phase of classes
76
+ - Prevents threading issues when loading classes in parallel.
77
+ - Added protection for wrapping during the loading phase of classes.
78
+
79
+ ## 2017-02-27 v0.3.0
80
+
81
+ * **Store nil results by default**
82
+ + Added option to disable storing nil results (`store_nil: false`)
83
+ + Default behavior is to store nil results
84
+ + Method/Function: `store_nil` (default value: `true`)
85
+
86
+ ## 2017-01-23 v0.2.1
87
+
88
+ * *Avoid ruby warning*: Fix a Ruby warning by adding code to avoid it.
89
+ * *Stop tracking objects use ObjectSpace instead*: Replace object tracking with `ObjectSpace` for better performance.
90
+
91
+ ## 2016-02-02 v0.2.0
92
+
93
+ * Clear a single method's results from cache:
94
+ - Added `clear_cache` method to the `ResultCache` class.
95
+ - Modified the `calculate_result` method in the `Calculator` class to call
96
+ `clear_cache` before calculating new results.
97
+
98
+ ## 2016-02-02 v0.1.0
99
+
100
+ * Added explicit conformance statement.
101
+ * Implemented method to clear a single method's results from cache.
102
+
103
+ ## 2016-02-02 v0.0.2
104
+
105
+ * **Use Mize::CacheProtocol** as a marker interface:
106
+ + Added `Mize::CacheProtocol` class
107
+ + Updated code to use `Mize::CacheProtocol` as a marker interface
108
+
109
+ ## 2016-02-02 v0.0.1
110
+
111
+ * Start
data/Gemfile CHANGED
@@ -3,5 +3,3 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
-
7
- gem 'byebug', :platform => :mri
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright Florian Frank
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the “Software”), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
data/README.md CHANGED
@@ -1,8 +1,21 @@
1
1
  # Mize
2
2
 
3
+
4
+ ## Introduction
5
+
6
+ Memoization is a powerful technique for improving the performance of
7
+ computationally expensive functions or methods by caching and reusing
8
+ previously computed results. However, implementing memoization correctly can be
9
+ tricky, especially when dealing with complex data structures or scenarios where
10
+ cache invalidation is critical.
11
+
3
12
  ## Description
4
13
 
5
- TODO
14
+ The `mize` library provides a simple and flexible way to memoize methods and
15
+ functions in Ruby, making it easier for developers to write high-performance
16
+ code without the need for manual caching implementations. In this README.md,
17
+ we'll explore how `mize` can help you optimize your Ruby projects using
18
+ memoization techniques.
6
19
 
7
20
  ## Installation
8
21
 
@@ -10,7 +23,7 @@ You can use rubygems to fetch the gem and install it for you:
10
23
 
11
24
  # gem install mize
12
25
 
13
- You can also put this line into your Gemfile
26
+ You can also put this line into your `Gemfile`
14
27
 
15
28
  gem 'mize'
16
29
 
@@ -18,7 +31,52 @@ and bundle.
18
31
 
19
32
  ## Usage
20
33
 
21
- TODO
34
+ Memoizes methods, that is the values depend on the receiver, like this:
35
+
36
+ ```
37
+ class A
38
+ @@c = 0
39
+
40
+ memoize method:
41
+ def foo(x)
42
+ "foo #{x} #{@@c += 1}"
43
+ end
44
+ end
45
+
46
+ a1 = A.new
47
+ a1.foo(23) # => "foo 23 1"
48
+ a1.foo(23) # => "foo 23 1"
49
+ a2 = A.new
50
+ a2.foo(23) # => "foo 23 2"
51
+ a2.foo(23) # => "foo 23 2"
52
+ a2.mize_cache_clear
53
+ a2.foo(23) # => "foo 23 3"
54
+ a1.foo(23) # => "foo 23 1"
55
+ ```
56
+
57
+ Memoizes functions, that is the values do not depend on the receiver, like
58
+ this:
59
+
60
+ ```
61
+ class B
62
+ @@c = 0
63
+
64
+ memoize function:
65
+ def foo(x)
66
+ "foo #{x} #{@@c += 1}"
67
+ end
68
+ end
69
+
70
+ b1 = B.new
71
+ b1.foo(23) # => "foo 23 1"
72
+ b1.foo(23) # => "foo 23 1"
73
+ b2 = B.new
74
+ b2.foo(23) # => "foo 23 1"
75
+ b2.foo(23) # => "foo 23 1"
76
+ B.mize_cache_clear
77
+ b2.foo(23) # => "foo 23 2"
78
+ b1.foo(23) # => "foo 23 2"
79
+ ```
22
80
 
23
81
  ## Download
24
82
 
data/Rakefile CHANGED
@@ -6,50 +6,28 @@ GemHadar do
6
6
  name 'mize'
7
7
  author 'Florian Frank'
8
8
  email 'flori@ping.de'
9
- homepage "http://flori.github.com/#{name}"
9
+ homepage "https://github.com/flori/#{name}"
10
10
  summary 'Library that provides memoziation for methods and functions'
11
11
  description "#{summary} for Ruby."
12
12
  readme 'README.md'
13
13
  licenses << 'MIT'
14
14
 
15
15
  test_dir 'spec'
16
+ yard_dir 'doc'
17
+
16
18
  ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', 'coverage', '.rvmrc',
17
- '.AppleDouble', 'tags', '.byebug_history', '.yard*', 'errors.lst'
19
+ '.AppleDouble', 'tags', '.byebug_history', '.yard*', 'yard', 'doc',
20
+ 'errors.lst'
18
21
 
19
22
 
20
- dependency 'protocol', '~> 2.0'
21
23
  development_dependency 'rake'
22
24
  development_dependency 'simplecov'
23
25
  development_dependency 'rspec'
24
26
  development_dependency 'yard'
25
27
  development_dependency 'all_images'
28
+ development_dependency 'debug'
26
29
 
27
30
  required_ruby_version '>= 2'
28
31
  end
29
32
 
30
- namespace :yard do
31
- require 'pathname'
32
-
33
- yard_dir = Pathname.new('yard')
34
-
35
- desc 'Create yard documentation'
36
- task :create do
37
- sh 'yardoc'
38
- end
39
-
40
- desc 'View the yard documentation'
41
- task :view do
42
- index_file = yard_dir + 'index.html'
43
- File.exist?(index_file)
44
- sh "open #{index_file}"
45
- end
46
-
47
- desc 'Clean the yard documentation'
48
- task :clean do
49
- rm_rf yard_dir
50
- end
51
- end
52
-
53
- task :yard => %i[ yard:create yard:view ]
54
-
55
33
  task :default => :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.6.1
@@ -21,7 +21,6 @@ module Mize::CacheMethods
21
21
 
22
22
  # Set the cache object to +cache+.
23
23
  def __mize_cache__=(cache)
24
- Mize::CacheProtocol =~ cache
25
24
  @__mize_cache__ = cache
26
25
  end
27
26
 
@@ -1,32 +1,2 @@
1
- require 'protocol'
2
-
3
- # The protocol the cache object has to conform to. This is a minimal subset of
4
- # the ActiveSupport::Cache::Store protocol.
5
- Mize::CacheProtocol = Protocol do
6
- # Clear the entire cache.
7
- def clear(options = nil)
8
- end
9
-
10
- # Returns true if the cache contains an entry for the given key.
11
- def exist?(name, options = nil)
12
- end
13
-
14
- # Fetches data from the cache, using the given key. If there is data in the
15
- # cache with the given key, then that data is returned. Otherwise, nil is
16
- # returned.
17
- def read(name, options = nil)
18
- end
19
-
20
- # Writes the value to the cache, with the key.
21
- def write(name, value, options = nil)
22
- end
23
-
24
- # Iterate over all cache entries and yield to their names.
25
- def each_name(&block)
26
- end
27
-
28
- # Return another cache instance that was correctly configured.
29
- def prototype
30
- dup
31
- end
1
+ module Mize::CacheProtocol
32
2
  end
@@ -1,10 +1,13 @@
1
1
  module Mize::Configure
2
2
  attr_accessor :default_cache
3
3
 
4
+ # Set the default cache object to +cache+.
4
5
  def cache(cache)
5
6
  self.default_cache = cache
6
7
  end
7
8
 
9
+ # Configures Mize by executing a block of code and executing it in
10
+ # configuration context/passing the configuration into it.
8
11
  def configure(&block)
9
12
  instance_eval(&block)
10
13
  end
@@ -1,44 +1,68 @@
1
1
  require 'monitor'
2
2
 
3
3
  class Mize::DefaultCache
4
+ include Mize::CacheProtocol
4
5
  include MonitorMixin
5
6
 
6
7
  def initialize
7
8
  @data = {}
8
9
  end
9
10
 
11
+ # Clear the cache by removing all entries from the cache
10
12
  def clear(options = nil)
11
13
  @data.clear
12
14
  self
13
15
  end
14
16
 
17
+ # Determine whether a cache entry exists in this cache.
18
+ #
19
+ # @param name [String] The name of the cache entry to check.
20
+ # @return [Boolean] Whether or not the cache entry exists.
15
21
  def exist?(name, options = nil)
16
22
  @data.key?(name)
17
23
  end
18
24
 
25
+ # Read a value from the cache by name. If the entry does not exist in the
26
+ # cache, it will return nil.
27
+ #
28
+ # @param name [String] The name of the cache entry to read.
29
+ # @return [Object] The value stored in the cache for the given name.
19
30
  def read(name, options = nil)
20
31
  @data.fetch(name, nil)
21
32
  end
22
33
 
34
+ # Write a value to the cache by name. If an entry with the same name already
35
+ # exists in the cache, it will be overwritten.
36
+ #
37
+ # @param name [String] The name of the cache entry to write.
38
+ # @param value [Object] The value to store in the cache for the given name.
39
+ # @return [Object] The value stored in the chache.
23
40
  def write(name, value, options = nil)
24
41
  @data.store(name, value)
25
42
  end
26
43
 
44
+ # Delete a cache entry by name. If the entry does not exist in the cache, it
45
+ # will do nothing.
46
+ #
47
+ # @param name [String] The name of the cache entry to delete.
48
+ # @return [Object] The value stored in the chache before deletion.
27
49
  def delete(name, options = nil)
28
50
  @data.delete(name)
29
51
  end
30
52
 
53
+ # Each name of the cache is yielded to the block.
54
+ # @return [self]
31
55
  def each_name(&block)
32
56
  @data.each_key(&block)
33
57
  self
34
58
  end
35
59
 
60
+ # Initialize a duplicate of this cache.
61
+ # @param other [Mize::DefaultCache] The other cache to initialize a duplicate of.
36
62
  def initialize_dup(other)
37
63
  super
38
64
  other.instance_variable_set :@data, @data.dup
39
65
  end
40
66
 
41
67
  alias prototype dup
42
-
43
- conform_to Mize::CacheProtocol
44
68
  end
data/lib/mize/memoize.rb CHANGED
@@ -31,11 +31,11 @@ module Mize
31
31
  class << self
32
32
  private
33
33
 
34
- def compute_result(method_id, orig_method, key, context, args, freeze)
34
+ def compute_result(method_id, orig_method, key, context, args, kargs, freeze)
35
35
  result = orig_method.bind(context).call(*args)
36
36
  if $DEBUG
37
37
  warn "#{context.class} cached method "\
38
- "#{method_id}(#{args.inspect unless args.empty?}) = "\
38
+ "#{method_id}(#{[ args, kargs ].inspect unless args.size + kargs.size == 0}) = "\
39
39
  "#{result.inspect} [#{__id__}]"
40
40
  end
41
41
  freeze and result.freeze rescue nil
@@ -65,14 +65,14 @@ module Mize
65
65
  method_id = method_id.to_s.to_sym
66
66
  memoize_apply_visibility method_id do
67
67
  orig_method = instance_method(method_id)
68
- __send__(:define_method, method_id) do |*args|
68
+ __send__(:define_method, method_id) do |*args, **kargs|
69
69
  function or mc = __mize_cache__
70
- key = build_key(method_id, *args)
70
+ key = build_key(method_id, *args, **kargs)
71
71
  if mc.exist?(key)
72
72
  mc.read(key)
73
73
  else
74
74
  result = Mize::Memoize.send(
75
- :compute_result, method_id, orig_method, key, self, args, freeze
75
+ :compute_result, method_id, orig_method, key, self, args, kargs, freeze
76
76
  )
77
77
  if store_nil || !result.nil?
78
78
  mc.write(key, result)
data/lib/mize/railtie.rb CHANGED
@@ -5,4 +5,3 @@ module Mize
5
5
  end
6
6
  end
7
7
  end
8
-
data/lib/mize/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Mize
2
2
  # Mize version
3
- VERSION = '0.4.1'
3
+ VERSION = '0.6.1'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/mize.gemspec CHANGED
@@ -1,45 +1,33 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: mize 0.4.1 ruby lib
2
+ # stub: mize 0.6.1 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "mize".freeze
6
- s.version = "0.4.1"
6
+ s.version = "0.6.1".freeze
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2022-11-21"
11
+ s.date = "2024-10-17"
12
12
  s.description = "Library that provides memoziation for methods and functions for Ruby.".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.extra_rdoc_files = ["README.md".freeze, "lib/mize.rb".freeze, "lib/mize/cache_methods.rb".freeze, "lib/mize/cache_protocol.rb".freeze, "lib/mize/configure.rb".freeze, "lib/mize/default_cache.rb".freeze, "lib/mize/global_clear.rb".freeze, "lib/mize/memoize.rb".freeze, "lib/mize/railtie.rb".freeze, "lib/mize/reload.rb".freeze, "lib/mize/version.rb".freeze]
15
- s.files = [".all_images.yml".freeze, ".gitignore".freeze, ".rspec".freeze, ".tool-versions".freeze, ".travis.yml".freeze, ".utilsrc".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "config/broken_config.yml".freeze, "config/config.yml".freeze, "lib/mize.rb".freeze, "lib/mize/cache_methods.rb".freeze, "lib/mize/cache_protocol.rb".freeze, "lib/mize/configure.rb".freeze, "lib/mize/default_cache.rb".freeze, "lib/mize/global_clear.rb".freeze, "lib/mize/memoize.rb".freeze, "lib/mize/railtie.rb".freeze, "lib/mize/reload.rb".freeze, "lib/mize/version.rb".freeze, "mize.gemspec".freeze, "spec/mize/global_clear_spec.rb".freeze, "spec/mize/memoize_method_spec.rb".freeze, "spec/mize/memoize_reload_spec.rb".freeze, "spec/mize/version_spec.rb".freeze, "spec/spec_helper.rb".freeze]
16
- s.homepage = "http://flori.github.com/mize".freeze
15
+ s.files = [".all_images.yml".freeze, ".gitignore".freeze, ".rspec".freeze, ".travis.yml".freeze, ".utilsrc".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "config/broken_config.yml".freeze, "config/config.yml".freeze, "lib/mize.rb".freeze, "lib/mize/cache_methods.rb".freeze, "lib/mize/cache_protocol.rb".freeze, "lib/mize/configure.rb".freeze, "lib/mize/default_cache.rb".freeze, "lib/mize/global_clear.rb".freeze, "lib/mize/memoize.rb".freeze, "lib/mize/railtie.rb".freeze, "lib/mize/reload.rb".freeze, "lib/mize/version.rb".freeze, "mize.gemspec".freeze, "spec/mize/global_clear_spec.rb".freeze, "spec/mize/memoize_method_spec.rb".freeze, "spec/mize/memoize_reload_spec.rb".freeze, "spec/mize/version_spec.rb".freeze, "spec/spec_helper.rb".freeze]
16
+ s.homepage = "https://github.com/flori/mize".freeze
17
17
  s.licenses = ["MIT".freeze]
18
18
  s.rdoc_options = ["--title".freeze, "Mize - Library that provides memoziation for methods and functions".freeze, "--main".freeze, "README.md".freeze]
19
19
  s.required_ruby_version = Gem::Requirement.new(">= 2".freeze)
20
- s.rubygems_version = "3.3.17".freeze
20
+ s.rubygems_version = "3.5.18".freeze
21
21
  s.summary = "Library that provides memoziation for methods and functions".freeze
22
22
  s.test_files = ["spec/mize/global_clear_spec.rb".freeze, "spec/mize/memoize_method_spec.rb".freeze, "spec/mize/memoize_reload_spec.rb".freeze, "spec/mize/version_spec.rb".freeze, "spec/spec_helper.rb".freeze]
23
23
 
24
- if s.respond_to? :specification_version then
25
- s.specification_version = 4
26
- end
24
+ s.specification_version = 4
27
25
 
28
- if s.respond_to? :add_runtime_dependency then
29
- s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.12.0"])
30
- s.add_development_dependency(%q<rake>.freeze, [">= 0"])
31
- s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
32
- s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
33
- s.add_development_dependency(%q<yard>.freeze, [">= 0"])
34
- s.add_development_dependency(%q<all_images>.freeze, [">= 0"])
35
- s.add_runtime_dependency(%q<protocol>.freeze, ["~> 2.0"])
36
- else
37
- s.add_dependency(%q<gem_hadar>.freeze, ["~> 1.12.0"])
38
- s.add_dependency(%q<rake>.freeze, [">= 0"])
39
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
40
- s.add_dependency(%q<rspec>.freeze, [">= 0"])
41
- s.add_dependency(%q<yard>.freeze, [">= 0"])
42
- s.add_dependency(%q<all_images>.freeze, [">= 0"])
43
- s.add_dependency(%q<protocol>.freeze, ["~> 2.0"])
44
- end
26
+ s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.19".freeze])
27
+ s.add_development_dependency(%q<rake>.freeze, [">= 0".freeze])
28
+ s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
29
+ s.add_development_dependency(%q<rspec>.freeze, [">= 0".freeze])
30
+ s.add_development_dependency(%q<yard>.freeze, [">= 0".freeze])
31
+ s.add_development_dependency(%q<all_images>.freeze, [">= 0".freeze])
32
+ s.add_development_dependency(%q<debug>.freeze, [">= 0".freeze])
45
33
  end
@@ -27,6 +27,12 @@ class FooBar
27
27
  end
28
28
  memoize method: :foo
29
29
 
30
+ def foo2(arg: 22)
31
+ @@foo2 ||= arg
32
+ @@foo2 += 1
33
+ end
34
+ memoize method: :foo2
35
+
30
36
  def footsie(*a)
31
37
  @@footsie ||= 0
32
38
  @@footsie += 1
@@ -40,6 +46,12 @@ class FooBar
40
46
  end
41
47
  memoize function: :bar
42
48
 
49
+ def bar2(arg: 22)
50
+ @@bar2 ||= arg
51
+ @@bar2 += 1
52
+ end
53
+ memoize function: :bar2
54
+
43
55
  def foo_nil_stored(*a)
44
56
  @@foo_nil_stored ||= 0
45
57
  @@foo_nil_stored += 1
@@ -101,6 +113,29 @@ describe Mize do
101
113
  expect(fb2.__send__(:__mize_cache__)).not_to be_empty
102
114
  end
103
115
 
116
+ it 'can cache methods with kargs' do
117
+ expect(fb1.__send__(:__mize_cache__)).to be_empty
118
+ expect(fb2.__send__(:__mize_cache__)).to be_empty
119
+ expect(fb1.foo2()).to eq 23
120
+ expect(fb2.foo2()).to eq 24
121
+ expect(fb1.foo2(arg: 123)).to eq 25
122
+ expect(fb2.foo2(arg: 123)).to eq 26
123
+ expect(fb1.foo2()).to eq 23
124
+ expect(fb2.foo2()).to eq 24
125
+ fb1.mize_cache_clear
126
+ fb2.mize_cache_clear
127
+ expect(fb1.__send__(:__mize_cache__)).to be_empty
128
+ expect(fb2.__send__(:__mize_cache__)).to be_empty
129
+ expect(fb1.foo2()).to eq 27
130
+ expect(fb2.foo2()).to eq 28
131
+ expect(fb1.foo2()).to eq 27
132
+ expect(fb2.foo2()).to eq 28
133
+ expect(fb1.foo2(arg: 123)).to eq 29
134
+ expect(fb2.foo2(arg: 123)).to eq 30
135
+ expect(fb1.__send__(:__mize_cache__)).not_to be_empty
136
+ expect(fb2.__send__(:__mize_cache__)).not_to be_empty
137
+ end
138
+
104
139
  it 'can cache protected methods' do
105
140
  expect(fb1.__send__(:__mize_cache__)).to be_empty
106
141
  expect(fb2.__send__(:__mize_cache__)).to be_empty
@@ -189,6 +224,20 @@ describe Mize do
189
224
  expect(FooBar.__send__(:__mize_cache__)).not_to be_empty
190
225
  end
191
226
 
227
+ it 'can cache functions with kargs' do
228
+ expect(FooBar.__send__(:__mize_cache__)).to be_empty
229
+ expect(fb1.bar2).to eq 23
230
+ expect(fb2.bar2).to eq 23
231
+ expect(fb1.bar2(arg: 123)).to eq 24
232
+ expect(fb2.bar2(arg: 123)).to eq 24
233
+ expect(fb1.bar2).to eq 23
234
+ expect(fb2.bar2).to eq 23
235
+ FooBar.mize_cache_clear
236
+ expect(fb1.bar2).to eq 25
237
+ expect(fb2.bar2).to eq 25
238
+ expect(FooBar.__send__(:__mize_cache__)).not_to be_empty
239
+ end
240
+
192
241
  it 'can cache private functions' do
193
242
  expect(FooBar.__send__(:__mize_cache__)).to be_empty
194
243
  expect(fb1.__send__(:baz, 1, 2)).to eq 1
data/spec/spec_helper.rb CHANGED
@@ -5,8 +5,4 @@ if ENV['START_SIMPLECOV'].to_i == 1
5
5
  end
6
6
  end
7
7
  require 'rspec'
8
- begin
9
- require 'byebug'
10
- rescue LoadError
11
- end
12
8
  require 'mize'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-21 00:00:00.000000000 Z
11
+ date: 2024-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.12.0
19
+ version: '1.19'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.12.0
26
+ version: '1.19'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -95,19 +95,19 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: protocol
98
+ name: debug
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '2.0'
104
- type: :runtime
103
+ version: '0'
104
+ type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '2.0'
110
+ version: '0'
111
111
  description: Library that provides memoziation for methods and functions for Ruby.
112
112
  email: flori@ping.de
113
113
  executables: []
@@ -128,10 +128,11 @@ files:
128
128
  - ".all_images.yml"
129
129
  - ".gitignore"
130
130
  - ".rspec"
131
- - ".tool-versions"
132
131
  - ".travis.yml"
133
132
  - ".utilsrc"
133
+ - CHANGES.md
134
134
  - Gemfile
135
+ - LICENSE
135
136
  - README.md
136
137
  - Rakefile
137
138
  - VERSION
@@ -153,7 +154,7 @@ files:
153
154
  - spec/mize/memoize_reload_spec.rb
154
155
  - spec/mize/version_spec.rb
155
156
  - spec/spec_helper.rb
156
- homepage: http://flori.github.com/mize
157
+ homepage: https://github.com/flori/mize
157
158
  licenses:
158
159
  - MIT
159
160
  metadata: {}
@@ -176,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
177
  - !ruby/object:Gem::Version
177
178
  version: '0'
178
179
  requirements: []
179
- rubygems_version: 3.3.17
180
+ rubygems_version: 3.5.18
180
181
  signing_key:
181
182
  specification_version: 4
182
183
  summary: Library that provides memoziation for methods and functions
data/.tool-versions DELETED
@@ -1 +0,0 @@
1
- ruby 3.1.2