-
Notifications
You must be signed in to change notification settings - Fork 1
/
Rakefile
123 lines (111 loc) · 3.89 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#! /your/favourite/path/to/rake
# -*- mode: ruby; coding: utf-8; indent-tabs-mode: nil; ruby-indent-level: 2 -*-
# -*- frozen_string_literal: true -*-
# -*- warn_indent: true -*-
# Copyright (c) 2017 Urabe, Shyouhei
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
require 'rubygems'
require 'bundler/setup'
Bundler.setup :development, :test
require 'rake'
require 'yard'
require 'rake/testtask'
require 'rubocop/rake_task'
YARD::Rake::YardocTask.new
RuboCop::RakeTask.new
task default: :test
task spec: :test
desc "run tests"
Rake::TestTask.new do |t|
t.test_files = FileList['test/**/*.rb'] - ['test/test_helper.rb']
t.warning = true
end
desc "pry console"
task :pry do
require_relative 'lib/optdown'
require 'pry'
Pry.start
end
task c: :pry
task console: :pry
desc "run script under project"
task :runner do
require_relative 'lib/optdown'
ARGV.shift while ARGV.first != 'runner'
ARGV.shift
eval ARGF.read, TOPLEVEL_BINDING, '(ARGF)'
end
file 'lib/optdown/html5entity.rb' => 'lib/optdown/html5entity.erb' do |t|
require 'open-uri'
require 'erb'
require 'json'
URI('https://www.w3.org/TR/html5/entities.json').open do |fp|
# For this use of create_additions option:
# @see https://www.ruby-lang.org/en/news/2013/02/22/json-dos-cve-2013-0269/
entities = JSON.parse fp.read, create_additions: false
path = t.prerequisites.first
src = File.read path
erb = ERB.new src, nil, '%-'
erb.filename = path
b = TOPLEVEL_BINDING.dup
b.local_variable_set 'entities', entities
dst = erb.result b
File.write t.name, dst
end
end
task :submodule do
sh 'git submodule update --init --recursive'
end
file 'test/spec.json' => 'submodules/CommonMark/spec.txt' do |f|
sh 'make -C submodules/CommonMark spec.json'
rm_r 'submodules/CommonMark/test/__pycache__'
mv 'submodules/CommonMark/spec.json', f.name
end
file 'benchmark/input.md' => 'submodules/progit/README.md' do |f|
require 'pathname'
dir = Pathname.new __dir__
dest = dir + f.name
src = dir + 'submodules/progit'
dest.open 'a' do |fp|
src \
. find \
. lazy \
. select {|i| i.fnmatch '*.{markdown,md}', File::FNM_EXTGLOB } \
. each {|i| IO.copy_stream i.to_path, fp }
end
end
task :benchmark => 'benchmark/input.md' do
# usage: rake benchmark -- prog prog prog ...
require 'benchmark/ips'
Benchmark.ips do |x|
progs = ARGV.drop_while {|i| i != '--' }
progs.shift
progs.each do |prog|
x.report prog do
sh "#{prog} benchmark/input.md > /dev/null", verbose: false
end
end
end
end
task test: 'test/spec.json'
task prepare: :submodule
task prepare: 'lib/optdown/html5entity.rb'
task prepare: 'test/spec.json'
task prepare: 'benchmark/input.md'