proc-throttle 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/proc/throttle.rb CHANGED
@@ -1,16 +1,29 @@
1
1
  class Proc
2
- def throttle(sec)
2
+ def throttle(delay_sec, debounce = false)
3
3
  thread = nil
4
+ last_exec = nil
4
5
 
5
6
  Proc.new do |*args|
7
+ now = Time.now.to_f
8
+
6
9
  if thread && thread.alive?
7
10
  thread.kill
8
11
  end
9
12
 
10
- thread = Thread.new do
11
- sleep(sec)
13
+ if !debounce && (last_exec.nil? || (last_exec + delay_sec < now))
12
14
  self.call(*args)
15
+ last_exec = now
16
+ else
17
+ thread = Thread.new do
18
+ sleep(delay_sec)
19
+ self.call(*args)
20
+ last_exec = Time.now.to_f
21
+ end
13
22
  end
14
23
  end
15
24
  end
25
+
26
+ def debounce(delay_sec)
27
+ throttle(delay_sec, true)
28
+ end
16
29
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
12
12
  gem.name = "proc-throttle"
13
13
  gem.require_paths = ["lib"]
14
- gem.version = '0.0.2'
14
+ gem.version = '0.1.0'
15
15
 
16
16
  gem.add_development_dependency('rake')
17
17
  end
@@ -11,6 +11,39 @@ describe Proc do
11
11
 
12
12
  throttled_proc = proc.throttle(1)
13
13
 
14
+ throttled_proc.call
15
+
16
+ count.should eql(1)
17
+
18
+ sleep 1.1
19
+
20
+ 10.times do
21
+ throttled_proc.call
22
+ sleep 0.2
23
+ end
24
+
25
+ sleep 1.1
26
+
27
+ count.should eql(4)
28
+
29
+ sleep 1.1
30
+
31
+ throttled_proc.call(10)
32
+
33
+ count.should eql(14)
34
+ end
35
+ end
36
+
37
+ describe '#debounce' do
38
+ it 'should debounce proc call' do
39
+ count = 0
40
+
41
+ proc = Proc.new do |increment|
42
+ count += increment || 1
43
+ end
44
+
45
+ throttled_proc = proc.debounce(1)
46
+
14
47
  10.times do
15
48
  throttled_proc.call
16
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proc-throttle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-05-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70237639238540 !ruby/object:Gem::Requirement
16
+ requirement: &70357420018840 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70237639238540
24
+ version_requirements: *70357420018840
25
25
  description: ! 'Proc#throttle: throttling calls'
26
26
  email:
27
27
  - youpy@buycheapviagraonlinenow.com
@@ -53,7 +53,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
53
  version: '0'
54
54
  segments:
55
55
  - 0
56
- hash: -1302762173298871425
56
+ hash: 740962742363662978
57
57
  required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  none: false
59
59
  requirements:
@@ -62,7 +62,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
62
  version: '0'
63
63
  segments:
64
64
  - 0
65
- hash: -1302762173298871425
65
+ hash: 740962742363662978
66
66
  requirements: []
67
67
  rubyforge_project:
68
68
  rubygems_version: 1.8.10