-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathRakefile
130 lines (99 loc) · 3.74 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
124
125
126
127
128
129
require "bundler/gem_tasks"
require 'rspec/core/rake_task'
require 'optparse'
RSpec::Core::RakeTask.new('spec')
# If you want to make this the default task
task :default => :spec
namespace :test do |args|
desc 'Run acceptance tests'
task :acceptance do
sh "tests/run_all"
end
desc 'Run unit tests'
task :unit => :spec
desc 'Run all tests'
task :all => [:acceptance, :unit]
end
namespace :parser do |args|
desc 'Creates a new parser for kuniri with parser:create'
task :create do
options = {}
OptionParser.new(args) do |opts|
opts.banner = "Usage: rake user:create [parser_name]"
end.parse!
if ARGV.length <= 1 then
puts 'Must use pass a parser name'
exit 0
end
parsername = ARGV[1]
if File.directory?("lib/kuniri/language/#{parsername.downcase}") then
puts "Error: A folder for this parser code already exists at" +
"lib/kuniri/language/#{parsername.downcase}"
exit 1
end
FileUtils.mkdir_p("lib/kuniri/language/#{parsername.downcase}")
Dir.glob( 'data/*.rb' ).select { |f| File.file?( f ) }.each do |f|
fdest = File.basename(f).gsub('lang', parsername.downcase)
dest = "lib/kuniri/language/#{parsername.downcase}/#{fdest}"
FileUtils.cp( f, dest )
p dest
end
Dir.glob( "lib/kuniri/language/#{parsername.downcase}/*.rb" ).select { |f| File.file?( f ) }.each do |f|
text = File.read(f)
formated_text = text.gsub('{LANG}', parsername.capitalize)
formated_text = formated_text.gsub('{lang}', parsername.downcase)
File.open(f, "w") { |file| file << formated_text }
end
f = 'lib/kuniri/language/language_factory.rb'
text = File.read(f)
relative = "require_relative '#{parsername.downcase}/#{parsername.downcase}_syntax'"
if text.include?(relative) then
puts "Error: the /lib/kuniri/language/language_factory.rb file already has the require for this parser"
exit 1
end
formated_text = relative + "\n" + text
condition = "pType.downcase!
if pType == '#{parsername.downcase}'
return Languages::#{parsername.capitalize}Syntax.new
end"
formated_text = formated_text.gsub("pType.downcase!\n", condition)
File.open(f, "w") { |file| file << formated_text }
exit 0
# End task parser:create
end
desc 'Removes a parser for kuniri with parser:remove'
task :remove do
options = {}
OptionParser.new(args) do |opts|
opts.banner = "Usage: rake user:remove [parser_name]"
end.parse!
if ARGV.length <= 1 then
puts 'Must use pass a parser name'
exit 0
end
parsername = ARGV[1]
input = ''
STDOUT.puts "This operation will delete all code related to the #{parsername} parser, are you sure(y/n)?"
input = STDIN.gets.chomp
exit 0 unless input.downcase == "y" or input.downcase == "yes"
if !File.directory?("lib/kuniri/language/#{parsername.downcase}") then
puts "Error: A folder for this parser code does not exists at lib/kuniri/language/#{parsername.downcase}"
exit 1
end
FileUtils.rm_rf("lib/kuniri/language/#{parsername.downcase}")
f = 'lib/kuniri/language/language_factory.rb'
text = File.read(f)
relative = "require_relative '#{parsername.downcase}/#{parsername.downcase}_syntax'\n"
if not text.include?(relative) then
puts "Warning: the /lib/kuniri/language/language_factory.rb file could not found the require for this parser"
end
formated_text = text.gsub(relative,'')
condition = "\n if pType == '#{parsername.downcase}'
return Languages::#{parsername.capitalize}Syntax.new
end"
formated_text = formated_text.gsub(condition, '')
File.open(f, "w") { |file| file << formated_text }
exit 0
# End task parser:remove
end
end