mize 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
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