sinatra_fake_webservice 0.2.0 → 0.9.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/VERSION +1 -1
- data/lib/sinatra_webservice.rb +41 -4
- data/sinatra_fake_webservice.gemspec +2 -4
- data/test/helper.rb +3 -4
- data/test/test_sinatra_fake_webservice.rb +45 -11
- metadata +2 -4
- data/lib/sinatra_ext.rb +0 -16
- data/lib/web_service.rb +0 -60
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.9.0
|
data/lib/sinatra_webservice.rb
CHANGED
@@ -1,13 +1,22 @@
|
|
1
|
-
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
2
3
|
|
3
4
|
class SinatraWebService
|
4
5
|
|
5
6
|
attr_accessor :host, :port
|
7
|
+
attr_accessor :current_thread
|
6
8
|
|
7
9
|
class SinatraStem < Sinatra::Base
|
10
|
+
|
11
|
+
enable :methodoverride
|
12
|
+
|
8
13
|
get '/' do
|
9
14
|
"Hello! i am lindesy lohan!"
|
10
15
|
end
|
16
|
+
|
17
|
+
post '/gimmie' do
|
18
|
+
"here ya go"
|
19
|
+
end
|
11
20
|
end
|
12
21
|
|
13
22
|
|
@@ -17,13 +26,17 @@ class SinatraWebService
|
|
17
26
|
end
|
18
27
|
|
19
28
|
def running?
|
20
|
-
false
|
29
|
+
self.current_thread.alive? rescue false
|
21
30
|
end
|
22
31
|
|
23
32
|
def run!
|
33
|
+
if Thread.list.size > 1
|
34
|
+
Thread.list.first.kill
|
35
|
+
end
|
36
|
+
|
24
37
|
@port = find_free_port
|
25
38
|
|
26
|
-
|
39
|
+
self.current_thread = Thread.new do
|
27
40
|
SinatraStem.run! :post => @host, :port => @port.to_i
|
28
41
|
sleep 1
|
29
42
|
end
|
@@ -46,8 +59,32 @@ class SinatraWebService
|
|
46
59
|
end
|
47
60
|
end
|
48
61
|
|
62
|
+
def get_response(action)
|
63
|
+
res = Net::HTTP.start(self.host, self.port) do |http|
|
64
|
+
http.get(action)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def delete_response(action, data = "", headers = nil, dest = nil)
|
69
|
+
data = data.empty? ? "_method=delete" : data += "&_method=delete"
|
70
|
+
post_response(action, data, headers, dest)
|
71
|
+
end
|
72
|
+
|
73
|
+
def put_response(action, data = "", headers = nil, dest = nil)
|
74
|
+
data = data.empty? ? "_method=put" : data += "&_method=put"
|
75
|
+
post_response(action, data, headers, dest)
|
76
|
+
end
|
77
|
+
|
78
|
+
def post_response(action, data, headers = nil, dest = nil)
|
79
|
+
res = Net::HTTP.start(self.host, self.port) do |http|
|
80
|
+
http.post(action, data, headers, dest)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
49
84
|
def method_missing(method, *args, &block)
|
50
|
-
SinatraStem.
|
85
|
+
SinatraStem.instance_eval do |base|
|
86
|
+
route method.to_s.upcase, *args, &block
|
87
|
+
end
|
51
88
|
end
|
52
89
|
|
53
90
|
end
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sinatra_fake_webservice}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.9.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Elad Meidar"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-03-03}
|
13
13
|
s.description = %q{FakeWeb allows you to fake a response from a specific url, this gem intends to give developers the option to allow several responses from the same url based on parameters (ex: WSDL)}
|
14
14
|
s.email = %q{elad@nautilus6.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -23,9 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
"README.rdoc",
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
|
-
"lib/sinatra_ext.rb",
|
27
26
|
"lib/sinatra_webservice.rb",
|
28
|
-
"lib/web_service.rb",
|
29
27
|
"metal/sinatra_stem.rb",
|
30
28
|
"sinatra.log",
|
31
29
|
"sinatra_fake_webservice.gemspec",
|
data/test/helper.rb
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'test/unit'
|
3
3
|
require 'shoulda'
|
4
|
-
|
5
|
-
require 'uri'
|
4
|
+
|
6
5
|
|
7
6
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
7
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'metal'))
|
9
8
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
10
9
|
require 'sinatra/base'
|
11
|
-
|
10
|
+
|
12
11
|
require 'sinatra_webservice'
|
13
|
-
|
12
|
+
|
14
13
|
|
15
14
|
class Test::Unit::TestCase
|
16
15
|
end
|
@@ -6,6 +6,23 @@ class TestSinatraFakeWebservice < Test::Unit::TestCase
|
|
6
6
|
|
7
7
|
setup do
|
8
8
|
@sinatra_app = SinatraWebService.new
|
9
|
+
@sinatra_app.run!
|
10
|
+
|
11
|
+
@sinatra_app.get '/payme' do
|
12
|
+
"OMG I GOT PAID"
|
13
|
+
end
|
14
|
+
|
15
|
+
@sinatra_app.post '/returnme' do
|
16
|
+
"#{params[:return_value]}"
|
17
|
+
end
|
18
|
+
|
19
|
+
@sinatra_app.delete '/killme' do
|
20
|
+
"argh! i is dead."
|
21
|
+
end
|
22
|
+
|
23
|
+
@sinatra_app.put '/gimmieitnow' do
|
24
|
+
"yay, i haz it."
|
25
|
+
end
|
9
26
|
end
|
10
27
|
|
11
28
|
should "have default host and port" do
|
@@ -15,21 +32,38 @@ class TestSinatraFakeWebservice < Test::Unit::TestCase
|
|
15
32
|
|
16
33
|
context "with a registered GET service" do
|
17
34
|
|
18
|
-
|
19
|
-
@sinatra_app.
|
20
|
-
|
21
|
-
|
35
|
+
should "respond to GET '/payme' with 'OMG I GOT PAID" do
|
36
|
+
res = @sinatra_app.get_response('/payme')
|
37
|
+
assert_equal "OMG I GOT PAID",res.body
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "with a registered POST service" do
|
42
|
+
|
43
|
+
should "respond to POST '/returnme' with param :return_value with param value" do
|
44
|
+
res = @sinatra_app.post_response('/returnme',"return_value=2")
|
22
45
|
|
23
|
-
|
46
|
+
assert_equal "2", res.body
|
24
47
|
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with a registered DELETE service" do
|
25
51
|
|
26
|
-
should "respond to '/
|
27
|
-
res =
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
assert_equal "OMG I GOT PAID",res.body
|
52
|
+
should "respond to DELETE '/killme'" do
|
53
|
+
res = @sinatra_app.delete_response('/killme')
|
54
|
+
|
55
|
+
assert_equal "argh! i is dead.", res.body
|
32
56
|
end
|
33
57
|
end
|
58
|
+
|
59
|
+
context "with a registered PUT service" do
|
60
|
+
|
61
|
+
should "respond to put '/gimmieitnow'" do
|
62
|
+
res = @sinatra_app.put_response('/gimmieitnow')
|
63
|
+
|
64
|
+
assert_equal "yay, i haz it.", res.body
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
34
68
|
end
|
35
69
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra_fake_webservice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elad Meidar
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-03-03 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -48,9 +48,7 @@ files:
|
|
48
48
|
- README.rdoc
|
49
49
|
- Rakefile
|
50
50
|
- VERSION
|
51
|
-
- lib/sinatra_ext.rb
|
52
51
|
- lib/sinatra_webservice.rb
|
53
|
-
- lib/web_service.rb
|
54
52
|
- metal/sinatra_stem.rb
|
55
53
|
- sinatra.log
|
56
54
|
- sinatra_fake_webservice.gemspec
|
data/lib/sinatra_ext.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
# Disabling the capture of the Errno::EADDRINUSE exception in #run! so we can make WebService catch it.
|
2
|
-
# class Sinatra::Base
|
3
|
-
# def self.run!(options={})
|
4
|
-
# attempts = 0
|
5
|
-
# set options
|
6
|
-
# handler = detect_rack_handler
|
7
|
-
# handler_name = handler.name.gsub(/.*::/, '')
|
8
|
-
# handler.run self, :Host => bind, :Port => port do |server|
|
9
|
-
# trap(:INT) do
|
10
|
-
# ## Use thins' hard #stop! if available, otherwise just #stop
|
11
|
-
# server.respond_to?(:stop!) ? server.stop! : server.stop
|
12
|
-
# end
|
13
|
-
# set :running, true
|
14
|
-
# end
|
15
|
-
# end
|
16
|
-
# end
|
data/lib/web_service.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
class WebService
|
3
|
-
|
4
|
-
class SinatraStem < Sinatra::Base
|
5
|
-
get '/' do
|
6
|
-
"Hello! i am lindesy lohan!"
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
attr_accessor :port, :host, :name, :sinatra_app
|
11
|
-
|
12
|
-
|
13
|
-
# Initialize a new face service
|
14
|
-
def initialize(options = {})
|
15
|
-
@name = options[:name] ||= "App"
|
16
|
-
@port = options[:port] ||= "4567"
|
17
|
-
@host = options[:host] ||= "localhost"
|
18
|
-
@sinatra_app = Sinatra::Base.new
|
19
|
-
end
|
20
|
-
|
21
|
-
def proxy
|
22
|
-
@sinatra_app
|
23
|
-
end
|
24
|
-
|
25
|
-
def run
|
26
|
-
|
27
|
-
@port = find_free_port
|
28
|
-
|
29
|
-
app = Thread.new("running_#{self.name}") do
|
30
|
-
puts "\n == Starting webservice '#{@name}' on port #{@port}"
|
31
|
-
proxy.run! :post => @host, :port => @port.to_i
|
32
|
-
sleep 1
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def find_free_port
|
37
|
-
found = false
|
38
|
-
attempts = 0
|
39
|
-
while !found and attempts < 10
|
40
|
-
puts "\n== Trying port #{@port}"
|
41
|
-
begin
|
42
|
-
res = Net::HTTP.start(host,port) do |http|
|
43
|
-
http.get('/')
|
44
|
-
end
|
45
|
-
attempts += 1
|
46
|
-
@port = @port.succ
|
47
|
-
rescue Errno::ECONNREFUSED
|
48
|
-
return @port
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def proxy
|
54
|
-
@sinatra_app
|
55
|
-
end
|
56
|
-
|
57
|
-
def method_missing(method, *args, &block)
|
58
|
-
proxy.send(method, *args, &block) unless method.to_s == "proxy"
|
59
|
-
end
|
60
|
-
end
|