rack-test-poc 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -0
- data/VERSION +1 -1
- data/lib/rack/test/poc.rb +112 -31
- data/test/{dummy.rb → test_description.rb} +9 -1
- data/test/test_poc_generation.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cce9633d21092ba28d822d448effd6ffe1e0ba18
|
4
|
+
data.tar.gz: c5985ca6394c44769bb4ef9a39c624d0f308719f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9a612216dfdd57272d5e0345670b221b9dd04c01b215629406c65ae88f7455b39921e42b83f0f93069faa831516e55cbca371f162fdb3e4dd4f9ba1ba450039
|
7
|
+
data.tar.gz: 6ba7a28169ef568020bb87b2b787d619de06723349b3a891458528393282ba535bcfdbe6cb9a878ed6f4e8d1aad85e20ebb6b8e503fa6b44168b8bcd8d9cfa0f
|
data/README.md
CHANGED
@@ -28,6 +28,10 @@ All you need to do is to require 'rack/test/poc' in your test_helper
|
|
28
28
|
when you working with rack-test module,
|
29
29
|
and you good to go!
|
30
30
|
|
31
|
+
If you can, you should always describe with :is_for object methods, the response content,
|
32
|
+
so it can be easy to analyze out from the poc file, or even can be used in documentation generating!
|
33
|
+
With that you can make Google Api docs level documentations!
|
34
|
+
|
31
35
|
### example
|
32
36
|
|
33
37
|
```ruby
|
@@ -57,6 +61,11 @@ describe 'AppTest' do
|
|
57
61
|
|
58
62
|
#> bla bla bla some code here
|
59
63
|
last_response.body #> '{"msg":"Hello Rack!"}'
|
64
|
+
|
65
|
+
#> you should describe a response so it can be easy to understand from the poc!
|
66
|
+
resp = JSON.parse(last_response.body)
|
67
|
+
resp['msg'].desc 'Hy'
|
68
|
+
resp['data']['key'].desc 'bye'
|
60
69
|
|
61
70
|
end
|
62
71
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0
|
data/lib/rack/test/poc.rb
CHANGED
@@ -1,18 +1,95 @@
|
|
1
|
+
require 'minitest/unit'
|
2
|
+
|
1
3
|
module RackTestPoc
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
module ObjectExt
|
6
|
+
|
7
|
+
def is_for(description_text)
|
8
|
+
return unless RackTestPoc.last_poc
|
9
|
+
|
10
|
+
old_body = RackTestPoc.last_poc['response']['body']['object']
|
11
|
+
RackTestPoc.last_poc['response']['body']['description'] ||= ->{
|
12
|
+
|
13
|
+
begin
|
14
|
+
JSON.parse(old_body.to_json) #> hard clone
|
15
|
+
rescue
|
16
|
+
old_body.dup rescue old_body
|
17
|
+
end
|
18
|
+
|
19
|
+
}.call
|
20
|
+
|
21
|
+
desc_body = RackTestPoc.last_poc['response']['body']['description']
|
22
|
+
RackTestPoc.description_helper(desc_body,self,description_text)
|
23
|
+
|
24
|
+
nil
|
25
|
+
|
10
26
|
end
|
27
|
+
|
11
28
|
end
|
12
29
|
|
13
|
-
|
14
|
-
|
15
|
-
|
30
|
+
::Object.__send__ :include, ObjectExt
|
31
|
+
|
32
|
+
class << self
|
33
|
+
|
34
|
+
def desc_comp_search(container,object,description_text)
|
35
|
+
case container
|
36
|
+
|
37
|
+
when Array
|
38
|
+
if container.index(object)
|
39
|
+
container[container.index(object)]= description_text
|
40
|
+
else
|
41
|
+
container.each do |element|
|
42
|
+
desc_comp_search(element,object,description_text)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
when Hash
|
47
|
+
if container.key(object)
|
48
|
+
container[container.key(object)]= description_text
|
49
|
+
else
|
50
|
+
container.each { |k,v| desc_comp_search(v,object,description_text) }
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def description_helper(container,object,description_text)
|
57
|
+
case container
|
58
|
+
|
59
|
+
when Array,Hash
|
60
|
+
desc_comp_search(container,object,description_text)
|
61
|
+
|
62
|
+
else
|
63
|
+
RackTestPoc.last_poc['response']['body']['description']=description_text
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
def root
|
70
|
+
if defined?(Rails) && Rails.respond_to?(:root) && !!Rails.root
|
71
|
+
Rails.root.to_s
|
72
|
+
elsif !!ENV['BUNDLE_GEMFILE']
|
73
|
+
ENV['BUNDLE_GEMFILE'].split(File::Separator)[0..-2].join(File::Separator)
|
74
|
+
else
|
75
|
+
Dir.pwd
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def dump_object
|
80
|
+
@dump_object ||= Hash.new
|
81
|
+
end
|
82
|
+
|
83
|
+
def last_poc=(last_poc)
|
84
|
+
@last_poc=last_poc
|
85
|
+
end
|
86
|
+
|
87
|
+
def last_poc
|
88
|
+
@last_poc
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
self.dump_object #> eager load for multiThread
|
16
93
|
|
17
94
|
module EXT
|
18
95
|
|
@@ -26,9 +103,9 @@ module RackTestPoc
|
|
26
103
|
dump_dir = File.join RackTestPoc.root,'test','poc'
|
27
104
|
FileUtils.mkdir_p(dump_dir) unless File.exist?(dump_dir)
|
28
105
|
|
29
|
-
unless RackTestPoc.
|
106
|
+
unless RackTestPoc.dump_object.empty?
|
30
107
|
File.write File.join(dump_dir,Time.now.to_i.to_s.concat('.yaml')),
|
31
|
-
RackTestPoc.
|
108
|
+
RackTestPoc.dump_object.to_yaml
|
32
109
|
|
33
110
|
end
|
34
111
|
|
@@ -44,8 +121,8 @@ module RackTestPoc
|
|
44
121
|
|
45
122
|
request_method_str = env['REQUEST_METHOD'].to_s.upcase
|
46
123
|
|
47
|
-
RackTestPoc.
|
48
|
-
RackTestPoc.
|
124
|
+
RackTestPoc.dump_object[uri] ||= {}
|
125
|
+
RackTestPoc.dump_object[uri][request_method_str] ||= {}
|
49
126
|
|
50
127
|
begin
|
51
128
|
|
@@ -71,8 +148,8 @@ module RackTestPoc
|
|
71
148
|
|
72
149
|
end
|
73
150
|
|
74
|
-
RackTestPoc.
|
75
|
-
RackTestPoc.
|
151
|
+
RackTestPoc.dump_object[uri][request_method_str]['response'] ||= {}
|
152
|
+
RackTestPoc.dump_object[uri][request_method_str]['request'] ||= {}
|
76
153
|
|
77
154
|
raw_query = env.find{|k,v|
|
78
155
|
%W[ QUERY_STRING rack.request.form_vars ].any?{|tag| k == tag && !v.nil? && v != '' }
|
@@ -89,24 +166,28 @@ module RackTestPoc
|
|
89
166
|
|
90
167
|
end
|
91
168
|
|
92
|
-
RackTestPoc.
|
93
|
-
RackTestPoc.
|
94
|
-
RackTestPoc.
|
95
|
-
RackTestPoc.
|
169
|
+
RackTestPoc.dump_object[uri][request_method_str]['request']['query'] ||= {}
|
170
|
+
RackTestPoc.dump_object[uri][request_method_str]['request']['query']['raw'] = raw_query
|
171
|
+
RackTestPoc.dump_object[uri][request_method_str]['request']['query']['object'] = query_hash
|
172
|
+
RackTestPoc.dump_object[uri][request_method_str]['request']['headers'] = @headers
|
96
173
|
|
97
|
-
RackTestPoc.
|
98
|
-
RackTestPoc.dump_obj[uri][request_method_str]['response']['raw_body'] = last_response.body
|
174
|
+
RackTestPoc.dump_object[uri][request_method_str]['response']['body']= {}
|
99
175
|
|
100
|
-
RackTestPoc.
|
101
|
-
|
102
|
-
}
|
103
|
-
|
104
|
-
RackTestPoc.dump_obj[uri][request_method_str]['response']['status']= last_response.status
|
105
|
-
RackTestPoc.dump_obj[uri][request_method_str]['response']['format']= format
|
176
|
+
RackTestPoc.dump_object[uri][request_method_str]['response']['body']['object'] = body
|
177
|
+
RackTestPoc.dump_object[uri][request_method_str]['response']['body']['raw'] = last_response.body
|
106
178
|
|
107
|
-
|
108
|
-
|
109
|
-
|
179
|
+
# RackTestPoc.dump_object[uri][request_method_str]['response']['headers']= env.reduce({}){
|
180
|
+
# |m,o| m.merge!(o[0]=>o[1]) if o[0].to_s.downcase =~ /^http_/ ; m
|
181
|
+
# }
|
182
|
+
|
183
|
+
RackTestPoc.dump_object[uri][request_method_str]['response']['status']= last_response.status
|
184
|
+
RackTestPoc.dump_object[uri][request_method_str]['response']['format']= format
|
185
|
+
|
186
|
+
# if env['CONTENT_TYPE']
|
187
|
+
# RackTestPoc.dump_object[uri][request_method_str]['response']['content_type']= env['CONTENT_TYPE']
|
188
|
+
# end
|
189
|
+
|
190
|
+
RackTestPoc.last_poc = RackTestPoc.dump_object[uri][request_method_str]
|
110
191
|
|
111
192
|
return last_response
|
112
193
|
|
@@ -3,7 +3,8 @@ require 'rack'
|
|
3
3
|
|
4
4
|
class APP
|
5
5
|
def self.call(env)
|
6
|
-
[200, {"Content-Type" => "application/json"}, '{"msg":"Hello Rack!"}']
|
6
|
+
[200, {"Content-Type" => "application/json"}, '{"msg":"Hello Rack!","data":{"key":"value"}}']
|
7
|
+
# [200, {"Content-Type" => "text/html"}, 'true']
|
7
8
|
end
|
8
9
|
end
|
9
10
|
|
@@ -27,6 +28,13 @@ describe 'AppTest' do
|
|
27
28
|
|
28
29
|
last_response.body #> '{"msg":"Hello Rack!"}'
|
29
30
|
|
31
|
+
resp = JSON.parse(last_response.body)
|
32
|
+
resp['msg'].is_for 'Hy'
|
33
|
+
resp['data']['key'].is_for 'bye'
|
34
|
+
|
35
|
+
# last_response.body.desc 'boolean response'
|
36
|
+
|
37
|
+
|
30
38
|
end
|
31
39
|
|
32
40
|
|
data/test/test_poc_generation.rb
CHANGED
@@ -7,7 +7,7 @@ describe 'POCTest' do
|
|
7
7
|
|
8
8
|
specify 'it should be made able to made a poc at exiting from the process' do
|
9
9
|
|
10
|
-
$stdout.puts `bundle exec ruby #{File.join __dir__,'
|
10
|
+
$stdout.puts `bundle exec ruby #{File.join __dir__,'test_description.rb'}`
|
11
11
|
|
12
12
|
begin
|
13
13
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-test-poc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,7 +72,7 @@ files:
|
|
72
72
|
- lib/rack-test-poc.rb
|
73
73
|
- lib/rack/test/poc.rb
|
74
74
|
- rack-test-poc.gemspec
|
75
|
-
- test/
|
75
|
+
- test/test_description.rb
|
76
76
|
- test/test_poc_generation.rb
|
77
77
|
homepage: https://github.com/adamluzsi/rack-test-poc
|
78
78
|
licenses: []
|
@@ -98,6 +98,6 @@ signing_key:
|
|
98
98
|
specification_version: 4
|
99
99
|
summary: rack/test based poc file generator
|
100
100
|
test_files:
|
101
|
-
- test/
|
101
|
+
- test/test_description.rb
|
102
102
|
- test/test_poc_generation.rb
|
103
103
|
has_rdoc:
|