emmy-extends 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59e4184470b8f3962a3af837e984bd1f0ea3b3e9
4
- data.tar.gz: bb4e3b35b44c3ed09d52456ce407e447788fbc70
3
+ metadata.gz: 4b715412f362627d471570cb954c2a0cbc67c915
4
+ data.tar.gz: c2cddcc8d334cb02a444651acbe73879b15d978f
5
5
  SHA512:
6
- metadata.gz: bf8f3be8054e75eddf97fa0a8023c0ed5cce02c2451aee53815c4d3edc8a601c9bf3e31f3d9812e468ced94309301a234f20a2a3d2451e65700ef6cfeb3013f4
7
- data.tar.gz: edbd5b2d7b8e64f0fdc0a48a94d623bf9db02486e3a10ecfb57e607cd8e8518a0aa710782d01147ae82775eabea2683be60322136dbedf264b099eb799801f29
6
+ metadata.gz: 9dbb89b9ed86d5480f24462e76312707e66eca20682697c6c233b39e6317553af847c4ed5da7cd74787d83aa63b4871799e9875cc81bcf3fb6cf65199231eea1
7
+ data.tar.gz: 7b605d851a17de3ba6494c31b93b3f65df5d5a366a7c6f188a64bf7f22462aab263fdf80bacefa1f21395b7e4b076c6c61b141a4fa7917ea8792f67a655f2d0a
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in emmy-extends.gemspec
4
4
  gemspec
5
+
6
+ gem 'savon', github: 'chelovekov/savon', branch: 'version2'
data/README.md CHANGED
@@ -7,6 +7,8 @@ TODO: Write a gem description
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
+ gem 'httpi'
11
+ gem 'savon', github: 'chelovekov/savon' # if savon required
10
12
  gem 'emmy-extends'
11
13
  ```
12
14
 
@@ -18,13 +20,79 @@ Or install it yourself as:
18
20
 
19
21
  $ gem install emmy-extends
20
22
 
21
- ## Usage
23
+ ## Usage EmHttpRequest
22
24
 
23
- TODO: Write usage instructions here
25
+ ```ruby
26
+ EmmyMachine.run_block do
27
+ using Fibre::Synchrony
28
+ request = EmmyHttp::Request.new(
29
+ method: 'get',
30
+ url: 'http://github.com'
31
+ )
32
+ operation1 = EmmyHttp::Operation.new(request, EmmyExtends::EmHttpRequest::Adapter.new)
33
+ operation2 = EmmyHttp::Operation.new(request, EmmyExtends::EmHttpRequest::Adapter.new)
34
+ response = [operation1, operation2].sync
35
+ end
36
+ ```
37
+
38
+ ## Usage HTTPI
39
+
40
+ ```ruby
41
+ EmmyMachine.run_block do
42
+ request = HTTPI.post("http://example.com", "bangarang", :emmy)
43
+ response = request.sync
44
+ end
45
+ ```
46
+
47
+ ## Usage Savon
48
+
49
+ ```ruby
50
+ EmmyMachine.run_block do
51
+ savon = EmmyExtends::Savon
52
+ client = savon.client(wsdl: "http://example.com?wsdl")
53
+ request = client.call(:authenticate) do
54
+ message username: "luke", password: "secret"
55
+ convert_request_keys_to :camelcase
56
+ end
57
+ response = request.sync
58
+ end
59
+ ```
60
+
61
+ ```ruby
62
+ class User
63
+ include EmmyExtends::Savon::Model
64
+
65
+ client wsdl: "http://example.com?wsdl"
66
+ global :basic_auth, "luke", "secret"
67
+
68
+ operations :authenticate, :find_user
69
+ end
70
+ user = User.new
71
+ response = user.authenticate(message: { username: "luke", secret: "secret" }).sync
72
+ ```
73
+
74
+ ## Usage Thin
75
+
76
+ ```ruby
77
+ class Application < Sinatra::Base
78
+ get '/' do
79
+ 'Hello world!'
80
+ end
81
+ end
82
+
83
+ EmmyMachine.run do
84
+ app = Rack::Builder.new do
85
+ use Rack::Logger
86
+ run Application
87
+ end
88
+
89
+ EmmyMachine.bind(*EmmyExtends::Thin.server("tcp://localhost:65535", app, options))
90
+ end
91
+ ```
24
92
 
25
93
  ## Contributing
26
94
 
27
- 1. Fork it ( https://github.com/[my-github-username]/emmy-extends/fork )
95
+ 1. Fork it ( https://github.com/chelovekov/emmy-extends/fork )
28
96
  2. Create your feature branch (`git checkout -b my-new-feature`)
29
97
  3. Commit your changes (`git commit -am 'Add some feature'`)
30
98
  4. Push to the branch (`git push origin my-new-feature`)
data/emmy-extends.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "eventmachine", "~> 1.0.3"
22
22
  spec.add_dependency "em-http-request", "~> 1.1.2"
23
23
  spec.add_dependency "emmy-machine", "~> 0.1.3"
24
- spec.add_dependency "emmy-http", "~> 0.1.0"
24
+ spec.add_dependency "emmy-http", "~> 0.1.1"
25
25
 
26
26
  spec.add_development_dependency "rspec", "~> 3"
27
27
  spec.add_development_dependency "bundler", "~> 1.7"
@@ -0,0 +1,23 @@
1
+ module EmmyExtends
2
+ module CoreExt
3
+ refine Hash do
4
+ def transform_values
5
+ return enum_for(:transform_values) unless block_given?
6
+ result = self.class.new
7
+ each do |key, value|
8
+ result[key] = yield(value)
9
+ end
10
+ result
11
+ end
12
+
13
+ def stringify_keys
14
+ transform_keys{ |key| key.to_s }
15
+ end
16
+
17
+ def symbolize_keys
18
+ transform_keys{ |key| key.to_sym rescue key }
19
+ end
20
+ alias_method :to_options, :symbolize_keys
21
+ end
22
+ end
23
+ end
@@ -70,7 +70,7 @@ module EmmyExtends
70
70
  end
71
71
 
72
72
  def setup_http_client
73
- @http_client ||= begin
73
+ @http_client = begin
74
74
  EventMachine::HttpClient.new(@http_request, HttpClientOptions.new(delegate.request.url, request_options, delegate.request.method)).tap do |client|
75
75
  client.stream do |chunk|
76
76
  @body << chunk
@@ -81,7 +81,11 @@ module EmmyExtends
81
81
  end
82
82
 
83
83
  client.callback do
84
- delegate.success!(delegate, connection)
84
+ if @http_client.response_header && @http_client.response_header.status.zero?
85
+ delegate.error!("connection timed out", delegate, connection)
86
+ else
87
+ delegate.success!(delegate.response, delegate, connection)
88
+ end
85
89
  end
86
90
 
87
91
  client.errback do |c|
@@ -0,0 +1,56 @@
1
+ require "httpi"
2
+
3
+ module EmmyExtends
4
+ class HTTPI::Adapter < ::HTTPI::Adapter::Base
5
+ register :emmy
6
+
7
+ attr_reader :client
8
+
9
+ def initialize(request)
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
+ end
21
+
22
+ def setup_http_auth
23
+ unless @request.auth.type == :basic
24
+ raise NotSupportedError, "EM-HTTP-Request does only support HTTP basic auth"
25
+ end
26
+ @emmy_request.headers[:authorization] = @request.auth.credentials
27
+ end
28
+
29
+ def proxy_options
30
+ {
31
+ :host => @request.proxy.host,
32
+ :port => @request.proxy.port,
33
+ :authorization => [@request.proxy.user, @request.proxy.password]
34
+ }
35
+ end
36
+
37
+ 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
+ if @request.on_body
43
+ raise NotSupportedError, "EM-HTTP-Request does not support response streaming"
44
+ end
45
+
46
+ @emmy_request.method = method
47
+ @operation
48
+ end
49
+
50
+ def build_request_url(url)
51
+ "%s://%s:%s%s" % [url.scheme, url.host, url.port, url.path]
52
+ end
53
+
54
+ #<<<
55
+ end
56
+ end
@@ -0,0 +1,60 @@
1
+ module EmmyExtends
2
+ class HTTPI::Operation
3
+ using EventObject
4
+
5
+ attr_reader :request
6
+ attr_reader :response
7
+ attr_reader :connection
8
+ attr_reader :http
9
+
10
+ events :success, :error
11
+
12
+ def initialize(http)
13
+ @http = http
14
+ @request = http.request
15
+ setup
16
+ end
17
+
18
+ def connect
19
+ http.connect
20
+ end
21
+
22
+ def sync
23
+ Fiber.sync do |fiber|
24
+ connect
25
+
26
+ on :success do |response, operation, conn|
27
+ fiber.resume response
28
+ end
29
+
30
+ on :error do |error, operation, conn|
31
+ # FIXME: TimeoutError separate
32
+ fiber.leave ConnectionError, error.to_s
33
+ end
34
+ end
35
+ end
36
+
37
+ def setup
38
+ http.on :init do |connection|
39
+ @connection = connection
40
+ end
41
+
42
+ http.on :success do |res, http, conn|
43
+ @response = ::HTTPI::Response.new(*res)
44
+ success!(response, self, conn)
45
+ end
46
+
47
+ http.on :error do |error, http, conn|
48
+ error!(error, self, conn)
49
+ end
50
+ end
51
+
52
+ def code
53
+ 0
54
+ end
55
+
56
+ def follow_redirect?
57
+ false
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,17 @@
1
+ require "savon"
2
+
3
+ # Example,
4
+ # client = Savon.client do
5
+ # endpoint "http://example.com"
6
+ # namespace "http://v1.example.com"
7
+ # end
8
+ # response = client.call(:authenticate, message: { username: "luke", password: "secret" }).sync
9
+ #
10
+ module EmmyExtends
11
+ module Savon::ClassMethods
12
+ def client(globals = {}, &block)
13
+ globals[:response_class] = Savon::Response
14
+ ::Savon::Client.new(globals, &block)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ module EmmyExtends
2
+ module Savon::Model
3
+ def self.included(base)
4
+ base.extend ::Savon::Model
5
+ base.global :response_class, Response
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,54 @@
1
+ module EmmyExtends
2
+ class Savon::Response
3
+ using EventObject
4
+
5
+ attr_reader :request
6
+ attr_reader :response
7
+ attr_reader :connection
8
+ attr_reader :httpi
9
+ attr_reader :globals
10
+ attr_reader :locals
11
+
12
+ events :success, :error
13
+
14
+ def initialize(httpi, globals, locals)
15
+ @httpi = httpi
16
+ @request = httpi.request
17
+ @globals = globals
18
+ @locals = locals
19
+ setup
20
+ end
21
+
22
+ def connect
23
+ @httpi.connect
24
+ end
25
+
26
+ def sync
27
+ Fiber.sync do |fiber|
28
+ connect
29
+
30
+ on :success do |response, savon, conn|
31
+ fiber.resume response
32
+ end
33
+
34
+ on :error do |error, savon, conn|
35
+ # FIXME: TimeoutError separate
36
+ fiber.leave EmmyHttp::ConnectionError, error.to_s
37
+ end
38
+ end
39
+ end
40
+
41
+ def setup
42
+ @httpi.on :success do |response, httpi, conn|
43
+ @response = ::Savon::Response.new(response, globals, locals)
44
+ @connection = conn
45
+ success!(@response, self, conn)
46
+ end
47
+
48
+ @httpi.on :error do |error, httpi, conn|
49
+ @connection = conn
50
+ error!(error, self, conn)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,44 @@
1
+ require 'thin'
2
+
3
+ module EmmyExtends
4
+ class Thin::Backend < ::Thin::Backends::Base
5
+ attr_accessor :url
6
+
7
+ def initialize(host, port, options)
8
+ super
9
+ end
10
+
11
+ def connect
12
+ raise "deprecated. you should start server through emmy.bind"
13
+ end
14
+
15
+ def start
16
+ raise "deprecated. you should start server through emmy.bind"
17
+ end
18
+
19
+ # Stops the server
20
+ def disconnect
21
+ puts "disconnect"
22
+ #EventMachine.stop_server(@signature)
23
+ end
24
+
25
+ def initialize_connection(conn)
26
+ @stopping = false
27
+ thin_connection = ::Thin::Connection.new(conn.signature)
28
+ thin_connection.backend = self
29
+ conn.delegate = thin_connection
30
+ super(thin_connection)
31
+ @running = true # FIXME: maybe not here
32
+
33
+ conn.following.post_init
34
+ end
35
+
36
+ def to_a
37
+ [url, EmmyExtends::Thin::Connection, method(:initialize_connection)]
38
+ end
39
+
40
+ def to_s
41
+ "#{@host}:#{@port}"
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,9 @@
1
+ module EmmyExtends
2
+ module Thin::ClassMethods
3
+ using CoreExt
4
+
5
+ def server(url, app, opt={})
6
+ Controller.new(url, app, opt.to_options).start
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module EmmyExtends
2
+ class Thin::Connection < ::EventMachine::Connection
3
+ attr_accessor :delegate
4
+
5
+ def unbind(reason=nil)
6
+ @delegate.unbind
7
+ end
8
+
9
+ def method_missing(name, *a, &b)
10
+ @delegate.send(name, *a, &b)
11
+ end
12
+
13
+ #<<<
14
+ end
15
+ end
@@ -0,0 +1,45 @@
1
+ module EmmyExtends
2
+ class Thin::Controller < ::Thin::Controllers::Controller
3
+
4
+ def initialize(url, app, options)
5
+ @url = URL(url.to_s)
6
+ @app = app
7
+ super(options)
8
+ options[:backend] ||= Backend
9
+ end
10
+
11
+ def start
12
+ server = ::Thin::Server.new(@options[:socket] || @url.host, @url.port, @options)
13
+ # Set options
14
+ server.pid_file = @options[:pid]
15
+ server.log_file = @options[:log]
16
+ server.timeout = @options[:timeout]
17
+ server.maximum_connections = @options[:max_conns]
18
+ server.maximum_persistent_connections = @options[:max_persistent_conns]
19
+ server.threaded = @options[:threaded]
20
+ server.no_epoll = @options[:no_epoll] if server.backend.respond_to?(:no_epoll=)
21
+ server.threadpool_size = @options[:threadpool_size] if server.threaded?
22
+
23
+ # ssl support
24
+ if @options[:ssl]
25
+ server.ssl = true
26
+ server.ssl_options = { :private_key_file => @options[:ssl_key_file], :cert_chain_file => @options[:ssl_cert_file], :verify_peer => !@options[:ssl_disable_verify] }
27
+ end
28
+
29
+ # Detach the process, after this line the current process returns
30
+ server.daemonize if @options[:daemonize]
31
+
32
+ # +config+ must be called before changing privileges since it might require superuser power.
33
+ server.config
34
+
35
+ server.change_privilege @options[:user], @options[:group] if @options[:user] && @options[:group]
36
+
37
+ server.app = app
38
+
39
+ #server.on_restart { Thin::Command.run(:start, @options) }
40
+
41
+ # just return thin-backend
42
+ server.backend
43
+ end
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module EmmyExtends
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/emmy_extends.rb CHANGED
@@ -1,11 +1,32 @@
1
1
  require "emmy_extends/version"
2
2
 
3
3
  module EmmyExtends
4
+ autoload :CoreExt, "emmy_extends/core_ext"
5
+
4
6
  module EmHttpRequest
5
7
  autoload :Connection, "emmy_extends/em_http_request/connection"
6
- autoload :Adapter, "emmy_extends/em_http_request/adapter"
8
+ autoload :Adapter, "emmy_extends/em_http_request/adapter"
9
+ end
10
+
11
+ module HTTPI
12
+ autoload :Adapter, "emmy_extends/httpi/adapter"
13
+ autoload :Operation, "emmy_extends/httpi/operation"
14
+ end
15
+
16
+ module Savon
17
+ autoload :ClassMethods, "emmy_extends/savon/class_methods"
18
+ autoload :Response, "emmy_extends/savon/response"
19
+ autoload :Model, "emmy_extends/savon/model"
20
+
21
+ extend ClassMethods
7
22
  end
8
23
 
9
24
  module Thin
25
+ autoload :Connection, "emmy_extends/thin/connection"
26
+ autoload :Backend, "emmy_extends/thin/backend"
27
+ autoload :Controller, "emmy_extends/thin/controller"
28
+ autoload :ClassMethods, "emmy_extends/thin/class_methods"
29
+
30
+ extend ClassMethods
10
31
  end
11
32
  end
@@ -0,0 +1,135 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.webserviceX.NET/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://www.webserviceX.NET/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
3
+ <wsdl:types>
4
+ <s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET/">
5
+ <s:element name="ConvertTemp">
6
+ <s:complexType>
7
+ <s:sequence>
8
+ <s:element minOccurs="1" maxOccurs="1" name="Temperature" type="s:double" />
9
+ <s:element minOccurs="1" maxOccurs="1" name="FromUnit" type="tns:TemperatureUnit" />
10
+ <s:element minOccurs="1" maxOccurs="1" name="ToUnit" type="tns:TemperatureUnit" />
11
+ </s:sequence>
12
+ </s:complexType>
13
+ </s:element>
14
+ <s:simpleType name="TemperatureUnit">
15
+ <s:restriction base="s:string">
16
+ <s:enumeration value="degreeCelsius" />
17
+ <s:enumeration value="degreeFahrenheit" />
18
+ <s:enumeration value="degreeRankine" />
19
+ <s:enumeration value="degreeReaumur" />
20
+ <s:enumeration value="kelvin" />
21
+ </s:restriction>
22
+ </s:simpleType>
23
+ <s:element name="ConvertTempResponse">
24
+ <s:complexType>
25
+ <s:sequence>
26
+ <s:element minOccurs="1" maxOccurs="1" name="ConvertTempResult" type="s:double" />
27
+ </s:sequence>
28
+ </s:complexType>
29
+ </s:element>
30
+ <s:element name="double" type="s:double" />
31
+ </s:schema>
32
+ </wsdl:types>
33
+ <wsdl:message name="ConvertTempSoapIn">
34
+ <wsdl:part name="parameters" element="tns:ConvertTemp" />
35
+ </wsdl:message>
36
+ <wsdl:message name="ConvertTempSoapOut">
37
+ <wsdl:part name="parameters" element="tns:ConvertTempResponse" />
38
+ </wsdl:message>
39
+ <wsdl:message name="ConvertTempHttpGetIn">
40
+ <wsdl:part name="Temperature" type="s:string" />
41
+ <wsdl:part name="FromUnit" type="s:string" />
42
+ <wsdl:part name="ToUnit" type="s:string" />
43
+ </wsdl:message>
44
+ <wsdl:message name="ConvertTempHttpGetOut">
45
+ <wsdl:part name="Body" element="tns:double" />
46
+ </wsdl:message>
47
+ <wsdl:message name="ConvertTempHttpPostIn">
48
+ <wsdl:part name="Temperature" type="s:string" />
49
+ <wsdl:part name="FromUnit" type="s:string" />
50
+ <wsdl:part name="ToUnit" type="s:string" />
51
+ </wsdl:message>
52
+ <wsdl:message name="ConvertTempHttpPostOut">
53
+ <wsdl:part name="Body" element="tns:double" />
54
+ </wsdl:message>
55
+ <wsdl:portType name="ConvertTemperatureSoap">
56
+ <wsdl:operation name="ConvertTemp">
57
+ <wsdl:input message="tns:ConvertTempSoapIn" />
58
+ <wsdl:output message="tns:ConvertTempSoapOut" />
59
+ </wsdl:operation>
60
+ </wsdl:portType>
61
+ <wsdl:portType name="ConvertTemperatureHttpGet">
62
+ <wsdl:operation name="ConvertTemp">
63
+ <wsdl:input message="tns:ConvertTempHttpGetIn" />
64
+ <wsdl:output message="tns:ConvertTempHttpGetOut" />
65
+ </wsdl:operation>
66
+ </wsdl:portType>
67
+ <wsdl:portType name="ConvertTemperatureHttpPost">
68
+ <wsdl:operation name="ConvertTemp">
69
+ <wsdl:input message="tns:ConvertTempHttpPostIn" />
70
+ <wsdl:output message="tns:ConvertTempHttpPostOut" />
71
+ </wsdl:operation>
72
+ </wsdl:portType>
73
+ <wsdl:binding name="ConvertTemperatureSoap" type="tns:ConvertTemperatureSoap">
74
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
75
+ <wsdl:operation name="ConvertTemp">
76
+ <soap:operation soapAction="http://www.webserviceX.NET/ConvertTemp" style="document" />
77
+ <wsdl:input>
78
+ <soap:body use="literal" />
79
+ </wsdl:input>
80
+ <wsdl:output>
81
+ <soap:body use="literal" />
82
+ </wsdl:output>
83
+ </wsdl:operation>
84
+ </wsdl:binding>
85
+ <wsdl:binding name="ConvertTemperatureSoap12" type="tns:ConvertTemperatureSoap">
86
+ <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
87
+ <wsdl:operation name="ConvertTemp">
88
+ <soap12:operation soapAction="http://www.webserviceX.NET/ConvertTemp" style="document" />
89
+ <wsdl:input>
90
+ <soap12:body use="literal" />
91
+ </wsdl:input>
92
+ <wsdl:output>
93
+ <soap12:body use="literal" />
94
+ </wsdl:output>
95
+ </wsdl:operation>
96
+ </wsdl:binding>
97
+ <wsdl:binding name="ConvertTemperatureHttpGet" type="tns:ConvertTemperatureHttpGet">
98
+ <http:binding verb="GET" />
99
+ <wsdl:operation name="ConvertTemp">
100
+ <http:operation location="/ConvertTemp" />
101
+ <wsdl:input>
102
+ <http:urlEncoded />
103
+ </wsdl:input>
104
+ <wsdl:output>
105
+ <mime:mimeXml part="Body" />
106
+ </wsdl:output>
107
+ </wsdl:operation>
108
+ </wsdl:binding>
109
+ <wsdl:binding name="ConvertTemperatureHttpPost" type="tns:ConvertTemperatureHttpPost">
110
+ <http:binding verb="POST" />
111
+ <wsdl:operation name="ConvertTemp">
112
+ <http:operation location="/ConvertTemp" />
113
+ <wsdl:input>
114
+ <mime:content type="application/x-www-form-urlencoded" />
115
+ </wsdl:input>
116
+ <wsdl:output>
117
+ <mime:mimeXml part="Body" />
118
+ </wsdl:output>
119
+ </wsdl:operation>
120
+ </wsdl:binding>
121
+ <wsdl:service name="ConvertTemperature">
122
+ <wsdl:port name="ConvertTemperatureSoap" binding="tns:ConvertTemperatureSoap">
123
+ <soap:address location="http://www.webservicex.net/ConvertTemperature.asmx" />
124
+ </wsdl:port>
125
+ <wsdl:port name="ConvertTemperatureSoap12" binding="tns:ConvertTemperatureSoap12">
126
+ <soap12:address location="http://www.webservicex.net/ConvertTemperature.asmx" />
127
+ </wsdl:port>
128
+ <wsdl:port name="ConvertTemperatureHttpGet" binding="tns:ConvertTemperatureHttpGet">
129
+ <http:address location="http://www.webservicex.net/ConvertTemperature.asmx" />
130
+ </wsdl:port>
131
+ <wsdl:port name="ConvertTemperatureHttpPost" binding="tns:ConvertTemperatureHttpPost">
132
+ <http:address location="http://www.webservicex.net/ConvertTemperature.asmx" />
133
+ </wsdl:port>
134
+ </wsdl:service>
135
+ </wsdl:definitions>
@@ -8,17 +8,21 @@ describe EmmyExtends::EmHttpRequest do
8
8
  end
9
9
  end
10
10
 
11
- it "should send request to github.com page" do
12
- request = EmmyHttp::Request.new(
13
- method: 'get',
14
- url: 'http://github.com'
15
- )
16
- operation = EmmyHttp::Operation.new(request, EmmyExtends::EmHttpRequest::Adapter.new)
17
- response = operation.sync
18
- EventMachine.stop
11
+ 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
19
22
 
20
23
  expect(response.status).to be 200
21
- expect(response.headers).to include("CONTENT_TYPE")
24
+ expect(response.headers).to include("Content-Type")
25
+ expect(response.headers["Server"]).to eq("GitHub.com")
22
26
  expect(response.body.empty?).to be false
23
27
  end
24
28
  end
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+ require "emmy_extends/httpi/adapter"
3
+ require "httpi"
4
+
5
+ describe EmmyExtends::HTTPI do
6
+ around do |example|
7
+ EventMachine.run do
8
+ EmmyMachine.fiber_block &example
9
+ end
10
+ end
11
+
12
+ 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
19
+ expect(response).to be_a(HTTPI::Response)
20
+ expect(response.code).to be 200
21
+ expect(response.headers).to include("Content-Type")
22
+ end
23
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+ require "httpi"
3
+ require "emmy_extends/httpi/adapter"
4
+ require "savon"
5
+
6
+ describe EmmyExtends::Savon do
7
+ around do |example|
8
+ EventMachine.run do
9
+ EmmyMachine.fiber_block &example
10
+ end
11
+ end
12
+
13
+ it "should send SOAP request" do
14
+ 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
28
+
29
+ fahrenheit = response.body[:convert_temp_response][:convert_temp_result]
30
+ expect(fahrenheit).to eq("86")
31
+ expect(response).to be_a(Savon::Response)
32
+ end
33
+ end
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.0
4
+ version: 0.1.1
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-16 00:00:00.000000000 Z
11
+ date: 2014-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.1.0
61
+ version: 0.1.1
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.1.0
68
+ version: 0.1.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -122,10 +122,23 @@ files:
122
122
  - Rakefile
123
123
  - emmy-extends.gemspec
124
124
  - lib/emmy_extends.rb
125
+ - lib/emmy_extends/core_ext.rb
125
126
  - lib/emmy_extends/em_http_request/adapter.rb
126
127
  - lib/emmy_extends/em_http_request/connection.rb
128
+ - lib/emmy_extends/httpi/adapter.rb
129
+ - lib/emmy_extends/httpi/operation.rb
130
+ - lib/emmy_extends/savon/class_methods.rb
131
+ - lib/emmy_extends/savon/model.rb
132
+ - lib/emmy_extends/savon/response.rb
133
+ - lib/emmy_extends/thin/backend.rb
134
+ - lib/emmy_extends/thin/class_methods.rb
135
+ - lib/emmy_extends/thin/connection.rb
136
+ - lib/emmy_extends/thin/controller.rb
127
137
  - lib/emmy_extends/version.rb
138
+ - spec/ConvertTemperature.asmx.xml
128
139
  - spec/em_http_request_spec.rb
140
+ - spec/httpi_spec.rb
141
+ - spec/savon_spec.rb
129
142
  - spec/spec_helper.rb
130
143
  homepage: ''
131
144
  licenses:
@@ -152,5 +165,8 @@ signing_key:
152
165
  specification_version: 4
153
166
  summary: Emmy support em-http-request, thin etc.
154
167
  test_files:
168
+ - spec/ConvertTemperature.asmx.xml
155
169
  - spec/em_http_request_spec.rb
170
+ - spec/httpi_spec.rb
171
+ - spec/savon_spec.rb
156
172
  - spec/spec_helper.rb