smashing_docs 1.0.0 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31bc78abe84edc9c4717b1b0d1c792c23cef3cdc
4
- data.tar.gz: 8f1dce8a1fd1be5e34512a7ac4c2847142d6881e
3
+ metadata.gz: 26647e5613a7de2ae48b1b45290021d6421c2fbc
4
+ data.tar.gz: d3895c49e8d1f5cc6703cc9fc3e03d599794068f
5
5
  SHA512:
6
- metadata.gz: 59e40621f291e1b6af8e0cff399de36ef81c0c6ac20e2c41b00c43e6c6b6d64b47c40dab566816ae2eaa659618057a41108fcaad5ac6f60fd5ac86b4b9300778
7
- data.tar.gz: 1b32b71daeba769df485cd1318da17c877f9444981956df1b7837aac5b06f83b539620a93e3a216ad176735cbe239be8794d4932609669e3ba228dcd573ec55d
6
+ metadata.gz: dab20613149d2467798fe72dc8fbaa72980c82514a499eed11f2bf6c079b6a79990e82b479af5d415188910ffac121937f4da5586f9a8bba7c787ef5964952a9
7
+ data.tar.gz: d6946b59dd25a634d646d6951d7e222affb951b2ce9fce69b90fde20aa1d09317f37b03b26419b6b27c88cace31955e13b78d62a5f7e24551721191a37eb5f0f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- smashing_docs (0.0.2)
4
+ smashing_docs (1.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -17,8 +17,12 @@ After you bundle, run:
17
17
  `rails generate smashing_documentation:install`
18
18
 
19
19
  SmashingDocs will be configured to run on all your controller tests with the default
20
- template, whenever you run your tests. Your API documentation will appear in the smashing_docs
21
- folder in the root of your Rails app.
20
+ template.
21
+
22
+ #### To generate your docs
23
+
24
+ Run `rails g smashing_documentation:build_docs`, and your docs will be waiting for you
25
+ in the `smashing_docs` folder.
22
26
 
23
27
  ## Manual RSpec Installation
24
28
 
@@ -43,7 +47,7 @@ RSpec.configure do |config|
43
47
  config.after(:each, type: :controller) do
44
48
  SmashingDocs.run!(request, response, true)
45
49
  end
46
- config.after(:suite) { SmashingDocs.finish! }
50
+ # config.after(:suite) { SmashingDocs.finish! }
47
51
  end
48
52
  ```
49
53
 
@@ -142,6 +146,7 @@ end
142
146
  ```
143
147
 
144
148
  #### Adding information, e.g. notes
149
+
145
150
  SmashingDocs will log all requests and responses by default, but you can add some
146
151
  **optional** parameters as well.
147
152
 
@@ -153,3 +158,27 @@ end
153
158
  ```
154
159
  You can store any information with `:note`, `:message`, or any other key you can think of.
155
160
  To access information in the template, just use `<%= information[:key] %>`
161
+
162
+ #### Auto-Push Docs to Your Project Wiki
163
+
164
+ SmashingDocs can automatically push your generated docs to your project wiki.
165
+
166
+ **To enable this feature**
167
+ 1. Clone your wiki repo from Github into the same parent folder as your app
168
+
169
+ Your folder structure should be
170
+
171
+ ../projects/my_rails_app
172
+
173
+ ../projects/my_rails_app.wiki
174
+
175
+ 2. Set auto_push to true in `spec_helper.rb` or `test_helper.rb`
176
+
177
+ ``` ruby
178
+ SmashingDocs.config do |c|
179
+ # configs
180
+ c.auto_push = true
181
+ end
182
+ ```
183
+
184
+ 3. Build your docs with `rails g smashing_documentation:build_docs`
@@ -115,4 +115,59 @@ RSpec.describe SmashingDocs do
115
115
  expect(tests.first.compile_template).to include("Endpoint note")
116
116
  end
117
117
  end
118
+
119
+ describe "#app_name" do
120
+ it "returns the name of the app it is installed in" do
121
+ expect(SmashingDocs.current.send(:app_name)).to eq("smashing_docs")
122
+ end
123
+ end
124
+
125
+ describe "#output_file" do
126
+ it "returns only the file name of the configured output file" do
127
+ expect(SmashingDocs.current.send(:output_file)).to eq("fake_output.md")
128
+ end
129
+ end
130
+
131
+ describe "#wiki_repo_exists(wiki_repo)" do
132
+ context "when the repo exists" do
133
+ let(:wiki_repo) { "../#{SmashingDocs.current.send(:app_name)}.wiki" }
134
+ it "returns true" do
135
+ expect(SmashingDocs.current.send(:wiki_repo_exists?, wiki_repo)).to eq(true)
136
+ end
137
+ end
138
+
139
+ context "when the repo does not exist" do
140
+ let(:wiki_repo) { "../ifyoumakethisdirectorythetestwillfail.wiki" }
141
+ it "returns false" do
142
+ expect(SmashingDocs.current.send(:wiki_repo_exists?, wiki_repo)).to eq(false)
143
+ end
144
+ end
145
+ end
146
+
147
+ describe "#copy_docs_to_wiki_repo(wiki_repo)" do
148
+ let(:wiki_repo) { "../#{SmashingDocs.current.send(:app_name)}.wiki" }
149
+ let(:output_file) { SmashingDocs.current.send(:output_file) }
150
+ it "makes a copy of the docs in the wiki folder" do
151
+ `rm -f ../smashing_docs.wiki/"#{output_file}"` # -f just in case the file's stubborn
152
+ expect(!File.exist?("../smashing_docs.wiki/#{output_file}"))
153
+ SmashingDocs.current.send(:copy_docs_to_wiki_repo, wiki_repo)
154
+ expect(File.exist?("../smashing_docs.wiki/#{output_file}"))
155
+ end
156
+ end
157
+
158
+ describe "#auto_push?" do
159
+ context "when auto_push configuration is false" do
160
+ let!(:config) { SmashingDocs.config { |c| c.auto_push = false } }
161
+ it "returns false" do
162
+ expect(!SmashingDocs.current.send(:auto_push?))
163
+ end
164
+ end
165
+ context "when auto_push configuration is true" do
166
+ let!(:config) { SmashingDocs.config { |c| c.auto_push = true } }
167
+ it "returns true" do
168
+ expect(SmashingDocs.current.send(:auto_push?))
169
+ SmashingDocs.config { |c| c.auto_push = false } # Config stays changed without this line
170
+ end
171
+ end
172
+ end
118
173
  end
@@ -5,6 +5,7 @@ RSpec.describe SmashingDocs::Conf do
5
5
  SmashingDocs.config do |c|
6
6
  c.template_file = "gem_spec/fake_template.md.erb"
7
7
  c.output_file = "api_docs.md"
8
+ c.auto_push = false
8
9
  c.run_all = true
9
10
  end
10
11
  }
@@ -19,4 +20,8 @@ RSpec.describe SmashingDocs::Conf do
19
20
  it "sets run_all" do
20
21
  expect(SmashingDocs::Conf.run_all).to eq(true)
21
22
  end
23
+
24
+ it "sets the auto_push boolean" do
25
+ expect(!SmashingDocs::Conf.auto_push)
26
+ end
22
27
  end
@@ -30,13 +30,13 @@ RSpec.describe SmashingDocumentation::Generators::InstallGenerator, type: :gener
30
30
  end
31
31
  end
32
32
  end
33
-
34
33
  context "when rspec is not installed" do
35
34
  it "does not install smashing_docs" do
35
+ `rm -f "#{rails_helper}"`
36
36
  File.rename('spec', 's') if Dir.exists?('spec')
37
37
  run_generator
38
- expect(File).to_not exist(rails_helper)
39
38
  File.rename('s', 'spec') if Dir.exists?('s')
39
+ expect(File).to_not exist(rails_helper)
40
40
 
41
41
  # STDOUT is not tested here because it is suppressed in generator tests
42
42
  end
@@ -1,6 +1,5 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
  require 'smashing_docs'
3
-
4
3
  RSpec.configure do |config|
5
4
  config.expect_with :rspec do |expectations|
6
5
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
data/lib/base.rb CHANGED
@@ -16,6 +16,17 @@ class SmashingDocs
16
16
  @tests = []
17
17
  end
18
18
 
19
+ def add_docs_to_wiki
20
+ wiki_repo = "../#{app_name}.wiki"
21
+ if wiki_repo && wiki_repo_exists?(wiki_repo)
22
+ copy_docs_to_wiki_repo(wiki_repo)
23
+ push_docs_to_github(wiki_repo)
24
+ else
25
+ puts "Wiki folder was not found. Please set up and clone your"\
26
+ " wiki before using auto push"
27
+ end
28
+ end
29
+
19
30
  def information(key, value)
20
31
  @information[key] = value
21
32
  end
@@ -60,6 +71,10 @@ class SmashingDocs
60
71
  end
61
72
  end
62
73
 
74
+ def auto_push?
75
+ self.class::Conf.auto_push
76
+ end
77
+
63
78
  # = = = =
64
79
  # These class methods are used to persist test data across tests
65
80
  # RSpec and Minitest do not support hooks that would allow
@@ -69,6 +84,7 @@ class SmashingDocs
69
84
  unless current.tests.empty?
70
85
  current.sort_by_url!
71
86
  current.output_testcases_to_file
87
+ current.add_docs_to_wiki if current.auto_push?
72
88
  current.clean_up!
73
89
  end
74
90
  end
@@ -94,3 +110,30 @@ class SmashingDocs
94
110
  yield(self::Conf)
95
111
  end
96
112
  end
113
+ # = = = =
114
+ private
115
+
116
+ def app_name
117
+ directory = `pwd`
118
+ directory.match(/\w+\n/).to_s.gsub(/\n/, "")
119
+ end
120
+
121
+ def output_file
122
+ SmashingDocs::Conf.output_file.match(/\w+\.md/).to_s
123
+ end
124
+
125
+ def wiki_repo_exists?(wiki_repo)
126
+ File.exist?(wiki_repo)
127
+ end
128
+
129
+ def copy_docs_to_wiki_repo(wiki_repo)
130
+ `cp "#{SmashingDocs::Conf.output_file}" "#{wiki_repo}"`
131
+ end
132
+
133
+ def push_docs_to_github(wiki_repo)
134
+ Dir.chdir(wiki_repo) do
135
+ `git add "#{output_file}"`
136
+ `git commit -m "Update Docs -- Auto post by SmashingDocs"`
137
+ `git push`
138
+ end
139
+ end
data/lib/conf.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  class SmashingDocs::Conf
2
2
  class << self
3
- attr_accessor :template_file, :output_file, :run_all
4
-
3
+ attr_accessor :template_file, :output_file, :auto_push, :run_all
4
+ @output_file = 'documentation.md'
5
+
5
6
  def template
6
7
  raise 'You must set a template file.' unless template_file
7
8
  File.read(template_file)
@@ -0,0 +1,18 @@
1
+ require 'rails/generators'
2
+ module SmashingDocumentation
3
+ module Generators
4
+ class BuildDocsGenerator < Rails::Generators::Base
5
+ source_root File.expand_path("../../../templates/", __FILE__)
6
+ def build_docs
7
+ destination = "spec/spec_helper.rb"
8
+ if File.exist?(destination)
9
+ uncomment_lines(destination, /config.after\(:suite\) \{ SmashingDocs.finish! \}/)
10
+ `rspec spec`
11
+ comment_lines(destination, /config.after\(:suite\) \{ SmashingDocs.finish! \}/)
12
+ else
13
+ puts "Could not find spec/spec_helper.rb"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -24,6 +24,7 @@ module SmashingDocumentation
24
24
  "SmashingDocs.config do |c|\n"\
25
25
  " c.template_file = 'smashing_docs/template.md'\n"\
26
26
  " c.output_file = 'smashing_docs/api_docs.md'\n"\
27
+ " c.auto_push = false\n"\
27
28
  " c.run_all = true\n"\
28
29
  "end"
29
30
  ) unless File.readlines(destination).grep(/SmashingDocs.config/).any?
@@ -37,7 +38,7 @@ module SmashingDocumentation
37
38
  "\n config.after(:each, type: :controller) do\n"\
38
39
  " SmashingDocs.run!(request, response, true)\n"\
39
40
  " end\n"\
40
- " config.after(:suite) { SmashingDocs.finish! }",
41
+ " # config.after(:suite) { SmashingDocs.finish! }",
41
42
  after: "RSpec.configure do |config|"
42
43
  ) unless File.readlines(destination).grep(/SmashingDocs.finish/).any?
43
44
  end
@@ -1,16 +1,45 @@
1
+ ## <%= information[:endpoint_title] || ' ' %>
2
+
1
3
  #### <%= request.method %> <%= request.path %>
2
4
 
3
- <%= information[:note] %>
5
+ <%= information[:about] %>
4
6
 
5
- | Param | Value |
6
- | ----- | ----- |
7
- <%= table_entries = []
8
- request.params.except(:controller, :action, :format).each do |param, value|
7
+ ### Query Parameters
8
+ | Parameter | Value |
9
+ | --------- | ----- |
10
+ <%=
11
+ table_entries = []
12
+ request_params = request.params.except(:controller, :action, :format)
13
+ request_params.each do |param, value|
9
14
  table_entries << "| #{param} | #{value} |"
10
15
  end
11
- table_entries.join("\n") %>
12
16
 
13
- Response: <%= response.status %>
17
+ table_entries << "| none | nil |" if table_entries.empty?
18
+ table_entries.join("\n")
19
+ %>
20
+
21
+ ### Response
22
+ **Status: <%= response.status %>**
23
+
24
+ **Response Headers**
25
+
26
+ | Field | Value |
27
+ | ----- | ----- |
28
+ <%=
29
+ table_entries = []
30
+ response.headers.each do |header, value|
31
+ table_entries << "| #{header} | #{value} |"
32
+ end
33
+
34
+ table_entries << "| none | nil |" if table_entries.empty?
35
+ table_entries.join("\n")
36
+ %>
37
+
38
+ **JSON Example**
14
39
  ```json
15
40
  <%= JSON.pretty_generate(JSON.parse(response.body)) %>
16
41
  ```
42
+
43
+ <%= information[:note] %>
44
+
45
+ =================================================================================
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.require_paths = ['lib']
11
11
  s.summary = "Uses your test cases to write example documentation for your API."
12
12
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
13
- s.version = '1.0.0'
13
+ s.version = '1.1.0'
14
14
 
15
15
  s.add_development_dependency "bundler", "~> 1.11"
16
16
  s.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smashing_docs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Rockwell
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-02-24 00:00:00.000000000 Z
13
+ date: 2016-02-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -91,6 +91,7 @@ files:
91
91
  - gem_rspec/test_case_spec.rb
92
92
  - lib/base.rb
93
93
  - lib/conf.rb
94
+ - lib/generators/smashing_documentation/build_docs_generator.rb
94
95
  - lib/generators/smashing_documentation/install_generator.rb
95
96
  - lib/smashing_docs.rb
96
97
  - lib/templates/real_template.md