Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
annotate
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open-source
annotate
Commits
e315405c
Commit
e315405c
authored
Oct 19, 2017
by
Alexander Belozerov
Committed by
Cuong Tran
Oct 18, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Do not remove magic comments (AnnotateRoutes) (#520)
parent
fd67ed46
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
177 additions
and
24 deletions
+177
-24
annotate_routes.rb
lib/annotate/annotate_routes.rb
+31
-2
annotate_routes_spec.rb
spec/annotate/annotate_routes_spec.rb
+146
-22
No files found.
lib/annotate/annotate_routes.rb
View file @
e315405c
...
@@ -38,7 +38,13 @@ module AnnotateRoutes
...
@@ -38,7 +38,13 @@ module AnnotateRoutes
def
header
(
options
=
{})
def
header
(
options
=
{})
routes_map
=
app_routes_map
(
options
)
routes_map
=
app_routes_map
(
options
)
magic_comments_map
,
routes_map
=
extract_magic_comments_from_array
(
routes_map
)
out
=
[]
out
=
[]
magic_comments_map
.
each
do
|
magic_comment
|
out
<<
magic_comment
end
out
+=
[
"#
#{
options
[
:wrapper_open
]
}
"
]
if
options
[
:wrapper_open
]
out
+=
[
"#
#{
options
[
:wrapper_open
]
}
"
]
if
options
[
:wrapper_open
]
out
+=
[
"#
#{
options
[
:format_markdown
]
?
PREFIX_MD
:
PREFIX
}
"
+
(
options
[
:timestamp
]
?
" (Updated
#{
Time
.
now
.
strftime
(
'%Y-%m-%d %H:%M'
)
}
)"
:
''
)]
out
+=
[
"#
#{
options
[
:format_markdown
]
?
PREFIX_MD
:
PREFIX
}
"
+
(
options
[
:timestamp
]
?
" (Updated
#{
Time
.
now
.
strftime
(
'%Y-%m-%d %H:%M'
)
}
)"
:
''
)]
...
@@ -82,6 +88,28 @@ module AnnotateRoutes
...
@@ -82,6 +88,28 @@ module AnnotateRoutes
end
end
end
end
def
self
.
magic_comment_matcher
Regexp
.
new
(
/(^#\s*encoding:.*)|(^# coding:.*)|(^# -\*- coding:.*)|(^# -\*- encoding\s?:.*)|(^#\s*frozen_string_literal:.+)|(^# -\*- frozen_string_literal\s*:.+-\*-)/
)
end
# @param [Array<String>] content
# @return [Array<String>] all found magic comments
# @return [Array<String>] content without magic comments
def
self
.
extract_magic_comments_from_array
(
content_array
)
magic_comments
=
[]
new_content
=
[]
content_array
.
map
do
|
row
|
if
row
=~
magic_comment_matcher
magic_comments
<<
row
.
strip
else
new_content
<<
row
end
end
[
magic_comments
,
new_content
]
end
def
self
.
app_routes_map
(
options
)
def
self
.
app_routes_map
(
options
)
routes_map
=
`rake routes`
.
chomp
(
"
\n
"
).
split
(
/\n/
,
-
1
)
routes_map
=
`rake routes`
.
chomp
(
"
\n
"
).
split
(
/\n/
,
-
1
)
...
@@ -143,9 +171,10 @@ module AnnotateRoutes
...
@@ -143,9 +171,10 @@ module AnnotateRoutes
end
end
def
self
.
annotate_routes
(
header
,
content
,
where_header_found
,
options
=
{})
def
self
.
annotate_routes
(
header
,
content
,
where_header_found
,
options
=
{})
magic_comments_map
,
content
=
extract_magic_comments_from_array
(
content
)
if
%w(before top)
.
include?
(
options
[
:position_in_routes
])
if
%w(before top)
.
include?
(
options
[
:position_in_routes
])
header
=
header
<<
''
if
content
.
first
!=
''
header
=
header
<<
''
if
content
.
first
!=
''
new_content
=
header
+
content
new_content
=
magic_comments_map
+
header
+
content
else
else
# Ensure we have adequate trailing newlines at the end of the file to
# Ensure we have adequate trailing newlines at the end of the file to
# ensure a blank line separating the content from the annotation.
# ensure a blank line separating the content from the annotation.
...
@@ -155,7 +184,7 @@ module AnnotateRoutes
...
@@ -155,7 +184,7 @@ module AnnotateRoutes
# the spacer we put in the first time around.
# the spacer we put in the first time around.
content
.
shift
if
where_header_found
==
:before
&&
content
.
first
==
''
content
.
shift
if
where_header_found
==
:before
&&
content
.
first
==
''
new_content
=
content
+
header
new_content
=
magic_comments_map
+
content
+
header
end
end
new_content
new_content
...
...
spec/annotate/annotate_routes_spec.rb
View file @
e315405c
...
@@ -11,6 +11,22 @@ describe AnnotateRoutes do
...
@@ -11,6 +11,22 @@ describe AnnotateRoutes do
@mock_file
||=
double
(
File
,
stubs
)
@mock_file
||=
double
(
File
,
stubs
)
end
end
def
magic_comments_list_each
[
'# encoding: UTF-8'
,
'# coding: UTF-8'
,
'# -*- coding: UTF-8 -*-'
,
'#encoding: utf-8'
,
'# encoding: utf-8'
,
'# -*- encoding : utf-8 -*-'
,
"# encoding: utf-8
\n
# frozen_string_literal: true"
,
"# frozen_string_literal: true
\n
# encoding: utf-8"
,
'# frozen_string_literal: true'
,
'#frozen_string_literal: false'
,
'# -*- frozen_string_literal : true -*-'
].
each
{
|
magic_comment
|
yield
magic_comment
}
end
it
'should check if routes.rb exists'
do
it
'should check if routes.rb exists'
do
expect
(
File
).
to
receive
(
:exists?
).
with
(
ROUTE_FILE
).
and_return
(
false
)
expect
(
File
).
to
receive
(
:exists?
).
with
(
ROUTE_FILE
).
and_return
(
false
)
expect
(
AnnotateRoutes
).
to
receive
(
:puts
).
with
(
"Can't find routes.rb"
)
expect
(
AnnotateRoutes
).
to
receive
(
:puts
).
with
(
"Can't find routes.rb"
)
...
@@ -18,21 +34,29 @@ describe AnnotateRoutes do
...
@@ -18,21 +34,29 @@ describe AnnotateRoutes do
end
end
describe
'Annotate#example'
do
describe
'Annotate#example'
do
before
(
:each
)
do
let
(
:rake_routes_content
)
do
expect
(
File
).
to
receive
(
:exists?
).
with
(
ROUTE_FILE
).
and_return
(
true
)
" Prefix Verb URI Pattern Controller#Action
expect
(
File
).
to
receive
(
:read
).
with
(
ROUTE_FILE
).
and_return
(
""
)
expect
(
AnnotateRoutes
).
to
receive
(
:`
).
with
(
'rake routes'
).
and_return
(
" Prefix Verb URI Pattern Controller#Action
myaction1 GET /url1(.:format) mycontroller1#action
myaction1 GET /url1(.:format) mycontroller1#action
myaction2 POST /url2(.:format) mycontroller2#action
myaction2 POST /url2(.:format) mycontroller2#action
myaction3 DELETE|GET /url3(.:format) mycontroller3#action
\n
"
)
myaction3 DELETE|GET /url3(.:format) mycontroller3#action
\n
"
end
expect
(
AnnotateRoutes
).
to
receive
(
:puts
).
with
(
ANNOTATION_ADDED
)
before
(
:each
)
do
expect
(
File
).
to
receive
(
:exists?
).
with
(
ROUTE_FILE
).
and_return
(
true
).
at_least
(
:once
)
expect
(
File
).
to
receive
(
:read
).
with
(
ROUTE_FILE
).
and_return
(
""
).
at_least
(
:once
)
expect
(
AnnotateRoutes
).
to
receive
(
:puts
).
with
(
ANNOTATION_ADDED
).
at_least
(
:once
)
end
end
it
'annotate normal'
do
context
'without magic comments'
do
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
before
(
:each
)
do
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
expect
(
AnnotateRoutes
).
to
receive
(
:`
).
with
(
'rake routes'
).
and_return
(
rake_routes_content
)
end
it
'annotate normal'
do
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
# == Route Map
# == Route Map
#
#
# Prefix Verb URI Pattern Controller#Action
# Prefix Verb URI Pattern Controller#Action
...
@@ -40,12 +64,12 @@ describe AnnotateRoutes do
...
@@ -40,12 +64,12 @@ describe AnnotateRoutes do
# myaction2 POST /url2(.:format) mycontroller2#action
# myaction2 POST /url2(.:format) mycontroller2#action
# myaction3 DELETE|GET /url3(.:format) mycontroller3#action
\n
"
)
# myaction3 DELETE|GET /url3(.:format) mycontroller3#action
\n
"
)
AnnotateRoutes
.
do_annotations
AnnotateRoutes
.
do_annotations
end
end
it
'annotate markdown'
do
it
'annotate markdown'
do
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
# ## Route Map
# ## Route Map
#
#
# Prefix | Verb | URI Pattern | Controller#Action
# Prefix | Verb | URI Pattern | Controller#Action
...
@@ -54,12 +78,72 @@ describe AnnotateRoutes do
...
@@ -54,12 +78,72 @@ describe AnnotateRoutes do
# myaction2 | POST | /url2(.:format) | mycontroller2#action
# myaction2 | POST | /url2(.:format) | mycontroller2#action
# myaction3 | DELETE-GET | /url3(.:format) | mycontroller3#action
\n
"
)
# myaction3 | DELETE-GET | /url3(.:format) | mycontroller3#action
\n
"
)
AnnotateRoutes
.
do_annotations
(
format_markdown:
true
)
AnnotateRoutes
.
do_annotations
(
format_markdown:
true
)
end
it
'wraps annotation if wrapper is specified'
do
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
# START
# == Route Map
#
# Prefix Verb URI Pattern Controller#Action
# myaction1 GET /url1(.:format) mycontroller1#action
# myaction2 POST /url2(.:format) mycontroller2#action
# myaction3 DELETE|GET /url3(.:format) mycontroller3#action
# END
\n
"
)
AnnotateRoutes
.
do_annotations
(
wrapper_open:
'START'
,
wrapper_close:
'END'
)
end
end
end
it
'wraps annotation if wrapper is specified'
do
context
'file with magic comments'
do
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
it
'should not remove magic comments'
do
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
magic_comments_list_each
do
|
magic_comment
|
expect
(
AnnotateRoutes
).
to
receive
(
:`
).
with
(
'rake routes'
)
.
and_return
(
"
#{
magic_comment
}
\n
#{
rake_routes_content
}
"
)
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
#{
magic_comment
}
# == Route Map
#
# Prefix Verb URI Pattern Controller#Action
# myaction1 GET /url1(.:format) mycontroller1#action
# myaction2 POST /url2(.:format) mycontroller2#action
# myaction3 DELETE|GET /url3(.:format) mycontroller3#action
\n
"
)
AnnotateRoutes
.
do_annotations
end
end
it
'annotate markdown'
do
magic_comments_list_each
do
|
magic_comment
|
expect
(
AnnotateRoutes
).
to
receive
(
:`
).
with
(
'rake routes'
)
.
and_return
(
"
#{
magic_comment
}
\n
#{
rake_routes_content
}
"
)
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
#{
magic_comment
}
# ## Route Map
#
# Prefix | Verb | URI Pattern | Controller#Action
# --------- | ---------- | --------------- | --------------------
# myaction1 | GET | /url1(.:format) | mycontroller1#action
# myaction2 | POST | /url2(.:format) | mycontroller2#action
# myaction3 | DELETE-GET | /url3(.:format) | mycontroller3#action
\n
"
)
AnnotateRoutes
.
do_annotations
(
format_markdown:
true
)
end
end
it
'wraps annotation if wrapper is specified'
do
magic_comments_list_each
do
|
magic_comment
|
expect
(
AnnotateRoutes
).
to
receive
(
:`
).
with
(
'rake routes'
)
.
and_return
(
"
#{
magic_comment
}
\n
#{
rake_routes_content
}
"
)
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
).
and_yield
(
mock_file
)
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
#{
magic_comment
}
# START
# START
# == Route Map
# == Route Map
#
#
...
@@ -69,14 +153,18 @@ describe AnnotateRoutes do
...
@@ -69,14 +153,18 @@ describe AnnotateRoutes do
# myaction3 DELETE|GET /url3(.:format) mycontroller3#action
# myaction3 DELETE|GET /url3(.:format) mycontroller3#action
# END
\n
"
)
# END
\n
"
)
AnnotateRoutes
.
do_annotations
(
wrapper_open:
'START'
,
wrapper_close:
'END'
)
AnnotateRoutes
.
do_annotations
(
wrapper_open:
'START'
,
wrapper_close:
'END'
)
end
end
end
end
end
end
describe
'When adding'
do
describe
'When adding'
do
before
(
:each
)
do
before
(
:each
)
do
expect
(
File
).
to
receive
(
:exists?
).
with
(
ROUTE_FILE
).
and_return
(
true
)
expect
(
File
).
to
receive
(
:exists?
).
with
(
ROUTE_FILE
)
expect
(
AnnotateRoutes
).
to
receive
(
:`
).
with
(
'rake routes'
).
and_return
(
''
)
.
and_return
(
true
).
at_least
(
:once
)
expect
(
AnnotateRoutes
).
to
receive
(
:`
).
with
(
'rake routes'
)
.
and_return
(
''
).
at_least
(
:once
)
end
end
it
'should insert annotations if file does not contain annotations'
do
it
'should insert annotations if file does not contain annotations'
do
...
@@ -112,6 +200,42 @@ describe AnnotateRoutes do
...
@@ -112,6 +200,42 @@ describe AnnotateRoutes do
AnnotateRoutes
.
do_annotations
AnnotateRoutes
.
do_annotations
end
end
context
'file with magic comments'
do
it
'leaves magic comment on top, adds an empty line between magic comment and annotation (position_in_routes :top)'
do
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
)
.
and_yield
(
mock_file
).
at_least
(
:once
)
magic_comments_list_each
do
|
magic_comment
|
expect
(
File
).
to
receive
(
:read
).
with
(
ROUTE_FILE
).
and_return
(
"
#{
magic_comment
}
\n
Something"
)
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
#{
magic_comment
}
\n
# == Route Map
\n
#
\n\n
Something
\n
"
)
expect
(
AnnotateRoutes
).
to
receive
(
:puts
).
with
(
ANNOTATION_ADDED
)
AnnotateRoutes
.
do_annotations
(
position_in_routes:
'top'
)
end
end
it
'leaves magic comment on top, adds an empty line between magic comment and annotation (position_in_routes :bottom)'
do
expect
(
File
).
to
receive
(
:open
).
with
(
ROUTE_FILE
,
'wb'
)
.
and_yield
(
mock_file
).
at_least
(
:once
)
magic_comments_list_each
do
|
magic_comment
|
expect
(
File
).
to
receive
(
:read
).
with
(
ROUTE_FILE
).
and_return
(
"
#{
magic_comment
}
\n
Something"
)
expect
(
@mock_file
).
to
receive
(
:puts
).
with
(
"
#{
magic_comment
}
\n
Something
\n\n
# == Route Map
\n
#
\n
"
)
expect
(
AnnotateRoutes
).
to
receive
(
:puts
).
with
(
ANNOTATION_ADDED
)
AnnotateRoutes
.
do_annotations
(
position_in_routes:
'bottom'
)
end
end
it
'skips annotations if file does already contain annotation'
do
magic_comments_list_each
do
|
magic_comment
|
expect
(
File
).
to
receive
(
:read
).
with
(
ROUTE_FILE
)
.
and_return
(
"
#{
magic_comment
}
\n\n
# == Route Map
\n
#
\n
"
)
expect
(
AnnotateRoutes
).
to
receive
(
:puts
).
with
(
FILE_UNCHANGED
)
AnnotateRoutes
.
do_annotations
end
end
end
end
end
describe
'When adding with older Rake versions'
do
describe
'When adding with older Rake versions'
do
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment