parallizer 0.0.3 → 0.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.
Files changed (6) hide show
  1. data/Gemfile +2 -2
  2. data/Gemfile.lock +2 -2
  3. data/README.md +121 -2
  4. data/VERSION +1 -1
  5. data/parallizer.gemspec +8 -8
  6. metadata +7 -7
data/Gemfile CHANGED
@@ -5,8 +5,8 @@ source "http://rubygems.org"
5
5
 
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
- gem "bundler", ">= 1.1.5"
9
- gem "jeweler", ">= 1.8.4"
8
+ gem "bundler"
9
+ gem "jeweler"
10
10
 
11
11
  gem "work_queue", ">= 0"
12
12
 
data/Gemfile.lock CHANGED
@@ -33,8 +33,8 @@ PLATFORMS
33
33
 
34
34
  DEPENDENCIES
35
35
  always_execute (= 0.0.2)
36
- bundler (>= 1.1.5)
37
- jeweler (>= 1.8.4)
36
+ bundler
37
+ jeweler
38
38
  minitest (= 2.12.1)
39
39
  minitest-extra-assertions (= 0.1.0)
40
40
  minitest-reporters (= 0.7.0)
data/README.md CHANGED
@@ -1,10 +1,129 @@
1
- # Parallizer - Execute your service layer in parallel.
1
+ # Parallizer - Execute your service layer in parallel
2
+
3
+ Parallizer executes service methods in parallel, stores the method results, then creates a proxy with those results for your service. Your application then uses the short-lived service proxy (think of a single request for a web application) and executes your methods without again calling the underlying implementation. For applications that make considerable use of web service calls, Parallizer can give you a considerable performance boost.
4
+
5
+ ## Installation
6
+
7
+ gem install parallizer
2
8
 
3
9
  ## Examples
4
10
 
11
+ ### Parallizing a service object
12
+
13
+ Here's an example service.
14
+
15
+ ```ruby
16
+ require 'net/http'
17
+
18
+ class SearchService
19
+ def search_result_for_foo
20
+ Net::HTTP.get('www.google.com', '/?q=foo')
21
+ end
22
+
23
+ def search_result_for_bar
24
+ Net::HTTP.get('www.google.com', '/?q=foo')
25
+ end
26
+ end
27
+
28
+ $search_service = SearchService.new
29
+ ```
30
+
31
+ Now create a Parallizer for that service and add all of the methods you intend to call. Then execute the service methods in parallel and return a service proxy that has the stored results of the method calls.
32
+
33
+ ```ruby
34
+ require 'parallizer'
35
+
36
+ parallizer = Parallizer.new($search_service)
37
+ parallizer.add.search_result_for_foo
38
+ parallizer.add.search_result_for_bar
39
+ search_service = parallizer.execute
40
+ ```
41
+
42
+ Now use that service proxy in your application logic.
43
+
44
+ ```ruby
45
+ puts search_service.search_result_for_foo
46
+ puts search_service.search_result_for_bar
47
+ ```
48
+
49
+ Additional calls in your application logic will not result in an additional call to the underlying service.
50
+
51
+ ```ruby
52
+ # Called twice, but no extra service call. (Be careful not to mutate the returned object!)
53
+ puts search_service.search_result_for_foo
54
+ puts search_service.search_result_for_foo
55
+ ```
56
+
57
+ If there are additional methods on your service that were not parallized, you can still call them.
58
+
59
+ ```ruby
60
+ puts search_service.search_result_for_foobar # does a Net::HTTP.get call
61
+ ```
62
+
63
+ ### Parallizing methods with parameters
64
+
65
+ Parallizing also works on service methods with parameters.
66
+
67
+ ```ruby
68
+ require 'net/http'
69
+ require 'cgi'
70
+
71
+ class SearchService
72
+ def search_result(search_term)
73
+ Net::HTTP.get('www.google.com', "/?q=#{CGI.escape(search_term)}")
74
+ end
75
+ end
76
+
77
+ $search_service = SearchService.new
78
+ ```
79
+
80
+ The parallel execution and proxy creation.
81
+
82
+ ```ruby
83
+ require 'parallizer'
84
+
85
+ parallizer = Parallizer.new($search_service)
86
+ parallizer.add.search_result('foo')
87
+ parallizer.add.search_result('bar')
88
+ search_service = parallizer.execute
89
+ ```
90
+
91
+ Using the service proxy in your application logic.
92
+
93
+ ```ruby
94
+ puts search_service.search_result('foo') # returns stored value
95
+ puts search_service.search_result('bar') # returns stored value
96
+ puts search_service.search_result('foobar') # does a Net::HTTP.get call
97
+ ```
98
+
99
+
100
+ ### Parallizing class methods
101
+
102
+ You can even parallize class methods.
103
+
104
+ ```ruby
105
+ require 'net/http'
106
+ require 'parallizer'
107
+
108
+ parallizer = Parallizer.new(Net::HTTP)
109
+ parallizer.add.get('www.google.com', '/?q=foo')
110
+ parallizer.add.get('www.google.com', '/?q=bar')
111
+ http_service = parallizer.execute
112
+ ```
113
+
114
+ Use the service proxy.
115
+
116
+ ```ruby
117
+ # use your service proxy
118
+ http_service.get('www.google.com', '/?q=foo') # returns stored value
119
+ http_service.get('www.google.com', '/?q=bar') # returns stored value
120
+ http_service.get('www.google.com', '/?q=foobar') # does a Net::HTTP.get call
121
+ ```
122
+
123
+
5
124
  # Credits
