memorandum 1.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: ffc77bb42f97cf3fc5d6ab97ab7f349ef86ba27b
4
+ data.tar.gz: edb54cbad95a111deb2d224ad39b7c917e40ffd0
5
+ SHA512:
6
+ metadata.gz: 947d899367bc2478168a7aeec22c049b7b1013097a143ca00629480f4c4fc615da9c5424024a319fd086bd904002b0805bb480203de65a38eeeca9d51483dbeb
7
+ data.tar.gz: 06c287798d53465af8c4c4486b0c202071d7013415f4350326d6d9b3d941776d3c11ae962a8419459f2a96f677466e99652b860d4b0580eee5776bf5f0aed442
@@ -0,0 +1,3 @@
1
+ module Memorandum
2
+ VERSION = '1.0.0'.freeze
3
+ end
data/lib/memorandum.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Memorandum
2
+ def memo name, &block
3
+ memoized_values = "@memoized_values_for_#{name}"
4
+ memoized_statuses = "@memoized_statuses_for_#{name}"
5
+
6
+ send :define_method, name do |*args|
7
+ statuses = instance_variable_get(memoized_statuses) \
8
+ || instance_variable_set(memoized_statuses, Hash[])
9
+
10
+ values = instance_variable_get(memoized_values) \
11
+ || instance_variable_set(memoized_values, Hash[])
12
+
13
+ unless statuses[args]
14
+ values[args] = block.call *args
15
+ statuses[args] = true
16
+ end
17
+ values[args]
18
+ end
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: memorandum
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Robert Lude
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: byebug
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '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'
34
+ - - <
35
+ - !ruby/object:Gem::Version
36
+ version: '4'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '3'
44
+ - - <
45
+ - !ruby/object:Gem::Version
46
+ version: '4'
47
+ description:
48
+ email: rob@ertlu.de
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - lib/memorandum.rb
54
+ - lib/memorandum/version.rb
55
+ homepage: https://www.github.com/robertlude/memorandum
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.0.14
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Provides a simple method to define memoized values
79
+ test_files: []
80
+ has_rdoc: