avocado-docs 3.0.10 → 3.1.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.
Files changed (62) hide show
  1. checksums.yaml +5 -13
  2. data/app/assets/javascripts/avocado/app.coffee +1 -0
  3. data/app/assets/javascripts/avocado/application.js.coffee +1 -18
  4. data/app/assets/javascripts/avocado/avocado-ctrl.coffee +50 -0
  5. data/app/assets/javascripts/avocado/{services/request.js.coffee → factories/request.coffee} +5 -3
  6. data/app/assets/javascripts/avocado/factories/resource.coffee +6 -0
  7. data/app/assets/javascripts/avocado/factories/response.coffee +11 -0
  8. data/app/assets/javascripts/avocado/factories/spec.coffee +27 -0
  9. data/app/assets/javascripts/avocado/filters/request-method-filter.coffee +15 -0
  10. data/app/assets/javascripts/avocado/filters/response-status-filter.coffee +15 -0
  11. data/app/controllers/avocado/specs_controller.rb +32 -2
  12. data/app/views/avocado/specs/index.html.erb +51 -0
  13. data/app/views/layouts/avocado.html.erb +20 -0
  14. data/config/routes.rb +1 -1
  15. data/lib/avocado-docs.rb +33 -15
  16. data/lib/avocado/adapters/base_adapter.rb +36 -0
  17. data/lib/avocado/adapters/cucumber_adapter.rb +15 -0
  18. data/lib/avocado/adapters/minitest_adapter.rb +10 -0
  19. data/lib/avocado/adapters/rspec_adapter.rb +13 -0
  20. data/lib/avocado/controller_patch.rb +24 -0
  21. data/lib/avocado/controller_response.rb +22 -0
  22. data/lib/avocado/cucumber.rb +14 -0
  23. data/lib/avocado/logger.rb +13 -0
  24. data/lib/avocado/minitest.rb +10 -23
  25. data/lib/avocado/rspec.rb +9 -18
  26. data/lib/avocado/serializers/request_serializer.rb +43 -0
  27. data/lib/avocado/serializers/resource_serializer.rb +20 -0
  28. data/lib/avocado/serializers/response_serializer.rb +16 -0
  29. data/lib/avocado/{request_store.rb → storage.rb} +6 -9
  30. data/lib/avocado/uploader.rb +41 -31
  31. data/lib/avocado/version.rb +1 -1
  32. metadata +59 -55
  33. data/app/assets/javascripts/avocado/angular-route.min.js +0 -14
  34. data/app/assets/javascripts/avocado/angular.min.js +0 -235
  35. data/app/assets/javascripts/avocado/app.js.coffee +0 -4
  36. data/app/assets/javascripts/avocado/controllers/avocado_ctrl.js.coffee +0 -93
  37. data/app/assets/javascripts/avocado/md5.js +0 -19
  38. data/app/assets/javascripts/avocado/services/endpoint.js.coffee +0 -23
  39. data/app/assets/javascripts/avocado/services/resource.js.coffee +0 -5
  40. data/app/assets/javascripts/avocado/services/response.js.coffee +0 -9
  41. data/app/assets/javascripts/avocado/ui-utils.min.js +0 -7
  42. data/app/controllers/avocado/avocado_controller.rb +0 -20
  43. data/app/models/avocado/endpoint.rb +0 -13
  44. data/app/models/avocado/parser.rb +0 -56
  45. data/app/models/avocado/request.rb +0 -37
  46. data/app/models/avocado/resource.rb +0 -17
  47. data/app/views/layouts/avocado/avocado.html.erb +0 -15
  48. data/app/views/template.html.erb +0 -46
  49. data/lib/avocado/config.rb +0 -36
  50. data/lib/avocado/controller.rb +0 -26
  51. data/lib/avocado/middleware.rb +0 -37
  52. data/lib/avocado/middleware/defaults.rb +0 -17
  53. data/lib/avocado/middleware/document_if_configuration.rb +0 -12
  54. data/lib/avocado/middleware/document_metadata.rb +0 -14
  55. data/lib/avocado/middleware/example_serialization.rb +0 -10
  56. data/lib/avocado/middleware/ignore_xhr_requests.rb +0 -10
  57. data/lib/avocado/middleware/request_serialization.rb +0 -48
  58. data/lib/avocado/middleware/resource_serialization.rb +0 -20
  59. data/lib/avocado/middleware/response_serialization.rb +0 -20
  60. data/lib/avocado/packages/minitest_package.rb +0 -15
  61. data/lib/avocado/packages/package.rb +0 -23
  62. data/lib/avocado/packages/rspec_package.rb +0 -15
@@ -0,0 +1,24 @@
1
+ # This concern gets patched into ActionController::Base during testing
2
+ # The after_action will ensure every request gets documented regardless of the
3
+ # type of test (controller, integration, etc)
4
+ module Avocado
5
+ module ControllerPatch
6
+ def self.included(base)
7
+ base.around_action :_avocado_store_request
8
+ end
9
+
10
+ def self.apply
11
+ ActionController::Base.send :include, Avocado::ControllerPatch
12
+ end
13
+
14
+ def _avocado_store_request
15
+ yield
16
+ ensure
17
+ Avocado.storage.store(request, response) if _avocado_response.documentable?
18
+ end
19
+
20
+ def _avocado_response
21
+ @__avocado_response ||= Avocado::ControllerResponse.new response
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ module Avocado
2
+ class ControllerResponse
3
+ def initialize(response)
4
+ @response = response
5
+ end
6
+
7
+ def documentable?
8
+ blank_204? || json?
9
+ end
10
+
11
+ private
12
+ def blank_204?
13
+ @response.status == 204 && @response.body.blank?
14
+ end
15
+
16
+ def json?
17
+ JSON.parse @response.body
18
+ rescue JSON::ParserError, TypeError
19
+ false
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ Avocado::ControllerPatch.apply
2
+
3
+ After do |scenario|
4
+ request = Avocado.storage.request
5
+ response = Avocado.storage.response
6
+ adapter = Avocado::Adapters::CucumberAdapter.new scenario, request, response
7
+
8
+ Avocado.uploader.payload << adapter.to_h if adapter.upload?
9
+ Avocado.storage.clear
10
+ end
11
+
12
+ at_exit do
13
+ Avocado.uploader.upload
14
+ end
@@ -0,0 +1,13 @@
1
+ require 'logger'
2
+
3
+ module Avocado
4
+ module Logger
5
+ def logger
6
+ @_logger ||= begin
7
+ logger = ::Logger.new STDOUT
8
+ logger.formatter = proc { |_, _, _, msg| "\n[Avocado] #{msg}\n" }
9
+ logger
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,36 +1,23 @@
1
- module MinitestAvocadoPlugin
1
+ module Avocado::Minitest
2
2
  def before_setup
3
3
  super
4
- ActionController::Base.send :include, Avocado::Controller
5
- ActionController::API.send :include, Avocado::Controller if defined?(ActionController::API)
4
+ Avocado::ControllerPatch.apply
6
5
  end
7
6
 
8
7
  def before_teardown
9
8
  super
10
- request = Avocado::RequestStore.instance.request
11
- response = Avocado::RequestStore.instance.response
12
9
 
13
- if request && response
14
- package = Avocado::Packages::MinitestPackage.new(name, request, response)
15
- Avocado::Middleware.invoke(package) do
16
- Avocado::Uploader.instance.payload << Avocado::RequestStore.instance.json
17
- end
18
- end
10
+ request = Avocado.storage.request
11
+ response = Avocado.storage.response
12
+ adapter = Avocado::Adapters::MinitestAdapter.new name, request, response
19
13
 
20
- Avocado::RequestStore.instance.reset!
14
+ Avocado.uploader.payload << adapter.to_h if adapter.upload?
15
+ Avocado.storage.clear
21
16
  end
22
17
  end
23
18
 
24
- class MiniTest::Test
25
- include MinitestAvocadoPlugin
26
- end
19
+ Minitest::Test.send :include, Avocado::Minitest
27
20
 
28
- if MiniTest::Unit.respond_to? :after_run
29
- MiniTest::Unit.after_run do
30
- Avocado::Uploader.instance.upload!
31
- end
32
- else
33
- MiniTest.after_run do
34
- Avocado::Uploader.instance.upload!
35
- end
21
+ Minitest.after_run do
22
+ Avocado.uploader.upload
36
23
  end
@@ -1,30 +1,21 @@
1
1
  RSpec.configure do |config|
2
-
3
2
  config.before(:suite) do
4
- ActionController::Base.send :include, Avocado::Controller
5
- ActionController::API.send :include, Avocado::Controller if defined?(ActionController::API)
3
+ Avocado::ControllerPatch.apply
6
4
  end
7
5
 
8
- # Invoke all middleware with the request/response stored from the after_action in the controller
9
- # The final action is to store the request JSON in the Avocado module until after(:suite) executes
10
6
  config.after(:each) do |ex|
11
- _ex = defined?(example) ? example : ex
12
- request = Avocado::RequestStore.instance.request
13
- response = Avocado::RequestStore.instance.response
7
+ # Older versions of RSpec use the global `example` object
8
+ spec = defined?(example) ? example : ex
14
9
 
15
- if request && response
16
- package = Avocado::Packages::RSpecPackage.new(_ex, request, response)
17
- Avocado::Middleware.invoke(package) do
18
- Avocado::Uploader.instance.payload << Avocado::RequestStore.instance.json
19
- end
20
- end
10
+ request = Avocado.storage.request
11
+ response = Avocado.storage.response
12
+ adapter = Avocado::Adapters::RSpecAdapter.new spec, request, response
21
13
 
22
- Avocado::RequestStore.instance.reset!
14
+ Avocado.uploader.payload << adapter.to_h if adapter.upload?
15
+ Avocado.storage.clear
23
16
  end
24
17
 
25
- # Upload avocado.json to the configured URL if one is given
26
18
  config.after(:suite) do
27
- Avocado::Uploader.instance.upload!
19
+ Avocado.uploader.upload
28
20
  end
29
-
30
21
  end
@@ -0,0 +1,43 @@
1
+ module Avocado
2
+ module Serializers
3
+ class RequestSerializer
4
+ def initialize(request)
5
+ @request = request
6
+ end
7
+
8
+ def to_h
9
+ {
10
+ method: @request.method,
11
+ path: @request.path,
12
+ params: sanitize_params(@request.params).to_h,
13
+ headers: headers
14
+ }
15
+ end
16
+
17
+ private
18
+ def headers
19
+ hash = {}
20
+ Avocado.headers.each do |name|
21
+ hash[name] = @request.headers.env["HTTP_#{name.tr('-', '_')}".upcase]
22
+ end
23
+ hash.select { |_, value| !value.nil? }
24
+ end
25
+
26
+ def sanitize_params(params)
27
+ params = params.except *Avocado.ignored_params.flatten
28
+ deep_replace_file_uploads_with_text params
29
+ params
30
+ end
31
+
32
+ def deep_replace_file_uploads_with_text(hash)
33
+ hash.each do |k, v|
34
+ if v.respond_to? :eof
35
+ hash[k] = '<Multipart File Upload>'
36
+ elsif v.is_a? Hash
37
+ deep_replace_file_uploads_with_text v
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ module Avocado
2
+ module Serializers
3
+ class ResourceSerializer
4
+ def initialize(request)
5
+ @request = request
6
+ end
7
+
8
+ def to_h
9
+ { name: infer_resource_name_from_request }
10
+ end
11
+
12
+ private
13
+ def infer_resource_name_from_request
14
+ controller = @request.params[:controller]
15
+ name = controller.partition('/').reject(&:blank?).last
16
+ name.titleize.split('/').last
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ module Avocado
2
+ module Serializers
3
+ class ResponseSerializer
4
+ def initialize(response)
5
+ @response = response
6
+ end
7
+
8
+ def to_h
9
+ {
10
+ body: @response.body,
11
+ status: @response.status
12
+ }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,22 +1,19 @@
1
1
  # Temporarily store a JSON request/response. Ultimately RSpec will determine
2
2
  # if this request/response gets documented or not in an after(:each) block
3
3
  module Avocado
4
- class RequestStore
4
+ class Storage
5
5
  include Singleton
6
6
 
7
- attr_accessor :request, :response, :json
7
+ attr_accessor :request, :response
8
8
 
9
9
  def store(request, response)
10
- @json = {}
11
- @request = request
10
+ @request = request
12
11
  @response = response
13
12
  end
14
13
 
