ruby_is 1.0.3 → 1.1.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 +4 -4
- data/README.md +12 -4
- data/lib/ruby_is.rb +30 -6
- data/lib/ruby_is/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56e105dad9b79f372cbc6c6a624fde035dd14cc5
|
4
|
+
data.tar.gz: b14e2fd26971eb013a57cf1c8acf8a79cb5dfaa6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40b4b8a6ca123fd785282097b02be7d63df11fc7d0dd75f464c42c377f6c1be135419e539d56954ba231ee0be34e2a3a65da1f383d0659c2ace61986130d1672
|
7
|
+
data.tar.gz: 17e22d15f5be99f8bf205302a60b443763f32ae09e2d222f1e1a63c6a013503be0ceb7090e7120bbd12438a93b2392e3bb3a76037538caa51a45aaaf3db3baf4
|
data/README.md
CHANGED
@@ -15,10 +15,18 @@ Define small functions easier!
|
|
15
15
|
inc is ->(a){ puts "calculating #{a}"; a+1 }
|
16
16
|
inc 42 #=> "calculating 42"; 43
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
inc_m is always {|a| inc a }
|
19
|
+
# inc_m is memoized {|a| inc a } # this also works
|
20
|
+
inc_m 42 #=> "calculating 42"; 43
|
21
|
+
inc_m 42 #=> 43
|
22
|
+
inc_m 10 #=> "calculating 10"; 11
|
23
|
+
|
24
|
+
inc_m is cached(1) {|a| inc a }
|
25
|
+
# inc_m is cached(1.second) {|a| inc a } # if active_support/time have been enabled
|
26
|
+
inc_m 42 #=> "calculating 42"; 43
|
27
|
+
inc_m 42 #=> 43
|
28
|
+
sleep 2
|
29
|
+
inc_m 42 #=> "calculating 42"; 43
|
22
30
|
|
23
31
|
## Installation
|
24
32
|
|
data/lib/ruby_is.rb
CHANGED
@@ -15,14 +15,34 @@ module RubyIs
|
|
15
15
|
|
16
16
|
def cache; @@cache ||= {}; end
|
17
17
|
|
18
|
-
def
|
18
|
+
def eval_memoized(f, args, proc)
|
19
|
+
cache = RubyIs.cache
|
20
|
+
cache_key = [f, args, proc]
|
21
|
+
if cache.has_key?(cache_key)
|
22
|
+
cache[cache_key]
|
23
|
+
else
|
24
|
+
cache[cache_key] = f.call(*args, &proc)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def eval_time_cached(f, caching_time, args, proc)
|
29
|
+
cache = RubyIs.cache
|
30
|
+
cache_key = [f, args, proc]
|
31
|
+
if cache.has_key?(cache_key)
|
32
|
+
last_call_time, value = cache[cache_key]
|
33
|
+
return value if (Time.now - last_call_time) < caching_time
|
34
|
+
end
|
35
|
+
value = f.call(*args, &proc)
|
36
|
+
cache[cache_key] = [Time.now, value]
|
37
|
+
value
|
38
|
+
end
|
39
|
+
|
40
|
+
def with_memo(f, caching_time=nil)
|
19
41
|
->(*args, &proc){
|
20
|
-
|
21
|
-
|
22
|
-
if cache.has_key?(cache_key)
|
23
|
-
cache[cache_key]
|
42
|
+
if caching_time
|
43
|
+
RubyIs.eval_time_cached(f, caching_time, args, proc)
|
24
44
|
else
|
25
|
-
|
45
|
+
RubyIs.eval_memoized(f, args, proc)
|
26
46
|
end
|
27
47
|
}
|
28
48
|
end
|
@@ -52,5 +72,9 @@ module ::Kernel
|
|
52
72
|
RubyIs.with_memo RubyIs.proc_or_block(args, block)
|
53
73
|
}
|
54
74
|
|
75
|
+
cached is ->(caching_time, *args, &block){
|
76
|
+
RubyIs.with_memo RubyIs.proc_or_block(args, block), caching_time
|
77
|
+
}
|
78
|
+
|
55
79
|
alias always memoized
|
56
80
|
end
|
data/lib/ruby_is/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_is
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ales Huzik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -73,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
73
|
version: '0'
|
74
74
|
requirements: []
|
75
75
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
76
|
+
rubygems_version: 2.6.8
|
77
77
|
signing_key:
|
78
78
|
specification_version: 4
|
79
79
|
summary: inc is {|a| a+1}
|