memo-it 0.3.0 → 0.3.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 +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +15 -0
- data/Gemfile +2 -0
- data/README.md +8 -4
- data/Rakefile +33 -5
- data/lib/memo/it.rb +2 -3
- data/memo-it.gemspec +3 -3
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c219d9d1f53efd7dcb2686f35b8ad1627764aa3
|
4
|
+
data.tar.gz: 0b539381c33dd4037cfe3425055b5ead557ba47c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c64c5ce79094046b63f68d368c4da21583406e6fd27476508efc865d91084383bcfe070c435f6063bed3f819bcc35d2b5b38d014aaef999db9114f2a81a8a9d5
|
7
|
+
data.tar.gz: 14cb63e98f8431a9051de9d8fb11a43a3ccab8af6ae11cd6ca63244d9540707ed30cfa0aeb5a5db3bf92058b4626525060b934153d2329aaf52a45449eabae15
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# CHANGELOG
|
2
|
+
|
3
|
+
## 0.3.1
|
4
|
+
|
5
|
+
* simplify key generation (see [issue #7](https://github.com/phoet/memo-it/pull/7) for details)
|
6
|
+
|
7
|
+
## 0.3.0 ([list of commits](https://github.com/phoet/memo-it/compare/v0.2.0...v0.3.0))
|
8
|
+
|
9
|
+
* rename `:ignore` to `:except` (see [issue #5](https://github.com/phoet/memo-it/pull/5) for details)
|
10
|
+
* add easy way to disable memoization (see [issue #4](https://github.com/phoet/memo-it/pull/4) for details)
|
11
|
+
* add `:only` option for memoizing method parameters (see [issue #3](https://github.com/phoet/memo-it/pull/3) for details)
|
12
|
+
|
13
|
+
## 0.2.0 ([list of commits](https://github.com/phoet/memo-it/compare/0.1.1...v0.2.0))
|
14
|
+
|
15
|
+
* support ignoring selected method parameters (see [issue #2](https://github.com/phoet/memo-it/pull/2) for details)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -19,7 +19,7 @@ Requiring the gem will add a `memo` method to the `Object` class so that you can
|
|
19
19
|
In case you want to memoize something that has parameters, memo-it will just use all local variables in scope to determine the memoization:
|
20
20
|
|
21
21
|
```ruby
|
22
|
-
def load_repo(name =
|
22
|
+
def load_repo(name = 'memo-it')
|
23
23
|
memo do
|
24
24
|
# in this case the result will be memoized per name
|
25
25
|
HTTPClient.get("https://github.com/phoet/#{name}")
|
@@ -31,7 +31,7 @@ If, on the other hand, you want to memoize parameters but ignore one of them,
|
|
31
31
|
you can do this by adding it to the `:except` list:
|
32
32
|
|
33
33
|
```ruby
|
34
|
-
def load_repo(name =
|
34
|
+
def load_repo(name = 'memo-it', time = Time.now)
|
35
35
|
memo(except: :time) do
|
36
36
|
# in this case the result will be memoized per name
|
37
37
|
HTTPClient.get("https://github.com/phoet/#{name}?time=#{time}")
|
@@ -42,7 +42,7 @@ you can do this by adding it to the `:except` list:
|
|
42
42
|
Or provide a list of parameters to except:
|
43
43
|
|
44
44
|
```ruby
|
45
|
-
def load_repo(name =
|
45
|
+
def load_repo(name = 'memo-it', time = Time.now, other = 'irrelevant')
|
46
46
|
memo(except: [:time, :other]) do
|
47
47
|
# in this case the result will be memoized per name
|
48
48
|
HTTPClient.get("https://github.com/phoet/#{name}?time=#{time}&other=#{other}")
|
@@ -53,7 +53,7 @@ Or provide a list of parameters to except:
|
|
53
53
|
To be symmetric, it's also possible to define one or more parameters through the `:only` key:
|
54
54
|
|
55
55
|
```ruby
|
56
|
-
def load_repo(name =
|
56
|
+
def load_repo(name = 'memo-it', time = Time.now, format = 'json')
|
57
57
|
memo(only: [:name, :format]) do
|
58
58
|
# in this case the result will be memoized per name & format
|
59
59
|
HTTPClient.get("https://github.com/phoet/#{name}?time=#{time}&format=#{format}")
|
@@ -100,6 +100,10 @@ If you don't want to include yet another Gem, just run this in your shell:
|
|
100
100
|
|
101
101
|
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/phoet/memo-it/master/bin/install)"
|
102
102
|
|
103
|
+
## Changelog
|
104
|
+
|
105
|
+
See [CHANGELOG.md](https://github.com/phoet/memo-it/blob/master/CHANGELOG.md).
|
106
|
+
|
103
107
|
## Development
|
104
108
|
|
105
109
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/Rakefile
CHANGED
@@ -1,10 +1,38 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
3
|
|
4
4
|
Rake::TestTask.new(:test) do |t|
|
5
|
-
t.libs <<
|
6
|
-
t.libs <<
|
5
|
+
t.libs << 'test'
|
6
|
+
t.libs << 'lib'
|
7
7
|
t.test_files = FileList['test/**/*_test.rb']
|
8
8
|
end
|
9
9
|
|
10
|
-
task :
|
10
|
+
task default: :test
|
11
|
+
|
12
|
+
task :benchmark do
|
13
|
+
require_relative 'lib/memo/it'
|
14
|
+
require 'benchmark/ips'
|
15
|
+
require 'memoist'
|
16
|
+
|
17
|
+
class Tester
|
18
|
+
extend Memoist
|
19
|
+
|
20
|
+
def memo_it
|
21
|
+
memo { false }
|
22
|
+
end
|
23
|
+
|
24
|
+
def memoist
|
25
|
+
false
|
26
|
+
end
|
27
|
+
|
28
|
+
memoize :memoist
|
29
|
+
end
|
30
|
+
|
31
|
+
tester = Tester.new
|
32
|
+
Benchmark.ips do |x|
|
33
|
+
x.warmup = 3
|
34
|
+
x.time = 10
|
35
|
+
x.report('memo-it') { tester.memo_it }
|
36
|
+
x.report('memoist') { tester.memoist }
|
37
|
+
end
|
38
|
+
end
|
data/lib/memo/it.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Memo
|
2
|
-
VERSION = '0.3.
|
2
|
+
VERSION = '0.3.1'
|
3
3
|
|
4
4
|
@enabled = true
|
5
5
|
|
@@ -27,8 +27,7 @@ module Memo
|
|
27
27
|
end
|
28
28
|
|
29
29
|
keys = block.source_location
|
30
|
-
keys << key_names.
|
31
|
-
keys = keys.flatten.map(&:to_s)
|
30
|
+
keys << key_names.flat_map { |name| [name, block.binding.local_variable_get(name)] }
|
32
31
|
|
33
32
|
@_memo_it ||= {}
|
34
33
|
return @_memo_it[keys] if Memo.enabled? && @_memo_it.key?(keys)
|
data/memo-it.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler", "
|
25
|
-
spec.add_development_dependency "rake", "
|
26
|
-
spec.add_development_dependency "minitest", "
|
24
|
+
spec.add_development_dependency "bundler", "> 1.0"
|
25
|
+
spec.add_development_dependency "rake", "> 10.0"
|
26
|
+
spec.add_development_dependency "minitest", "> 5.0"
|
27
27
|
end
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memo-it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- phoet
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.0'
|
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.
|
26
|
+
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '5.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
55
|
description: "\U0001F4E5 \U0001F4E4 simple yet clever memoization helper with parameter
|
@@ -62,6 +62,7 @@ extra_rdoc_files: []
|
|
62
62
|
files:
|
63
63
|
- ".gitignore"
|
64
64
|
- ".travis.yml"
|
65
|
+
- CHANGELOG.md
|
65
66
|
- CODE_OF_CONDUCT.md
|
66
67
|
- Gemfile
|
67
68
|
- LICENSE.txt
|