mize 0.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1a3d262bfae6dc90882b9a6deeb29a655bebd647
4
+ data.tar.gz: 9e606ff6fae19a19b6c83f263e3d6ae58f18589a
5
+ SHA512:
6
+ metadata.gz: a2754ca93ed9e827b50d3f8528a535a9ac69790d8defbc9510d0408d4a0128a7f3b8a3356f5420a856cbb141b8fb42c187732be8ee934d6d03fb1a1db40b91c5
7
+ data.tar.gz: 715c53aa026e8270bcc9fc9e4fed0a35bafdc6514b57ce11c023d1e2797f113b073a7c2e9c2220bf5a374c1dda809e64443b54b4f5c6e9fe81716eec275144e9
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ .*.sw[pon]
2
+ .AppleDouble
3
+ .byebug_history
4
+ .rvmrc
5
+ .yard*
6
+ Gemfile.lock
7
+ coverage
8
+ errors.lst
9
+ pkg
10
+ tags
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ -fd
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ rvm:
2
+ - 2.0
3
+ - 2.1
4
+ - 2.2
5
+ - ruby-head
6
+ - jruby-head
7
+ matrix:
8
+ allow_failures:
9
+ - rvm: ruby-head
10
+ - rvm: jruby-head
data/.utilsrc ADDED
@@ -0,0 +1,26 @@
1
+ # vim: set ft=ruby:
2
+
3
+ search do
4
+ prune_dirs /\A(\.svn|\.git|CVS|tmp|tags|coverage|pkg)\z/
5
+ skip_files /(\A\.|\.sw[pon]\z|\.(log|fnm|jpg|jpeg|png|pdf|svg)\z|tags|~\z)/i
6
+ end
7
+
8
+ discover do
9
+ prune_dirs /\A(\.svn|\.git|CVS|tmp|tags|coverage|pkg)\z/
10
+ skip_files /(\A\.|\.sw[pon]\z|\.log\z|~\z)/
11
+ binary false
12
+ end
13
+
14
+ strip_spaces do
15
+ prune_dirs /\A(\..*|CVS|pkg)\z/
16
+ skip_files /(\A\.|\.sw[pon]\z|\.log\z|~\z)/
17
+ end
18
+
19
+ probe do
20
+ test_framework :rspec
21
+ #include_dirs 'features'
22
+ end
23
+
24
+ ssh_tunnel do
25
+ terminal_multiplexer :tmux
26
+ end
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # vim: set filetype=ruby et sw=2 ts=2:
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # Mize
2
+
3
+ ## Description
4
+
5
+
6
+ ## Installation
7
+
8
+ You can use rubygems to fetch the gem and install it for you:
9
+
10
+ # gem install mize
11
+
12
+ You can also put this line into your Gemfile
13
+
14
+ gem 'mize'
15
+
16
+ and bundle.
17
+
18
+ ## Usage
19
+
20
+ ### Configuration
21
+
22
+
23
+ ## Changes
24
+
25
+ * 2015-12-10 Release 0.0.0
26
+
27
+ ## Download
28
+
29
+ The homepage of this library is located at
30
+
31
+ * https://github.com/flori/mize
32
+
33
+ ## Author
34
+
35
+ [Florian Frank](mailto:flori@ping.de)
36
+
37
+ ## License
38
+
39
+ This software is licensed under MIT license.
data/Rakefile ADDED
@@ -0,0 +1,55 @@
1
+ # vim: set filetype=ruby et sw=2 ts=2:
2
+
3
+ require 'gem_hadar'
4
+
5
+ GemHadar do
6
+ name 'mize'
7
+ author 'Florian Frank'
8
+ email 'flori@ping.de'
9
+ homepage "http://flori.github.com/#{name}"
10
+ summary 'Library that provides memoziation for methods and functions'
11
+ description "#{summary} for Ruby."
12
+ readme 'README.md'
13
+ licenses << 'MIT'
14
+
15
+ test_dir 'spec'
16
+ ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', 'coverage', '.rvmrc',
17
+ '.AppleDouble', 'tags', '.byebug_history', '.yard*', 'errors.lst'
18
+
19
+
20
+ dependency 'protocol'
21
+ development_dependency 'rake'
22
+ development_dependency 'simplecov'
23
+ development_dependency 'rspec'
24
+ development_dependency 'yard'
25
+ development_dependency 'byebug'
26
+
27
+ required_ruby_version '>= 2'
28
+ end
29
+
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
+ task :default => :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
@@ -0,0 +1 @@
1
+ ,kaput
data/config/config.yml ADDED
@@ -0,0 +1,13 @@
1
+ development:
2
+ config:
3
+ foo: true
4
+ bar: false
5
+ baz: 'something'
6
+ pi: <%= Math::PI %>
7
+
8
+ test:
9
+ config:
10
+ foo: false
11
+ bar: true
12
+ baz: 'something else'
13
+ pi: 3.141
@@ -0,0 +1,52 @@
1
+ require 'mize/cache_protocol'
2
+ require 'mize/default_cache'
3
+
4
+ module Mize::CacheMethods
5
+ # Clear cached values for all methods/functions of this object.
6
+ def mize_cache_clear
7
+ __mize_cache__.clear
8
+ self
9
+ end
10
+
11
+ private
12
+
13
+ # Set the cache object to +cache+.
14
+ def __mize_cache__=(cache)
15
+ Mize::CacheProtocol.check cache
16
+ @__mize_cache__ = cache
17
+ end
18
+
19
+ # Return the cache object.
20
+ def __mize_cache__
21
+ if @__mize_cache__
22
+ @__mize_cache__
23
+ else
24
+ self.__mize_cache__ = Mize.default_cache.prototype
25
+ end
26
+ end
27
+
28
+ # Build a key prefix for +name+.
29
+ def build_key_prefix(name)
30
+ "mize/#{name}"
31
+ end
32
+
33
+ # Build a +name+ prefixed key for the arguments +args+.
34
+ def build_key(name, *args)
35
+ "#{build_key_prefix(name)}/#{Marshal.dump(args)}"
36
+ end
37
+
38
+ # Apply the visibility of method +id+ to the wrapper method of this method.
39
+ def memoize_apply_visibility(id)
40
+ visibility = instance_eval do
41
+ case
42
+ when private_method_defined?(id)
43
+ :private
44
+ when protected_method_defined?(id)
45
+ :protected
46
+ end
47
+ end
48
+ yield
49
+ ensure
50
+ visibility and __send__(visibility, id)
51
+ end
52
+ end
@@ -0,0 +1,32 @@
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
32
+ end
@@ -0,0 +1,17 @@
1
+ module Mize::Configure
2
+ attr_accessor :default_cache
3
+
4
+ def cache(cache)
5
+ self.default_cache = cache
6
+ end
7
+
8
+ def configure(&block)
9
+ instance_eval(&block)
10
+ end
11
+ end
12
+
13
+ module Mize
14
+ extend Mize::Configure
15
+ end
16
+
17
+ Mize.default_cache = Mize::DefaultCache.new
@@ -0,0 +1,33 @@
1
+ require 'monitor'
2
+
3
+ class Mize::DefaultCache < Hash
4
+ include MonitorMixin
5
+
6
+ private(*(instance_methods - Object.instance_methods - %i[ synchronize ]))
7
+
8
+ def clear(options = nil)
9
+ super()
10
+ end
11
+
12
+ def exist?(name, options = nil)
13
+ key?(name)
14
+ end
15
+
16
+ def read(name, options = nil)
17
+ fetch(name, nil)
18
+ end
19
+
20
+ def write(name, value, options = nil)
21
+ store(name, value)
22
+ end
23
+
24
+ def delete(name, options = nil)
25
+ super(name)
26
+ end
27
+
28
+ def each_name(&block)
29
+ each_key(&block)
30
+ end
31
+
32
+ alias prototype dup
33
+ end
@@ -0,0 +1,41 @@
1
+ require 'monitor'
2
+
3
+ module Mize
4
+ class << self
5
+
6
+ # Clear all memoization caches at once.
7
+ def cache_clear
8
+ each_cache do |id, cache|
9
+ cache and cache.clear
10
+ cache_tracker.delete id
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def each_cache
17
+ cache_tracker.synchronize do
18
+ cache_tracker.each_name do |id|
19
+ begin
20
+ cache = ObjectSpace._id2ref id
21
+ rescue RangeError
22
+ end
23
+ yield id, cache
24
+ end
25
+ end
26
+ end
27
+
28
+ def cache_tracker
29
+ @cache_tracker ||= Mize.default_cache.dup
30
+ end
31
+
32
+ def track_cache(cache_id)
33
+ cache_tracker.exist?(cache_id) and return
34
+ cache_tracker.synchronize do
35
+ cache_tracker.write cache_id, true
36
+ end
37
+ end
38
+ end
39
+
40
+ cache_tracker
41
+ end
@@ -0,0 +1,61 @@
1
+ require 'mize/cache_methods'
2
+ require 'mize/reload'
3
+
4
+ module Mize
5
+ module Memoize
6
+ include CacheMethods
7
+
8
+ # Memoize either a +method+ or a +function+. In the former case the
9
+ # memoized results do NOT ONLY depend on the arguments, but ALSO on the
10
+ # object the method is called on. In the latter the memoized results ONLY
11
+ # depend on the arguments given to the function. If the +freeze+ argument
12
+ # is true, the result is frozen if possible to make it immutable.
13
+ def memoize(method: nil, function: nil, freeze: false)
14
+ if method && function
15
+ raise ArgumentError, 'memoize a method xor a function'
16
+ elsif method
17
+ wrap_method method, freeze: freeze
18
+ elsif function
19
+ wrap_method function, function: true, freeze: freeze
20
+ else
21
+ raise ArgumentError, 'missing keyword: method/function'
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def wrap_method(method_id, freeze: false, function: false)
28
+ include CacheMethods
29
+
30
+ mc = __mize_cache__
31
+
32
+ unless function
33
+ prepend Mize::Reload
34
+ end
35
+
36
+ method_id = method_id.to_s.to_sym
37
+ memoize_apply_visibility method_id do
38
+ orig_method = instance_method(method_id)
39
+ __send__(:define_method, method_id) do |*args|
40
+ function or mc = __mize_cache__
41
+ Mize.__send__ :track_cache, mc.__id__
42
+ key = build_key(method_id, *args)
43
+ if mc.exist?(key) and result = mc.read(key)
44
+ result
45
+ else
46
+ result = orig_method.bind(self).call(*args)
47
+ mc.write(key, result)
48
+ if $DEBUG
49
+ warn "#{self.class} cached method "\
50
+ "#{method_id}(#{args.inspect unless args.empty?}) = "\
51
+ "#{result.inspect} [#{__id__}]"
52
+ end
53
+ freeze and result.freeze rescue result
54
+ end
55
+ result
56
+ end
57
+ end
58
+ method_id
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,8 @@
1
+ module Mize
2
+ class Railtie < Rails::Railtie
3
+ config.to_prepare do
4
+ Mize.cache_clear
5
+ end
6
+ end
7
+ end
8
+
@@ -0,0 +1,12 @@
1
+ module Mize::Reload
2
+ # Reload this object if a #reload method was provided up somewhere in the
3
+ # inheritance tree, afterwards clear the memoization cache and return self.
4
+ def reload(*)
5
+ result = self
6
+ if defined? super
7
+ result = super
8
+ end
9
+ mize_cache_clear
10
+ result
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ module Mize
2
+ # Mize version
3
+ VERSION = '0.0.0'
4
+ VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
7
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
8
+ end
data/lib/mize.rb ADDED
@@ -0,0 +1,12 @@
1
+ module Mize
2
+ end
3
+
4
+ require 'mize/version'
5
+ require 'mize/memoize'
6
+ require 'mize/configure'
7
+ require 'mize/global_clear'
8
+ require 'mize/railtie' if defined? Rails
9
+
10
+ class ::Module
11
+ prepend Mize::Memoize
12
+ end
data/mize.gemspec ADDED
@@ -0,0 +1,53 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # stub: mize 0.0.0 ruby lib
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "mize"
6
+ s.version = "0.0.0"
7
+
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib"]
10
+ s.authors = ["Florian Frank"]
11
+ s.date = "2016-01-28"
12
+ s.description = "Library that provides memoziation for methods and functions for Ruby."
13
+ s.email = "flori@ping.de"
14
+ s.extra_rdoc_files = ["README.md", "lib/mize.rb", "lib/mize/cache_methods.rb", "lib/mize/cache_protocol.rb", "lib/mize/configure.rb", "lib/mize/default_cache.rb", "lib/mize/global_clear.rb", "lib/mize/memoize.rb", "lib/mize/railtie.rb", "lib/mize/reload.rb", "lib/mize/version.rb"]
15
+ s.files = [".gitignore", ".rspec", ".travis.yml", ".utilsrc", "Gemfile", "README.md", "Rakefile", "VERSION", "config/broken_config.yml", "config/config.yml", "lib/mize.rb", "lib/mize/cache_methods.rb", "lib/mize/cache_protocol.rb", "lib/mize/configure.rb", "lib/mize/default_cache.rb", "lib/mize/global_clear.rb", "lib/mize/memoize.rb", "lib/mize/railtie.rb", "lib/mize/reload.rb", "lib/mize/version.rb", "mize.gemspec", "spec/mize/global_clear_spec.rb", "spec/mize/memoize_method_spec.rb", "spec/mize/memoize_reload_spec.rb", "spec/mize/version_spec.rb", "spec/spec_helper.rb"]
16
+ s.homepage = "http://flori.github.com/mize"
17
+ s.licenses = ["MIT"]
18
+ s.rdoc_options = ["--title", "Mize - Library that provides memoziation for methods and functions", "--main", "README.md"]
19
+ s.required_ruby_version = Gem::Requirement.new(">= 2")
20
+ s.rubygems_version = "2.5.1"
21
+ s.summary = "Library that provides memoziation for methods and functions"
22
+ s.test_files = ["spec/mize/global_clear_spec.rb", "spec/mize/memoize_method_spec.rb", "spec/mize/memoize_reload_spec.rb", "spec/mize/version_spec.rb", "spec/spec_helper.rb"]
23
+
24
+ if s.respond_to? :specification_version then
25
+ s.specification_version = 4
26
+
27
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
28
+ s.add_development_dependency(%q<gem_hadar>, ["~> 1.3.1"])
29
+ s.add_development_dependency(%q<rake>, [">= 0"])
30
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
31
+ s.add_development_dependency(%q<rspec>, [">= 0"])
32
+ s.add_development_dependency(%q<yard>, [">= 0"])
33
+ s.add_development_dependency(%q<byebug>, [">= 0"])
34
+ s.add_runtime_dependency(%q<protocol>, [">= 0"])
35
+ else
36
+ s.add_dependency(%q<gem_hadar>, ["~> 1.3.1"])
37
+ s.add_dependency(%q<rake>, [">= 0"])
38
+ s.add_dependency(%q<simplecov>, [">= 0"])
39
+ s.add_dependency(%q<rspec>, [">= 0"])
40
+ s.add_dependency(%q<yard>, [">= 0"])
41
+ s.add_dependency(%q<byebug>, [">= 0"])
42
+ s.add_dependency(%q<protocol>, [">= 0"])
43
+ end
44
+ else
45
+ s.add_dependency(%q<gem_hadar>, ["~> 1.3.1"])
46
+ s.add_dependency(%q<rake>, [">= 0"])
47
+ s.add_dependency(%q<simplecov>, [">= 0"])
48
+ s.add_dependency(%q<rspec>, [">= 0"])
49
+ s.add_dependency(%q<yard>, [">= 0"])
50
+ s.add_dependency(%q<byebug>, [">= 0"])
51
+ s.add_dependency(%q<protocol>, [">= 0"])
52
+ end
53
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ class Foo
4
+ def self.reset
5
+ @@foo = nil
6
+ end
7
+
8
+ def reload
9
+ @reload = true
10
+ self
11
+ end
12
+
13
+ def foo(*a)
14
+ @@foo ||= 0
15
+ @@foo += 1
16
+ end
17
+ memoize method: :foo
18
+ end
19
+
20
+ describe Mize, 'cache_clear' do
21
+ let(:foo) { Foo.new }
22
+
23
+ describe '#cache_clear' do
24
+ it 'clears cache after Mize.cache_clear' do
25
+ expect(foo.foo).to eq 1
26
+ expect(foo.foo).to eq 1
27
+ Mize.cache_clear
28
+ expect(foo.foo).to eq 2
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,124 @@
1
+ require 'spec_helper'
2
+
3
+ class FooBar
4
+ def self.reset
5
+ @@foo = nil
6
+ @@bar = nil
7
+ @@baz = nil
8
+ mize_cache_clear
9
+ end
10
+
11
+ def foo(*a)
12
+ @@foo ||= 0
13
+ @@foo += 1
14
+ end
15
+ memoize method: :foo
16
+
17
+ def footsie(*a)
18
+ @@footsie ||= 0
19
+ @@footsie += 1
20
+ end
21
+ protected :footsie
22
+ memoize method: :footsie
23
+
24
+ def bar(*a)
25
+ @@bar ||= 0
26
+ @@bar += 1
27
+ end
28
+ memoize function: :bar
29
+
30
+ private
31
+
32
+ def baz(*a)
33
+ @@baz ||= 0
34
+ @@baz += 1
35
+ end
36
+ memoize function: :baz
37
+ end
38
+
39
+ describe Mize do
40
+ before do
41
+ FooBar.reset
42
+ class ::Mize::DefaultCache
43
+ public :empty?
44
+ end
45
+ end
46
+
47
+ let(:fb1) { FooBar.new }
48
+
49
+ let(:fb2) { FooBar.new }
50
+
51
+ context 'memoize method' do
52
+ it 'can cache methods' do
53
+ expect(fb1.__send__(:__mize_cache__)).to be_empty
54
+ expect(fb2.__send__(:__mize_cache__)).to be_empty
55
+ expect(fb1.foo(1, 2)).to eq 1
56
+ expect(fb2.foo(1, 2)).to eq 2
57
+ expect(fb1.foo(1, 2, 3)).to eq 3
58
+ expect(fb2.foo(1, 2, 3)).to eq 4
59
+ expect(fb1.foo(1, 2)).to eq 1
60
+ expect(fb2.foo(1, 2)).to eq 2
61
+ fb1.mize_cache_clear
62
+ fb2.mize_cache_clear
63
+ expect(fb1.__send__(:__mize_cache__)).to be_empty
64
+ expect(fb2.__send__(:__mize_cache__)).to be_empty
65
+ expect(fb1.foo(1, 2)).to eq 5
66
+ expect(fb2.foo(1, 2)).to eq 6
67
+ expect(fb1.foo(1, 2)).to eq 5
68
+ expect(fb2.foo(1, 2)).to eq 6
69
+ expect(fb1.__send__(:__mize_cache__)).not_to be_empty
70
+ expect(fb2.__send__(:__mize_cache__)).not_to be_empty
71
+ end
72
+
73
+ it 'can cache protected methods' do
74
+ expect(fb1.__send__(:__mize_cache__)).to be_empty
75
+ expect(fb2.__send__(:__mize_cache__)).to be_empty
76
+ expect(fb1.__send__(:footsie, 1, 2)).to eq 1
77
+ expect(fb2.__send__(:footsie, 1, 2)).to eq 2
78
+ expect(fb1.__send__(:footsie, 1, 2, 3)).to eq 3
79
+ expect(fb2.__send__(:footsie, 1, 2, 3)).to eq 4
80
+ expect(fb1.__send__(:footsie, 1, 2)).to eq 1
81
+ expect(fb2.__send__(:footsie, 1, 2)).to eq 2
82
+ fb1.mize_cache_clear
83
+ fb2.mize_cache_clear
84
+ expect(fb1.__send__(:__mize_cache__)).to be_empty
85
+ expect(fb2.__send__(:__mize_cache__)).to be_empty
86
+ expect(fb1.__send__(:footsie, 1, 2)).to eq 5
87
+ expect(fb2.__send__(:footsie, 1, 2)).to eq 6
88
+ expect(fb1.__send__(:footsie, 1, 2)).to eq 5
89
+ expect(fb2.__send__(:footsie, 1, 2)).to eq 6
90
+ expect(fb1.__send__(:__mize_cache__)).not_to be_empty
91
+ expect(fb2.__send__(:__mize_cache__)).not_to be_empty
92
+ end
93
+ end
94
+
95
+ context 'memoize function' do
96
+ it 'can cache functions' do
97
+ expect(FooBar.__send__(:__mize_cache__)).to be_empty
98
+ expect(fb1.bar(1, 2)).to eq 1
99
+ expect(fb2.bar(1, 2)).to eq 1
100
+ expect(fb1.bar(1, 2, 3)).to eq 2
101
+ expect(fb2.bar(1, 2, 3)).to eq 2
102
+ expect(fb1.bar(1, 2)).to eq 1
103
+ expect(fb2.bar(1, 2)).to eq 1
104
+ FooBar.mize_cache_clear
105
+ expect(fb1.bar(1, 2)).to eq 3
106
+ expect(fb2.bar(1, 2)).to eq 3
107
+ expect(FooBar.__send__(:__mize_cache__)).not_to be_empty
108
+ end
109
+
110
+ it 'can cache private functions' do
111
+ expect(FooBar.__send__(:__mize_cache__)).to be_empty
112
+ expect(fb1.__send__(:baz, 1, 2)).to eq 1
113
+ expect(fb2.__send__(:baz, 1, 2)).to eq 1
114
+ expect(fb1.__send__(:baz, 1, 2, 3)).to eq 2
115
+ expect(fb2.__send__(:baz, 1, 2, 3)).to eq 2
116
+ expect(fb1.__send__(:baz, 1, 2)).to eq 1
117
+ expect(fb2.__send__(:baz, 1, 2)).to eq 1
118
+ FooBar.mize_cache_clear
119
+ expect(fb1.__send__(:baz, 1, 2)).to eq 3
120
+ expect(fb2.__send__(:baz, 1, 2)).to eq 3
121
+ expect(FooBar.__send__(:__mize_cache__)).not_to be_empty
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ class Foo
4
+ def self.reset
5
+ @@foo = nil
6
+ end
7
+
8
+ def reload
9
+ @reload = true
10
+ self
11
+ end
12
+
13
+ def foo(*a)
14
+ @@foo ||= 0
15
+ @@foo += 1
16
+ end
17
+ memoize method: :foo
18
+ end
19
+
20
+ describe Mize::Reload do
21
+ before do
22
+ Foo.reset
23
+ end
24
+
25
+ let(:foo) { Foo.new }
26
+
27
+ describe '#reload' do
28
+ it 'clears cache after reload' do
29
+ expect(foo.foo).to eq 1
30
+ expect(foo.foo).to eq 1
31
+ expect(foo.reload.foo).to eq 2
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mize::VERSION do
4
+ it 'has a version' do
5
+ expect(Mize::VERSION).to be_a String
6
+ expect(Mize::VERSION).to match /\d+./
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ if ENV['START_SIMPLECOV'].to_i == 1
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter "#{File.basename(File.dirname(__FILE__))}/"
5
+ end
6
+ end
7
+ if ENV['CODECLIMATE_REPO_TOKEN']
8
+ require "codeclimate-test-reporter"
9
+ CodeClimate::TestReporter.start
10
+ end
11
+ require 'rspec'
12
+ begin
13
+ require 'byebug'
14
+ rescue LoadError
15
+ end
16
+ require 'mize'
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mize
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Florian Frank
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: gem_hadar
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.3.1
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.3.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: protocol
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Library that provides memoziation for methods and functions for Ruby.
112
+ email: flori@ping.de
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files:
116
+ - README.md
117
+ - lib/mize.rb
118
+ - lib/mize/cache_methods.rb
119
+ - lib/mize/cache_protocol.rb
120
+ - lib/mize/configure.rb
121
+ - lib/mize/default_cache.rb
122
+ - lib/mize/global_clear.rb
123
+ - lib/mize/memoize.rb
124
+ - lib/mize/railtie.rb
125
+ - lib/mize/reload.rb
126
+ - lib/mize/version.rb
127
+ files:
128
+ - ".gitignore"
129
+ - ".rspec"
130
+ - ".travis.yml"
131
+ - ".utilsrc"
132
+ - Gemfile
133
+ - README.md
134
+ - Rakefile
135
+ - VERSION
136
+ - config/broken_config.yml
137
+ - config/config.yml
138
+ - lib/mize.rb
139
+ - lib/mize/cache_methods.rb
140
+ - lib/mize/cache_protocol.rb
141
+ - lib/mize/configure.rb
142
+ - lib/mize/default_cache.rb
143
+ - lib/mize/global_clear.rb
144
+ - lib/mize/memoize.rb
145
+ - lib/mize/railtie.rb
146
+ - lib/mize/reload.rb
147
+ - lib/mize/version.rb
148
+ - mize.gemspec
149
+ - spec/mize/global_clear_spec.rb
150
+ - spec/mize/memoize_method_spec.rb
151
+ - spec/mize/memoize_reload_spec.rb
152
+ - spec/mize/version_spec.rb
153
+ - spec/spec_helper.rb
154
+ homepage: http://flori.github.com/mize
155
+ licenses:
156
+ - MIT
157
+ metadata: {}
158
+ post_install_message:
159
+ rdoc_options:
160
+ - "--title"
161
+ - Mize - Library that provides memoziation for methods and functions
162
+ - "--main"
163
+ - README.md
164
+ require_paths:
165
+ - lib
166
+ required_ruby_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '2'
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 2.5.1
179
+ signing_key:
180
+ specification_version: 4
181
+ summary: Library that provides memoziation for methods and functions
182
+ test_files:
183
+ - spec/mize/global_clear_spec.rb
184
+ - spec/mize/memoize_method_spec.rb
185
+ - spec/mize/memoize_reload_spec.rb
186
+ - spec/mize/version_spec.rb
187
+ - spec/spec_helper.rb