dispatch_queue 1.0.4
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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +70 -0
- data/Rakefile +11 -0
- data/dispatch_queue.gemspec +19 -0
- data/lib/dispatch_queue.rb +28 -0
- data/test/test_dispatch_queue.rb +16 -0
- metadata +53 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
DispatchQueue
|
2
|
+
=============
|
3
|
+
|
4
|
+
DispatchQueue is a simple way to serialize jobs.
|
5
|
+
It was done for crawling things, but could be used in any case that you need to do more than one work at a time.
|
6
|
+
|
7
|
+
With this line, we get more documentation that real code, so please see the code.
|
8
|
+
|
9
|
+
|
10
|
+
COMPATIBILITY
|
11
|
+
=============
|
12
|
+
|
13
|
+
It works with ruby 1.8 and ruby 1.9, and probably other rubies.
|
14
|
+
|
15
|
+
USAGE
|
16
|
+
=====
|
17
|
+
|
18
|
+
* The explicit way:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
my_work_queue = DispatchQueue.new(lambda{ sleep 3 ; 5}, lambda{ 10 })
|
22
|
+
my_work_queue.sort #=> [5, 10]
|
23
|
+
```
|
24
|
+
|
25
|
+
* The implicit way:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
DQ[ lambda{ sleep 5 ; 3} , Proc.new{ sleep 6; 2 } ].sort #=> [2,3]
|
29
|
+
```
|
30
|
+
|
31
|
+
|
32
|
+
REALCODE
|
33
|
+
=======
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
class DispatchQueue
|
37
|
+
include Enumerable
|
38
|
+
|
39
|
+
class << self
|
40
|
+
alias :[] :new
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(*array)
|
44
|
+
@procs = array
|
45
|
+
end
|
46
|
+
|
47
|
+
def <<(new_one)
|
48
|
+
@procs << new_one
|
49
|
+
end
|
50
|
+
|
51
|
+
def each
|
52
|
+
@procs.map do |proc|
|
53
|
+
Thread.new{ proc.call }
|
54
|
+
end.map do |thread|
|
55
|
+
yield thread.value
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
DQ = DispatchQueue
|
62
|
+
```
|
63
|
+
|
64
|
+
LICENSE
|
65
|
+
=======
|
66
|
+
|
67
|
+
"THE BEER-WARE LICENSE" (Revision 42):
|
68
|
+
<guillermo@cientifico.net> wrote this file. As long as you retain this notice you
|
69
|
+
can do whatever you want with this stuff. If we meet some day, and you think
|
70
|
+
this stuff is worth it, you can buy me a beer in return Guillermo Álvarez Fernández
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "dispatch_queue"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "dispatch_queue"
|
7
|
+
s.version = DispatchQueue::VERSION
|
8
|
+
s.authors = ["Guillermo Álvarez"]
|
9
|
+
s.email = ["guillermo@cientifico.net"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Simple way to work enqueue works}
|
12
|
+
s.description = %q{Little gem to enqueue jobs the easy way}
|
13
|
+
|
14
|
+
s.rubyforge_project = "dispatch_queue"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class DispatchQueue
|
2
|
+
VERSION = "1.0.4"
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
class << self
|
6
|
+
alias :[] :new
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(*array)
|
10
|
+
@procs = array
|
11
|
+
end
|
12
|
+
|
13
|
+
def <<(new_one)
|
14
|
+
@procs << new_one
|
15
|
+
end
|
16
|
+
|
17
|
+
def each
|
18
|
+
@procs.map do |proc|
|
19
|
+
Thread.new{ proc.call }
|
20
|
+
end.map do |thread|
|
21
|
+
yield thread.value
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
DQ = DispatchQueue
|
28
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'dispatch_queue'
|
3
|
+
|
4
|
+
class DispatchQueueTest < Test::Unit::TestCase
|
5
|
+
def test_DQ_is_equal_toDispatchQueue
|
6
|
+
assert_equal DQ, DispatchQueue
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_it_yield_results
|
10
|
+
assert_equal [3,4], DQ[lambda{ sleep 0.1; 4}, lambda{ 3}].sort
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_it_is_enumerable
|
14
|
+
assert DQ.included_modules.include?(Enumerable)
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dispatch_queue
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.4
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Guillermo Álvarez
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-08-08 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: Little gem to enqueue jobs the easy way
|
15
|
+
email:
|
16
|
+
- guillermo@cientifico.net
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- README.md
|
24
|
+
- Rakefile
|
25
|
+
- dispatch_queue.gemspec
|
26
|
+
- lib/dispatch_queue.rb
|
27
|
+
- test/test_dispatch_queue.rb
|
28
|
+
homepage: ''
|
29
|
+
licenses: []
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project: dispatch_queue
|
48
|
+
rubygems_version: 1.8.7
|
49
|
+
signing_key:
|
50
|
+
specification_version: 3
|
51
|
+
summary: Simple way to work enqueue works
|
52
|
+
test_files:
|
53
|
+
- test/test_dispatch_queue.rb
|