15
- def reset!
16
- @json = nil
17
- @request = nil
14
+ def clear
15
+ @request = nil
18
16
  @response = nil
19
17
  end
20
-
21
18
  end
22
- end
19
+ end
@@ -1,54 +1,64 @@
1
+ require 'net/http/post/multipart'
2
+
1
3
  module Avocado
2
4
  class Uploader
3
5
  include Singleton
6
+ include Logger
4
7
 
5
8
  attr_accessor :payload
6
9
 
7
10
  def initialize
11
+ reset
12
+ end
13
+
14
+ def reset
8
15
  @payload = []
9
16
  end
10
17
 
11
- def upload!
12
- return unless should_upload?
13
- WebMock.allow_net_connect! if defined? WebMock
14
- write_payload_to_json_file do |file|
15
- request = Net::HTTP::Post::Multipart.new uri.path, 'file' => UploadIO.new(file, 'text/json', 'avocado.json')
16
- net_request = Net::HTTP.new(uri.host, uri.port)
17
- net_request.use_ssl = (uri.scheme == 'https')
18
- response = net_request.start { |http| http.request(request) }
19
-
20
- if response.is_a?(Net::HTTPRedirection)
21
- raise "Avocado was redirected to '#{response['location']}', update your initializer!"
22
- else
23
- response
24
- end
18
+ def upload
19
+ return if payload.blank? || url.blank?
20
+
21
+ response = Net::HTTP.start(url.host, url.port, use_ssl: https?) do |http|
22
+ http.request multipart_req
23
+ end
24
+
25
+ if success? response
26
+ logger.info "Successfully uploaded to #{url}"
27
+ else
28
+ logger.error "Failed to upload to #{url} (response code #{response.code}). Full response:"
29
+ logger.error response.body
25
30
  end
26
- ensure
27
- WebMock.disable_net_connect! if defined? WebMock
31
+ end
32
+
33
+ def url
34
+ URI.parse Avocado.url.to_s if Avocado.url
35
+ rescue URI::InvalidURIError
36
+ logger.error "Could not parse the URI #{Avocado.url}--Avocado will not upload documentation!"
37
+ nil
28
38
  end
29
39
 
30
40
  private
41
+ def multipart_req
42
+ @_multipart_req ||= Net::HTTP::Post::Multipart.new url.path, file: uploadable_file, upload_id: upload_id
43
+ end
31
44
 
32
- def write_payload_to_json_file(&block)
33
- file = File.open 'avocado.json', 'w+:UTF-8'
34
- file.write JSON[payload]
35
- file.rewind
36
- yield file
37
- ensure
38
- file.close
39
- File.delete file.path
45
+ def uploadable_file
46
+ @_uploadable_file ||= begin
47
+ file = StringIO.new JSON[payload]
48
+ UploadIO.new file, 'application/json'
49
+ end
40
50
  end
41
51
 
42
- def should_upload?
43
- payload.present? && Avocado::Config.url.presence
52
+ def upload_id
53
+ @_upload_id ||= Avocado.upload_id.call
44
54
  end
45
55
 
46
- def uri
47
- @_uri ||= URI.parse Avocado::Config.url
48
- rescue URI::InvalidURIError
49
- raise "Avocado::Config.url is set but is not a valid URL!"
56
+ def https?
57
+ url.to_s.include? 'https://'
50
58
  end
51
59
 
60
+ def success?(response)
61
+ (200..399).cover? response.code.to_i
62
+ end
52
63
  end
53
64
  end
54
-
@@ -1,3 +1,3 @@
1
1
  module Avocado
2
- VERSION = '3.0.10'
2
+ VERSION = '3.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,99 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avocado-docs
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.10
4
+ version: 3.1.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: 2015-08-13 00:00:00.000000000 Z
11
+ date: 2016-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
- version: 4.0.0
19
+ version: '4'
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
- version: 4.0.0
26
+ version: '4'
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
- version: '1.1'
33
+ version: '2'
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
- version: '1.1'
40
+ version: '2'
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
- version: '2.14'
61
+ version: '3.0'
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
- version: '2.14'
68
+ version: '3.0'
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
+ - !ruby/object:Gem::Dependency
98
+ name: timecop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  description: Avocado listens for JSON responses in the test environment and generates
98
112
  a YAML file describing them, which it sends to a configurable URL.
99
113
  email:
@@ -105,47 +119,37 @@ files:
105
119
  - MIT-LICENSE
106
120
  - Rakefile
107
121
  - 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
122
+ - app/assets/javascripts/avocado/app.coffee
111
123
  - 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
124
+ - app/assets/javascripts/avocado/avocado-ctrl.coffee
125
+ - app/assets/javascripts/avocado/factories/request.coffee
126
+ - app/assets/javascripts/avocado/factories/resource.coffee
127
+ - app/assets/javascripts/avocado/factories/response.coffee
128
+ - app/assets/javascripts/avocado/factories/spec.coffee
129
+ - app/assets/javascripts/avocado/filters/request-method-filter.coffee
130
+ - app/assets/javascripts/avocado/filters/response-status-filter.coffee
119
131
  - app/assets/stylesheets/avocado/application.css.scss
120
132
  - app/assets/stylesheets/avocado/bootstrap.css
121
- - app/controllers/avocado/avocado_controller.rb
122
133
  - app/controllers/avocado/specs_controller.rb
123
- - app/models/avocado/endpoint.rb
124
- - app/models/avocado/parser.rb
125
- - app/models/avocado/request.rb
126
- - app/models/avocado/resource.rb
127
- - app/views/layouts/avocado/avocado.html.erb
128
- - app/views/template.html.erb
134
+ - app/views/avocado/specs/index.html.erb
135
+ - app/views/layouts/avocado.html.erb
129
136
  - config/routes.rb
130
137
  - lib/avocado-docs.rb
131
- - lib/avocado/config.rb
132
- - lib/avocado/controller.rb
138
+ - lib/avocado/adapters/base_adapter.rb
139
+ - lib/avocado/adapters/cucumber_adapter.rb
140
+ - lib/avocado/adapters/minitest_adapter.rb
141
+ - lib/avocado/adapters/rspec_adapter.rb
142
+ - lib/avocado/controller_patch.rb
143
+ - lib/avocado/controller_response.rb
144
+ - lib/avocado/cucumber.rb
133
145
  - lib/avocado/engine.rb
134
- - lib/avocado/middleware.rb
135
- - lib/avocado/middleware/defaults.rb
136
- - lib/avocado/middleware/document_if_configuration.rb
137
- - lib/avocado/middleware/document_metadata.rb
138
- - lib/avocado/middleware/example_serialization.rb
139
- - lib/avocado/middleware/ignore_xhr_requests.rb
140
- - lib/avocado/middleware/request_serialization.rb
141
- - lib/avocado/middleware/resource_serialization.rb
142
- - lib/avocado/middleware/response_serialization.rb
146
+ - lib/avocado/logger.rb
143
147
  - lib/avocado/minitest.rb
144
- - lib/avocado/packages/minitest_package.rb
145
- - lib/avocado/packages/package.rb
146
- - lib/avocado/packages/rspec_package.rb
147
- - lib/avocado/request_store.rb
148
148
  - lib/avocado/rspec.rb
149
+ - lib/avocado/serializers/request_serializer.rb
150
+ - lib/avocado/serializers/resource_serializer.rb
151
+ - lib/avocado/serializers/response_serializer.rb
152
+ - lib/avocado/storage.rb
149
153
  - lib/avocado/uploader.rb
150
154
  - lib/avocado/version.rb
151
155
  homepage: http://github.com/metova/avocado
@@ -157,17 +161,17 @@ require_paths:
157
161
  - lib
158
162
  required_ruby_version: !ruby/object:Gem::Requirement
159
163
  requirements:
160
- - - ! '>='
164
+ - - ">="
161
165
  - !ruby/object:Gem::Version
162
166
  version: '0'
163
167
  required_rubygems_version: !ruby/object:Gem::Requirement
164
168
  requirements:
165
- - - ! '>='
169
+ - - ">="
166
170
  - !ruby/object:Gem::Version
167
171
  version: '0'
168
172
  requirements: []
169
173
  rubyforge_project:
170
- rubygems_version: 2.4.5
174
+ rubygems_version: 2.6.6
171
175
  signing_key:
172
176
  specification_version: 4
173
177
  summary: Automatic API documentation from RSpec tests