🦊 Change download option to work multiple times (#16)
Changed `-D` option to always download the lists supplied, regardless of the database directory being empty or not. This means you can download additional lists after the first program run, or re-download lists later on. It *will* overwrite your custom changes however if your files are called the same as the default list names. Additionally removed dependency on GNU version of cut and added some simple tests for the download functionality. Fixes #16.
This commit is contained in:
parent
dc68887091
commit
7f5c3772e2
6 changed files with 76 additions and 20 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -7,3 +7,6 @@
|
|||
[submodule "test/test_helper/bats-assert"]
|
||||
path = test/test_helper/bats-assert
|
||||
url = https://github.com/bats-core/bats-assert.git
|
||||
[submodule "test/test_helper/mocks"]
|
||||
path = test/test_helper/mocks
|
||||
url = https://github.com/jasonkarns/bats-mock.git
|
||||
|
|
|
@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
### Changed
|
||||
|
||||
- Multiple command options can be combined
|
||||
- Allow downloading emoji sets at any time after initial run with `-D <choice>`
|
||||
|
||||
<!-- ### Deprecated -->
|
||||
|
||||
|
|
14
README.md
14
README.md
|
@ -174,11 +174,11 @@ The path can also be a weblink which bemoji will download and use:
|
|||
bemoji -f "https://raw.githubusercontent.com/jchook/emoji-menu/master/data/emojis.txt"
|
||||
```
|
||||
|
||||
### Change the default emoji set
|
||||
### Download additional emoji set
|
||||
|
||||
bemoji downloads emoji for you to use on first invocation.
|
||||
bemoji automatically downloads an emoji list for you to use on first invocation.
|
||||
By default, it only downloads emoji, though you can have it download math symbols as well.
|
||||
To change this setting, execute bemoji like the following:
|
||||
To download additional sets, execute bemoji like the following:
|
||||
|
||||
```bash
|
||||
bemoji -D all
|
||||
|
@ -187,8 +187,14 @@ bemoji -D all
|
|||
This will download *all* default sets bemoji knows - which is currently the default emoji list and a long list of math symbols.
|
||||
Other valid options for this setting are `emoji`, `math`, `none`.
|
||||
|
||||
```bash
|
||||
bemoji -D "math emoji"
|
||||
```
|
||||
|
||||
The above command is equivalent as you can mention multiple sets you want downloaded.
|
||||
|
||||
If set to `none` and no files are in the emoji directory,
|
||||
bemoji will simply complain and not show anything.
|
||||
bemoji will complain and not show anything.
|
||||
|
||||
### Do not skip to new line after output
|
||||
|
||||
|
|
37
bemoji
37
bemoji
|
@ -36,8 +36,8 @@ usage() {
|
|||
echo " -n Do not print a newline after the picked emoji."
|
||||
echo " -p Do not save picked emoji to recent history."
|
||||
echo " -P Do not order emoji by recently used."
|
||||
echo " -D <choice> Choose specific default lists to download if none found locally."
|
||||
echo " Valid choices: all|none|emoji|math."
|
||||
echo " -D <choice> Choose from default lists to download."
|
||||
echo " Valid choices: all|none|emoji|math (multiple choices possible)."
|
||||
echo " -f <filepath> Use a custom emoji database. Can be a url which will be retrieved."
|
||||
echo " -v Display current program version and directory configuration."
|
||||
echo " -h Show this help."
|
||||
|
@ -73,34 +73,39 @@ prepare_db() {
|
|||
mkdir -p "$bm_db_location"
|
||||
fi
|
||||
|
||||
if [ -n "$(find "$bm_db_location" -maxdepth 0 -type d -empty 2>/dev/null)" ]; then
|
||||
if [ -n "$BEMOJI_DOWNLOAD_LIST" ]; then
|
||||
# Populate default lists
|
||||
if echo "$BEMOJI_DOWNLOAD_LIST" | grep -q -e 'none'; then
|
||||
printf "No emoji list found, but set to not download any default lists."
|
||||
exit 1
|
||||
printf "Not downloading a default emoji list.\n"
|
||||
return
|
||||
elif echo "$BEMOJI_DOWNLOAD_LIST" | grep -q -e 'all'; then
|
||||
dl_default_emoji
|
||||
dl_math_symbols
|
||||
return
|
||||
else
|
||||
if echo "$BEMOJI_DOWNLOAD_LIST" | grep -q -e 'emoji'; then
|
||||
dl_default_emoji
|
||||
fi
|
||||
if echo "$BEMOJI_DOWNLOAD_LIST" | grep -q -e 'math'; then
|
||||
dl_math_symbols
|
||||
fi
|
||||
fi
|
||||
if [ -z "$BEMOJI_DOWNLOAD_LIST" ] || echo "$BEMOJI_DOWNLOAD_LIST" | grep -q -e 'emoji'; then
|
||||
dl_default_emoji
|
||||
fi
|
||||
if echo "$BEMOJI_DOWNLOAD_LIST" | grep -q -e 'math'; then
|
||||
dl_math_symbols
|
||||
fi
|
||||
fi
|
||||
if [ -n "$(find "$bm_db_location" -maxdepth 0 -type d -empty 2>/dev/null)" ]; then
|
||||
dl_default_emoji
|
||||
fi
|
||||
}
|
||||
|
||||
dl_default_emoji() {
|
||||
curl -sSL "https://unicode.org/Public/emoji/14.0/emoji-test.txt" |
|
||||
sed -ne 's/^.*; fully-qualified.*# \(\S*\) \S* \(.*$\)/\1 \2/gp' >"$bm_db_location/emojis.txt"
|
||||
printf "Downloaded default emoji set."
|
||||
local emojis
|
||||
emojis=$(curl -sSL "https://unicode.org/Public/emoji/14.0/emoji-test.txt")
|
||||
printf "%s" "$emojis" | sed -ne 's/^.*; fully-qualified.*# \(\S*\) \S* \(.*$\)/\1 \2/gp' >"$bm_db_location/emojis.txt"
|
||||
printf "Downloaded default emoji set.\n"
|
||||
}
|
||||
dl_math_symbols() {
|
||||
curl -sSL "https://unicode.org/Public/math/latest/MathClassEx-15.txt" |
|
||||
grep -ve '^#' | cut -d';' -f3,7 --output-delimiter=' ' >"$bm_db_location/math.txt"
|
||||
printf "Downloaded math symbols set."
|
||||
grep -ve '^#' | cut -d';' -f3,7 | sed -e 's/;/ /' >"$bm_db_location/math.txt"
|
||||
printf "Downloaded math symbols set.\n"
|
||||
}
|
||||
|
||||
gather_emojis() {
|
||||
|
|
40
test/bemoji_download.bats
Normal file
40
test/bemoji_download.bats
Normal file
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
setup_file() {
|
||||
# make bemoji executable from anywhere relative to current testfile
|
||||
TEST_DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
|
||||
PATH="$TEST_DIR/..:$PATH"
|
||||
}
|
||||
|
||||
setup() {
|
||||
load 'test_helper/bats-support/load'
|
||||
load 'test_helper/bats-assert/load'
|
||||
load 'test_helper/mocks/stub'
|
||||
|
||||
# mock out interactive picker for static emoji return
|
||||
export BEMOJI_PICKER_CMD="echo heart"
|
||||
|
||||
# set up small default set of test emoji for each test
|
||||
export BEMOJI_DB_LOCATION="$BATS_TEST_TMPDIR/database"
|
||||
export BEMOJI_HISTORY_LOCATION="$BATS_TEST_TMPDIR/history"
|
||||
mkdir -p "$BEMOJI_DB_LOCATION" "$BEMOJI_HISTORY_LOCATION"
|
||||
}
|
||||
|
||||
@test "Runs emoji download on -D emoji option" {
|
||||
stub curl \
|
||||
"echo -e '1F605 ; fully-qualified # emoji E0.6 grinning face with sweat\nnot picked up\n1F605 ; fully-qualified # emoji2 E0.6 picked up'"
|
||||
run bemoji -D emojis 3>&-
|
||||
outcome=$(cat "$BEMOJI_DB_LOCATION/emojis.txt")
|
||||
assert_equal "$outcome" "emoji grinning face with sweat
|
||||
emoji2 picked up"
|
||||
unstub curl
|
||||
}
|
||||
|
||||
@test "Runs maths download on -D maths option" {
|
||||
stub curl \
|
||||
"echo '03A3;A;Σ;Sigma;ISOGRK3;;GREEK CAPITAL LETTER SIGMA'"
|
||||
run bemoji -D math 3>&-
|
||||
outcome=$(cat "$BEMOJI_DB_LOCATION/math.txt")
|
||||
assert_equal "$outcome" "Σ GREEK CAPITAL LETTER SIGMA"
|
||||
unstub curl
|
||||
}
|
1
test/test_helper/mocks
Submodule
1
test/test_helper/mocks
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 7e0fbf6bc705bd1b09daa2d5ff88962ddbe832f6
|
Loading…
Reference in a new issue