emmy-extends 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b715412f362627d471570cb954c2a0cbc67c915
4
- data.tar.gz: c2cddcc8d334cb02a444651acbe73879b15d978f
3
+ metadata.gz: 4a0e3a4faca05d0d6a5c8538652143080296e81c
4
+ data.tar.gz: e1d0b56934235795d602acdc37f0fa46b8025d4b
5
5
  SHA512:
6
- metadata.gz: 9dbb89b9ed86d5480f24462e76312707e66eca20682697c6c233b39e6317553af847c4ed5da7cd74787d83aa63b4871799e9875cc81bcf3fb6cf65199231eea1
7
- data.tar.gz: 7b605d851a17de3ba6494c31b93b3f65df5d5a366a7c6f188a64bf7f22462aab263fdf80bacefa1f21395b7e4b076c6c61b141a4fa7917ea8792f67a655f2d0a
6
+ metadata.gz: b9fca19b26b97bde2a10297b5c29861ce43c2bb04b4a5b37e036e44bd5bb866a4e2bb5d455337ffd540c96837c45ec571439eb12a83a6e936345a86d5138615d
7
+ data.tar.gz: 046dc4b7d3bfbca15de50b826125bc94553ff558c8f59f12e644bfdd2cf105befa10d0e9122de62c596374edc1896a89e1c2183194a8f77f4fabcca988ec20aa
data/Gemfile CHANGED
@@ -3,4 +3,6 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in emmy-extends.gemspec
4
4
  gemspec
5
5
 
6
+ gem 'httpi'
6
7
  gem 'savon', github: 'chelovekov/savon', branch: 'version2'
8
+ gem 'mysql2'
data/emmy-extends.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "eventmachine", "~> 1.0.3"
22
22
  spec.add_dependency "em-http-request", "~> 1.1.2"
23
- spec.add_dependency "emmy-machine", "~> 0.1.3"
23
+ spec.add_dependency "emmy-machine", "~> 0.1.6"
24
24
  spec.add_dependency "emmy-http", "~> 0.1.1"
25
25
 
26
26
  spec.add_development_dependency "rspec", "~> 3"
@@ -71,7 +71,8 @@ module EmmyExtends
71
71
 
72
72
  def setup_http_client
73
73
  @http_client = begin
74
- EventMachine::HttpClient.new(@http_request, HttpClientOptions.new(delegate.request.url, request_options, delegate.request.method)).tap do |client|
74
+ method = delegate.request.method.to_s.upcase
75
+ EventMachine::HttpClient.new(@http_request, HttpClientOptions.new(delegate.request.url, request_options, method)).tap do |client|
75
76
  client.stream do |chunk|
76
77
  @body << chunk
77
78
  end
@@ -8,22 +8,13 @@ module EmmyExtends
8
8
 
9
9
  def initialize(request)
10
10
  @request = request
11
- @emmy_request = EmmyHttp::Request.new(
12
- url: build_request_url(@request.url),
13
- method: 'POST',
14
- timeouts: { connect: @request.open_timeout, inactivity: @request.read_timeout },
15
- headers: @request.headers.to_hash,
16
- body: @request.body
17
- )
18
- @emmy_operation = EmmyHttp::Operation.new(@emmy_request, EmmyExtends::EmHttpRequest::Adapter.new)
19
- @operation = HTTPI::Operation.new(@emmy_operation)
20
11
  end
21
12
 
22
13
  def setup_http_auth
23
14
  unless @request.auth.type == :basic
24
15
  raise NotSupportedError, "EM-HTTP-Request does only support HTTP basic auth"
25
16
  end
26
- @emmy_request.headers[:authorization] = @request.auth.credentials
17
+ @http_request.headers[:authorization] = @request.auth.credentials
27
18
  end
28
19
 
29
20
  def proxy_options
@@ -35,15 +26,24 @@ module EmmyExtends
35
26
  end
36
27
 
37
28
  def request(method)
38
- # FIXME: proxy support # proxy_options if @request.proxy
39
- #setup_proxy(options) if @request.proxy
40
- setup_http_auth if @request.auth.http?
41
-
42
29
  if @request.on_body
43
30
  raise NotSupportedError, "EM-HTTP-Request does not support response streaming"
44
31
  end
45
32
 
46
- @emmy_request.method = method
33
+ @http_request = EmmyHttp::Request.new(
34
+ url: build_request_url(@request.url),
35
+ method: method,
36
+ timeouts: { connect: @request.open_timeout, inactivity: @request.read_timeout },
37
+ headers: @request.headers.to_hash,
38
+ body: @request.body
39
+ )
40
+
41
+ # FIXME: proxy support # proxy_options if @request.proxy
42
+ #setup_proxy(options) if @request.proxy
43
+ setup_http_auth if @request.auth.http?
44
+
45
+ @http_operation = EmmyHttp::Operation.new(@http_request, EmmyExtends::EmHttpRequest::Adapter.new)
46
+ @operation = HTTPI::Operation.new(@http_operation)
47
47
  @operation
48
48
  end
49
49
 
@@ -0,0 +1,21 @@
1
+ module EmmyExtends
2
+ class Mysql2::Client < ::Mysql2::Client
3
+ using EventObject
4
+
5
+ def query(sql, opts={})
6
+ if ::EM.reactor_running?
7
+ super(sql, opts.merge(:async => true))
8
+ Mysql2::Operation.new(self)
9
+ else
10
+ super(sql, opts)
11
+ end
12
+ end
13
+
14
+ def close(*args)
15
+ @watch.detach if @watch
16
+ super(*args)
17
+ end
18
+
19
+ #<<<
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ module EmmyExtends
2
+ class Mysql2::Operation
3
+ using EventObject
4
+ events :success, :error
5
+
6
+ attr_accessor :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ def watch
13
+ @watch ||= EmmyMachine.watch(*self)
14
+ end
15
+
16
+ def sync
17
+ Fiber.sync do |fiber|
18
+ watch
19
+
20
+ on :success do |response, operation, conn|
21
+ fiber.resume response
22
+ end
23
+
24
+ on :error do |error, operation, conn|
25
+ fiber.leave error
26
+ end
27
+ end
28
+ end
29
+
30
+ def to_a
31
+ [client.socket, Mysql2::Watcher, @client, self, {notify_readable: true, notify_writable: false}]
32
+ end
33
+
34
+ #<<<
35
+ end
36
+ end
@@ -0,0 +1,24 @@
1
+ module EmmyExtends
2
+ module Mysql2::Watcher
3
+
4
+ attr_accessor :client, :operation
5
+
6
+ def initialize(client, operation)
7
+ @client = client
8
+ @operation = operation
9
+ end
10
+
11
+ def notify_readable
12
+ detach
13
+ begin
14
+ result = @client.async_result
15
+ rescue Exception => e
16
+ @operation.error!(e.to_s, @operation, self)
17
+ else
18
+ @operation.success!(result, @operation, self)
19
+ end
20
+ end
21
+
22
+ #<<<
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module EmmyExtends
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/emmy_extends.rb CHANGED
@@ -13,6 +13,12 @@ module EmmyExtends
13
13
  autoload :Operation, "emmy_extends/httpi/operation"
14
14
  end
15
15
 
16
+ module Mysql2
17
+ autoload :Operation, "emmy_extends/mysql2/operation"
18
+ autoload :Client, "emmy_extends/mysql2/client"
19
+ autoload :Watcher, "emmy_extends/mysql2/watcher"
20
+ end
21
+
16
22
  module Savon
17
23
  autoload :ClassMethods, "emmy_extends/savon/class_methods"
18
24
  autoload :Response, "emmy_extends/savon/response"
@@ -3,26 +3,20 @@ require "spec_helper"
3
3
  describe EmmyExtends::EmHttpRequest do
4
4
 
5
5
  around do |example|
6
- EventMachine.run do
7
- EmmyMachine.fiber_block &example
8
- end
6
+ EmmyMachine.run_block &example
9
7
  end
10
8
 
11
9
  it "should send request to github.com home page" do
12
- begin
13
- request = EmmyHttp::Request.new(
14
- method: 'get',
15
- url: 'http://github.com'
16
- )
17
- operation = EmmyHttp::Operation.new(request, EmmyExtends::EmHttpRequest::Adapter.new)
18
- response = operation.sync
19
- ensure
20
- EventMachine.stop
21
- end
10
+ request = EmmyHttp::Request.new(
11
+ method: 'get',
12
+ url: 'http://httpbin.org'
13
+ )
14
+ operation = EmmyHttp::Operation.new(request, EmmyExtends::EmHttpRequest::Adapter.new)
15
+ response = operation.sync
22
16
 
23
17
  expect(response.status).to be 200
24
18
  expect(response.headers).to include("Content-Type")
25
- expect(response.headers["Server"]).to eq("GitHub.com")
19
+ expect(response.headers["Server"]).to eq("gunicorn/18.0")
26
20
  expect(response.body.empty?).to be false
27
21
  end
28
22
  end
data/spec/httpi_spec.rb CHANGED
@@ -4,18 +4,13 @@ require "httpi"
4
4
 
5
5
  describe EmmyExtends::HTTPI do
6
6
  around do |example|
7
- EventMachine.run do
8
- EmmyMachine.fiber_block &example
9
- end
7
+ EmmyMachine.run_block &example
10
8
  end
11
9
 
12
10
  it "should send request to github.com home page" do
13
- begin
14
- request = HTTPI.get("http://github.com", :emmy)
15
- response = request.sync
16
- ensure
17
- EventMachine.stop
18
- end
11
+ request = HTTPI.get("http://httpbin.org", :emmy)
12
+ response = request.sync
13
+
19
14
  expect(response).to be_a(HTTPI::Response)
20
15
  expect(response.code).to be 200
21
16
  expect(response.headers).to include("Content-Type")
@@ -0,0 +1,51 @@
1
+ require "spec_helper"
2
+ require "mysql2"
3
+
4
+ describe EmmyExtends::Mysql2 do
5
+ using EventObject
6
+
7
+ let(:delay) { 1.0/3 }
8
+ let(:query) { "SELECT sleep(#{delay}) as mysql2_query" }
9
+ let(:db) { EmmyExtends::Mysql2::Client.new }
10
+
11
+ context "fibers required" do
12
+ around do |example|
13
+ EmmyMachine.run_block &example
14
+ end
15
+
16
+ it "should query create operation" do
17
+ operation = db.query query
18
+ expect(operation).to be_a EmmyExtends::Mysql2::Operation
19
+ end
20
+
21
+ it "should execute query through sync" do
22
+ operation = db.query query
23
+ response = operation.sync
24
+ expect(response).to be_a Mysql2::Result
25
+ end
26
+ end
27
+
28
+ context "without fibres" do
29
+
30
+ it "should execute query without fibers" do
31
+ result = nil
32
+ expect {
33
+ EmmyMachine.run do
34
+ operation = db.query query
35
+ EmmyMachine.watch(*operation)
36
+ operation.on :success do |response|
37
+ EmmyMachine.stop
38
+ result = response
39
+ end
40
+
41
+ operation.on :error do |error|
42
+ EmmyMachine.stop
43
+ raise error
44
+ end
45
+ end
46
+ }.to_not raise_error
47
+
48
+ expect(result).to be_a Mysql2::Result
49
+ end
50
+ end
51
+ end
data/spec/savon_spec.rb CHANGED
@@ -5,26 +5,21 @@ require "savon"
5
5
 
6
6
  describe EmmyExtends::Savon do
7
7
  around do |example|
8
- EventMachine.run do
9
- EmmyMachine.fiber_block &example
10
- end
8
+ EmmyMachine.run_block &example
11
9
  end
12
10
 
13
11
  it "should send SOAP request" do
14
12
  HTTPI.adapter = :emmy
15
- begin
16
- client = EmmyExtends::Savon.client(
17
- wsdl: File.expand_path("../ConvertTemperature.asmx.xml", __FILE__),
18
- convert_request_keys_to: :camelcase,
19
- open_timeout: 10,
20
- read_timeout: 10,
21
- log: false
22
- )
23
- request = client.call(:convert_temp, :message => { :temperature => 30, :from_unit => "degreeCelsius", :to_unit => "degreeFahrenheit" })
24
- response = request.sync
25
- ensure
26
- EventMachine.stop
27
- end
13
+
14
+ client = EmmyExtends::Savon.client(
15
+ wsdl: File.expand_path("../ConvertTemperature.asmx.xml", __FILE__),
16
+ convert_request_keys_to: :camelcase,
17
+ open_timeout: 10,
18
+ read_timeout: 10,
19
+ log: false
20
+ )
21
+ request = client.call(:convert_temp, :message => { :temperature => 30, :from_unit => "degreeCelsius", :to_unit => "degreeFahrenheit" })
22
+ response = request.sync
28
23
 
29
24
  fahrenheit = response.body[:convert_temp_response][:convert_temp_result]
30
25
  expect(fahrenheit).to eq("86")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emmy-extends
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - che
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-17 00:00:00.000000000 Z
11
+ date: 2014-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.1.3
47
+ version: 0.1.6
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.3
54
+ version: 0.1.6
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: emmy-http
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -127,6 +127,9 @@ files:
127
127
  - lib/emmy_extends/em_http_request/connection.rb
128
128
  - lib/emmy_extends/httpi/adapter.rb
129
129
  - lib/emmy_extends/httpi/operation.rb
130
+ - lib/emmy_extends/mysql2/client.rb
131
+ - lib/emmy_extends/mysql2/operation.rb
132
+ - lib/emmy_extends/mysql2/watcher.rb
130
133
  - lib/emmy_extends/savon/class_methods.rb
131
134
  - lib/emmy_extends/savon/model.rb
132
135
  - lib/emmy_extends/savon/response.rb
@@ -138,6 +141,7 @@ files:
138
141
  - spec/ConvertTemperature.asmx.xml
139
142
  - spec/em_http_request_spec.rb
140
143
  - spec/httpi_spec.rb
144
+ - spec/mysql2_spec.rb
141
145
  - spec/savon_spec.rb
142
146
  - spec/spec_helper.rb
143
147
  homepage: ''
@@ -168,5 +172,6 @@ test_files:
168
172
  - spec/ConvertTemperature.asmx.xml
169
173
  - spec/em_http_request_spec.rb
170
174
  - spec/httpi_spec.rb
175
+ - spec/mysql2_spec.rb
171
176
  - spec/savon_spec.rb
172
177
  - spec/spec_helper.rb