ghost_writer 0.4.2 → 0.5.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: 7aaf1da751c9da1f4bd95426076de33da3ed4bb8
4
- data.tar.gz: 59d7e48cdf34b773da063196e78a6215c5dab391
3
+ metadata.gz: 1dc0e5d084163ec03337241b84977a9e80c28756
4
+ data.tar.gz: 1e81c300e26e4b3f33333dd3e773e3c7a5b08b33
5
5
  SHA512:
6
- metadata.gz: 1473fc739dbbc1274784edb02e52948b67591be47ca3fa30fa7930555c254877968a544fe5f695594eb75c903ab7413b30cc2c7608f0fd9f1ad2b5d8e97c3a46
7
- data.tar.gz: 14d93f8b53bfbb364a078f5bcfe7a86de4224fdc0e761113e227cfcd0351652ebc93d3ba66ca5ba90d9aabda70ddfaba828c9b5c11e878b9e4c47b16645fd3be
6
+ metadata.gz: 355426a71839e8a7af4513a2b4c0e096de8bb386c6c3e8ec486b95048f4e6e48c474a22a4a5dd79fec19ba27e7748092cbb8357df99b1faa0cefcda7bf010e73
7
+ data.tar.gz: 44e85808ba039ede8e92e095e2cdc9123b1d886d24f64eac3fcb46c021cabb1b83ffa0fb2d5709e009b735c27ecabdb429ba26fd880aef56618cc04a5952eee1
data/.gitignore CHANGED
@@ -15,3 +15,8 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+
19
+ /api_docs
20
+ /api_examples
21
+
22
+ gemfiles/*.lock
@@ -1,8 +1,17 @@
1
1
  language: ruby
2
- script: "bundle exec rake spec build"
3
2
  rvm:
4
3
  - 1.9.3
5
4
  - 2.0.0
5
+ - 2.1
6
+
7
+ gemfile:
8
+ - gemfiles/rspec2.gemfile
9
+ - gemfiles/rspec3.gemfile
10
+
11
+ matrix:
12
+ allow_failures:
13
+ - rvm: 1.9.3
14
+
6
15
  notifications:
7
16
  email:
8
17
  on_success: never
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/ghost_writer.png)](http://badge.fury.io/rb/ghost_writer)
4
4
  [![Code Climate](https://codeclimate.com/github/joker1007/ghost_writer.png)](https://codeclimate.com/github/joker1007/ghost_writer)
5
5
 
6
- Generate API examples from params and response of controller specs
6
+ Generate API examples from params and response of controller/request specs
7
7
 
8
8
  ## Installation
9
9
 
data/Rakefile CHANGED
@@ -1,6 +1,27 @@
1
1
  require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
2
 
4
- RSpec::Core::RakeTask.new(:spec) do |t|
5
- t.rspec_opts = "--color --format d"
3
+ task :default => [:spec]
4
+ begin
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = 'spec/**/*_spec.rb'
8
+ spec.rspec_opts = ['-c -f d']
9
+ end
10
+ end
11
+
12
+ namespace :spec do
13
+ %w(rspec2 rspec3).each do |gemfile|
14
+ desc "Run Tests by #{gemfile}.gemfile"
15
+ task gemfile do
16
+ sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle install --path .bundle"
17
+ sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake -t spec"
18
+ end
19
+ end
20
+
21
+ desc "Run All Tests"
22
+ task :all do
23
+ %w(rspec2 rspec3).each do |gemfile|
24
+ Rake::Task["spec:#{gemfile}"].invoke
25
+ end
26
+ end
6
27
  end
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "rspec-rails", "~> 2.14"
4
+
5
+ gemspec path: "../"
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "rspec-rails", ">= 3.0.0.beta2", "< 3.1"
4
+
5
+ gemspec path: "../"
@@ -19,12 +19,14 @@ Gem::Specification.new do |gem|
19
19
  gem.require_paths = ["lib"]
20
20
 
21
21
  gem.add_dependency "activesupport", ">= 3.0.0"
22
- gem.add_dependency "rspec-rails", "~> 2.11"
22
+ gem.add_dependency "rspec-rails", ">= 2.12"
23
23
  gem.add_dependency "trollop"
24
- gem.add_dependency "multi_json"
24
+ gem.add_dependency "oj"
25
+ gem.add_dependency "json"
25
26
 
26
- gem.add_development_dependency "rspec-rails", "~> 2.12"
27
27
  gem.add_development_dependency 'rake', ['>= 0']
28
28
  gem.add_development_dependency 'rails', ['>= 3.2.9', '< 5']
29
+ gem.add_development_dependency 'sqlite3'
29
30
  gem.add_development_dependency 'tapp'
31
+ gem.add_development_dependency 'pry'
30
32
  end
@@ -2,6 +2,8 @@ require "ghost_writer/version"
2
2
  require "ghost_writer/document"
3
3
  require "ghost_writer/document_index"
4
4
  require "active_support/concern"
5
+ require "oj"
6
+ require "json"
5
7
 
6
8
  module GhostWriter
7
9
  extend ActiveSupport::Concern
@@ -27,10 +29,10 @@ module GhostWriter
27
29
 
28
30
  def generate_api_doc
29
31
  if output_flag
30
- unless File.exist?(output_path)
31
- FileUtils.mkdir_p(output_path)
32
+ unless File.exist?(output_dir)
33
+ FileUtils.mkdir_p(output_dir)
32
34
  end
33
- document_index = GhostWriter::DocumentIndex.new(output_path + "#{DOCUMENT_INDEX_FILENAME}", document_group, GhostWriter.output_format)
35
+ document_index = GhostWriter::DocumentIndex.new(output_dir + "#{DOCUMENT_INDEX_FILENAME}", document_group, GhostWriter.output_format)
34
36
  document_index.write_file(format: output_format)
35
37
  document_group.each do |output, docs|
36
38
  docs.sort_by!(&:location)
@@ -49,11 +51,7 @@ module GhostWriter
49
51
  end
50
52
 
51
53
  def output_dir
52
- @output_dir ? @output_dir : DEFAULT_OUTPUT_DIR
53
- end
54
-
55
- def output_path
56
- Rails.root + "doc" + output_dir
54
+ @output_dir ? Pathname(@output_dir) : Pathname(DEFAULT_OUTPUT_DIR)
57
55
  end
58
56
 
59
57
  def output_format
@@ -61,10 +59,10 @@ module GhostWriter
61
59
  end
62
60
  end
63
61
 
