memoizer 1.0.1 → 1.0.2

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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b010462b283416d36bc6de92c071b5010676f917
4
+ data.tar.gz: 77daaef50543351dff8ca7ceb1e41c5e520495f6
5
+ SHA512:
6
+ metadata.gz: 3e3ee325a2fb4709776b15d990af5c6b9c0bbf56238764a96265830bdb76dc0eb3de62798a31e2ed0bb8bdc662bbf7a5a32a9517cac8222f9dea2662bf1e0844
7
+ data.tar.gz: d33e9225fe71f6c4785f71e4fb06c01fdf19e54887a52900883c3467c72cf86f267674b2fea30f754e7f20b6687b75fdd5a7dbd1c88afe6ba68a9883bf68baec
data/README.md CHANGED
@@ -1,63 +1,73 @@
1
- Description
2
- ===========
1
+ [![Build Status](https://travis-ci.org/wegowise/memoizer.svg?branch=setup-travis-ci)](https://travis-ci.org/wegowise/memoizer)
2
+
3
+ # memoizer
3
4
 
4
5
  Memoizer will memoize the results of your methods. It acts much like
5
- ActiveSupport::Memoizable without all of that freezing business. The API for unmemoizing
6
- is also a bit more expicit.
6
+ `ActiveSupport::Memoizable` without all of that freezing business. The API for
7
+ unmemoizing is also a bit more explicit.
7
8
 
8
- Install
9
- =======
9
+ ## Install
10
10
 
11
- $ gem install memoizer
11
+ ```
12
+ $ gem install memoizer
13
+ ```
12
14
 
13
- Usage
14
- =====
15
+ ## Usage
15
16
 
16
17
  To memoize an instance method:
17
18
 
18
- class A
19
- include Memoizer
20
- def hello() 'hello!'; end
21
- memoize :hello
22
- end
19
+ ```ruby
20
+ class A
21
+ include Memoizer
22
+ def hello() 'hello!'; end
23
+ memoize :hello
24
+ end
25
+ ```
23
26
 
24
27
  Or you can memoize many methods at once:
25
28
 
26
- class B
27
- extend Memoizer
28
- def hello() 'hello!'; end
29
- def goodbye() 'goodbye :('; end
30
- memoize :hello, :goodbye
31
- end
29
+ ```ruby
30
+ class B
31
+ extend Memoizer
32
+ def hello() 'hello!'; end
33
+ def goodbye() 'goodbye :('; end
34
+ memoize :hello, :goodbye
35
+ end
36
+ ```
32
37
 
33
38
  Memoizing class methods works the same way:
34
39
 
35
- class C
36
- class << self
37
- include Memoizer
38
- def hello() 'hello!'; end
39
- memoize :hello
40
- end
41
- end
40
+ ```ruby
41
+ class C
42
+ class << self
43
+ include Memoizer
44
+ def hello() 'hello!'; end
45
+ memoize :hello
46
+ end
47
+ end
48
+ ```
42
49
 
43
50
 
44
51
  To unmemoize a specific method:
45
52
 
46
- instance = A.new
47
- instance.hello # the hello method is now memoized
48
- instance.unmemoize(:hello) # the hello method is no longer memoized
49
- instance.hello # the hello method is run again and re-memoized
53
+ ```ruby
54
+ instance = A.new
55
+ instance.hello # the hello method is now memoized
56
+ instance.unmemoize(:hello) # the hello method is no longer memoized
57
+ instance.hello # the hello method is run again and re-memoized
58
+ ```
50
59
 
51
60
 
52
61
  To unmemoize all methods for an instance:
53
62
 
54
- instance = B.new
55
- instance.hello # the hello method is now memoized
56
- instance.goodbye # the goodbye method is now memoized
57
- instance.unmemoize_all # neither hello nor goodbye are memoized anymore
63
+ ```ruby
64
+ instance = B.new
65
+ instance.hello # the hello method is now memoized
66
+ instance.goodbye # the goodbye method is now memoized
67
+ instance.unmemoize_all # neither hello nor goodbye are memoized anymore
68
+ ```
58
69
 
59
70
 
60
- License
61
- =======
71
+ ## License
62
72
 
63
- See LICENSE.txt
73
+ See [LICENSE.txt](https://github.com/wegowise/memoizer/blob/master/LICENSE.txt)
@@ -15,7 +15,6 @@ module Memoizer
15
15
  module ClassMethods
16
16
  def memoize(*method_names)
17
17
  method_names.each do |method_name|
18
- safe_method_name = Memoizer.safe_name(method_name)
19
18
  memoized_ivar_name = Memoizer.ivar_name(method_name)
20
19
  unmemoized_method = "_unmemoized_#{method_name}"
21
20
 
@@ -52,7 +51,6 @@ module Memoizer
52
51
  elsif self.protected_method_defined?(unmemoized_method)
53
52
  protected method_name
54
53
  end
55
-
56
54
  end
57
55
  end
58
56
  end
@@ -70,5 +68,4 @@ module Memoizer
70
68
  end
71
69
  end
72
70
  end
73
-
74
71
  end
@@ -1,3 +1,3 @@
1
1
  module Memoizer
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
@@ -7,11 +7,15 @@ Gem::Specification.new do |s|
7
7
  s.version = Memoizer::VERSION
8
8
  s.authors = ["Barun Singh"]
9
9
  s.email = "bsingh@wegowise.com"
10
- s.homepage = "http://github.com/wegowise/memoizer"
10
+ s.homepage = "https://github.com/wegowise/memoizer"
11
11
  s.summary = "Memoizes (caches the results of) your methods"
12
12
  s.description = "Memoizer caches the results of your method calls, works well with methods that accept arguments or return nil. It's a simpler and more expicit alternative to ActiveSupport::Memoizable"
13
13
  s.required_rubygems_version = ">= 1.3.6"
14
14
  s.files = Dir.glob(%w[{lib,spec}/**/*.rb [A-Z]*.{txt,rdoc,md} *.gemspec]) + %w{Rakefile}
15
15
  s.extra_rdoc_files = ["README.md", "LICENSE.txt"]
16
16
  s.license = 'MIT'
17
+
18
+ s.add_development_dependency('rake', '~> 10.4.2')
19
+ s.add_development_dependency('rspec', '~> 3.5.0')
20
+ s.add_development_dependency('timecop', '~> 0.8.0')
17
21
  end
@@ -21,34 +21,34 @@ describe Memoizer do
21
21
  context "for a method with no params" do
22
22
  it "stores memoized value" do
23
23
  Timecop.freeze(today)
24
- object.no_params.should == today
24
+ expect(object.no_params).to eq(today)
25
25
  Timecop.freeze(tomorrow)
26
- object.no_params.should == today
26
+ expect(object.no_params).to eq(today)
27
27
  end
28
28
  end
29
29
 
30
30
  context "for a method with params (and ending in ?)" do
31
31
  it "stores memoized value" do
32
32
  Timecop.freeze(today)
33
- object.with_params?(1, [1,2]).should == (today + 3)
33
+ expect(object.with_params?(1, [1,2])).to eq(today + 3)
34
34
  Timecop.freeze(tomorrow)
35
- object.with_params?(1, [1,2]).should == (today + 3)
35
+ expect(object.with_params?(1, [1,2])).to eq(today + 3)
36
36
  end
37
37
  it "does not confuse one set of inputs for another" do
38
38
  Timecop.freeze(today)
39
- object.with_params?(1, [1,2]).should == (today + 3)
40
- object.with_params?(2, [1,2]).should == (today + 4)
39
+ expect(object.with_params?(1, [1,2])).to eq(today + 3)
40
+ expect(object.with_params?(2, [1,2])).to eq(today + 4)
41
41
  Timecop.freeze(tomorrow)
42
- object.with_params?(1, [1,2]).should == (today + 3)
43
- object.with_params?(1, [2,2]).should == (today + 4)
42
+ expect(object.with_params?(1, [1,2])).to eq(today + 3)
43
+ expect(object.with_params?(1, [2,2])).to eq(today + 4)
44
44
  end
45
45
  end
46
46
 
47
47
  context "for a method that returns nil (and ends in !)" do
48
48
  it "stores the memoized value" do
49
49
  object.returning_nil!
50
- Date.stub!(:today).and_raise(ArgumentError)
51
- object.returning_nil!.should be_nil
50
+ allow(Date).to receive(:today).and_raise(ArgumentError)
51
+ expect(object.returning_nil!).to be_nil
52
52
  end
53
53
  end
54
54
 
@@ -56,9 +56,9 @@ describe Memoizer do
56
56
  let(:object) { Beepbop.new }
57
57
  it "still memoizes things" do
58
58
  Timecop.freeze(today)
59
- object.no_params.should == today
59
+ expect(object.no_params).to eq(today)
60
60
  Timecop.freeze(tomorrow)
61
- object.no_params.should == today
61
+ expect(object.no_params).to eq(today)
62
62
  end
63
63
  end
64
64
 
@@ -72,15 +72,15 @@ describe Memoizer do
72
72
  let(:object) { Beirut.new }
73
73
 
74
74
  it "respects the privacy of the memoized method" do
75
- Beirut.private_method_defined?(:bar).should be_true
76
- Beirut.private_method_defined?(:_unmemoized_bar).should be_true
75
+ expect(Beirut.private_method_defined?(:bar)).to be_truthy
76
+ expect(Beirut.private_method_defined?(:_unmemoized_bar)).to be_truthy
77
77
  end
78
78
 
79
79
  it "memoizes things" do
80
80
  Timecop.freeze(today)
81
- object.foo.should == today
81
+ expect(object.foo).to eq(today)
82
82
  Timecop.freeze(today + 1)
83
- object.foo.should == today
83
+ expect(object.foo).to eq(today)
84
84
  end
85
85
  end
86
86
 
@@ -94,15 +94,15 @@ describe Memoizer do
94
94
  let(:object) { Wonka.new }
95
95
 
96
96
  it "respects the privacy of the memoized method" do
97
- Wonka.protected_method_defined?(:bar).should be_true
98
- Wonka.protected_method_defined?(:_unmemoized_bar).should be_true
97
+ expect(Wonka.protected_method_defined?(:bar)).to be_truthy
98
+ expect(Wonka.protected_method_defined?(:_unmemoized_bar)).to be_truthy
99
99
  end
100
100
 
101
101
  it "memoizes things" do
102
102
  Timecop.freeze(today)
103
- object.foo.should == today
103
+ expect(object.foo).to eq(today)
104
104
  Timecop.freeze(today + 1)
105
- object.foo.should == today
105
+ expect(object.foo).to eq(today)
106
106
  end
107
107
  end
108
108
 
@@ -119,63 +119,63 @@ describe Memoizer do
119
119
  let(:object) { MemoizerSpecClass.new }
120
120
  before do
121
121
  Timecop.freeze(today)
122
- object.today.should == today
123
- object.plus_ndays(1).should == today + 1
124
- object.plus_ndays(3).should == today + 3
122
+ expect(object.today).to eq(today)
123
+ expect(object.plus_ndays(1)).to eq(today + 1)
124
+ expect(object.plus_ndays(3)).to eq(today + 3)
125
125
  end
126
126
 
127
127
  describe '#unmemoize' do
128
128
  context "for a method with no arguments" do
129
129
  it "clears the memoized value so it can be rememoized" do
130
130
  Timecop.freeze(today + 1)
131
- object.today.should == today
131
+ expect(object.today).to eq(today)
132
132
 
133
133
  object.unmemoize(:today)
134
- object.today.should == today + 1
134
+ expect(object.today).to eq(today + 1)
135
135
 
136
136
  Timecop.freeze(today + 2)
137
- object.today.should == today + 1
137
+ expect(object.today).to eq(today + 1)
138
138
  end
139
139
  end
140
140
 
141
141
  context "for a method with arguments" do
142
142
  it "unmemoizes for all inupts" do
143
143
  Timecop.freeze(today + 1)
144
- object.plus_ndays(1).should == today + 1
145
- object.plus_ndays(3).should == today + 3
144
+ expect(object.plus_ndays(1)).to eq(today + 1)
145
+ expect(object.plus_ndays(3)).to eq(today + 3)
146
146
 
147
147
  object.unmemoize(:plus_ndays)
148
- object.plus_ndays(1).should == today + 2
149
- object.plus_ndays(3).should == today + 4
148
+ expect(object.plus_ndays(1)).to eq(today + 2)
149
+ expect(object.plus_ndays(3)).to eq(today + 4)
150
150
 
151
151
  Timecop.freeze(today + 2)
152
- object.plus_ndays(1).should == today + 2
153
- object.plus_ndays(3).should == today + 4
152
+ expect(object.plus_ndays(1)).to eq(today + 2)
153
+ expect(object.plus_ndays(3)).to eq(today + 4)
154
154
  end
155
155
  end
156
156
 
157
157
  it "only affects the method specified" do
158
158
  Timecop.freeze(today + 1)
159
- object.today.should == today
159
+ expect(object.today).to eq(today)
160
160
 
161
161
  object.unmemoize(:plus_ndays)
162
- object.today.should == today
162
+ expect(object.today).to eq(today)
163
163
 
164
164
  object.unmemoize(:today)
165
- object.today.should == today + 1
165
+ expect(object.today).to eq(today + 1)
166
166
  end
167
167
 
168
168
  context "for subclasses" do
169
169
  let(:object) { Beepbop.new }
170
170
  it "clears the memoized value" do
171
171
  Timecop.freeze(today + 1)
172
- object.today.should == today
172
+ expect(object.today).to eq(today)
173
173
 
174
174
  object.unmemoize(:today)
175
- object.today.should == today + 1
175
+ expect(object.today).to eq(today + 1)
176
176
 
177
177
  Timecop.freeze(today + 2)
178
- object.today.should == today + 1
178
+ expect(object.today).to eq(today + 1)
179
179
  end
180
180
  end
181
181
  end
@@ -184,15 +184,15 @@ describe Memoizer do
184
184
  shared_examples_for "unmemoizing methods" do
185
185
  it "clears all memoized values" do
186
186
  Timecop.freeze(today + 1)
187
- object.today.should == today
188
- object.plus_ndays(1).should == today + 1
189
- object.plus_ndays(3).should == today + 3
187
+ expect(object.today).to eq(today)
188
+ expect(object.plus_ndays(1)).to eq(today + 1)
189
+ expect(object.plus_ndays(3)).to eq(today + 3)
190
190
 
191
191
  object.unmemoize_all
192
192
 
193
- object.today.should == today + 1
194
- object.plus_ndays(1).should == today + 2
195
- object.plus_ndays(3).should == today + 4
193
+ expect(object.today).to eq(today + 1)
194
+ expect(object.plus_ndays(1)).to eq(today + 2)
195
+ expect(object.plus_ndays(3)).to eq(today + 4)
196
196
  end
197
197
  end
198
198
 
@@ -1,3 +1,4 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
+ require 'date'
3
4
  require 'timecop'
metadata CHANGED
@@ -1,16 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memoizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
5
- prerelease:
4
+ version: 1.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Barun Singh
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2011-09-02 00:00:00.000000000Z
13
- dependencies: []
11
+ date: 2016-12-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 10.4.2
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 10.4.2
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.5.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.5.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: timecop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.8.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.8.0
14
55
  description: Memoizer caches the results of your method calls, works well with methods
15
56
  that accept arguments or return nil. It's a simpler and more expicit alternative
16
57
  to ActiveSupport::Memoizable
@@ -21,38 +62,37 @@ extra_rdoc_files:
21
62
  - README.md
22
63
  - LICENSE.txt
23
64
  files:
24
- - lib/memoizer/version.rb
25
- - lib/memoizer.rb
26
- - spec/memoizer_spec.rb
27
- - spec/spec_helper.rb
28
65
  - CHANGELOG.txt
29
66
  - LICENSE.txt
30
67
  - README.md
31
- - memoizer.gemspec
32
68
  - Rakefile
33
- homepage: http://github.com/wegowise/memoizer
69
+ - lib/memoizer.rb
70
+ - lib/memoizer/version.rb
71
+ - memoizer.gemspec
72
+ - spec/memoizer_spec.rb
73
+ - spec/spec_helper.rb
74
+ homepage: https://github.com/wegowise/memoizer
34
75
  licenses:
35
76
  - MIT
77
+ metadata: {}
36
78
  post_install_message:
37
79
  rdoc_options: []
38
80
  require_paths:
39
81
  - lib
40
82
  required_ruby_version: !ruby/object:Gem::Requirement
41
- none: false
42
83
  requirements:
43
- - - ! '>='
84
+ - - ">="
44
85
  - !ruby/object:Gem::Version
45
86
  version: '0'
46
87
  required_rubygems_version: !ruby/object:Gem::Requirement
47
- none: false
48
88
  requirements:
49
- - - ! '>='
89
+ - - ">="
50
90
  - !ruby/object:Gem::Version
51
91
  version: 1.3.6
52
92
  requirements: []
53
93
  rubyforge_project:
54
- rubygems_version: 1.8.6
94
+ rubygems_version: 2.5.1
55
95
  signing_key:
56
- specification_version: 3
96
+ specification_version: 4
57
97
  summary: Memoizes (caches the results of) your methods
58
98
  test_files: []