Add -u, --update switch to "pull" command
This commit is contained in:
parent
316133c235
commit
42c3b82712
7 changed files with 58 additions and 29 deletions
|
@ -41,6 +41,7 @@ the content of The Quran in multiple languages.
|
||||||
Usage: quran-json pull [OPTIONS]
|
Usage: quran-json pull [OPTIONS]
|
||||||
-l, --locale LOCALE ar, en, pt, fa, nl, fr, or it (default: en)
|
-l, --locale LOCALE ar, en, pt, fa, nl, fr, or it (default: en)
|
||||||
-o, --overwrite Overwrite existing JSON files (default: no)
|
-o, --overwrite Overwrite existing JSON files (default: no)
|
||||||
|
-u, --update Only update the surah metadata (implies -o, default: no)
|
||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ module Command
|
||||||
end
|
end
|
||||||
|
|
||||||
def locale_dir
|
def locale_dir
|
||||||
File.join(share_dir, options.locale)
|
File.join(quran_dir, options.locale)
|
||||||
end
|
end
|
||||||
|
|
||||||
def line
|
def line
|
||||||
|
@ -33,9 +33,15 @@ module Command
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def surah_info
|
def metadata
|
||||||
@surah_info ||= Ryo.from(
|
@metadata ||= read_metadata
|
||||||
JSON.parse File.binread(File.join(data_dir, "surahinfo.json"))
|
end
|
||||||
)
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def read_metadata
|
||||||
|
c = File.binread(File.join(data_dir, "metadata.json"))
|
||||||
|
m = JSON.parse(c).map { _1.merge!("translated_by" => source.translated_by) }
|
||||||
|
Ryo.from(m)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,12 +14,13 @@ class Pull
|
||||||
|
|
||||||
def self.cli(argv)
|
def self.cli(argv)
|
||||||
op = nil
|
op = nil
|
||||||
options = Ryo({locale: "en", overwrite: false})
|
options = Ryo({locale: "en", overwrite: false, update: false})
|
||||||
OptionParser.new(nil, 26, " " * 2) do |o|
|
OptionParser.new(nil, 26, " " * 2) do |o|
|
||||||
o.banner = "Usage: quran-json pull [OPTIONS]"
|
o.banner = "Usage: quran-json pull [OPTIONS]"
|
||||||
op = o
|
op = o
|
||||||
o.on("-l", "--locale LOCALE", "ar, en, pt, fa, nl, fr, or it (default: en)")
|
o.on("-l", "--locale LOCALE", "ar, en, pt, fa, nl, fr, or it (default: en)")
|
||||||
o.on("-o", "--overwrite", "Overwrite existing JSON files (default: no)")
|
o.on("-o", "--overwrite", "Overwrite existing JSON files (default: no)")
|
||||||
|
o.on("-u", "--update", "Only update the surah metadata (implies -o, default: no)")
|
||||||
end.parse(argv, into: options)
|
end.parse(argv, into: options)
|
||||||
options
|
options
|
||||||
rescue
|
rescue
|
||||||
|
@ -43,10 +44,15 @@ class Pull
|
||||||
|
|
||||||
def write(surah_no, rows)
|
def write(surah_no, rows)
|
||||||
mkdir_p(locale_dir)
|
mkdir_p(locale_dir)
|
||||||
rows.unshift(Ryo.table_of(surah_info[surah_no - 1]))
|
rows[0] = Ryo.table_of(metadata[surah_no-1])
|
||||||
File.binwrite File.join(locale_dir, "#{surah_no}.json"), JSON.pretty_generate(rows)
|
File.binwrite File.join(locale_dir, "#{surah_no}.json"), JSON.pretty_generate(rows)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update(surah_no)
|
||||||
|
rows = JSON.parse File.binread(File.join(locale_dir, "#{surah_no}.json"))
|
||||||
|
write(surah_no, rows)
|
||||||
|
end
|
||||||
|
|
||||||
def keepalive
|
def keepalive
|
||||||
http.start
|
http.start
|
||||||
yield
|
yield
|
||||||
|
@ -58,7 +64,7 @@ class Pull
|
||||||
# @return [Boolean]
|
# @return [Boolean]
|
||||||
# Returns true when a surah shouldn't be replaced
|
# Returns true when a surah shouldn't be replaced
|
||||||
def keep?(surah_no)
|
def keep?(surah_no)
|
||||||
exist?(surah_no) and [options.overwrite].all? { _1.equal?(false) }
|
exist?(surah_no) and [options.overwrite, options.update].all? { _1.equal?(false) }
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -16,7 +16,11 @@ def main(argv)
|
||||||
cmd = Pull.new(Pull.cli(argv))
|
cmd = Pull.new(Pull.cli(argv))
|
||||||
cmd.keepalive do
|
cmd.keepalive do
|
||||||
1.upto(114) do |surah_no|
|
1.upto(114) do |surah_no|
|
||||||
next if cmd.keep?(surah_no)
|
if cmd.keep?(surah_no)
|
||||||
|
next
|
||||||
|
elsif cmd.options.update
|
||||||
|
cmd.update(surah_no)
|
||||||
|
else
|
||||||
rows = []
|
rows = []
|
||||||
1.upto(cmd.count[surah_no]) do |ayah_no|
|
1.upto(cmd.count[surah_no]) do |ayah_no|
|
||||||
res = cmd.pull_ayah(surah_no, ayah_no)
|
res = cmd.pull_ayah(surah_no, ayah_no)
|
||||||
|
@ -27,5 +31,6 @@ def main(argv)
|
||||||
cmd.line.end
|
cmd.line.end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
main(ARGV)
|
main(ARGV)
|
||||||
|
|
|
@ -17,13 +17,18 @@ def main(argv)
|
||||||
cmd = Pull.new(Pull.cli(argv))
|
cmd = Pull.new(Pull.cli(argv))
|
||||||
cmd.keepalive do
|
cmd.keepalive do
|
||||||
1.upto(114) do |surah_no|
|
1.upto(114) do |surah_no|
|
||||||
next if cmd.keep?(surah_no)
|
if cmd.keep?(surah_no)
|
||||||
|
next
|
||||||
|
elsif cmd.options.update
|
||||||
|
cmd.update(surah_no)
|
||||||
|
else
|
||||||
rows = []
|
rows = []
|
||||||
res = cmd.pull_surah(surah_no)
|
res = cmd.pull_surah(surah_no)
|
||||||
rows.concat(grep(res).map.with_index(1) { [_2, _1] })
|
rows.concat(grep(res).map.with_index(1) { [_2, _1] })
|
||||||
cmd.line.rewind.print "Surah #{surah_no} [#{surah_no}/114]"
|
cmd.line.rewind.print "Surah #{surah_no} [#{surah_no}/114]"
|
||||||
cmd.write(surah_no, rows)
|
cmd.write(surah_no, rows)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
cmd.line.end
|
cmd.line.end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
},
|
},
|
||||||
"dest": {
|
"dest": {
|
||||||
"dir": "%{share_dir}/TheQuran/ar"
|
"dir": "%{share_dir}/TheQuran/ar"
|
||||||
}
|
},
|
||||||
|
"translated_by": null
|
||||||
},
|
},
|
||||||
"en": {
|
"en": {
|
||||||
"http": {
|
"http": {
|
||||||
|
@ -17,7 +18,8 @@
|
||||||
},
|
},
|
||||||
"dest": {
|
"dest": {
|
||||||
"dir": "%{share_dir}/TheQuran/en"
|
"dir": "%{share_dir}/TheQuran/en"
|
||||||
}
|
},
|
||||||
|
"translated_by": "Dr. Mustafa Khattab"
|
||||||
},
|
},
|
||||||
"pt": {
|
"pt": {
|
||||||
"http": {
|
"http": {
|
||||||
|
@ -27,7 +29,8 @@
|
||||||
},
|
},
|
||||||
"dest": {
|
"dest": {
|
||||||
"dir": "%{share_dir}/TheQuran/pt"
|
"dir": "%{share_dir}/TheQuran/pt"
|
||||||
}
|
},
|
||||||
|
"translated_by": null
|
||||||
},
|
},
|
||||||
"fa": {
|
"fa": {
|
||||||
"http": {
|
"http": {
|
||||||
|
@ -37,7 +40,8 @@
|
||||||
},
|
},
|
||||||
"dest": {
|
"dest": {
|
||||||
"dir": "%{share_dir}/TheQuran/fa"
|
"dir": "%{share_dir}/TheQuran/fa"
|
||||||
}
|
},
|
||||||
|
"translated_by": "Hussein Taji Kal Dari"
|
||||||
},
|
},
|
||||||
"nl": {
|
"nl": {
|
||||||
"http": {
|
"http": {
|
||||||
|
@ -47,7 +51,8 @@
|
||||||
},
|
},
|
||||||
"dest": {
|
"dest": {
|
||||||
"dir": "%{share_dir}/TheQuran/nl"
|
"dir": "%{share_dir}/TheQuran/nl"
|
||||||
}
|
},
|
||||||
|
"translated_by": "Sofian S. Siregar"
|
||||||
},
|
},
|
||||||
"fr": {
|
"fr": {
|
||||||
"http": {
|
"http": {
|
||||||
|
@ -57,7 +62,8 @@
|
||||||
},
|
},
|
||||||
"dest": {
|
"dest": {
|
||||||
"dir": "%{share_dir}/TheQuran/fr"
|
"dir": "%{share_dir}/TheQuran/fr"
|
||||||
}
|
},
|
||||||
|
"translated_by": "Muhammad Hamidullah"
|
||||||
},
|
},
|
||||||
"it": {
|
"it": {
|
||||||
"http": {
|
"http": {
|
||||||
|
@ -68,6 +74,6 @@
|
||||||
"dest": {
|
"dest": {
|
||||||
"dir": "%{share_dir}/TheQuran/it"
|
"dir": "%{share_dir}/TheQuran/it"
|
||||||
},
|
},
|
||||||
"author": "Hamza Roberto Piccardo"
|
"translated_by": "Hamza Roberto Piccardo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue