avocado-docs 2.0.6 → 3.0.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.
- checksums.yaml +5 -13
- data/app/assets/images/avocado/filter-icon.png +0 -0
- data/app/assets/javascripts/avocado/angular-route.min.js +14 -0
- data/app/assets/javascripts/avocado/angular.min.js +235 -0
- data/app/assets/javascripts/avocado/app.js.coffee +4 -0
- data/app/assets/javascripts/avocado/application.js.coffee +30 -0
- data/app/assets/javascripts/avocado/controllers/avocado_ctrl.js.coffee +92 -0
- data/app/assets/javascripts/avocado/md5.js +19 -0
- data/app/assets/javascripts/avocado/services/endpoint.js.coffee +23 -0
- data/app/assets/javascripts/avocado/services/request.js.coffee +12 -0
- data/app/assets/javascripts/avocado/services/resource.js.coffee +5 -0
- data/app/assets/javascripts/avocado/services/response.js.coffee +9 -0
- data/app/assets/javascripts/avocado/ui-utils.min.js +7 -0
- data/app/assets/stylesheets/avocado/application.css.scss +110 -119
- data/app/controllers/avocado/avocado_controller.rb +4 -5
- data/app/views/layouts/avocado/avocado.html.erb +4 -3
- data/app/views/template.html.erb +43 -51
- data/lib/avocado-docs.rb +5 -16
- data/lib/avocado/config.rb +7 -4
- data/lib/avocado/controller.rb +9 -5
- data/lib/avocado/middleware/defaults.rb +2 -0
- data/lib/avocado/middleware/document_metadata.rb +4 -4
- data/lib/avocado/middleware/example_serialization.rb +2 -2
- data/lib/avocado/middleware/ignore_xhr_requests.rb +10 -0
- data/lib/avocado/middleware/request_serialization.rb +7 -6
- data/lib/avocado/middleware/resource_serialization.rb +6 -8
- data/lib/avocado/middleware/response_serialization.rb +3 -2
- data/lib/avocado/packages/package.rb +23 -0
- data/lib/avocado/packages/rspec_package.rb +15 -0
- data/lib/avocado/request_store.rb +22 -0
- data/lib/avocado/rspec.rb +11 -8
- data/lib/avocado/uploader.rb +28 -8
- data/lib/avocado/version.rb +1 -1
- metadata +32 -19
- data/app/assets/javascripts/avocado/application.js +0 -21
- data/app/helpers/avocado/application_helper.rb +0 -4
- data/lib/avocado/cache.rb +0 -20
data/lib/avocado/config.rb
CHANGED
@@ -2,7 +2,7 @@ module Avocado
|
|
2
2
|
class Config
|
3
3
|
class << self
|
4
4
|
|
5
|
-
attr_accessor :url, :headers, :document_if, :
|
5
|
+
attr_accessor :url, :headers, :document_if, :json_path, :ignored_params
|
6
6
|
|
7
7
|
def configure(&block)
|
8
8
|
yield self
|
@@ -16,8 +16,8 @@ module Avocado
|
|
16
16
|
@document_if || -> { true }
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
@
|
19
|
+
def json_path
|
20
|
+
@json_path || Rails.application.root
|
21
21
|
end
|
22
22
|
|
23
23
|
def ignored_params
|
@@ -25,7 +25,10 @@ module Avocado
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def reset!
|
28
|
-
@headers =
|
28
|
+
@headers = nil
|
29
|
+
@document_if = nil
|
30
|
+
@json_path = nil
|
31
|
+
@ignored_params = nil
|
29
32
|
end
|
30
33
|
|
31
34
|
end
|
data/lib/avocado/controller.rb
CHANGED
@@ -6,17 +6,21 @@ module Avocado
|
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
8
|
included do
|
9
|
-
|
10
|
-
Avocado::Cache.clean
|
11
|
-
Avocado::Cache.store(request, response) if documentable?
|
12
|
-
end
|
9
|
+
around_action :store_request_and_response_in_avocado
|
13
10
|
end
|
14
11
|
|
15
12
|
def documentable?
|
16
|
-
response.body.blank? || !!JSON.parse(response.body)
|
13
|
+
(response.status == 204 && response.body.blank?) || !!JSON.parse(response.body)
|
17
14
|
rescue
|
18
15
|
false
|
19
16
|
end
|
20
17
|
|
18
|
+
def store_request_and_response_in_avocado
|
19
|
+
yield
|
20
|
+
ensure
|
21
|
+
Avocado::RequestStore.instance.reset!
|
22
|
+
Avocado::RequestStore.instance.store(request, response) if documentable?
|
23
|
+
end
|
24
|
+
|
21
25
|
end
|
22
26
|
end
|
@@ -4,6 +4,7 @@ require 'avocado/middleware/request_serialization'
|
|
4
4
|
require 'avocado/middleware/response_serialization'
|
5
5
|
require 'avocado/middleware/resource_serialization'
|
6
6
|
require 'avocado/middleware/example_serialization'
|
7
|
+
require 'avocado/middleware/ignore_xhr_requests'
|
7
8
|
|
8
9
|
Avocado::Middleware.configure do |chain|
|
9
10
|
chain << Avocado::Middleware::DocumentMetadata
|
@@ -12,4 +13,5 @@ Avocado::Middleware.configure do |chain|
|
|
12
13
|
chain << Avocado::Middleware::ResponseSerialization
|
13
14
|
chain << Avocado::Middleware::ResourceSerialization
|
14
15
|
chain << Avocado::Middleware::ExampleSerialization
|
16
|
+
chain << Avocado::Middleware::IgnoreXhrRequests
|
15
17
|
end
|
@@ -2,11 +2,11 @@ module Avocado
|
|
2
2
|
class Middleware::DocumentMetadata
|
3
3
|
|
4
4
|
# return false if the :document metadata is given and is explicitly false
|
5
|
-
def call(
|
6
|
-
if
|
7
|
-
yield false
|
8
|
-
else
|
5
|
+
def call(package)
|
6
|
+
if package.document?
|
9
7
|
yield
|
8
|
+
else
|
9
|
+
yield false
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Avocado
|
2
2
|
class Middleware::RequestSerialization
|
3
3
|
|
4
|
-
def call(
|
5
|
-
@request = request
|
6
|
-
Avocado::
|
4
|
+
def call(package)
|
5
|
+
@request = package.request
|
6
|
+
Avocado::RequestStore.instance.json.merge! request: serialize(@request)
|
7
7
|
yield
|
8
8
|
end
|
9
9
|
|
@@ -34,10 +34,11 @@ module Avocado
|
|
34
34
|
|
35
35
|
def deep_replace_file_uploads_with_text(hash)
|
36
36
|
hash.each do |k, v|
|
37
|
-
|
37
|
+
case v
|
38
|
+
when Hash
|
38
39
|
deep_replace_file_uploads_with_text(v)
|
39
|
-
|
40
|
-
hash[k] = '<Multipart File Upload>'
|
40
|
+
when Rack::Test::UploadedFile
|
41
|
+
hash[k] = '<Multipart File Upload>'
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
@@ -1,21 +1,19 @@
|
|
1
1
|
module Avocado
|
2
2
|
class Middleware::ResourceSerialization
|
3
3
|
|
4
|
-
def call(
|
5
|
-
|
6
|
-
|
4
|
+
def call(package)
|
5
|
+
request = package.request
|
6
|
+
name = infer_resource_name_from_request(request)
|
7
|
+
Avocado::RequestStore.instance.json.merge! resource: { name: name }
|
7
8
|
yield
|
8
9
|
end
|
9
10
|
|
10
11
|
private
|
11
12
|
|
12
|
-
def
|
13
|
-
controller =
|
13
|
+
def infer_resource_name_from_request(request)
|
14
|
+
controller = request.params[:controller]
|
14
15
|
name = controller.partition('/').reject(&:blank?).last
|
15
16
|
name.titleize.split('/').last
|
16
|
-
rescue ActionController::RoutingError
|
17
|
-
puts "Path #{path} not found in controller routes; Defaulting name to path."
|
18
|
-
path
|
19
17
|
end
|
20
18
|
|
21
19
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module Avocado
|
2
2
|
class Middleware::ResponseSerialization
|
3
3
|
|
4
|
-
def call(
|
5
|
-
|
4
|
+
def call(package)
|
5
|
+
response = package.response
|
6
|
+
Avocado::RequestStore.instance.json.merge! response: serialize(response)
|
6
7
|
yield
|
7
8
|
end
|
8
9
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Avocado
|
2
|
+
module Packages
|
3
|
+
class Package
|
4
|
+
|
5
|
+
attr_accessor :example, :request, :response
|
6
|
+
|
7
|
+
def initialize(example, request, response)
|
8
|
+
@example = example
|
9
|
+
@request = request
|
10
|
+
@response = response
|
11
|
+
end
|
12
|
+
|
13
|
+
def description
|
14
|
+
raise 'Implement #description'
|
15
|
+
end
|
16
|
+
|
17
|
+
def document?
|
18
|
+
raise 'Implement #document?'
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Temporarily store a JSON request/response. Ultimately RSpec will determine
|
2
|
+
# if this request/response gets documented or not in an after(:each) block
|
3
|
+
module Avocado
|
4
|
+
class RequestStore
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
attr_accessor :request, :response, :json
|
8
|
+
|
9
|
+
def store(request, response)
|
10
|
+
@json = {}
|
11
|
+
@request = request
|
12
|
+
@response = response
|
13
|
+
end
|
14
|
+
|
15
|
+
def reset!
|
16
|
+
@json = nil
|
17
|
+
@request = nil
|
18
|
+
@response = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/avocado/rspec.rb
CHANGED
@@ -8,20 +8,23 @@ RSpec.configure do |config|
|
|
8
8
|
# Invoke all middleware with the request/response stored from the after_action in the controller
|
9
9
|
# The final action is to store the request JSON in the Avocado module until after(:suite) executes
|
10
10
|
config.after(:each) do |ex|
|
11
|
-
|
12
|
-
request = Avocado::
|
13
|
-
response = Avocado::
|
11
|
+
_ex = defined?(example) ? example : ex
|
12
|
+
request = Avocado::RequestStore.instance.request
|
13
|
+
response = Avocado::RequestStore.instance.response
|
14
14
|
|
15
15
|
if request && response
|
16
|
-
Avocado::
|
17
|
-
|
16
|
+
package = Avocado::Packages::RSpecPackage.new(_ex, request, response)
|
17
|
+
Avocado::Middleware.invoke(package) do
|
18
|
+
Avocado::Uploader.instance.payload << Avocado::RequestStore.instance.json
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
Avocado::
|
22
|
+
Avocado::RequestStore.instance.reset!
|
22
23
|
end
|
23
24
|
|
24
|
-
# Upload avocado.
|
25
|
-
config.after(:suite)
|
25
|
+
# Upload avocado.json to the configured URL if one is given
|
26
|
+
config.after(:suite) do
|
27
|
+
Avocado::Uploader.instance.upload!
|
28
|
+
end
|
26
29
|
|
27
30
|
end
|
data/lib/avocado/uploader.rb
CHANGED
@@ -1,22 +1,42 @@
|
|
1
1
|
module Avocado
|
2
2
|
class Uploader
|
3
|
+
include Singleton
|
3
4
|
|
4
|
-
|
5
|
+
attr_accessor :payload
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@payload = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def upload!
|
12
|
+
p payload
|
13
|
+
return unless should_upload?
|
5
14
|
WebMock.allow_net_connect!
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
15
|
+
write_payload_to_json_file do |file|
|
16
|
+
request = Net::HTTP::Post::Multipart.new uri.path, 'file' => UploadIO.new(file, 'text/json', 'avocado.json')
|
17
|
+
Net::HTTP.start(uri.host, uri.port) { |http| http.request(request) }
|
18
|
+
end
|
10
19
|
ensure
|
11
20
|
WebMock.disable_net_connect!
|
12
|
-
file.close
|
13
|
-
File.delete file.path
|
14
21
|
end
|
15
22
|
|
16
23
|
private
|
17
24
|
|
25
|
+
def write_payload_to_json_file(&block)
|
26
|
+
File.write 'avocado.json', JSON[payload]
|
27
|
+
file = File.open 'avocado.json'
|
28
|
+
yield(file)
|
29
|
+
ensure
|
30
|
+
file.close
|
31
|
+
# File.delete file.path
|
32
|
+
end
|
33
|
+
|
34
|
+
def should_upload?
|
35
|
+
payload.present? && Avocado::Config.url.presence
|
36
|
+
end
|
37
|
+
|
18
38
|
def uri
|
19
|
-
@
|
39
|
+
@_uri ||= URI.parse Avocado::Config.url
|
20
40
|
rescue URI::InvalidURIError
|
21
41
|
raise "Avocado::Config.url is set but is not a valid URL!"
|
22
42
|
end
|
data/lib/avocado/version.rb
CHANGED
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avocado-docs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Logan Serman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 4.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: multipart-post
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: sqlite3
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec-rails
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '2.14'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.14'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: combustion
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0.5'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0.5'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: webmock
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '1.15'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - ~>
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1.15'
|
97
97
|
description: Avocado listens for JSON responses in the test environment and generates
|
@@ -104,12 +104,22 @@ extra_rdoc_files: []
|
|
104
104
|
files:
|
105
105
|
- MIT-LICENSE
|
106
106
|
- Rakefile
|
107
|
-
- app/assets/
|
107
|
+
- app/assets/images/avocado/filter-icon.png
|
108
|
+
- app/assets/javascripts/avocado/angular-route.min.js
|
109
|
+
- app/assets/javascripts/avocado/angular.min.js
|
110
|
+
- app/assets/javascripts/avocado/app.js.coffee
|
111
|
+
- app/assets/javascripts/avocado/application.js.coffee
|
112
|
+
- app/assets/javascripts/avocado/controllers/avocado_ctrl.js.coffee
|
113
|
+
- app/assets/javascripts/avocado/md5.js
|
114
|
+
- app/assets/javascripts/avocado/services/endpoint.js.coffee
|
115
|
+
- app/assets/javascripts/avocado/services/request.js.coffee
|
116
|
+
- app/assets/javascripts/avocado/services/resource.js.coffee
|
117
|
+
- app/assets/javascripts/avocado/services/response.js.coffee
|
118
|
+
- app/assets/javascripts/avocado/ui-utils.min.js
|
108
119
|
- app/assets/stylesheets/avocado/application.css.scss
|
109
120
|
- app/assets/stylesheets/avocado/bootstrap.css
|
110
121
|
- app/controllers/avocado/avocado_controller.rb
|
111
122
|
- app/controllers/avocado/specs_controller.rb
|
112
|
-
- app/helpers/avocado/application_helper.rb
|
113
123
|
- app/models/avocado/endpoint.rb
|
114
124
|
- app/models/avocado/parser.rb
|
115
125
|
- app/models/avocado/request.rb
|
@@ -118,7 +128,6 @@ files:
|
|
118
128
|
- app/views/template.html.erb
|
119
129
|
- config/routes.rb
|
120
130
|
- lib/avocado-docs.rb
|
121
|
-
- lib/avocado/cache.rb
|
122
131
|
- lib/avocado/config.rb
|
123
132
|
- lib/avocado/controller.rb
|
124
133
|
- lib/avocado/engine.rb
|
@@ -127,9 +136,13 @@ files:
|
|
127
136
|
- lib/avocado/middleware/document_if_configuration.rb
|
128
137
|
- lib/avocado/middleware/document_metadata.rb
|
129
138
|
- lib/avocado/middleware/example_serialization.rb
|
139
|
+
- lib/avocado/middleware/ignore_xhr_requests.rb
|
130
140
|
- lib/avocado/middleware/request_serialization.rb
|
131
141
|
- lib/avocado/middleware/resource_serialization.rb
|
132
142
|
- lib/avocado/middleware/response_serialization.rb
|
143
|
+
- lib/avocado/packages/package.rb
|
144
|
+
- lib/avocado/packages/rspec_package.rb
|
145
|
+
- lib/avocado/request_store.rb
|
133
146
|
- lib/avocado/rspec.rb
|
134
147
|
- lib/avocado/uploader.rb
|
135
148
|
- lib/avocado/version.rb
|
@@ -142,12 +155,12 @@ require_paths:
|
|
142
155
|
- lib
|
143
156
|
required_ruby_version: !ruby/object:Gem::Requirement
|
144
157
|
requirements:
|
145
|
-
- -
|
158
|
+
- - ">="
|
146
159
|
- !ruby/object:Gem::Version
|
147
160
|
version: '0'
|
148
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
162
|
requirements:
|
150
|
-
- -
|
163
|
+
- - ">="
|
151
164
|
- !ruby/object:Gem::Version
|
152
165
|
version: '0'
|
153
166
|
requirements: []
|