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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1321e67e6f8f954495fab93b01f2fa7356f7ccfb
4
- data.tar.gz: fd017f2f5a7bef2457b76a556c9a4c41025270c8
3
+ metadata.gz: 56e105dad9b79f372cbc6c6a624fde035dd14cc5
4
+ data.tar.gz: b14e2fd26971eb013a57cf1c8acf8a79cb5dfaa6
5
5
  SHA512:
6
- metadata.gz: ef58d2f378e06efdaf60c58f9e1d9727ac1d9032c1ae79d00bc603537fabd127c82f354e9a84d391e391d6b6a6f060b1d70a68075659853fbab00ef631541505
7
- data.tar.gz: c2b4f5fb0a8dd62b3cf8592abeb94819b36aba6e90809f85f226022d453d27b045c53ca93d5a6bb7ede551d37818dd3ce46b49a84d05302bef8caed15a23a4d6
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
- inc_cached is always {|a| inc a }
19
- inc_cached 42 #=> "calculating 42"; 43
20
- inc_cached 42 #=> 43
21
- inc_cached 10 #=> "calculating 10"; 11
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 with_memo(f)
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
- cache = RubyIs.cache
21
- cache_key = [f, args, proc]
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
- cache[cache_key] = f.call(*args, &proc)
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
@@ -1,3 +1,3 @@
1
1
  module RubyIs
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.0"
3
3
  end
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.3
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-02-13 00:00:00.000000000 Z
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.5.2
76
+ rubygems_version: 2.6.8
77
77
  signing_key:
78
78
  specification_version: 4
79
79
  summary: inc is {|a| a+1}