fakerest 0.0.2 → 0.0.3
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/lib/fakerest.rb +14 -152
- data/lib/fakerest/argumentsparser.rb +52 -0
- data/lib/fakerest/profileloader.rb +66 -0
- data/lib/fakerest/userrequests.rb +40 -0
- metadata +37 -2
data/lib/fakerest.rb
CHANGED
@@ -1,150 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'yaml'
|
3
|
-
require '
|
4
|
-
|
5
|
-
|
6
|
-
module FakeRest
|
7
|
-
|
8
|
-
class ArgumentsParser
|
9
|
-
|
10
|
-
def parse(args)
|
11
|
-
options = {}
|
12
|
-
|
13
|
-
optparse = OptionParser.new do |opts|
|
14
|
-
opts.banner = "Usage: fakerest.rb [options]"
|
15
|
-
|
16
|
-
options[:port] = 1111
|
17
|
-
options[:config] = nil
|
18
|
-
options[:views] = 'views/'
|
19
|
-
options[:uploads] = 'uploads/'
|
20
|
-
|
21
|
-
opts.on("-c","--config CONFIG_FILE","Confilg file to load request mappings (required)") do |cfg|
|
22
|
-
options[:config] = cfg
|
23
|
-
end
|
24
|
-
|
25
|
-
opts.on("-p","--port PORT","Port on which the fakerest to be run. Default = 1111") do |prt|
|
26
|
-
options[:port] = prt
|
27
|
-
end
|
28
|
-
|
29
|
-
opts.on("-w","--views VIEWS_FOLDER","Folder path that contains the views (required)") do |views|
|
30
|
-
options[:views] = views
|
31
|
-
end
|
32
|
-
|
33
|
-
opts.on("-u","--uploads UPLOADS_FOLDER","Folder to which any file uploads to be stored (required)") do |uploads|
|
34
|
-
options[:uploads] = uploads
|
35
|
-
end
|
36
|
-
|
37
|
-
opts.on( "-h", "--help", "Displays help message" ) do
|
38
|
-
puts opts
|
39
|
-
exit
|
40
|
-
end
|
41
|
-
end
|
42
|
-
optparse.parse!(args)
|
43
|
-
|
44
|
-
|
45
|
-
if(options[:config] == nil)
|
46
|
-
puts optparse
|
47
|
-
exit(-1)
|
48
|
-
end
|
49
|
-
|
50
|
-
options
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
class RequestMapping
|
57
|
-
attr_reader :status_code, :response_file, :content_type, :method, :path
|
58
|
-
def initialize(method, path, status_code, response_file, content_type)
|
59
|
-
@method = method
|
60
|
-
@path = path
|
61
|
-
@status_code = status_code
|
62
|
-
@response_file = response_file
|
63
|
-
@content_type = content_type
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class UserRequest
|
68
|
-
attr_reader :response_status_code, :url, :body, :method, :request_file_path, :request_file_type
|
69
|
-
def initialize(method, url, body, response_status_code, request_file_path = "", request_file_type = "")
|
70
|
-
@method = method
|
71
|
-
@url = url
|
72
|
-
@body = body
|
73
|
-
@response_status_code = response_status_code
|
74
|
-
@request_file_path = request_file_path
|
75
|
-
@request_file_type = request_file_type
|
76
|
-
end
|
77
|
-
|
78
|
-
def to_s
|
79
|
-
"#{method} #{url} #{response_status_code}\n#{body}\n\n"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
class ProfileLoader
|
84
|
-
@@user_requests = []
|
85
|
-
@@options = {}
|
86
|
-
|
87
|
-
def self.load(profile_file, options)
|
88
|
-
@@options = options
|
89
|
-
request_mappings = []
|
90
|
-
profile_file_path = profile_file
|
91
|
-
|
92
|
-
defns = YAML::load_documents(File.open(profile_file_path))
|
93
|
-
defns.each do |doc|
|
94
|
-
method = doc['method']
|
95
|
-
path = doc['path']
|
96
|
-
|
97
|
-
response = doc['response']
|
98
|
-
response_file = response['content_file']
|
99
|
-
content_type = response['content_type']
|
100
|
-
status_code = response['status_code']
|
101
|
-
|
102
|
-
request_mappings << RequestMapping.new(method, path, status_code, response_file, content_type)
|
103
|
-
end
|
104
|
-
|
105
|
-
configure_requests(request_mappings)
|
106
|
-
end
|
107
|
-
|
108
|
-
def self.configure_requests(request_mappings)
|
109
|
-
request_mappings.each do |request_mapping|
|
110
|
-
block = Proc.new {
|
111
|
-
request_file_path, request_file_type = ProfileLoader.upload_file(params['file']) if(params[:file] != nil)
|
112
|
-
|
113
|
-
content_type request_mapping.content_type
|
114
|
-
status request_mapping.status_code
|
115
|
-
request_body = ProfileLoader.generate_request_body(params, request)
|
116
|
-
|
117
|
-
@@user_requests << UserRequest.new(request.request_method, request.url, request_body, request_mapping.status_code, request_file_path, request_file_type)
|
118
|
-
erb request_mapping.response_file.to_sym, params
|
119
|
-
}
|
120
|
-
|
121
|
-
send request_mapping.method, request_mapping.path, &block
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def self.upload_file(file_params)
|
126
|
-
file_name = file_params[:filename] + Time.now.strftime("%Y%m%d%H%M%S")
|
127
|
-
File.open("#{@@options[:uploads]}" + file_name, "w") do |f|
|
128
|
-
f.write(file_params[:tempfile].read)
|
129
|
-
end
|
130
|
-
[file_name, file_params[:type]]
|
131
|
-
end
|
132
|
-
|
133
|
-
def self.generate_request_body(params, request)
|
134
|
-
request_body = "Params are: "
|
135
|
-
params.each do |key, value|
|
136
|
-
next if key == 'file' or key == 'splat' or key == 'captures'
|
137
|
-
request_body += value != nil ? (key + "=" + value + ",") : (key + ",")
|
138
|
-
end
|
139
|
-
request_body += "\nBody is: " + request.body.read
|
140
|
-
request_body
|
141
|
-
end
|
142
|
-
|
143
|
-
def self.user_requests
|
144
|
-
@@user_requests
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
3
|
+
require 'fakerest/argumentsparser'
|
4
|
+
require 'fakerest/userrequests'
|
5
|
+
require 'fakerest/profileloader'
|
148
6
|
|
149
7
|
options = FakeRest::ArgumentsParser.new.parse(ARGV)
|
150
8
|
|
@@ -152,13 +10,17 @@ require 'sinatra'
|
|
152
10
|
|
153
11
|
set :port, options[:port]
|
154
12
|
set :views, options[:views]
|
13
|
+
set :public_folder, options[:uploads]
|
14
|
+
set :static, true
|
155
15
|
set :run, true
|
16
|
+
|
156
17
|
profile_file_path = options[:config]
|
157
18
|
|
158
|
-
FakeRest::ProfileLoader.
|
19
|
+
profile_loader = FakeRest::ProfileLoader.new
|
20
|
+
profile_loader.load(profile_file_path, options)
|
159
21
|
|
160
22
|
get "/requests/:count" do
|
161
|
-
user_requests = FakeRest::
|
23
|
+
user_requests = FakeRest::UserRequests.user_requests
|
162
24
|
requests_count = params[:count].to_i
|
163
25
|
|
164
26
|
start_index = requests_count > user_requests.count ? 0 : ((user_requests.count - requests_count))
|
@@ -176,16 +38,16 @@ get "/requests/:count" do
|
|
176
38
|
<hr/>
|
177
39
|
<% end %>'
|
178
40
|
|
179
|
-
|
41
|
+
erb requests_template, :locals => {:user_requests => user_requests[range].reverse}
|
180
42
|
end
|
181
43
|
|
182
44
|
get "/" do
|
183
45
|
|
184
46
|
template = '<div>
|
185
47
|
Current Profile : <%= current_profile%>
|
186
|
-
</div>
|
187
|
-
<br/>'
|
188
|
-
|
189
|
-
|
48
|
+
</div>
|
49
|
+
<br/>'
|
50
|
+
|
51
|
+
erb template, :locals => {:current_profile => profile_file_path}
|
190
52
|
end
|
191
53
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
|
4
|
+
module FakeRest
|
5
|
+
|
6
|
+
class ArgumentsParser
|
7
|
+
|
8
|
+
def parse(args)
|
9
|
+
options = {}
|
10
|
+
|
11
|
+
optparse = OptionParser.new do |opts|
|
12
|
+
opts.banner = "Usage: fakerest.rb [options]"
|
13
|
+
|
14
|
+
options[:port] = 1111
|
15
|
+
options[:config] = nil
|
16
|
+
options[:views] = 'views'
|
17
|
+
options[:uploads] = 'uploads'
|
18
|
+
|
19
|
+
opts.on("-c","--config CONFIG_FILE","Confilg file to load request mappings (required)") do |cfg|
|
20
|
+
options[:config] = cfg
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on("-p","--port PORT","Port on which the fakerest to be run. Default = 1111") do |prt|
|
24
|
+
options[:port] = prt
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("-w","--views VIEWS_FOLDER","Folder path that contains the views (required)") do |views|
|
28
|
+
options[:views] = views
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on("-u","--uploads UPLOADS_FOLDER","Folder to which any file uploads to be stored (required)") do |uploads|
|
32
|
+
options[:uploads] = uploads
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on( "-h", "--help", "Displays help message" ) do
|
36
|
+
puts opts
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
optparse.parse!(args)
|
41
|
+
|
42
|
+
|
43
|
+
if(options[:config] == nil)
|
44
|
+
puts optparse
|
45
|
+
exit(-1)
|
46
|
+
end
|
47
|
+
|
48
|
+
options
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'fakerest/userrequests'
|
2
|
+
|
3
|
+
module FakeRest
|
4
|
+
|
5
|
+
class RequestMapping
|
6
|
+
attr_reader :status_code, :response_file, :content_type, :method, :path
|
7
|
+
def initialize(method, path, status_code, response_file, content_type)
|
8
|
+
@method = method
|
9
|
+
@path = path
|
10
|
+
@status_code = status_code
|
11
|
+
@response_file = response_file
|
12
|
+
@content_type = content_type
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class ProfileLoader
|
17
|
+
@@options = {}
|
18
|
+
|
19
|
+
def load(profile_file, options)
|
20
|
+
@@options = options
|
21
|
+
request_mappings = []
|
22
|
+
profile_file_path = profile_file
|
23
|
+
|
24
|
+
defns = YAML::load_documents(File.open(profile_file_path))
|
25
|
+
defns.each do |doc|
|
26
|
+
method = doc['method']
|
27
|
+
path = doc['path']
|
28
|
+
|
29
|
+
response = doc['response']
|
30
|
+
response_file = response['content_file']
|
31
|
+
content_type = response['content_type']
|
32
|
+
status_code = response['status_code']
|
33
|
+
|
34
|
+
request_mappings << RequestMapping.new(method, path, status_code, response_file, content_type)
|
35
|
+
end
|
36
|
+
|
37
|
+
configure_requests(request_mappings)
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
def configure_requests(request_mappings)
|
42
|
+
request_mappings.each do |request_mapping|
|
43
|
+
block = Proc.new {
|
44
|
+
request_file_path, request_file_type = ProfileLoader.upload_file(params['file']) if(params[:file] != nil)
|
45
|
+
|
46
|
+
content_type request_mapping.content_type
|
47
|
+
status request_mapping.status_code
|
48
|
+
request_body = UserRequests.generate_request_body(params, request)
|
49
|
+
|
50
|
+
UserRequests.add UserRequest.new(request.request_method, request.url, request_body, request_mapping.status_code, request_file_path, request_file_type)
|
51
|
+
erb request_mapping.response_file.to_sym, params
|
52
|
+
}
|
53
|
+
|
54
|
+
send request_mapping.method, request_mapping.path, &block
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.upload_file(file_params)
|
59
|
+
file_name =Time.now.strftime("%Y%m%d%H%M%S") + "_" + file_params[:filename]
|
60
|
+
File.open("#{@@options[:uploads]}/" + file_name, "w") do |f|
|
61
|
+
f.write(file_params[:tempfile].read)
|
62
|
+
end
|
63
|
+
[file_name, file_params[:type]]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module FakeRest
|
2
|
+
class UserRequest
|
3
|
+
attr_reader :response_status_code, :url, :body, :method, :request_file_path, :request_file_type
|
4
|
+
def initialize(method, url, body, response_status_code, request_file_path = "", request_file_type = "")
|
5
|
+
@method = method
|
6
|
+
@url = url
|
7
|
+
@body = body
|
8
|
+
@response_status_code = response_status_code
|
9
|
+
@request_file_path = request_file_path
|
10
|
+
@request_file_type = request_file_type
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"#{method} #{url} #{response_status_code}\n#{body}\n\n"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class UserRequests
|
19
|
+
@@user_requests = []
|
20
|
+
|
21
|
+
def self.generate_request_body(params, request)
|
22
|
+
request_body = "Params are: "
|
23
|
+
params.each do |key, value|
|
24
|
+
next if key == 'file' or key == 'splat' or key == 'captures'
|
25
|
+
request_body += value != nil ? (key + "=" + value + ",") : (key + ",")
|
26
|
+
end
|
27
|
+
|
28
|
+
request_body += "\nBody is: " + request.body.read
|
29
|
+
request_body
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.add(user_request)
|
33
|
+
@@user_requests << user_request
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.user_requests
|
37
|
+
@@user_requests
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fakerest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,39 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-08-21 00:00:00.000000000 Z
|
13
|
-
dependencies:
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sinatra
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.3.2
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.3.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: mocha
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.12.3
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.12.3
|
14
46
|
description: Sinatra base http server which fakes the rest services based on the config
|
15
47
|
given
|
16
48
|
email: vatsa.katta@gmail.com
|
@@ -20,6 +52,9 @@ extensions: []
|
|
20
52
|
extra_rdoc_files: []
|
21
53
|
files:
|
22
54
|
- lib/fakerest.rb
|
55
|
+
- lib/fakerest/argumentsparser.rb
|
56
|
+
- lib/fakerest/userrequests.rb
|
57
|
+
- lib/fakerest/profileloader.rb
|
23
58
|
- bin/fakerest
|
24
59
|
homepage: http://github.com/katta/fakerest
|
25
60
|
licenses: []
|