em_aws 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- em_aws (0.1.4)
4
+ em_aws (0.1.5)
5
5
  aws-sdk
6
6
  em-http-request
7
7
  em-synchrony
@@ -10,7 +10,7 @@ GEM
10
10
  remote: http://rubygems.org/
11
11
  specs:
12
12
  addressable (2.2.8)
13
- aws-sdk (1.5.2)
13
+ aws-sdk (1.5.4)
14
14
  httparty (~> 0.7)
15
15
  json (~> 1.4)
16
16
  nokogiri (>= 1.4.4)
@@ -39,8 +39,8 @@ GEM
39
39
  json (1.7.3-java)
40
40
  multi_json (1.3.6)
41
41
  multi_xml (0.5.1)
42
- nokogiri (1.5.3)
43
- nokogiri (1.5.3-java)
42
+ nokogiri (1.5.4)
43
+ nokogiri (1.5.4-java)
44
44
  rspec (2.10.0)
45
45
  rspec-core (~> 2.10.0)
46
46
  rspec-expectations (~> 2.10.0)
data/README.md CHANGED
@@ -1,8 +1,5 @@
1
- # em_aws
2
- An EM-Synchrony handler for Ruby [AWS-SDK](https://github.com/JoshMcKin/aws-sdk-for-ruby)
3
-
4
- This code has be submitted to AWS-SKD see: [pull request](https://github.com/amazonwebservices/aws-sdk-for-ruby/pull/14).
5
- Until approval (or if it is declined) I created this gem.
1
+ # EmAws
2
+ An EM-Synchrony handler for Ruby [AWS-SDK](https://github.com/amazonwebservices/aws-sdk-for-ruby/)
6
3
 
7
4
  ## Installation
8
5
 
@@ -25,6 +22,7 @@ In your environments files add:
25
22
 
26
23
  require 'aws-sdk'
27
24
  require 'aws/core/http/em_http_handler'
25
+ AWS.eager_autoload! # AWS lazyloading is not threadsafe
28
26
  AWS.config(
29
27
  :http_handler => AWS::Http::EMHttpHandler.new(
30
28
  :proxy => {:host => "http://myproxy.com", :port => 80}
data/lib/em_aws.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'em_aws/patches'
1
2
  require 'aws-sdk'
2
3
  require 'em_aws/version'
3
4
  require 'em-http'
@@ -6,22 +7,4 @@ require 'em-synchrony/em-http'
6
7
  require 'aws/core/autoloader'
7
8
 
8
9
  AWS.eager_autoload! # lazy load isn't thread safe
9
- module AWS
10
- module Core
11
- module Http
12
- AWS.register_autoloads(self) do
13
- autoload :EMHttpHandler, 'em_http_handler'
14
- end
15
- end
16
- end
17
-
18
- # the http party handler should still be accessible from its old namespace
19
- module Http
20
- AWS.register_autoloads(self, 'aws/core/http') do
21
- autoload :HTTPartyHandler, 'httparty_handler'
22
- end
23
- end
24
- end
25
-
26
- # Load monkey patch after loading aws
27
- require 'em_aws/core/session_signer'
10
+ module EmAws;end
@@ -0,0 +1,22 @@
1
+ require 'em-synchrony'
2
+ require 'em-synchrony/thread'
3
+ module AWS
4
+ # Use EM::Synchrony.sleep for all Kernel.sleep in AWS
5
+ DupKernel = Kernel
6
+
7
+ class PatchKernel
8
+ class << self
9
+ def sleep(count)
10
+ EM::Synchrony.sleep(count)
11
+ end
12
+ def method_missing(method,*args,&block)
13
+ DupKernel.send(method, *args, &block)
14
+ end
15
+ end
16
+ end
17
+
18
+ Kernel = PatchKernel
19
+
20
+ # Use a fiber safe mutex for Mutex in AWS
21
+ Mutex = EM::Synchrony::Thread::Mutex
22
+ end
@@ -1,3 +1,3 @@
1
1
  module EmAws
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -12,7 +12,6 @@
12
12
  # language governing permissions and limitations under the License.
13
13
 
14
14
  require 'spec_helper'
15
-
16
15
  module AWS::Core
17
16
  module Http
18
17
  describe EMHttpHandler do
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+ require 'aws'
3
+ describe AWS::Mutex do
4
+ it "should be a fiber safe mutex" do
5
+ AWS::Mutex.new.should be_kind_of(EM::Synchrony::Thread::Mutex)
6
+ end
7
+
8
+ it "should be a fiber mutex when called within AWS module" do
9
+ AWS.module_eval <<-STR
10
+ def self.mutex_new
11
+ Mutex.new
12
+ end
13
+ STR
14
+
15
+ AWS.mutex_new.should be_kind_of(EM::Synchrony::Thread::Mutex)
16
+ end
17
+
18
+ it "should not affect Mutex outside AWS" do
19
+ Mutex.new.should be_kind_of(Mutex)
20
+ end
21
+ end
22
+
23
+ describe AWS::Kernel,'#sleep' do
24
+ it "should be a fiber safe sleep from with AWS module" do
25
+ EM::Synchrony.stub(:sleep).and_return("fiber safe")
26
+ AWS::Kernel.sleep(1).should eql("fiber safe")
27
+ end
28
+
29
+ it "should not affect normal Kernel.sleep " do
30
+ EM::Synchrony.stub(:sleep).and_return("fiber safe")
31
+ Kernel.sleep(1).should eql(1)
32
+ end
33
+
34
+ it "should be a fiber mutex when called within AWS module" do
35
+ AWS.module_eval <<-STR
36
+ def self.sleep(time)
37
+ Kernel.sleep(time)
38
+ end
39
+ STR
40
+ EM::Synchrony.stub(:sleep).and_return("fiber safe")
41
+ AWS.sleep(0.01).should eql("fiber safe")
42
+ end
43
+
44
+ it "should not interfer with other Kernel methods" do
45
+ lambda {AWS::Kernel.rand}.should_not raise_error
46
+ end
47
+ end
48
+
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  #$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  #$LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'em_aws'
4
+ require 'aws/core/http/em_http_handler'
4
5
  require 'rspec'
5
6
  require 'bundler/setup'
6
7
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em_aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-08 00:00:00.000000000Z
12
+ date: 2012-06-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
16
- requirement: &70341995956080 !ruby/object:Gem::Requirement
16
+ requirement: &70322481988020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70341995956080
24
+ version_requirements: *70322481988020
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: em-synchrony
27
- requirement: &70341995955620 !ruby/object:Gem::Requirement
27
+ requirement: &70322481987600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70341995955620
35
+ version_requirements: *70322481987600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: em-http-request
38
- requirement: &70341995955200 !ruby/object:Gem::Requirement
38
+ requirement: &70322481987160 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70341995955200
46
+ version_requirements: *70322481987160
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70341995954780 !ruby/object:Gem::Requirement
49
+ requirement: &70322481986740 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70341995954780
57
+ version_requirements: *70322481986740
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: builder
60
- requirement: &70341995954240 !ruby/object:Gem::Requirement
60
+ requirement: &70322481986320 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70341995954240
68
+ version_requirements: *70322481986320
69
69
  description: Adds EM-Synchrony support to AWS-SDK gem
70
70
  email:
71
71
  - joshmckin@gmail.com
@@ -83,10 +83,10 @@ files:
83
83
  - em_aws.gemspec
84
84
  - lib/aws/core/http/em_http_handler.rb
85
85
  - lib/em_aws.rb
86
- - lib/em_aws/core/session_signer.rb
86
+ - lib/em_aws/patches.rb
87
87
  - lib/em_aws/version.rb
88
88
  - spec/em_http_handler_spec.rb
89
- - spec/session_signer_spec.rb
89
+ - spec/patches_spec.rb
90
90
  - spec/spec_helper.rb
91
91
  homepage: ''
92
92
  licenses: []
@@ -114,5 +114,5 @@ specification_version: 3
114
114
  summary: Adds EM-Synchrony support to AWS-SDK gem
115
115
  test_files:
116
116
  - spec/em_http_handler_spec.rb
117
- - spec/session_signer_spec.rb
117
+ - spec/patches_spec.rb
118
118
  - spec/spec_helper.rb
@@ -1,14 +0,0 @@
1
- require 'em-synchrony/thread'
2
- module AWS
3
- module Core
4
- class SessionSigner
5
- @create_mutex = EM::Synchrony::Thread::Mutex.new
6
-
7
- # Monkey patch to use EM::Synchrony::Thread::Mutex instead of ::Mutex
8
- def initialize config
9
- @config = config
10
- @session_mutex = EM::Synchrony::Thread::Mutex.new
11
- end
12
- end
13
- end
14
- end
@@ -1,17 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe AWS::Core::SessionSigner do
4
- context '@create_mutex' do
5
- it "should be a fiber safe mutex" do
6
- AWS::Core::SessionSigner.instance_variable_get(:@create_mutex).should be_kind_of(EM::Synchrony::Thread::Mutex)
7
- end
8
- end
9
-
10
- context '@session_mutex' do
11
- let(:config) { double("config").as_null_object }
12
- it "should be a fiber safe mutex" do
13
- session_signer = AWS::Core::SessionSigner.new(config)
14
- session_signer.instance_variable_get(:@session_mutex).should be_kind_of(EM::Synchrony::Thread::Mutex)
15
- end
16
- end
17
- end