6
125
 
7
- Always Execute is maintained by [Michael Pearce](http://github.com/michaelgpearce) and is funded by [BookRenter.com](http://www.bookrenter.com "BookRenter.com").
126
+ [Parallizer](https://github.com/michaelgpearce/parallizer) is maintained by [Michael Pearce](http://github.com/michaelgpearce) and is funded by [BookRenter.com](http://www.bookrenter.com "BookRenter.com").
8
127
 
9
128
  ![BookRenter.com Logo](http://assets0.bookrenter.com/images/header/bookrenter_logo.gif "BookRenter.com")
10
129
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/parallizer.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "parallizer"
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Pearce"]
12
- s.date = "2012-07-29"
12
+ s.date = "2012-07-30"
13
13
  s.description = "Execute your service layer in parallel."
14
14
  s.email = "michael.pearce@bookrenter.com"
15
15
  s.extra_rdoc_files = [
@@ -42,21 +42,21 @@ Gem::Specification.new do |s|
42
42
  s.specification_version = 3
43
43
 
44
44
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
- s.add_runtime_dependency(%q<bundler>, [">= 1.1.5"])
46
- s.add_runtime_dependency(%q<jeweler>, [">= 1.8.4"])
45
+ s.add_runtime_dependency(%q<bundler>, [">= 0"])
46
+ s.add_runtime_dependency(%q<jeweler>, [">= 0"])
47
47
  s.add_runtime_dependency(%q<work_queue>, [">= 0"])
48
48
  s.add_runtime_dependency(%q<work_queue>, [">= 0"])
49
49
  s.add_development_dependency(%q<shoulda>, [">= 0"])
50
50
  else
51
- s.add_dependency(%q<bundler>, [">= 1.1.5"])
52
- s.add_dependency(%q<jeweler>, [">= 1.8.4"])
51
+ s.add_dependency(%q<bundler>, [">= 0"])
52
+ s.add_dependency(%q<jeweler>, [">= 0"])
53
53
  s.add_dependency(%q<work_queue>, [">= 0"])
54
54
  s.add_dependency(%q<work_queue>, [">= 0"])
55
55
  s.add_dependency(%q<shoulda>, [">= 0"])
56
56
  end
57
57
  else
58
- s.add_dependency(%q<bundler>, [">= 1.1.5"])
59
- s.add_dependency(%q<jeweler>, [">= 1.8.4"])
58
+ s.add_dependency(%q<bundler>, [">= 0"])
59
+ s.add_dependency(%q<jeweler>, [">= 0"])
60
60
  s.add_dependency(%q<work_queue>, [">= 0"])
61
61
  s.add_dependency(%q<work_queue>, [">= 0"])
62
62
  s.add_dependency(%q<shoulda>, [">= 0"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-29 00:00:00.000000000 Z
12
+ date: 2012-07-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.1.5
21
+ version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 1.1.5
29
+ version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: jeweler
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: 1.8.4
37
+ version: '0'
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: 1.8.4
45
+ version: '0'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: work_queue
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
128
128
  version: '0'
129
129
  segments:
130
130
  - 0
131
- hash: -990104623543114705
131
+ hash: -1557478882810554134
132
132
  required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  none: false
134
134
  requirements: