@@ -10,8 +10,6 @@ rescue LoadError => e
10
10
exit -1
11
11
end
12
12
13
- require 'pathname'
14
-
15
13
HOST = 'www.ruby-lang.org'
16
14
LANGUAGES = %w[ bg de en es fr id it ja ko pl pt ru tr vi zh_cn zh_tw ]
17
15
CONFIG = "_config.yml"
@@ -113,147 +111,36 @@ task :test => [:check]
113
111
114
112
namespace :check do
115
113
116
- def read_yaml ( filename )
117
- require 'yaml'
118
- match_data = File . read ( filename ) . match ( /\A (---\s *\n .*?\n ?)^(---\s *$\n ?)/m )
119
- data = YAML . load ( match_data [ 1 ] ) if match_data
120
-
121
- data || { }
122
- end
123
-
124
- def author_variable_defined? ( filename )
125
- read_yaml ( filename ) . has_key? ( 'author' )
126
- end
127
-
128
- def lang_variable_defined? ( filename )
129
- read_yaml ( filename ) . has_key? ( 'lang' )
130
- end
131
-
132
- def pub_date_utc ( filename )
133
- date = read_yaml ( filename ) [ 'date' ]
134
-
135
- date ? date . getutc . strftime ( '%Y/%m/%d' ) : nil
136
- end
137
-
138
- def glob ( pattern )
139
- Pathname . glob ( pattern ) . reject { |path | path . expand_path . to_s =~ %r{\A #{ Regexp . escape ( Bundler . bundle_path . to_s ) } /} } . map ( &:to_s )
140
- end
141
-
142
114
desc "Check for missing author variables in news posts"
143
115
task :author do
144
- print "Checking for missing author variables in news posts..."
145
-
146
- md_files = glob ( "**/_posts/*.md" )
147
-
148
- author_missing = md_files . select { |fn | !author_variable_defined? ( fn ) }
149
- if author_missing . empty?
150
- puts " ok"
151
- else
152
- puts "\n No author variable defined in:"
153
- puts author_missing . map { |s | " #{ s } \n " } . join
154
-
155
- raise
156
- end
116
+ require_relative "lib/linter"
117
+ Linter . new . check_author
157
118
end
158
119
159
120
desc "Check for missing lang variables in markdown files"
160
121
task :lang do
161
- print "Checking for missing lang variables in markdown files..."
162
-
163
- md_files = glob ( "**/*.md" )
164
- skip_patterns = [ /README.md/ , %r{[^/]*/examples/} , %r{\A _includes/} ]
165
-
166
- skip_patterns . each do |pattern |
167
- md_files . delete_if { |fn | fn =~ pattern }
168
- end
169
-
170
- lang_missing = md_files . select { |fn | !lang_variable_defined? ( fn ) }
171
- if lang_missing . empty?
172
- puts " ok"
173
- else
174
- puts "\n No lang variable defined in:"
175
- puts lang_missing . map { |s | " #{ s } \n " } . join
176
-
177
- raise
178
- end
122
+ require_relative "lib/linter"
123
+ Linter . new . check_lang
179
124
end
180
125
181
126
desc "Check publication dates (UTC) for consistency with filename"
182
127
task :pubdates do
183
- print "Checking for date mismatch in posts (filename / YAML front matter)..."
184
-
185
- posts = glob ( "**/_posts/*.md" )
186
-
187
- date_mismatch = [ ]
188
- posts . each do |post |
189
- filename_date = File . basename ( post ) . split ( '-' , 4 ) [ 0 ..2 ] . join ( '/' )
190
- yaml_date = pub_date_utc ( post )
191
-
192
- date_mismatch << post if yaml_date && yaml_date != filename_date
193
- end
194
-
195
- if date_mismatch . empty?
196
- puts " ok"
197
- else
198
- puts "\n Date mismatch in:"
199
- puts date_mismatch . map { |s | " #{ s } \n " } . join
200
-
201
- raise
202
- end
128
+ require_relative "lib/linter"
129
+ Linter . new . check_pubdates
203
130
end
204
131
205
132
localport = 9292
206
133
207
134
desc "Check for broken links on http://localhost:#{ localport } /"
208
135
task :links do
209
- gem 'spidr' , '~> 0.6'
210
- require 'spidr'
211
-
212
- url_map = Hash . new { |hash , key | hash [ key ] = [ ] }
213
-
214
- Spidr . site ( "http://localhost:#{ localport } /" ) do |agent |
215
- LANGUAGES . each do |lang |
216
- agent . enqueue ( "http://localhost:#{ localport } /#{ lang } /" )
217
- end
218
-
219
- agent . every_link do |origin , dest |
220
- url_map [ dest ] << origin
221
- end
222
-
223
- agent . every_page do |page |
224
- if page . code == 404
225
- origin = url_map [ page . url ] . last
226
- dest = page . url . request_uri
227
-
228
- external = URI ::HTTP . build (
229
- :host => HOST ,
230
- :path => page . url . path ,
231
- :query => page . url . query
232
- )
233
-
234
- if Net ::HTTP . get_response ( external ) . code == '404'
235
- puts "Old Broken Link: #{ origin } -> #{ dest } "
236
- else
237
- puts "New Broken Link: #{ origin } -> #{ dest } "
238
- end
239
-
240
- raise
241
- end
242
- end
243
- end
136
+ require_relative "lib/link_checker"
137
+ LinkChecker . new . check ( localport : localport , languages : LANGUAGES , host : HOST )
244
138
end
245
139
246
140
desc 'Validate _site markup with validate-website'
247
141
task :markup => :build do
248
- require 'jekyll'
249
- options = Jekyll . configuration
250
- Dir . chdir ( '_site' ) do
251
- system ( "validate-website-static" ,
252
- "--verbose" ,
253
- "--exclude" , "examples" ,
254
- "--site" , "#{ options [ 'url' ] } /" )
255
- exit ( $?. exitstatus )
256
- end
142
+ require_relative "lib/markup_checker"
143
+ MarkupChecker . new . check
257
144
end
258
145
end
259
146
0 commit comments