dispatch_queue 1.0.5 → 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.
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ rvm:
2
+ - 1.8.7 # (current default)
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - rbx-2.0
6
+ - jruby
7
+ - ruby-head
8
+ - ree
9
+
data/README.md CHANGED
@@ -4,60 +4,59 @@ DispatchQueue
4
4
  DispatchQueue is a simple way to serialize jobs.
5
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
6
 
7
- With this line, we get more documentation that real code, so please see the code.
8
-
9
- [![Build Status](https://secure.travis-ci.org/guillermo/dispatch_queue.png)](http://travis-ci.org/guillermo/dispatch_queue)
10
7
 
11
8
 
12
9
  COMPATIBILITY
13
10
  =============
14
11
 
15
- It works with ruby 1.8 and ruby 1.9, and probably other rubies.
12
+ Check build status to see support in different platforms
13
+
14
+ [![Build Status](https://secure.travis-ci.org/guillermo/dispatch_queue.png)](http://travis-ci.org/guillermo/dispatch_queue)
16
15
 
17
16
  USAGE
18
17
  =====
19
18
 
20
- * The explicit way:
19
+ * The threaded_way:
21
20
 
22
21
  ```ruby
23
- my_work_queue = DispatchQueue.new(lambda{ sleep 3 ; 5}, lambda{ 10 })
24
- my_work_queue.sort #=> [5, 10]
22
+
23
+ [1,2,3].threaded_each{|i|
24
+ sleep 4-i
25
+ puts i
26
+ }
27
+
25
28
  ```
26
29
 
27
- * The implicit way:
30
+ 3
31
+ 2
32
+ 1
28
33
 
29
34
  ```ruby
30
- DQ[ lambda{ sleep 5 ; 3} , Proc.new{ sleep 6; 2 } ].sort #=> [2,3]
35
+ [1,2,3].threaded_map{|i| sleep 4-i ; i } #=> [3,2,1]
31
36
  ```
32
37
 
33
-
34
- REALCODE
35
- =======
38
+ * The explicit way:
36
39
 
37
40
  ```ruby
41
+ my_work_queue = DispatchQueue.new(lambda{ sleep 3 ; 5}, lambda{ 10 })
42
+ my_work_queue.sort #=> [5, 10]
43
+ ```
38
44
 
39
- class DispatchQueue
40
- VERSION = "1.0.5"
41
-
42
- def self.[](*procs)
43
- procs.map { |proc|
44
- Thread.new{ proc.to_proc.call }
45
- }.map { |thread|
46
- thread.value
47
- }
48
- end
49
- end
45
+ * The implicit way:
50
46
 
47
+ ```ruby
48
+ DQ[ lambda{ sleep 5 ; 3} , Proc.new{ sleep 6; 2 } ].sort #=> [2,3]
49
+ ```
51
50
 
52
- DQ = DispatchQueue
53
51
 
54
- ```
55
52
 
56
53
  CHANGELOG
57
54
  =========
58
55
 
56
+ * 1.1.0 Create [].threaded_each [].threaded_map (2011/09/22)
59
57
  * 1.0.5 Reduce implementation
60
58
 
59
+
61
60
  LICENSE
62
61
  =======
63
62
 
@@ -1,5 +1,5 @@
1
1
  class DispatchQueue
2
- VERSION = "1.0.5"
2
+ VERSION = "1.1.0"
3
3
 
4
4
  def self.[](*procs)
5
5
  procs.map { |proc|
@@ -10,6 +10,40 @@ class DispatchQueue
10
10
  end
11
11
  end
12
12
 
13
+ module ArrayThreadedEnumerable
14
+ def threaded_each
15
+ threads = []
16
+ each { |value|
17
+ threads << Thread.new {
18
+ yield value
19
+ }
20
+ }
21
+ threads.each{|t| t.join}
22
+ end
23
+
24
+ def threaded_map
25
+ values = []
26
+ threaded_each { |value|
27
+ value = yield value
28
+ Thread.exclusive { values << value }
29
+ }
30
+ values
31
+ end
32
+ end
33
+
34
+ Array.send(:include, ArrayThreadedEnumerable)
13
35
 
14
36
  DQ = DispatchQueue
15
37
 
38
+ if RUBY_VERSION < "1.8.9999"
39
+ class Thread
40
+ def self.exclusive
41
+ old_value = Thread.critical
42
+ Thread.critical = true
43
+ yield
44
+ ensure
45
+ Thread.critical = old_value
46
+ end
47
+ end
48
+ end
49
+
@@ -10,4 +10,19 @@ class DispatchQueueTest < Test::Unit::TestCase
10
10
  assert_equal [3,4], DQ[lambda{ sleep 0.1; 4}, lambda{ 3}].sort
11
11
  end
12
12
 
13
+ def test_threaded_each
14
+ results = []
15
+
16
+ [1,2,3].threaded_each { |value|
17
+ value *= 2
18
+ Thread.exclusive{ results << value }
19
+ }
20
+
21
+ assert_equal [2,4,6], results.sort
22
+ end
23
+
24
+ def test_threaded_map
25
+ assert_equal [2,4,6], [1,2,3].threaded_map{|a| a*2}.sort
26
+ end
27
+
13
28
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dispatch_queue
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 5
10
- version: 1.0.5
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Guillermo A\xCC\x81lvarez"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-08 00:00:00 Z
18
+ date: 2011-09-21 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rake
@@ -42,6 +42,7 @@ extra_rdoc_files: []
42
42
 
43
43
  files:
44
44
  - .gitignore
45
+ - .travis.yml
45
46
  - Gemfile
46
47
  - README.md
47
48
  - Rakefile