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.
Files changed (37) hide show
  1. checksums.yaml +5 -13
  2. data/app/assets/images/avocado/filter-icon.png +0 -0
  3. data/app/assets/javascripts/avocado/angular-route.min.js +14 -0
  4. data/app/assets/javascripts/avocado/angular.min.js +235 -0
  5. data/app/assets/javascripts/avocado/app.js.coffee +4 -0
  6. data/app/assets/javascripts/avocado/application.js.coffee +30 -0
  7. data/app/assets/javascripts/avocado/controllers/avocado_ctrl.js.coffee +92 -0
  8. data/app/assets/javascripts/avocado/md5.js +19 -0
  9. data/app/assets/javascripts/avocado/services/endpoint.js.coffee +23 -0
  10. data/app/assets/javascripts/avocado/services/request.js.coffee +12 -0
  11. data/app/assets/javascripts/avocado/services/resource.js.coffee +5 -0
  12. data/app/assets/javascripts/avocado/services/response.js.coffee +9 -0
  13. data/app/assets/javascripts/avocado/ui-utils.min.js +7 -0
  14. data/app/assets/stylesheets/avocado/application.css.scss +110 -119
  15. data/app/controllers/avocado/avocado_controller.rb +4 -5
  16. data/app/views/layouts/avocado/avocado.html.erb +4 -3
  17. data/app/views/template.html.erb +43 -51
  18. data/lib/avocado-docs.rb +5 -16
  19. data/lib/avocado/config.rb +7 -4
  20. data/lib/avocado/controller.rb +9 -5
  21. data/lib/avocado/middleware/defaults.rb +2 -0
  22. data/lib/avocado/middleware/document_metadata.rb +4 -4
  23. data/lib/avocado/middleware/example_serialization.rb +2 -2
  24. data/lib/avocado/middleware/ignore_xhr_requests.rb +10 -0
  25. data/lib/avocado/middleware/request_serialization.rb +7 -6
  26. data/lib/avocado/middleware/resource_serialization.rb +6 -8
  27. data/lib/avocado/middleware/response_serialization.rb +3 -2
  28. data/lib/avocado/packages/package.rb +23 -0
  29. data/lib/avocado/packages/rspec_package.rb +15 -0
  30. data/lib/avocado/request_store.rb +22 -0
  31. data/lib/avocado/rspec.rb +11 -8
  32. data/lib/avocado/uploader.rb +28 -8
  33. data/lib/avocado/version.rb +1 -1
  34. metadata +32 -19
  35. data/app/assets/javascripts/avocado/application.js +0 -21
  36. data/app/helpers/avocado/application_helper.rb +0 -4
  37. data/lib/avocado/cache.rb +0 -20
@@ -2,7 +2,7 @@ module Avocado
2
2
  class Config
3
3
  class << self
4
4
 
5
- attr_accessor :url, :headers, :document_if, :yaml_path, :ignored_params
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 yaml_path
20
- @yaml_path || Rails.application.root
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 = @document_if = @yaml_path = @ignored_params = nil
28
+ @headers = nil
29
+ @document_if = nil
30
+ @json_path = nil
31
+ @ignored_params = nil
29
32
  end
30
33
 
31
34
  end
@@ -6,17 +6,21 @@ module Avocado
6
6
  extend ActiveSupport::Concern
7
7
 
8
8
  included do
9
- after_action -> do
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(example, *)
6
- if example.metadata[:document] == false
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,8 +1,8 @@
1
1
  module Avocado
2
2
  class Middleware::ExampleSerialization
3
3
 
4
- def call(example, *)
5
- Avocado::Cache.json[:description] = example.description
4
+ def call(package)
5
+ Avocado::RequestStore.instance.json[:description] = package.description
6
6
  yield
7
7
  end
8
8
 
@@ -0,0 +1,10 @@
1
+ module Avocado
2
+ class Middleware::IgnoreXhrRequests
3
+
4
+ # return false and bail if the request is AJAX
5
+ def call(package)
6
+ yield !package.request.xhr?
7
+ end
8
+
9
+ end
10
+ end
@@ -1,9 +1,9 @@
1
1
  module Avocado
2
2
  class Middleware::RequestSerialization
3
3
 
4
- def call(example, request, response)
5
- @request = request
6
- Avocado::Cache.json.merge! request: serialize(@request)
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
- if Hash === v
37
+ case v
38
+ when Hash
38
39
  deep_replace_file_uploads_with_text(v)
39
- else
40
- hash[k] = '<Multipart File Upload>' if v.respond_to? :path
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(example, request, response)
5
- name = infer_name_from_route(request.path, request.method) || ""
6
- Avocado::Cache.json.merge! resource: { name: name }
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 infer_name_from_route(path, method)
13
- controller = Rails.application.routes.recognize_path(path, method: method)[: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(example, request, response)
5
- Avocado::Cache.json.merge! response: serialize(response)
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,15 @@
1
+ module Avocado
2
+ module Packages
3
+ class RSpecPackage < Package
4
+
5
+ def description
6
+ example.description
7
+ end
8
+
9
+ def document?
10
+ example.metadata[:document] != false
11
+ end
12
+
13
+ end
14
+ end
15
+ 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
@@ -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
- _example = defined?(example) ? example : ex
12
- request = Avocado::Cache.request
13
- response = Avocado::Cache.response
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::Middleware.invoke(_example, request, response) do
17
- Avocado.payload << Avocado::Cache.json
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::Cache.clean
22
+ Avocado::RequestStore.instance.reset!
22
23
  end
23
24
 
24
- # Upload avocado.yml to the configured URL if one is given
25
- config.after(:suite) { Avocado.upload! }
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
@@ -1,22 +1,42 @@
1
1
  module Avocado
2
2
  class Uploader
3
+ include Singleton
3
4
 
4
- def upload(filename)
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
- uri = URI.parse Avocado::Config.url
7
- file = File.open(filename)
8
- req = Net::HTTP::Post::Multipart.new uri.path, 'file' => UploadIO.new(file, 'text/yaml', 'avocado.yml')
9
- Net::HTTP.start(uri.host, uri.port) { |http| http.request(req) }
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
- @uri ||= URI.parse Avocado::Config.url
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
@@ -1,3 +1,3 @@
1
1
  module Avocado
2
- VERSION = "2.0.6"
2
+ VERSION = "3.0.0"
3
3
  end
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: 2.0.6
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-07-09 00:00:00.000000000 Z
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/javascripts/avocado/application.js
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: []