document_generator 0.0.4 → 0.0.5

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: de49609b9ec62e17f7f8d95b88d69c8a4194a314
4
- data.tar.gz: 846bd6739f10d942ecbee3902efdc6ea6d35cc34
3
+ metadata.gz: 6871a1067a242543d48a66cd7475e79ece9521d2
4
+ data.tar.gz: 23a5d3e5ab9d5f8f57e3bac358082529f77b4dcf
5
5
  SHA512:
6
- metadata.gz: e285f29e9753553baf53644d3869a35302e6f4ed6931654bf736cb2c70626bbe0d860d52a7e710ef03bf7422c1235ed51e6d919bdaa425d90a71b8e7b240124c
7
- data.tar.gz: bc5b333e213733c5ccb604869414690531ea75d6fb34295a35bb3dbe3c99797e70191f776c6009efe6b9d6698ef6db3a25242b0ee8454753bb900eca98fc6752
6
+ metadata.gz: d958dede20b91df5423a6ffe35243a30b52a498e02254737230ecb833ec2898322aa75165b0d5f41945f6fad4f7ebd17c97508e047c98110368fec0b18519f08
7
+ data.tar.gz: 720106b2000cb8707243a9bbfae1291e9fba2919171989130d15fdc4f8a903418d90552c7d49cc345138ad5a7fc2857c0e373152b370dc15285da265fd84d45d
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.0.0-p247
1
+ ruby-2.0.0-p353
@@ -24,7 +24,7 @@
24
24
  h3 {
25
25
  font-size: 16px;
26
26
  }
27
- h1, h2, h3 {
27
+ h1, h2 {
28
28
  text-transform: uppercase;
29
29
  }
30
30
  </style>
@@ -28,4 +28,5 @@ DOCUMENT_GENERATOR
28
28
  spec.add_development_dependency 'rspec', '~> 2.14'
29
29
  spec.add_development_dependency 'rspec-fire', '~> 1.3'
30
30
  spec.add_development_dependency 'simplecov', '~> 0.7'
31
+ spec.add_development_dependency 'pry'
31
32
  end
@@ -12,40 +12,44 @@ module DocumentGenerator
12
12
  @git_diff_file = git_diff_file
13
13
  end
14
14
 
15
- def git_diff_file_lines
16
- git_diff_file.patch.split("\n")
17
- end
18
-
19
15
  def patch_heading
20
16
  "#{action_type} `#{git_diff_file.path}`"
21
17
  end
22
18
 
19
+ def git_diff_file_hunks
20
+ hunks = git_diff_file.patch.split(/@@.*@@.*\n/)
21
+ hunks.shift # Shift to pop first element off array which is just git diff header info
22
+ hunks
23
+ end
24
+
25
+ def git_diff_lines_for(hunk)
26
+ hunk.split("\n")
27
+ end
28
+
23
29
  def content
24
30
  if type == 'deleted'
25
- return patch_heading + "\n\n"
31
+ return "####{patch_heading}\n\n"
26
32
  end
27
33
 
28
34
  temp = []
29
- temp << patch_heading
35
+ temp << "####{patch_heading}"
30
36
 
31
- if markdown_outputs.any?
32
- markdown_outputs.each do |output|
37
+ outputs = markdown_outputs
38
+ if outputs.any?
39
+ outputs.each do |output|
33
40
  if output.escaped_content.length > 0
34
41
  temp << "\n\n"
35
42
  temp << output.description
36
43
  temp << "\n<pre><code>"
37
- temp << output.escaped_content
44
+ if output.description == "Becomes"
45
+ temp << output.content.join("\n") + "\n"
46
+ else
47
+ temp << output.escaped_content
48
+ end
38
49
  temp << "</code></pre>\n"
39
50
  end
40
51
  end
41
- end
42
52
 
43
- if git_diff_file.type == "modified"
44
- temp << "\n\n"
45
- temp << "Becomes"
46
- temp << "\n<pre><code>"
47
- temp << ending_code
48
- temp << "\n</code></pre>\n"
49
53
  end
50
54
 
51
55
  temp << "\n\n"
@@ -53,10 +57,18 @@ module DocumentGenerator
53
57
  temp.join
54
58
  end
55
59
 
56
- def ending_code
60
+ def ending_code # The escaped end result code for the whole diff file returned as a string
61
+ clean_hunks = []
62
+ git_diff_file_hunks.each do |hunk|
63
+ clean_hunks << ending_code_for(hunk).join("\n")
64
+ end
65
+ Output.no_really_escape(CGI.escapeHTML(clean_hunks.join("\n")))
66
+ end
67
+
68
+ def ending_code_for(hunk) # The unescaped end result code for a particular hunk returned as array
57
69
  clean_lines = []
58
- git_diff_file_lines[code_line_start..-1].each_with_index do |line, index|
59
70
 
71
+ git_diff_lines_for(hunk).each_with_index do |line, index|
60
72
  if (line[0]) == "-" || ignore_line?(line)
61
73
  next
62
74
  end
@@ -64,9 +76,10 @@ module DocumentGenerator
64
76
  if (line[0]) == "+"
65
77
  line = remove_first_character(line)
66
78
  end
79
+ line = CGI.unescapeHTML(line) # Shouldn't be necessary?
67
80
  clean_lines << line
68
81
  end
69
- Output.no_really_escape(CGI.escapeHTML(clean_lines.join("\n")))
82
+ clean_lines
70
83
  end
71
84
 
72
85
  def action_type
@@ -75,63 +88,81 @@ module DocumentGenerator
75
88
  deleted: 'Remove file' }.fetch(type.to_sym, type)
76
89
  end
77
90
 
78
- def markdown_outputs # returns an array of outputs
91
+ def markdown_outputs
92
+ outputs = []
93
+ git_diff_file_hunks.each do |hunk|
94
+ outputs << markdown_outputs_for(hunk)
95
+ end
96
+ outputs.flatten
97
+ end
98
+
99
+ def markdown_outputs_for(hunk) # returns an array of outputs for a particular hunk
79
100
  outputs = []
80
- last_line = 0
81
- git_diff_file_lines.each_with_index do |line, index|
82
- next if index < code_line_start
101
+ last_line = -1
102
+ git_diff_lines_for(hunk).each_with_index do |line, index|
83
103
  next if index <= last_line
84
104
  case line.strip[0]
85
105
 
86
106
  when "+"
87
- last_line = last_same_line(index)
107
+ last_line = last_same_line(index, hunk)
88
108
  output = Output.new
89
109
  output.description = "Add"
90
- output.content = line_block(index, last_line)
110
+ output.content = line_block(index, last_line, hunk)
91
111
  outputs << output
92
112
  when "-"
93
- if line_sign(index + 1) == "+"
113
+ if line_sign(index + 1, hunk) == "+"
94
114
  output = Output.new
95
115
  output.description = "Change"
96
- output.content = line_block(index, last_same_line(index))
116
+ output.content = line_block(index, last_same_line(index, hunk), hunk)
97
117
  outputs << output
98
- last_line = last_same_line(last_same_line(index) + 1)
118
+ last_line = last_same_line(last_same_line(index, hunk) + 1, hunk)
119
+
99
120
  output = Output.new
100
121
  output.description = "To"
101
- output.content = line_block(last_same_line(index) + 1, last_line)
122
+ output.content = line_block(last_same_line(index, hunk) + 1, last_line, hunk)
102
123
  outputs << output
124
+ last_line = last_same_line(last_same_line(index, hunk) + 1, hunk)
103
125
  else
104
126
  output = Output.new
105
127
  output.description = "Remove"
106
- last_line = last_same_line(index)
107
- output.content = line_block(index, last_line)
128
+ last_line = last_same_line(index, hunk)
129
+ output.content = line_block(index, last_line, hunk)
108
130
  outputs << output
109
131
  end
110
132
  end
133
+ end
111
134
 
135
+ if git_diff_file.type == 'modified'
136
+ output = Output.new
137
+ output.description = "Becomes"
138
+ output.content = ending_code_for(hunk)
139
+ outputs << output
112
140
  end
141
+
113
142
  outputs
114
143
  end
115
144
 
116
- private
145
+
146
+
147
+ private
117
148
 
118
149
  def ignore_line?(line)
119
150
  line.strip == 'No newline at end of file'
120
151
  end
121
152
 
122
- def last_same_line(line_index)
123
- starting_sign = line_sign(line_index)
153
+ def last_same_line(line_index, hunk)
154
+ starting_sign = line_sign(line_index, hunk)
124
155
 
125
- git_diff_file_lines[line_index..-1].each_with_index do |line, index|
126
- if line_sign(index + 1 + line_index) != starting_sign
156
+ git_diff_lines_for(hunk)[line_index..-1].each_with_index do |line, index|
157
+ if line_sign(index + 1 + line_index, hunk) != starting_sign
127
158
  return (index + line_index)
128
159
  end
129
160
  end
130
161
  end
131
162
 
132
- def line_block(beginning, ending)
163
+ def line_block(beginning, ending, hunk)
133
164
  lines = []
134
- git_diff_file_lines[beginning..ending].each do |line|
165
+ git_diff_lines_for(hunk)[beginning..ending].each do |line|
135
166
  if ["+", "-"].include?(line[0..0])
136
167
  line = remove_first_character(line)
137
168
  end
@@ -142,18 +173,12 @@ module DocumentGenerator
142
173
  lines
143
174
  end
144
175
 
145
- def line_sign(line_number)
146
- (git_diff_file_lines[line_number] || '').strip[0]
176
+ def line_sign(line_number, hunk)
177
+ (git_diff_lines_for(hunk)[line_number] || '').strip[0]
147
178
  end
148
179
 
149
180
  def remove_first_character(line)
150
181
  " " + line[1..-1]
151
182
  end
152
-
153
- def code_line_start
154
- git_diff_file_lines.each_with_index do |line, index|
155
- return (index + 1) if line[0..1] == "@@"
156
- end
157
- end
158
183
  end
159
184
  end
@@ -14,6 +14,10 @@ module DocumentGenerator
14
14
  end.join("\n")
15
15
  end
16
16
 
17
+ def self.no_really_unescape(value)
18
+ value.gsub('&nbsp;', ' ')
19
+ end
20
+
17
21
  def escaped_content
18
22
  temp = []
19
23
  content.each do |line|
@@ -1,3 +1,3 @@
1
1
  module DocumentGenerator
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -29,7 +29,7 @@ EXPECTED
29
29
 
30
30
  let(:expected_content) do
31
31
  <<-EXPECTED_CONTENT
32
- Create file `/spec/support/capybara.rb`
32
+ ###Create file `/spec/support/capybara.rb`
33
33
 
34
34
  Add
35
35
  <pre><code> Capybara.javascript_driver = :webkit</code></pre>
@@ -168,8 +168,11 @@ EXPECTED_CONTENT
168
168
  expect(diff_file.markdown_outputs.first.description).to eq "Change"
169
169
  expect(diff_file.markdown_outputs.first.escaped_content).to eq CGI.escapeHTML(" <%= form_for :post do |f| %>")
170
170
 
171
- expect(diff_file.markdown_outputs.last.description).to eq "To"
172
- expect(diff_file.markdown_outputs.last.escaped_content).to eq CGI.escapeHTML(" <%= form_for :post, url: posts_path do |f| %>")
171
+ expect(diff_file.markdown_outputs[1].description).to eq "To"
172
+ expect(diff_file.markdown_outputs[1].escaped_content).to eq CGI.escapeHTML(" <%= form_for :post, url: posts_path do |f| %>")
173
+
174
+ expect(diff_file.markdown_outputs[2].description).to eq "Becomes"
175
+ expect(diff_file.markdown_outputs[2].escaped_content).to eq diff_file.ending_code
173
176
  end
174
177
  end
175
178
 
@@ -181,6 +184,139 @@ EXPECTED_CONTENT
181
184
  end
182
185
  end
183
186
 
187
+ context 'when the git diff file has two changes in different hunks' do
188
+ let(:type) { 'modified' }
189
+ let(:file_name) { '/spec/controllers/posts_controller_spec.rb' }
190
+
191
+ let(:patch) do
192
+ <<-PATCH
193
+ stuffasdfasdfadasdfasd
194
+ asdadsfasdfasdf
195
+ asdfasdfasdfasdf
196
+ @@ -5,7 +5,7 @@
197
+ describe 'GET #new' do
198
+ it "returns http success" do
199
+ get :new
200
+ - response.should be_success
201
+ + expect(response).to be_success
202
+ end
203
+ end
204
+
205
+ @@ -19,7 +19,7 @@
206
+ describe 'GET #index' do
207
+ it "returns http success" do
208
+ get :index
209
+ - response.should be_success
210
+ + expect(response).to be_success
211
+ end
212
+ end
213
+ end
214
+ PATCH
215
+ end
216
+
217
+ let(:ending) do
218
+ <<-ENDING
219
+ describe 'GET #new' do
220
+ it "returns http success" do
221
+ get :new
222
+ expect(response).to be_success
223
+ end
224
+ end
225
+ describe 'GET #index' do
226
+ it "returns http success" do
227
+ get :index
228
+ expect(response).to be_success
229
+ end
230
+ end
231
+ end
232
+ ENDING
233
+ end
234
+
235
+ let(:expected_content) do
236
+ <<-EXPECTED_CONTENT
237
+ ###Update file `/spec/controllers/posts_controller_spec.rb`
238
+
239
+ Change
240
+ <pre><code> response.should be_success</code></pre>
241
+
242
+
243
+ To
244
+ <pre><code> expect(response).to be_success</code></pre>
245
+
246
+
247
+ Becomes
248
+ <pre><code> describe 'GET #new' do
249
+ it "returns http success" do
250
+ get :new
251
+ expect(response).to be_success
252
+ end
253
+ end
254
+ </code></pre>
255
+
256
+
257
+ Change
258
+ <pre><code> response.should be_success</code></pre>
259
+
260
+
261
+ To
262
+ <pre><code> expect(response).to be_success</code></pre>
263
+
264
+
265
+ Becomes
266
+ <pre><code> describe 'GET #index' do
267
+ it "returns http success" do
268
+ get :index
269
+ expect(response).to be_success
270
+ end
271
+ end
272
+ end
273
+ </code></pre>
274
+
275
+
276
+ EXPECTED_CONTENT
277
+ end
278
+
279
+ describe '#content' do
280
+ it 'includes the Becomes section' do
281
+ expect(diff_file.content).to eq expected_content
282
+ end
283
+ end
284
+
285
+ describe '#ending_code' do
286
+ it 'contains the ending_code' do
287
+ expect(diff_file.ending_code).to eq DocumentGenerator::Output.no_really_escape(CGI.escapeHTML(ending.rstrip))
288
+ end
289
+ end
290
+
291
+ describe '#action_type' do
292
+ it 'outputs correct phrase for action_type' do
293
+ expect(diff_file.action_type).to eq "Update file"
294
+ end
295
+ end
296
+
297
+ describe '#markdown_outputs' do
298
+ it 'has correct markdown outputs' do
299
+ expect(diff_file.markdown_outputs.first.description).to eq "Change"
300
+ expect(diff_file.markdown_outputs.first.content).to eq [" response.should be_success"]
301
+
302
+ expect(diff_file.markdown_outputs[1].description).to eq "To"
303
+ expect(diff_file.markdown_outputs[1].content).to eq [" expect(response).to be_success"]
304
+
305
+ expect(diff_file.markdown_outputs[2].description).to eq "Becomes"
306
+ expect(diff_file.markdown_outputs[2].content).to eq [" describe 'GET #new' do", " it \"returns http success\" do", " get :new", " expect(response).to be_success", " end", " end"]
307
+
308
+ expect(diff_file.markdown_outputs[3].description).to eq "Change"
309
+ expect(diff_file.markdown_outputs[3].content).to eq [" response.should be_success"]
310
+
311
+ expect(diff_file.markdown_outputs[4].description).to eq "To"
312
+ expect(diff_file.markdown_outputs[4].content).to eq [" expect(response).to be_success"]
313
+
314
+ expect(diff_file.markdown_outputs[5].description).to eq "Becomes"
315
+ expect(diff_file.markdown_outputs[5].content).to eq [" describe 'GET #index' do", " it \"returns http success\" do", " get :index", " expect(response).to be_success", " end", " end", " end"]
316
+ end
317
+ end
318
+ end
319
+
184
320
  context 'when the git diff file has two changes' do
185
321
  let(:type) { 'modified' }
186
322
  let(:file_name) { '/spec/controllers/posts_controller_spec.rb' }
@@ -220,7 +356,7 @@ ENDING
220
356
 
221
357
  let(:expected_content) do
222
358
  <<-EXPECTED_CONTENT
223
- Update file `/spec/controllers/posts_controller_spec.rb`
359
+ ###Update file `/spec/controllers/posts_controller_spec.rb`
224
360
 
225
361
  Change
226
362
  <pre><code> describe GET new do</code></pre>
@@ -240,7 +376,7 @@ To
240
376
 
241
377
  Becomes
242
378
  <pre><code>describe PostsController do
243
- &nbsp;
379
+
244
380
  describe GET new do
245
381
  it returns http success do
246
382
  get new
@@ -284,6 +420,9 @@ EXPECTED_CONTENT
284
420
 
285
421
  expect(diff_file.markdown_outputs[3].description).to eq "To"
286
422
  expect(diff_file.markdown_outputs[3].content).to eq [" get new"]
423
+
424
+ expect(diff_file.markdown_outputs[4].description).to eq "Becomes"
425
+ expect(diff_file.markdown_outputs[4].content).to eq ["describe PostsController do", "", " describe GET new do", " it returns http success do", " get new", " response.should be_success", " end", " end"]
287
426
  end
288
427
  end
289
428
  end
@@ -352,7 +491,7 @@ PATCH
352
491
 
353
492
  let(:expected_content) do
354
493
  <<-EXPECTED_CONTENT
355
- Create file `/spec/support/capybara.rb`
494
+ ###Create file `/spec/support/capybara.rb`
356
495
 
357
496
  Add
358
497
  <pre><code> Capybara.javascript_driver = :webkit</code></pre>
@@ -424,7 +563,7 @@ PATCH
424
563
 
425
564
  let(:expected_content) do
426
565
  <<-EXPECTED_CONTENT
427
- Remove file `/app/helpers/welcome_helper.rb`
566
+ ###Remove file `/app/helpers/welcome_helper.rb`
428
567
 
429
568
  EXPECTED_CONTENT
430
569
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: document_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - wiscoDude
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-11-27 00:00:00.000000000 Z
13
+ date: 2014-01-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: addressable
@@ -110,6 +110,20 @@ dependencies:
110
110
  - - ~>
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0.7'
113
+ - !ruby/object:Gem::Dependency
114
+ name: pry
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
113
127
  description: |
114
128
  Generate documentation from a git repository.
115
129
  email:
@@ -163,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
177
  version: '0'
164
178
  requirements: []
165
179
  rubyforge_project:
166
- rubygems_version: 2.1.5
180
+ rubygems_version: 2.1.11
167
181
  signing_key:
168
182
  specification_version: 4
169
183
  summary: Generate documentation from a git repository.