64
- def collect_example
65
- output = File.join(doc_dir, "#{doc_name}")
62
+ def collect_example(example)
63
+ output = doc_dir + doc_name(example)
66
64
  document = GhostWriter::Document.new(output, {
67
- title: "#{described_class} #{doc_name.titleize}",
65
+ title: "#{described_class} #{doc_name(example).titleize}",
68
66
  description: example.full_description.dup,
69
67
  location: example.location.dup,
70
68
  request_method: request.env["REQUEST_METHOD"],
@@ -81,10 +79,10 @@ module GhostWriter
81
79
 
82
80
  private
83
81
  def doc_dir
84
- GhostWriter.output_path + described_class.to_s.underscore
82
+ GhostWriter.output_dir + described_class.to_s.underscore
85
83
  end
86
84
 
87
- def doc_name
85
+ def doc_name(example)
88
86
  metadata = example.metadata[:generate_api_doc] || example.metadata[:ghost_writer]
89
87
  case metadata
90
88
  when String, Symbol
@@ -95,11 +93,14 @@ module GhostWriter
95
93
  end
96
94
 
97
95
  included do
98
- after do
96
+ after do |example_or_group|
97
+ example = example_or_group.is_a?(RSpec::Core::Example) ?
98
+ example_or_group :
99
+ example_or_group.example
99
100
  target_type = example.metadata[:type] == :controller || example.metadata[:type] == :request
100
101
  target_metadata = example.metadata[:generate_api_doc] || example.metadata[:ghost_writer]
101
102
  if target_type && target_metadata
102
- collect_example if GhostWriter.output_flag
103
+ collect_example(example) if GhostWriter.output_flag
103
104
  end
104
105
  end
105
106
  end
@@ -6,7 +6,7 @@ class GhostWriter::Document
6
6
 
7
7
  def initialize(basename, attrs)
8
8
  @basename = basename
9
- @relative_path = Pathname.new(basename).relative_path_from(GhostWriter.output_path)
9
+ @relative_path = basename
10
10
  @title = attrs[:title]
11
11
  @description = attrs[:description]
12
12
  @location = attrs[:location]
@@ -26,7 +26,10 @@ class GhostWriter::Document
26
26
  end
27
27
 
28
28
  def serialized_params
29
- MultiJson.dump(param_example)
29
+ Oj.dump(param_example)
30
+ rescue NoMemoryError, StandardError
31
+ puts "Param serialize error: #{param_example.inspect} of #{description} at #{location}"
32
+ param_example.inspect
30
33
  end
31
34
 
32
35
  def response_body
@@ -54,13 +57,13 @@ class GhostWriter::Document
54
57
  def arrange_json(body)
55
58
  return body unless response_format == "json"
56
59
 
57
- data = ActiveSupport::JSON.decode(body)
60
+ data = Oj.load(body)
58
61
  if data.is_a?(Array) || data.is_a?(Hash)
59
62
  JSON.pretty_generate(data)
60
63
  else
61
64
  data
62
65
  end
63
- rescue MultiJson::DecodeError
66
+ rescue Oj::Error
64
67
  body
65
68
  end
66
69
  end
@@ -12,9 +12,6 @@ class GhostWriter::DocumentIndex
12
12
  def write_file(options = {})
13
13
  writer = GhostWriter::IndexWriter.new(self, options)
14
14
  writer.write_file
15
-
16
- rack_writer = GhostWriter::IndexWriter::Rack.new(self)
17
- rack_writer.write_file
18
15
  end
19
16
 
20
17
  def base_url
@@ -7,7 +7,7 @@ class MockServer
7
7
  case [request.request_method, request.path_info, params]
8
8
  <% document_group.each do |output, docs| -%>
9
9
  <% docs.each do |d| -%>
10
- when [<%= d.request_method.inspect %>, <%= d.path_info.inspect %>, recursive_to_s(<%= MultiJson.load(d.serialized_params).inspect %>)]
10
+ when [<%= d.request_method.inspect %>, <%= d.path_info.inspect %>, recursive_to_s(<%= Oj.load(d.serialized_params).inspect %>)]
11
11
  [200, {"Content-Type" => <%= d.content_type.inspect %>}, [(<<BODY)]]
12
12
  <%= d.response_body %>
13
13
  BODY
@@ -1,3 +1,3 @@
1
1
  module GhostWriter
2
- VERSION = "0.4.2"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -1,12 +1,12 @@
1
1
  require "spec_helper"
2
2
 
3
- class AnonymousController
3
+ class AnonymousController < ActionController::Base
4
4
  end
5
5
 
6
6
  describe GhostWriter do
7
7
 
8
8
  let(:group) do
9
- RSpec::Core::ExampleGroup.describe do
9
+ RSpec::Core::ExampleGroup.describe AnonymousController, type: :controller do
10
10
  include RSpec::Rails::ControllerExampleGroup
11
11
  include GhostWriter
12
12
 
@@ -38,7 +38,7 @@ describe GhostWriter do
38
38
  it "first spec", generate_api_doc: true do
39
39
  begin
40
40
  get :index, param1: "value"
41
- response.should be_success
41
+ expect(response).to be_success
42
42
  rescue Exception => e
43
43
  p e
44
44
  end
@@ -47,7 +47,7 @@ describe GhostWriter do
47
47
  it "second spec", generate_api_doc: true do
48
48
  begin
49
49
  get :index, param1: "value"
50
- response.should be_success
50
+ expect(response).to be_success
51
51
  rescue Exception => e
52
52
  p e
53
53
  end
@@ -58,7 +58,7 @@ describe GhostWriter do
58
58
  it "returns a Resource json", generate_api_doc: true do
59
59
  begin
60
60
  get :show, id: 1, format: :json, param1: "value", params2: ["value1", "value2"]
61
- response.should be_success
61
+ expect(response).to be_success
62
62
  rescue Exception => e
63
63
  p e
64
64
  end
@@ -81,11 +81,12 @@ describe GhostWriter do
81
81
  it "generate api doc file" do
82
82
  group.run(NullObject.new)
83
83
  GhostWriter.generate_api_doc
84
- File.exist?(Rails.root + "doc" + "api_examples" + "anonymous_controller" + "index.md").should be_true
85
- doc_body = File.read(Rails.root + "doc" + "api_examples" + "anonymous_controller" + "index.md")
86
- doc_body.should =~ /# AnonymousController Index/
87
- doc_body.should =~ /first spec/
88
- doc_body.should =~ /second spec/
84
+ path = Pathname("api_examples") + "anonymous_controller" + "index.md"
85
+ expect(path).to be_exist
86
+ doc_body = File.read(path)
87
+ expect(doc_body).to match(/# AnonymousController Index/)
88
+ expect(doc_body).to match(/first spec/)
89
+ expect(doc_body).to match(/second spec/)
89
90
  end
90
91
 
91
92
  context "Given github_base_url" do
@@ -94,7 +95,8 @@ describe GhostWriter do
94
95
  GhostWriter.github_base_url = github_base_url
95
96
  group.run(NullObject.new)
96
97
  GhostWriter.generate_api_doc
97
- File.read(Rails.root + "doc" + "api_examples" + "#{GhostWriter::DOCUMENT_INDEX_FILENAME}.md").should =~ /#{github_base_url}/
98
+ path = Pathname("api_examples") + "#{GhostWriter::DOCUMENT_INDEX_FILENAME}.md"
99
+ expect(File.read(path)).to match(/#{github_base_url}/)
98
100
  end
99
101
  end
100
102
  end
@@ -107,7 +109,7 @@ describe GhostWriter do
107
109
  it "does not generate api doc file" do
108
110
  group.run(NullObject.new)
109
111
  GhostWriter.generate_api_doc
110
- File.exist?(Rails.root + "doc" + "api_examples" + "anonymous_controller" + "index.md").should be_false
112
+ expect(Pathname("api_examples") + "anonymous_controller" + "index.md").not_to be_exist
111
113
  end
112
114
  end
113
115
  end
@@ -128,14 +130,15 @@ describe GhostWriter do
128
130
  ENV["GENERATE_API_DOC"] = "1"
129
131
  group.run(NullObject.new)
130
132
  GhostWriter.generate_api_doc
131
- File.exist?(Rails.root + "doc" + output_dir + "anonymous_controller" + "index.md").should be_true
132
- File.read(Rails.root + "doc" + output_dir + "anonymous_controller" + "index.md").should =~ /# AnonymousController Index/
133
+ path = Pathname(output_dir) + "anonymous_controller" + "index.md"
134
+ expect(path).to be_exist
135
+ expect(File.read(path)).to match(/# AnonymousController Index/)
133
136
  end
134
137
  end
135
138
 
136
139
  def clear_output(dirname)
137
- if File.exist?(Rails.root + "doc" + dirname)
138
- FileUtils.rm_r(Rails.root + "doc" + dirname)
140
+ if File.exist?(dirname)
141
+ FileUtils.rm_r(dirname)
139
142
  end
140
143
  end
141
144
  end
@@ -2,11 +2,20 @@ ENV["RAILS_ENV"] = "test"
2
2
 
3
3
  $:.unshift File.dirname(__FILE__)
4
4
 
5
- require "rails_app/config/environment"
5
+ require 'pry'
6
+
7
+ require 'rails/all'
6
8
 
9
+ ActiveRecord::Base.establish_connection(
10
+ adapter: "sqlite3",
11
+ database: ":memory:"
12
+ )
13
+
14
+ require "rails_app/config/environment"
7
15
  I18n.load_path << File.expand_path("../support/locale/en.yml", __FILE__)
8
16
 
9
- require "rspec/rails"
17
+ require 'rspec/rails'
18
+ require 'ghost_writer'
10
19
 
11
20
  class NullObject
12
21
  private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghost_writer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - joker1007
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-10 00:00:00.000000000 Z
11
+ date: 2014-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: rspec-rails
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '2.11'
33
+ version: '2.12'
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: '2.11'
40
+ version: '2.12'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: trollop
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: multi_json
56
+ name: oj
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,19 +67,19 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec-rails
70
+ name: json
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '2.12'
76
- type: :development
75
+ version: '0'
76
+ type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '2.12'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +114,20 @@ dependencies:
114
114
  - - "<"
115
115
  - !ruby/object:Gem::Version
116
116
  version: '5'
117
+ - !ruby/object:Gem::Dependency
118
+ name: sqlite3
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
117
131
  - !ruby/object:Gem::Dependency
118
132
  name: tapp
119
133
  requirement: !ruby/object:Gem::Requirement
@@ -128,6 +142,20 @@ dependencies:
128
142
  - - ">="
129
143
  - !ruby/object:Gem::Version
130
144
  version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: pry
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
131
159
  description: Generate API examples from params and response of controller specs
132
160
  email:
133
161
  - kakyoin.hierophant@gmail.com
@@ -143,6 +171,8 @@ files:
143
171
  - README.md
144
172
  - Rakefile
145
173
  - bin/ghost_writer
174
+ - gemfiles/rspec2.gemfile
175
+ - gemfiles/rspec3.gemfile
146
176
  - ghost_writer.gemspec
147
177
  - lib/ghost_writer.rb
148
178
  - lib/ghost_writer/document.rb
@@ -225,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
255
  version: '0'
226
256
  requirements: []
227
257
  rubyforge_project:
228
- rubygems_version: 2.1.4
258
+ rubygems_version: 2.2.2
229
259
  signing_key:
230
260
  specification_version: 4
231
261
  summary: Generate API examples from params and response of controller specs
@@ -270,3 +300,4 @@ test_files:
270
300
  - spec/rails_app/test/test_helper.rb
271
301
  - spec/rails_app/test/unit/.gitkeep
272
302
  - spec/spec_helper.rb
303
+ has_rdoc: