rspec-api-docs 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 45bd45a0a13f8512cf26c3406b17a461de6a6844
4
- data.tar.gz: 545d0fe44c9de8c1a33c3fe5285fb716ea611ee2
3
+ metadata.gz: a857b455227b03c4d95835fd82d250be2cc4435b
4
+ data.tar.gz: 85108372a0fd8bdd440ad098959cadd4acc979ce
5
5
  SHA512:
6
- metadata.gz: 4e2cd0a674337ac2e8683d5f9116a85f5bf01726482fd9300173653cd643ce3ae772edc6499dab21e62d701a9d2e6debcb706c5c4619b34c98283cf7ed8fcb4d
7
- data.tar.gz: 30877036d873b254345a13678b9f339c4c2972876e3b5e76de3dd0a6aed946a7347c63cd70b29417b5b50e588ab9b8510f951d74bd2feb746f2bdd6fcb602e62
6
+ metadata.gz: 6ecce2a07476e855f8b5f483818f672bda0af1d535f6f99f07c550db6dfa097e29b0122da85fd32e6097add999d1a10e96ef2524f0dca0b5d0cc533a9eba4eb8
7
+ data.tar.gz: d139049350af5da882800943f9078735bc49ccd90df096244b04dc766820c2e481afda8ac76d7a33b7d70c5730b82632f7e4a7f9826d21b9b5c7a13d01b9fa59
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
  require 'rubocop/rake_task'
4
+ require 'rspec_api_docs/rake_task'
4
5
 
5
6
  RSpec::Core::RakeTask.new :rspec do |task|
6
7
  task.verbose = false
@@ -15,4 +16,14 @@ task :generate_integration_docs do
15
16
  exit $?.exitstatus
16
17
  end
17
18
 
19
+ RspecApiDocs::RakeTask.new do |task|
20
+ task.verbose = false
21
+ task.rspec_opts = [
22
+ '--require ./spec/integration/json_helper.rb',
23
+ '--format progress',
24
+ ]
25
+ task.pattern = 'spec/integration/rspec_api_docs_spec.rb'
26
+ task.existing_file = 'spec/integration/output/json/index.json'
27
+ end
28
+
18
29
  task default: [:rspec, :rubocop, :generate_integration_docs]
@@ -1,3 +1,5 @@
1
+ require 'rspec_api_docs/formatter/resource/example/request_headers'
2
+
1
3
  module RspecApiDocs
2
4
  class Resource
3
5
  class Example
@@ -93,19 +95,8 @@ module RspecApiDocs
93
95
  metadata.fetch(:requests, []).reject { |pair| pair.any?(&:nil?) }
94
96
  end
95
97
 
96
- # http://stackoverflow.com/a/33235714/826820
97
98
  def request_headers(env)
98
- headers = Hash[
99
- *env.select { |k,v| k.start_with? 'HTTP_' }
100
- .collect { |k,v| [k.sub(/^HTTP_/, ''), v] }
101
- .collect { |k,v| [k.split('_').collect(&:capitalize).join('-'), v] }
102
- .sort.flatten
103
- ]
104
-
105
- # TODO: Extract, test, and document
106
- headers.reject do |k, v|
107
- RspecApiDocs.configuration.exclude_request_headers.include?(k)
108
- end
99
+ RequestHeaders.call(env)
109
100
  end
110
101
 
111
102
  def request_path(request)
@@ -0,0 +1,39 @@
1
+ module RspecApiDocs
2
+ class Resource
3
+ class Example
4
+ class RequestHeaders
5
+ attr_reader :env
6
+
7
+ def self.call(*args)
8
+ new(*args).call
9
+ end
10
+
11
+ def initialize(env)
12
+ @env = env
13
+ end
14
+
15
+ def call
16
+ headers.reject do |k, v|
17
+ excluded_headers.include?(k)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ # http://stackoverflow.com/a/33235714/826820
24
+ def headers
25
+ Hash[
26
+ *env.select { |k, v| k.start_with? 'HTTP_' }
27
+ .collect { |k, v| [k.sub(/^HTTP_/, ''), v] }
28
+ .collect { |k, v| [k.split('_').collect(&:capitalize).join('-'), v] }
29
+ .sort.flatten
30
+ ]
31
+ end
32
+
33
+ def excluded_headers
34
+ RspecApiDocs.configuration.exclude_request_headers
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,91 @@
1
+ require 'pry'
2
+ require 'rake'
3
+ require 'rspec'
4
+ require 'json'
5
+ require 'rspec_api_docs/config'
6
+
7
+ module RspecApiDocs
8
+ class RakeTask < ::Rake::TaskLib
9
+ module RSpecMatchers
10
+ extend RSpec::Matchers
11
+ end
12
+
13
+ attr_reader :name
14
+
15
+ attr_accessor \
16
+ :verbose,
17
+ :pattern,
18
+ :rspec_opts,
19
+ :existing_file,
20
+ :dir
21
+
22
+ def initialize(name = nil, &block)
23
+ @name = name || :'docs:ensure_updated'
24
+ @verbose = true
25
+ @pattern = 'spec/requests/**/*_spec.rb'
26
+ @rspec_opts = []
27
+ @existing_file = 'docs/index.json'
28
+
29
+ block.call(self)
30
+
31
+ define
32
+ end
33
+
34
+ private
35
+
36
+ def define
37
+ desc 'Ensure API docs are up to date'
38
+ task name do
39
+ @dir = Dir.mktmpdir
40
+
41
+ rspec_task.run_task(verbose)
42
+
43
+ configure_rspec
44
+
45
+ RSpecMatchers.expect(generated).to RSpecMatchers.eq(existing)
46
+
47
+ remove_dir
48
+ end
49
+ end
50
+
51
+ def generated
52
+ JSON.parse(File.read(Pathname.new(dir) + 'index.json'))
53
+ end
54
+
55
+ def existing
56
+ JSON.parse(File.read(existing_file))
57
+ end
58
+
59
+ def rspec_task
60
+ RSpec::Core::RakeTask.new.tap do |task|
61
+ task.pattern = pattern
62
+ task.rspec_opts = rspec_opts + [
63
+ '--format RspecApiDocs::Formatter',
64
+ '--order defined',
65
+ "--require #{spec_helper.path}",
66
+ ]
67
+ end
68
+ end
69
+
70
+ def spec_helper
71
+ tempfile = Tempfile.new(['shoebox', '.rb'])
72
+ tempfile.write <<-EOF
73
+ RspecApiDocs.configure do |config|
74
+ config.output_dir = '#{dir}'
75
+ end
76
+ EOF
77
+ tempfile.close
78
+ tempfile
79
+ end
80
+
81
+ def configure_rspec
82
+ RSpec.configure do |config|
83
+ config.color = true
84
+ end
85
+ end
86
+
87
+ def remove_dir
88
+ FileUtils.remove_entry dir
89
+ end
90
+ end
91
+ end
@@ -1,3 +1,3 @@
1
1
  module RspecApiDocs
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-api-docs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Odin Dutton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-03 00:00:00.000000000 Z
11
+ date: 2017-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -149,8 +149,10 @@ files:
149
149
  - lib/rspec_api_docs/formatter/renderer/slate_renderer/slate_index.html.md.erb
150
150
  - lib/rspec_api_docs/formatter/resource.rb
151
151
  - lib/rspec_api_docs/formatter/resource/example.rb
152
+ - lib/rspec_api_docs/formatter/resource/example/request_headers.rb
152
153
  - lib/rspec_api_docs/formatter/resource/parameter.rb
153
154
  - lib/rspec_api_docs/formatter/resource/response_field.rb
155
+ - lib/rspec_api_docs/rake_task.rb
154
156
  - lib/rspec_api_docs/version.rb
155
157
  - rspec-api-docs.gemspec
156
158
  homepage: https://github.com/twe4ked
@@ -173,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
175
  version: '0'
174
176
  requirements: []
175
177
  rubyforge_project:
176
- rubygems_version: 2.5.2
178
+ rubygems_version: 2.5.1
177
179
  signing_key:
178
180
  specification_version: 4
179
181
  summary: Generate API documentation using RSpec