ppl 4.0.2 → 4.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.editorconfig +16 -0
- data/.github/workflows/build.yml +20 -8
- data/.gitignore +0 -2
- data/.ruby-version +1 -0
- data/Gemfile +0 -1
- data/Rakefile +3 -3
- data/code_of_conduct.md +1 -1
- data/demo.svg +1 -0
- data/features/step_definitions/ppl_steps.rb +24 -24
- data/lib/ppl/adapter/storage/disk.rb +2 -2
- data/lib/ppl/adapter/storage/factory.rb +1 -1
- data/lib/ppl/application/configuration.rb +2 -2
- data/lib/ppl/command/completion.rb +1 -1
- data/lib/ppl/command/shell.rb +1 -1
- data/lib/ppl/command/version.rb +1 -1
- data/lib/ppl/version.rb +5 -0
- data/lib/ppl.rb +3 -3
- data/makefile +29 -0
- data/ppl.gemspec +12 -5
- data/ppl.svg +12 -0
- data/readme.md +4 -4
- data/spec/ppl/adapter/storage/disk_spec.rb +2 -2
- data/spec/ppl/command/completion_spec.rb +2 -2
- data/spec/ppl/command/shell_spec.rb +1 -1
- data/spec/ppl/command/version_spec.rb +1 -1
- metadata +57 -17
- data/spec/ppl/adapter/color_spec.rb +0 -14
- data/spec/ppl/adapter/email_scraper_spec.rb +0 -14
- data/spec/ppl/adapter/vcard_spec.rb +0 -23
- data/spec/ppl/format/address_book_spec.rb +0 -17
- data/spec/ppl/format/contact_spec.rb +0 -16
- data/spec/ppl/format/name_spec.rb +0 -17
- data/spec/ppl/format/postal_address_spec.rb +0 -17
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b38b9c2d04d3ad59eca8b7c5b8ea2cc5fa1748b3ca7527e78e177d9cb0c5a539
|
|
4
|
+
data.tar.gz: d3107c891dada27586d90fe714957d32c841b243ea076084d33c0d5de4e4da38
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 68d4ef1d2c7276256e41cdf6f7b09510337535c00a24e62416785766d14296e31b8dab1289ec1399159985115cfed4aeeab84eba9b20f05cc9e8cb4d255545b7
|
|
7
|
+
data.tar.gz: 7944451c60a9282d590598c2c6b494419dc934e46d49de053bb6f0700f5593cfaaf9504d53f1c2ee855c1ffacbff037c18606144f9ae3f21b61ec87a7fa72b1d
|
data/.editorconfig
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
[*.js]
|
|
2
|
+
indent_style = space
|
|
3
|
+
indent_size = 2
|
|
4
|
+
|
|
5
|
+
[*.md]
|
|
6
|
+
indent_style = space
|
|
7
|
+
indent_size = 2
|
|
8
|
+
|
|
9
|
+
[*.njk]
|
|
10
|
+
indent_style = space
|
|
11
|
+
indent_size = 2
|
|
12
|
+
|
|
13
|
+
[*.scss]
|
|
14
|
+
indent_style = space
|
|
15
|
+
indent_size = 2
|
|
16
|
+
|
|
1
17
|
[*.yml]
|
|
2
18
|
indent_style = space
|
|
3
19
|
indent_size = 2
|
data/.github/workflows/build.yml
CHANGED
|
@@ -2,31 +2,43 @@ name: Build
|
|
|
2
2
|
on:
|
|
3
3
|
push:
|
|
4
4
|
branches:
|
|
5
|
-
-
|
|
5
|
+
- main
|
|
6
6
|
pull_request:
|
|
7
7
|
branches:
|
|
8
|
-
-
|
|
8
|
+
- main
|
|
9
9
|
|
|
10
10
|
jobs:
|
|
11
|
-
|
|
11
|
+
build:
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
13
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
15
|
-
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- uses: actions/setup-node@v2
|
|
17
|
+
with:
|
|
18
|
+
node-version: 20
|
|
19
|
+
|
|
20
|
+
- uses: ruby/setup-ruby@v1
|
|
16
21
|
with:
|
|
17
|
-
ruby-version: 3.
|
|
22
|
+
ruby-version: 3.2.0
|
|
23
|
+
|
|
18
24
|
- uses: jwlawson/actions-setup-cmake@v1.8
|
|
19
25
|
with:
|
|
20
26
|
cmake-version: "3.16.x"
|
|
27
|
+
|
|
21
28
|
- name: Install dependencies
|
|
22
|
-
run:
|
|
29
|
+
run: |
|
|
30
|
+
bundle install
|
|
31
|
+
yarn install --pure-lockfile
|
|
32
|
+
|
|
23
33
|
- name: rspec
|
|
24
34
|
run: bundle exec rake spec
|
|
35
|
+
|
|
25
36
|
- name: cucumber
|
|
26
37
|
run: bundle exec rake features
|
|
38
|
+
|
|
27
39
|
- uses: dawidd6/action-publish-gem@v1
|
|
28
40
|
continue-on-error: true
|
|
29
|
-
if: ${{ github.ref == 'refs/heads/
|
|
41
|
+
if: ${{ github.ref == 'refs/heads/main' }}
|
|
30
42
|
with:
|
|
31
43
|
api_key: ${{secrets.RUBYGEMS_API_KEY}}
|
|
32
44
|
github_token: ${{secrets.GITHUB_TOKEN}}
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.2.2
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
task :features => [:disable_config] do
|
|
2
|
-
system "bundle exec cucumber"
|
|
2
|
+
system "bundle exec cucumber --publish-quiet"
|
|
3
3
|
end
|
|
4
4
|
|
|
5
5
|
task :spec do
|
|
@@ -9,7 +9,7 @@ end
|
|
|
9
9
|
task :disable_config do
|
|
10
10
|
pplconfig = File.expand_path("~/.pplconfig")
|
|
11
11
|
bkpconfig = File.expand_path("~/.pplconfig.bkp")
|
|
12
|
-
if File.
|
|
12
|
+
if File.exist? pplconfig
|
|
13
13
|
FileUtils.mv pplconfig, bkpconfig
|
|
14
14
|
end
|
|
15
15
|
at_exit { Rake::Task["enable_config"].invoke }
|
|
@@ -18,7 +18,7 @@ end
|
|
|
18
18
|
task :enable_config do
|
|
19
19
|
pplconfig = File.expand_path("~/.pplconfig")
|
|
20
20
|
bkpconfig = File.expand_path("~/.pplconfig.bkp")
|
|
21
|
-
if File.
|
|
21
|
+
if File.exist? bkpconfig
|
|
22
22
|
FileUtils.mv bkpconfig, pplconfig
|
|
23
23
|
end
|
|
24
24
|
end
|
data/code_of_conduct.md
CHANGED
|
@@ -35,7 +35,7 @@ This Code of Conduct applies both within project spaces and in public spaces
|
|
|
35
35
|
when an individual is representing the project or its community.
|
|
36
36
|
|
|
37
37
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
38
|
-
reported by contacting a project maintainer at [
|
|
38
|
+
reported by contacting a project maintainer at [henry@catalinismith.com](mailto:henry@catalinismith.com). All
|
|
39
39
|
complaints will be reviewed and investigated and will result in a response that
|
|
40
40
|
is deemed necessary and appropriate to the circumstances. Maintainers are
|
|
41
41
|
obligated to maintain confidentiality with regard to the reporter of an
|
data/demo.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="616" height="623.88"><rect width="616" height="623.88" rx="0" ry="0" class="a"/><svg height="607.88" viewBox="0 0 60 60.788" width="600" x="8" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="8"><style>@keyframes i{0%{transform:translateX(0)}.06%{transform:translateX(-60px)}.39%{transform:translateX(-120px)}2.32%{transform:translateX(-180px)}2.69%{transform:translateX(-240px)}2.77%{transform:translateX(-300px)}3.1%{transform:translateX(-360px)}3.37%{transform:translateX(-420px)}3.45%{transform:translateX(-480px)}3.79%{transform:translateX(-540px)}4.08%{transform:translateX(-600px)}4.3%{transform:translateX(-660px)}4.71%{transform:translateX(-720px)}4.86%{transform:translateX(-780px)}4.97%{transform:translateX(-840px)}5.23%{transform:translateX(-900px)}5.73%{transform:translateX(-960px)}6.17%{transform:translateX(-1020px)}6.61%{transform:translateX(-1080px)}7.06%{transform:translateX(-1140px)}7.37%{transform:translateX(-1200px)}10.35%{transform:translateX(-1260px)}13.4%{transform:translateX(-1320px)}13.56%{transform:translateX(-1380px)}13.85%{transform:translateX(-1440px)}14.08%{transform:translateX(-1500px)}14.41%{transform:translateX(-1560px)}14.45%{transform:translateX(-1620px)}14.68%{transform:translateX(-1680px)}15.13%{transform:translateX(-1740px)}15.41%{transform:translateX(-1800px)}15.94%{transform:translateX(-1860px)}16.4%{transform:translateX(-1920px)}16.68%{transform:translateX(-1980px)}16.69%{transform:translateX(-2040px)}19.03%{transform:translateX(-2100px)}19.41%{transform:translateX(-2160px)}19.53%{transform:translateX(-2220px)}19.85%{transform:translateX(-2280px)}20.28%{transform:translateX(-2340px)}20.46%{transform:translateX(-2400px)}20.87%{transform:translateX(-2460px)}21.11%{transform:translateX(-2520px)}21.6%{transform:translateX(-2580px)}21.77%{transform:translateX(-2640px)}22.61%{transform:translateX(-2700px)}22.99%{transform:translateX(-2760px)}23.23%{transform:translateX(-2820px)}23.61%{transform:translateX(-2880px)}24.17%{transform:translateX(-2940px)}25.1%{transform:translateX(-3000px)}25.77%{transform:translateX(-3060px)}26.41%{transform:translateX(-3120px)}26.75%{transform:translateX(-3180px)}27.34%{transform:translateX(-3240px)}27.64%{transform:translateX(-3300px)}28.81%{transform:translateX(-3360px)}29.58%{transform:translateX(-3420px)}30.44%{transform:translateX(-3480px)}30.85%{transform:translateX(-3540px)}31.45%{transform:translateX(-3600px)}31.89%{transform:translateX(-3660px)}31.97%{transform:translateX(-3720px)}32.3%{transform:translateX(-3780px)}32.91%{transform:translateX(-3840px)}33%{transform:translateX(-3900px)}33.92%{transform:translateX(-3960px)}34.68%{transform:translateX(-4020px)}36.45%{transform:translateX(-4080px)}38%{transform:translateX(-4140px)}38.42%{transform:translateX(-4200px)}38.54%{transform:translateX(-4260px)}38.89%{transform:translateX(-4320px)}41.79%{transform:translateX(-4380px)}41.94%{transform:translateX(-4440px)}42.13%{transform:translateX(-4500px)}42.47%{transform:translateX(-4560px)}42.66%{transform:translateX(-4620px)}43.38%{transform:translateX(-4680px)}43.72%{transform:translateX(-4740px)}45.05%{transform:translateX(-4800px)}45.48%{transform:translateX(-4860px)}45.76%{transform:translateX(-4920px)}46.2%{transform:translateX(-4980px)}46.53%{transform:translateX(-5040px)}46.98%{transform:translateX(-5100px)}47.11%{transform:translateX(-5160px)}47.3%{transform:translateX(-5220px)}47.52%{transform:translateX(-5280px)}47.99%{transform:translateX(-5340px)}48.32%{transform:translateX(-5400px)}48.64%{transform:translateX(-5460px)}49.35%{transform:translateX(-5520px)}49.88%{transform:translateX(-5580px)}50.49%{transform:translateX(-5640px)}51.04%{transform:translateX(-5700px)}51.41%{transform:translateX(-5760px)}51.79%{transform:translateX(-5820px)}52.95%{transform:translateX(-5880px)}53.03%{transform:translateX(-5940px)}53.33%{transform:translateX(-6000px)}54.07%{transform:translateX(-6060px)}54.65%{transform:translateX(-6120px)}55.24%{transform:translateX(-6180px)}55.57%{transform:translateX(-6240px)}55.78%{transform:translateX(-6300px)}56.27%{transform:translateX(-6360px)}56.8%{transform:translateX(-6420px)}57.41%{transform:translateX(-6480px)}57.74%{transform:translateX(-6540px)}57.91%{transform:translateX(-6600px)}58.69%{transform:translateX(-6660px)}59.63%{transform:translateX(-6720px)}61.2%{transform:translateX(-6780px)}62.34%{transform:translateX(-6840px)}62.73%{transform:translateX(-6900px)}62.84%{transform:translateX(-6960px)}63.24%{transform:translateX(-7020px)}63.66%{transform:translateX(-7080px)}63.76%{transform:translateX(-7140px)}64.02%{transform:translateX(-7200px)}64.33%{transform:translateX(-7260px)}64.56%{transform:translateX(-7320px)}65.16%{transform:translateX(-7380px)}65.43%{transform:translateX(-7440px)}66.38%{transform:translateX(-7500px)}66.74%{transform:translateX(-7560px)}66.96%{transform:translateX(-7620px)}67.39%{transform:translateX(-7680px)}68.29%{transform:translateX(-7740px)}68.83%{transform:translateX(-7800px)}68.91%{transform:translateX(-7860px)}69.07%{transform:translateX(-7920px)}69.3%{transform:translateX(-7980px)}69.77%{transform:translateX(-8040px)}70%{transform:translateX(-8100px)}70.22%{transform:translateX(-8160px)}70.78%{transform:translateX(-8220px)}71.23%{transform:translateX(-8280px)}71.41%{transform:translateX(-8340px)}71.79%{transform:translateX(-8400px)}72.13%{transform:translateX(-8460px)}72.38%{transform:translateX(-8520px)}72.73%{transform:translateX(-8580px)}73.51%{transform:translateX(-8640px)}75.08%{transform:translateX(-8700px)}77.66%{transform:translateX(-8760px)}78.05%{transform:translateX(-8820px)}78.14%{transform:translateX(-8880px)}78.52%{transform:translateX(-8940px)}78.75%{transform:translateX(-9000px)}79.25%{transform:translateX(-9060px)}79.69%{transform:translateX(-9120px)}79.81%{transform:translateX(-9180px)}79.93%{transform:translateX(-9240px)}80.18%{transform:translateX(-9300px)}80.67%{transform:translateX(-9360px)}80.89%{transform:translateX(-9420px)}81.67%{transform:translateX(-9480px)}82.08%{transform:translateX(-9540px)}82.25%{transform:translateX(-9600px)}82.73%{transform:translateX(-9660px)}84.21%{transform:translateX(-9720px)}84.49%{transform:translateX(-9780px)}84.82%{transform:translateX(-9840px)}84.94%{transform:translateX(-9900px)}85.08%{transform:translateX(-9960px)}85.21%{transform:translateX(-10020px)}85.36%{transform:translateX(-10080px)}85.55%{transform:translateX(-10140px)}85.73%{transform:translateX(-10200px)}85.93%{transform:translateX(-10260px)}88.5%{transform:translateX(-10320px)}90.05%{transform:translateX(-10380px)}90.85%{transform:translateX(-10440px)}91.17%{transform:translateX(-10500px)}91.34%{transform:translateX(-10560px)}91.61%{transform:translateX(-10620px)}92.06%{transform:translateX(-10680px)}92.19%{transform:translateX(-10740px)}92.55%{transform:translateX(-10800px)}92.79%{transform:translateX(-10860px)}93.16%{transform:translateX(-10920px)}93.42%{transform:translateX(-10980px)}94.26%{transform:translateX(-11040px)}94.78%{transform:translateX(-11160px)}94.82%{transform:translateX(-11220px)}to{transform:translateX(-11280px)}}.a{fill:#282d35}.c,.d,.e{fill:#b9c0cb;white-space:pre}.d,.e{fill:#dbab79}.e{fill:#66c2cd}</style><g font-family="Monaco,Consolas,Menlo,'Bitstream Vera Sans Mono','Powerline Symbols',monospace" font-size="1.67"><defs><symbol id="1"><text y="1.67" class="c">$</text></symbol><symbol id="2"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">p</text></symbol><symbol id="3"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">pp</text></symbol><symbol id="4"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text></symbol><symbol id="5"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text></symbol><symbol id="6"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text><text x="11.022" y="1.67" class="c">contacts</text></symbol><symbol id="7"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">cd</text></symbol><symbol id="8"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">cd</text><text x="5.01" y="1.67" class="c">contacts</text></symbol><symbol id="9"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">add</text></symbol><symbol id="10"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">add</text><text x="10.02" y="1.67" class="c">pippi</text></symbol><symbol id="11"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">add</text><text x="10.02" y="1.67" class="c">pippi</text><text x="16.032" y="1.67" class="c">"Pippi</text></symbol><symbol id="12"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">add</text><text x="10.02" y="1.67" class="c">pippi</text><text x="16.032" y="1.67" class="c">"Pippi</text><text x="23.046" y="1.67" class="c">Långstrump"</text></symbol><symbol id="13"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">p</text></symbol><symbol id="14"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">po</text></symbol><symbol id="15"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">pos</text></symbol><symbol id="16"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text></symbol><symbol id="17"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">p</text></symbol><symbol id="18"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pi</text></symbol><symbol id="19"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pip</text></symbol><symbol id="20"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pipp</text></symbol><symbol id="21"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text></symbol><symbol id="22"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">h</text></symbol><symbol id="23"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">ho</text></symbol><symbol id="24"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">hom</text></symbol><symbol id="25"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">home</text></symbol><symbol id="26"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">home</text><text x="22.044" y="1.67" class="c">-</text></symbol><symbol id="27"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">home</text><text x="22.044" y="1.67" class="c">-s</text></symbol><symbol id="28"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">home</text><text x="22.044" y="1.67" class="c">-s</text><text x="25.05" y="1.67" class="c">"Vill</text></symbol><symbol id="29"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">home</text><text x="22.044" y="1.67" class="c">-s</text><text x="25.05" y="1.67" class="c">"Villa</text></symbol><symbol id="30"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">home</text><text x="22.044" y="1.67" class="c">-s</text><text x="25.05" y="1.67" class="c">"Villa</text><text x="32.064" y="1.67" class="c">Villekulla"</text></symbol><symbol id="31"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">home</text><text x="22.044" y="1.67" class="c">-r</text></symbol><symbol id="32"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">post</text><text x="11.022" y="1.67" class="c">pippi</text><text x="17.034" y="1.67" class="c">home</text><text x="22.044" y="1.67" class="c">-r</text><text x="25.05" y="1.67" class="c">Gotland</text></symbol><symbol id="33"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">phone</text></symbol><symbol id="34"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">phone</text><text x="12.024" y="1.67" class="c">pippi</text></symbol><symbol id="35"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">phone</text><text x="12.024" y="1.67" class="c">pippi</text><text x="18.036" y="1.67" class="c">0123456789</text></symbol><symbol id="36"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">git</text></symbol><symbol id="37"><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">git</text><text x="6.012" y="1.67" class="c">reflog</text></symbol><symbol id="38"><text y="1.67" class="d">a9152d0</text><text x="8.016" y="1.67" class="d">(</text><text x="9.018" y="1.67" class="e">HEAD</text><text x="14.028" y="1.67" class="e">-></text><text x="17.034" y="1.67" style="white-space:pre" fill="#d290e4">trunk</text><text x="22.044" y="1.67" class="d">)</text><text x="24.048" y="1.67" class="c">HEAD@{0}:</text><text x="34.068" y="1.67" class="c">commit:</text><text x="42.084" y="1.67" class="c">save_contact(pippi</text></symbol><symbol id="39"><text y="1.67" class="c">)</text></symbol><symbol id="40"><text y="1.67" class="d">ff1e87b</text><text x="8.016" y="1.67" class="c">HEAD@{1}:</text><text x="18.036" y="1.67" class="c">commit:</text><text x="26.052" y="1.67" class="c">save_contact(pippi)</text></symbol><symbol id="41"><text y="1.67" class="d">cf92220</text><text x="8.016" y="1.67" class="c">HEAD@{2}:</text><text x="18.036" y="1.67" class="c">commit:</text><text x="26.052" y="1.67" class="c">save_contact(pippi)</text></symbol><symbol id="42"><text y="1.67" class="d">239279e</text><text x="8.016" y="1.67" class="c">HEAD@{3}:</text><text x="18.036" y="1.67" class="c">commit:</text><text x="26.052" y="1.67" class="c">save_contact(pippi)</text></symbol><symbol id="43"><text y="1.67" class="d">602b33a</text><text x="8.016" y="1.67" class="c">HEAD@{4}:</text><text x="18.036" y="1.67" class="c">commit</text><text x="25.05" y="1.67" class="c">(initial):</text><text x="36.072" y="1.67" class="c">first</text><text x="42.084" y="1.67" class="c">commit</text></symbol><symbol id="a"><path fill="transparent" d="M0 0h60v29H0z"/></symbol><symbol id="b"><path fill="#6f7683" d="M0 0h1.102v2.171H0z"/></symbol></defs><path class="a" d="M0 0h60v60.788H0z"/><g style="animation-duration:36.967416s;animation-iteration-count:infinite;animation-name:i;animation-timing-function:steps(1,end)"><svg width="11340"><svg><use xlink:href="#a"/><use xlink:href="#b" x="-.004"/></svg><svg x="60"><use xlink:href="#a"/><use xlink:href="#b" x="1.996"/><use xlink:href="#1"/></svg><svg x="120"><use xlink:href="#a"/><use xlink:href="#b" x="1.996"/><use xlink:href="#1"/></svg><svg x="180"><use xlink:href="#a"/><use xlink:href="#b" x="2.996"/><use xlink:href="#2"/></svg><svg x="240"><use xlink:href="#a"/><use xlink:href="#b" x="3.996"/><use xlink:href="#3"/></svg><svg x="300"><use xlink:href="#a"/><use xlink:href="#b" x="4.996"/><use xlink:href="#4"/></svg><svg x="360"><use xlink:href="#a"/><use xlink:href="#b" x="5.996"/><use xlink:href="#4"/></svg><svg x="420"><use xlink:href="#a"/><use xlink:href="#b" x="6.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">i</text></svg><svg x="480"><use xlink:href="#a"/><use xlink:href="#b" x="7.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">in</text></svg><svg x="540"><use xlink:href="#a"/><use xlink:href="#b" x="8.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">ini</text></svg><svg x="600"><use xlink:href="#a"/><use xlink:href="#b" x="9.996"/><use xlink:href="#5"/></svg><svg x="660"><use xlink:href="#a"/><use xlink:href="#b" x="10.996"/><use xlink:href="#5"/></svg><svg x="720"><use xlink:href="#a"/><use xlink:href="#b" x="11.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text><text x="11.022" y="1.67" class="c">c</text></svg><svg x="780"><use xlink:href="#a"/><use xlink:href="#b" x="12.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text><text x="11.022" y="1.67" class="c">co</text></svg><svg x="840"><use xlink:href="#a"/><use xlink:href="#b" x="13.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text><text x="11.022" y="1.67" class="c">con</text></svg><svg x="900"><use xlink:href="#a"/><use xlink:href="#b" x="14.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text><text x="11.022" y="1.67" class="c">cont</text></svg><svg x="960"><use xlink:href="#a"/><use xlink:href="#b" x="15.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text><text x="11.022" y="1.67" class="c">conta</text></svg><svg x="1020"><use xlink:href="#a"/><use xlink:href="#b" x="16.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text><text x="11.022" y="1.67" class="c">contac</text></svg><svg x="1080"><use xlink:href="#a"/><use xlink:href="#b" x="17.996"/><text y="1.67" class="c">$</text><text x="2.004" y="1.67" class="c">ppl</text><text x="6.012" y="1.67" class="c">init</text><text x="11.022" y="1.67" class="c">contact</text></svg><svg x="1140"><use xlink:href="#a"/><use xlink:href="#b" x="18.996"/><use xlink:href="#6"/></svg><svg x="1200"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="2.146"/><use xlink:href="#6"/></svg><svg x="1260"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="2.146"/><use xlink:href="#6"/><use xlink:href="#1" y="2.171"/></svg><svg x="1320"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="2.146"/><use xlink:href="#6"/><text y="3.841" class="c">$</text><text x="2.004" y="3.841" class="c">c</text></svg><svg x="1380"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="2.146"/><use xlink:href="#6"/><use xlink:href="#7" y="2.171"/></svg><svg x="1440"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="2.146"/><use xlink:href="#6"/><use xlink:href="#7" y="2.171"/></svg><svg x="1500"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="2.146"/><use xlink:href="#6"/><text y="3.841" class="c">$</text><text x="2.004" y="3.841" class="c">cd</text><text x="5.01" y="3.841" class="c">c</text></svg><svg x="1560"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="2.146"/><use xlink:href="#6"/><text y="3.841" class="c">$</text><text x="2.004" y="3.841" class="c">cd</text><text x="5.01" y="3.841" class="c">co</text></svg><svg x="1620"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="2.146"/><use xlink:href="#6"/><text y="3.841" class="c">$</text><text x="2.004" y="3.841" class="c">cd</text><text x="5.01" y="3.841" class="c">con</text></svg><svg x="1680"><use xlink:href="#a"/><use xlink:href="#b" x="8.996" y="2.146"/><use xlink:href="#6"/><text y="3.841" class="c">$</text><text x="2.004" y="3.841" class="c">cd</text><text x="5.01" y="3.841" class="c">cont</text></svg><svg x="1740"><use xlink:href="#a"/><use xlink:href="#b" x="9.996" y="2.146"/><use xlink:href="#6"/><text y="3.841" class="c">$</text><text x="2.004" y="3.841" class="c">cd</text><text x="5.01" y="3.841" class="c">conta</text></svg><svg x="1800"><use xlink:href="#a"/><use xlink:href="#b" x="10.996" y="2.146"/><use xlink:href="#6"/><text y="3.841" class="c">$</text><text x="2.004" y="3.841" class="c">cd</text><text x="5.01" y="3.841" class="c">contac</text></svg><svg x="1860"><use xlink:href="#a"/><use xlink:href="#b" x="11.996" y="2.146"/><use xlink:href="#6"/><text y="3.841" class="c">$</text><text x="2.004" y="3.841" class="c">cd</text><text x="5.01" y="3.841" class="c">contact</text></svg><svg x="1920"><use xlink:href="#a"/><use xlink:href="#b" x="12.996" y="2.146"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/></svg><svg x="1980"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/></svg><svg x="2040"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#1" y="4.342"/></svg><svg x="2100"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#2" y="4.342"/></svg><svg x="2160"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#3" y="4.342"/></svg><svg x="2220"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#4" y="4.342"/></svg><svg x="2280"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#4" y="4.342"/></svg><svg x="2340"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">a</text></svg><svg x="2400"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">ad</text></svg><svg x="2460"><use xlink:href="#a"/><use xlink:href="#b" x="8.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#9" y="4.342"/></svg><svg x="2520"><use xlink:href="#a"/><use xlink:href="#b" x="9.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#9" y="4.342"/></svg><svg x="2580"><use xlink:href="#a"/><use xlink:href="#b" x="10.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">p</text></svg><svg x="2640"><use xlink:href="#a"/><use xlink:href="#b" x="11.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pi</text></svg><svg x="2700"><use xlink:href="#a"/><use xlink:href="#b" x="12.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pip</text></svg><svg x="2760"><use xlink:href="#a"/><use xlink:href="#b" x="13.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pipp</text></svg><svg x="2820"><use xlink:href="#a"/><use xlink:href="#b" x="14.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#10" y="4.342"/></svg><svg x="2880"><use xlink:href="#a"/><use xlink:href="#b" x="15.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#10" y="4.342"/></svg><svg x="2940"><use xlink:href="#a"/><use xlink:href="#b" x="16.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"</text></svg><svg x="3000"><use xlink:href="#a"/><use xlink:href="#b" x="17.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"P</text></svg><svg x="3060"><use xlink:href="#a"/><use xlink:href="#b" x="18.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pi</text></svg><svg x="3120"><use xlink:href="#a"/><use xlink:href="#b" x="19.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pip</text></svg><svg x="3180"><use xlink:href="#a"/><use xlink:href="#b" x="20.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pipp</text></svg><svg x="3240"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#11" y="4.342"/></svg><svg x="3300"><use xlink:href="#a"/><use xlink:href="#b" x="22.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#11" y="4.342"/></svg><svg x="3360"><use xlink:href="#a"/><use xlink:href="#b" x="23.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">L</text></svg><svg x="3420"><use xlink:href="#a"/><use xlink:href="#b" x="24.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Lå</text></svg><svg x="3480"><use xlink:href="#a"/><use xlink:href="#b" x="25.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Lån</text></svg><svg x="3540"><use xlink:href="#a"/><use xlink:href="#b" x="26.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Lång</text></svg><svg x="3600"><use xlink:href="#a"/><use xlink:href="#b" x="27.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Långs</text></svg><svg x="3660"><use xlink:href="#a"/><use xlink:href="#b" x="28.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Långst</text></svg><svg x="3720"><use xlink:href="#a"/><use xlink:href="#b" x="29.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Långstr</text></svg><svg x="3780"><use xlink:href="#a"/><use xlink:href="#b" x="30.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Långstru</text></svg><svg x="3840"><use xlink:href="#a"/><use xlink:href="#b" x="31.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Långstrum</text></svg><svg x="3900"><use xlink:href="#a"/><use xlink:href="#b" x="32.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><text y="6.012" class="c">$</text><text x="2.004" y="6.012" class="c">ppl</text><text x="6.012" y="6.012" class="c">add</text><text x="10.02" y="6.012" class="c">pippi</text><text x="16.032" y="6.012" class="c">"Pippi</text><text x="23.046" y="6.012" class="c">Långstrump</text></svg><svg x="3960"><use xlink:href="#a"/><use xlink:href="#b" x="33.996" y="4.317"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/></svg><svg x="4020"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/></svg><svg x="4080"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#1" y="6.513"/></svg><svg x="4140"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#2" y="6.513"/></svg><svg x="4200"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#3" y="6.513"/></svg><svg x="4260"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#4" y="6.513"/></svg><svg x="4320"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#4" y="6.513"/></svg><svg x="4380"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#13" y="6.513"/></svg><svg x="4440"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#14" y="6.513"/></svg><svg x="4500"><use xlink:href="#a"/><use xlink:href="#b" x="8.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#15" y="6.513"/></svg><svg x="4560"><use xlink:href="#a"/><use xlink:href="#b" x="9.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#16" y="6.513"/></svg><svg x="4620"><use xlink:href="#a"/><use xlink:href="#b" x="10.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#16" y="6.513"/></svg><svg x="4680"><use xlink:href="#a"/><use xlink:href="#b" x="11.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#17" y="6.513"/></svg><svg x="4740"><use xlink:href="#a"/><use xlink:href="#b" x="12.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#18" y="6.513"/></svg><svg x="4800"><use xlink:href="#a"/><use xlink:href="#b" x="13.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#19" y="6.513"/></svg><svg x="4860"><use xlink:href="#a"/><use xlink:href="#b" x="14.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#20" y="6.513"/></svg><svg x="4920"><use xlink:href="#a"/><use xlink:href="#b" x="15.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#21" y="6.513"/></svg><svg x="4980"><use xlink:href="#a"/><use xlink:href="#b" x="16.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#21" y="6.513"/></svg><svg x="5040"><use xlink:href="#a"/><use xlink:href="#b" x="17.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#22" y="6.513"/></svg><svg x="5100"><use xlink:href="#a"/><use xlink:href="#b" x="18.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#23" y="6.513"/></svg><svg x="5160"><use xlink:href="#a"/><use xlink:href="#b" x="19.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#24" y="6.513"/></svg><svg x="5220"><use xlink:href="#a"/><use xlink:href="#b" x="20.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#25" y="6.513"/></svg><svg x="5280"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#25" y="6.513"/></svg><svg x="5340"><use xlink:href="#a"/><use xlink:href="#b" x="22.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#26" y="6.513"/></svg><svg x="5400"><use xlink:href="#a"/><use xlink:href="#b" x="23.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#27" y="6.513"/></svg><svg x="5460"><use xlink:href="#a"/><use xlink:href="#b" x="24.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#27" y="6.513"/></svg><svg x="5520"><use xlink:href="#a"/><use xlink:href="#b" x="25.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"</text></svg><svg x="5580"><use xlink:href="#a"/><use xlink:href="#b" x="26.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"V</text></svg><svg x="5640"><use xlink:href="#a"/><use xlink:href="#b" x="27.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Vi</text></svg><svg x="5700"><use xlink:href="#a"/><use xlink:href="#b" x="28.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Vil</text></svg><svg x="5760"><use xlink:href="#a"/><use xlink:href="#b" x="29.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#28" y="6.513"/></svg><svg x="5820"><use xlink:href="#a"/><use xlink:href="#b" x="30.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#28" y="6.513"/></svg><svg x="5880"><use xlink:href="#a"/><use xlink:href="#b" x="29.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#28" y="6.513"/></svg><svg x="5940"><use xlink:href="#a"/><use xlink:href="#b" x="30.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#29" y="6.513"/></svg><svg x="6000"><use xlink:href="#a"/><use xlink:href="#b" x="31.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#29" y="6.513"/></svg><svg x="6060"><use xlink:href="#a"/><use xlink:href="#b" x="32.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">V</text></svg><svg x="6120"><use xlink:href="#a"/><use xlink:href="#b" x="33.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Vi</text></svg><svg x="6180"><use xlink:href="#a"/><use xlink:href="#b" x="34.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Vil</text></svg><svg x="6240"><use xlink:href="#a"/><use xlink:href="#b" x="35.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Vill</text></svg><svg x="6300"><use xlink:href="#a"/><use xlink:href="#b" x="36.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Ville</text></svg><svg x="6360"><use xlink:href="#a"/><use xlink:href="#b" x="37.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Villek</text></svg><svg x="6420"><use xlink:href="#a"/><use xlink:href="#b" x="38.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Villeku</text></svg><svg x="6480"><use xlink:href="#a"/><use xlink:href="#b" x="39.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Villekul</text></svg><svg x="6540"><use xlink:href="#a"/><use xlink:href="#b" x="40.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Villekull</text></svg><svg x="6600"><use xlink:href="#a"/><use xlink:href="#b" x="41.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><text y="8.183" class="c">$</text><text x="2.004" y="8.183" class="c">ppl</text><text x="6.012" y="8.183" class="c">post</text><text x="11.022" y="8.183" class="c">pippi</text><text x="17.034" y="8.183" class="c">home</text><text x="22.044" y="8.183" class="c">-s</text><text x="25.05" y="8.183" class="c">"Villa</text><text x="32.064" y="8.183" class="c">Villekulla</text></svg><svg x="6660"><use xlink:href="#a"/><use xlink:href="#b" x="42.996" y="6.488"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/></svg><svg x="6720"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/></svg><svg x="6780"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#1" y="8.684"/></svg><svg x="6840"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#2" y="8.684"/></svg><svg x="6900"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#3" y="8.684"/></svg><svg x="6960"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#4" y="8.684"/></svg><svg x="7020"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#4" y="8.684"/></svg><svg x="7080"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#13" y="8.684"/></svg><svg x="7140"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#14" y="8.684"/></svg><svg x="7200"><use xlink:href="#a"/><use xlink:href="#b" x="8.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#15" y="8.684"/></svg><svg x="7260"><use xlink:href="#a"/><use xlink:href="#b" x="9.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#16" y="8.684"/></svg><svg x="7320"><use xlink:href="#a"/><use xlink:href="#b" x="10.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#16" y="8.684"/></svg><svg x="7380"><use xlink:href="#a"/><use xlink:href="#b" x="11.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#17" y="8.684"/></svg><svg x="7440"><use xlink:href="#a"/><use xlink:href="#b" x="12.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#18" y="8.684"/></svg><svg x="7500"><use xlink:href="#a"/><use xlink:href="#b" x="13.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#19" y="8.684"/></svg><svg x="7560"><use xlink:href="#a"/><use xlink:href="#b" x="14.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#20" y="8.684"/></svg><svg x="7620"><use xlink:href="#a"/><use xlink:href="#b" x="15.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#21" y="8.684"/></svg><svg x="7680"><use xlink:href="#a"/><use xlink:href="#b" x="16.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#21" y="8.684"/></svg><svg x="7740"><use xlink:href="#a"/><use xlink:href="#b" x="17.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#22" y="8.684"/></svg><svg x="7800"><use xlink:href="#a"/><use xlink:href="#b" x="18.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#23" y="8.684"/></svg><svg x="7860"><use xlink:href="#a"/><use xlink:href="#b" x="19.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#24" y="8.684"/></svg><svg x="7920"><use xlink:href="#a"/><use xlink:href="#b" x="20.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#25" y="8.684"/></svg><svg x="7980"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#25" y="8.684"/></svg><svg x="8040"><use xlink:href="#a"/><use xlink:href="#b" x="22.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#26" y="8.684"/></svg><svg x="8100"><use xlink:href="#a"/><use xlink:href="#b" x="23.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#31" y="8.684"/></svg><svg x="8160"><use xlink:href="#a"/><use xlink:href="#b" x="24.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#31" y="8.684"/></svg><svg x="8220"><use xlink:href="#a"/><use xlink:href="#b" x="25.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><text y="10.354" class="c">$</text><text x="2.004" y="10.354" class="c">ppl</text><text x="6.012" y="10.354" class="c">post</text><text x="11.022" y="10.354" class="c">pippi</text><text x="17.034" y="10.354" class="c">home</text><text x="22.044" y="10.354" class="c">-r</text><text x="25.05" y="10.354" class="c">G</text></svg><svg x="8280"><use xlink:href="#a"/><use xlink:href="#b" x="26.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><text y="10.354" class="c">$</text><text x="2.004" y="10.354" class="c">ppl</text><text x="6.012" y="10.354" class="c">post</text><text x="11.022" y="10.354" class="c">pippi</text><text x="17.034" y="10.354" class="c">home</text><text x="22.044" y="10.354" class="c">-r</text><text x="25.05" y="10.354" class="c">Go</text></svg><svg x="8340"><use xlink:href="#a"/><use xlink:href="#b" x="27.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><text y="10.354" class="c">$</text><text x="2.004" y="10.354" class="c">ppl</text><text x="6.012" y="10.354" class="c">post</text><text x="11.022" y="10.354" class="c">pippi</text><text x="17.034" y="10.354" class="c">home</text><text x="22.044" y="10.354" class="c">-r</text><text x="25.05" y="10.354" class="c">Got</text></svg><svg x="8400"><use xlink:href="#a"/><use xlink:href="#b" x="28.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><text y="10.354" class="c">$</text><text x="2.004" y="10.354" class="c">ppl</text><text x="6.012" y="10.354" class="c">post</text><text x="11.022" y="10.354" class="c">pippi</text><text x="17.034" y="10.354" class="c">home</text><text x="22.044" y="10.354" class="c">-r</text><text x="25.05" y="10.354" class="c">Gotl</text></svg><svg x="8460"><use xlink:href="#a"/><use xlink:href="#b" x="29.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><text y="10.354" class="c">$</text><text x="2.004" y="10.354" class="c">ppl</text><text x="6.012" y="10.354" class="c">post</text><text x="11.022" y="10.354" class="c">pippi</text><text x="17.034" y="10.354" class="c">home</text><text x="22.044" y="10.354" class="c">-r</text><text x="25.05" y="10.354" class="c">Gotla</text></svg><svg x="8520"><use xlink:href="#a"/><use xlink:href="#b" x="30.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><text y="10.354" class="c">$</text><text x="2.004" y="10.354" class="c">ppl</text><text x="6.012" y="10.354" class="c">post</text><text x="11.022" y="10.354" class="c">pippi</text><text x="17.034" y="10.354" class="c">home</text><text x="22.044" y="10.354" class="c">-r</text><text x="25.05" y="10.354" class="c">Gotlan</text></svg><svg x="8580"><use xlink:href="#a"/><use xlink:href="#b" x="31.996" y="8.659"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/></svg><svg x="8640"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/></svg><svg x="8700"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#1" y="10.855"/></svg><svg x="8760"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#2" y="10.855"/></svg><svg x="8820"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#3" y="10.855"/></svg><svg x="8880"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#4" y="10.855"/></svg><svg x="8940"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#4" y="10.855"/></svg><svg x="9000"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#13" y="10.855"/></svg><svg x="9060"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">ph</text></svg><svg x="9120"><use xlink:href="#a"/><use xlink:href="#b" x="8.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">pho</text></svg><svg x="9180"><use xlink:href="#a"/><use xlink:href="#b" x="9.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phon</text></svg><svg x="9240"><use xlink:href="#a"/><use xlink:href="#b" x="10.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#33" y="10.855"/></svg><svg x="9300"><use xlink:href="#a"/><use xlink:href="#b" x="11.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#33" y="10.855"/></svg><svg x="9360"><use xlink:href="#a"/><use xlink:href="#b" x="12.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">p</text></svg><svg x="9420"><use xlink:href="#a"/><use xlink:href="#b" x="13.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pi</text></svg><svg x="9480"><use xlink:href="#a"/><use xlink:href="#b" x="14.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pip</text></svg><svg x="9540"><use xlink:href="#a"/><use xlink:href="#b" x="15.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pipp</text></svg><svg x="9600"><use xlink:href="#a"/><use xlink:href="#b" x="16.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#34" y="10.855"/></svg><svg x="9660"><use xlink:href="#a"/><use xlink:href="#b" x="17.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#34" y="10.855"/></svg><svg x="9720"><use xlink:href="#a"/><use xlink:href="#b" x="18.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">0</text></svg><svg x="9780"><use xlink:href="#a"/><use xlink:href="#b" x="19.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">01</text></svg><svg x="9840"><use xlink:href="#a"/><use xlink:href="#b" x="20.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">012</text></svg><svg x="9900"><use xlink:href="#a"/><use xlink:href="#b" x="21.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">0123</text></svg><svg x="9960"><use xlink:href="#a"/><use xlink:href="#b" x="22.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">01234</text></svg><svg x="10020"><use xlink:href="#a"/><use xlink:href="#b" x="23.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">012345</text></svg><svg x="10080"><use xlink:href="#a"/><use xlink:href="#b" x="24.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">0123456</text></svg><svg x="10140"><use xlink:href="#a"/><use xlink:href="#b" x="25.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">01234567</text></svg><svg x="10200"><use xlink:href="#a"/><use xlink:href="#b" x="26.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><text y="12.525" class="c">$</text><text x="2.004" y="12.525" class="c">ppl</text><text x="6.012" y="12.525" class="c">phone</text><text x="12.024" y="12.525" class="c">pippi</text><text x="18.036" y="12.525" class="c">012345678</text></svg><svg x="10260"><use xlink:href="#a"/><use xlink:href="#b" x="27.996" y="10.83"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/></svg><svg x="10320"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/></svg><svg x="10380"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#1" y="13.026"/></svg><svg x="10440"><use xlink:href="#a"/><use xlink:href="#b" x="2.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><text y="14.696" class="c">$</text><text x="2.004" y="14.696" class="c">g</text></svg><svg x="10500"><use xlink:href="#a"/><use xlink:href="#b" x="3.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><text y="14.696" class="c">$</text><text x="2.004" y="14.696" class="c">gi</text></svg><svg x="10560"><use xlink:href="#a"/><use xlink:href="#b" x="4.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#36" y="13.026"/></svg><svg x="10620"><use xlink:href="#a"/><use xlink:href="#b" x="5.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#36" y="13.026"/></svg><svg x="10680"><use xlink:href="#a"/><use xlink:href="#b" x="6.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><text y="14.696" class="c">$</text><text x="2.004" y="14.696" class="c">git</text><text x="6.012" y="14.696" class="c">r</text></svg><svg x="10740"><use xlink:href="#a"/><use xlink:href="#b" x="7.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><text y="14.696" class="c">$</text><text x="2.004" y="14.696" class="c">git</text><text x="6.012" y="14.696" class="c">re</text></svg><svg x="10800"><use xlink:href="#a"/><use xlink:href="#b" x="8.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><text y="14.696" class="c">$</text><text x="2.004" y="14.696" class="c">git</text><text x="6.012" y="14.696" class="c">ref</text></svg><svg x="10860"><use xlink:href="#a"/><use xlink:href="#b" x="9.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><text y="14.696" class="c">$</text><text x="2.004" y="14.696" class="c">git</text><text x="6.012" y="14.696" class="c">refl</text></svg><svg x="10920"><use xlink:href="#a"/><use xlink:href="#b" x="10.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><text y="14.696" class="c">$</text><text x="2.004" y="14.696" class="c">git</text><text x="6.012" y="14.696" class="c">reflo</text></svg><svg x="10980"><use xlink:href="#a"/><use xlink:href="#b" x="11.996" y="13.001"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#37" y="13.026"/></svg><svg x="11040"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#37" y="13.026"/></svg><svg x="11100"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="15.172"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#37" y="13.026"/></svg><svg x="11160"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="28.198"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#37" y="13.026"/><use xlink:href="#38" y="15.197"/><use xlink:href="#39" y="17.368"/><use xlink:href="#40" y="19.539"/><use xlink:href="#41" y="21.71"/><use xlink:href="#42" y="23.881"/><use xlink:href="#43" y="26.052"/></svg><svg x="11220"><use xlink:href="#a"/><use xlink:href="#b" x="1.996" y="28.198"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#37" y="13.026"/><use xlink:href="#38" y="15.197"/><use xlink:href="#39" y="17.368"/><use xlink:href="#40" y="19.539"/><use xlink:href="#41" y="21.71"/><use xlink:href="#42" y="23.881"/><use xlink:href="#43" y="26.052"/><use xlink:href="#1" y="28.223"/></svg><svg x="11280"><use xlink:href="#a"/><use xlink:href="#b" x="-.004" y="30.369"/><use xlink:href="#6"/><use xlink:href="#8" y="2.171"/><use xlink:href="#12" y="4.342"/><use xlink:href="#30" y="6.513"/><use xlink:href="#32" y="8.684"/><use xlink:href="#35" y="10.855"/><use xlink:href="#37" y="13.026"/><use xlink:href="#38" y="15.197"/><use xlink:href="#39" y="17.368"/><use xlink:href="#40" y="19.539"/><use xlink:href="#41" y="21.71"/><use xlink:href="#42" y="23.881"/><use xlink:href="#43" y="26.052"/><text y="29.893" class="c">$</text><text x="2.004" y="29.893" class="c">exit</text></svg></svg></g></g></svg></svg>
|
|
@@ -20,7 +20,7 @@ end
|
|
|
20
20
|
|
|
21
21
|
Then /^there should be (\d+) contacts?$/ do |n|
|
|
22
22
|
contact_list = ppl("ls").strip.split("\n")
|
|
23
|
-
contact_list.length.
|
|
23
|
+
expect(contact_list.length).to eq n.to_i
|
|
24
24
|
if contact_list[0]
|
|
25
25
|
@contact_id = contact_list[0].split(":").first
|
|
26
26
|
end
|
|
@@ -33,84 +33,84 @@ end
|
|
|
33
33
|
|
|
34
34
|
Then /^(bob) should have (\d+) nicknames?$/ do |name, number|
|
|
35
35
|
@nicknames = ppl("nick #{name}").split("\n")
|
|
36
|
-
@nicknames.length.
|
|
36
|
+
expect(@nicknames.length).to eq number.to_i
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
Then /^(bob) should have (\d+) organizations?$/ do |name, number|
|
|
40
40
|
@organizations = ppl("org #{name}").split("\n")
|
|
41
|
-
@organizations.length.
|
|
41
|
+
expect(@organizations.length).to eq number.to_i
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
Then /^(bob) should have (\d+) phone numbers?$/ do |name, number|
|
|
45
45
|
@phone_numbers = ppl("phone #{name}").split("\n")
|
|
46
|
-
@phone_numbers.length.
|
|
46
|
+
expect(@phone_numbers.length).to eq number.to_i
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
Then /^(bob) should have (\d+) postal addresse?s?$/ do |name, number|
|
|
50
50
|
@postal_addresses = ppl("post #{name}").split("\n")
|
|
51
|
-
@postal_addresses.length.
|
|
51
|
+
expect(@postal_addresses.length).to eq number.to_i
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
Then /^(bob) should have (\d+) URLs?$/ do |name, number|
|
|
55
55
|
@urls = ppl("url #{name}").split("\n")
|
|
56
|
-
@urls.length.
|
|
56
|
+
expect(@urls.length).to eq number.to_i
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
And /^its ID should be "([^"]+)"$/ do |id|
|
|
60
|
-
@contact_id.
|
|
60
|
+
expect(@contact_id).to eq id
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
And /^its name should be "([^"]+)"$/ do |name|
|
|
64
|
-
ppl("name #{@contact_id}").
|
|
64
|
+
expect(ppl("name #{@contact_id}")).to eq name
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
Then(/^the (\d+).. email address should be "([^"]+)"$/) do |nth, address|
|
|
68
|
-
@email_addresses[nth.to_i - 1].strip.
|
|
68
|
+
expect(@email_addresses[nth.to_i - 1].strip).to eq address
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
Then /^running "ppl ([^"]+)" should output (\d+) lines?$/ do |command, lines|
|
|
72
72
|
@output = ppl(command).split("\n")
|
|
73
|
-
@output.length.
|
|
73
|
+
expect(@output.length).to eq lines.to_i
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
And /^the (\d+).. line should be "([^"]+)"$/ do |nth, line|
|
|
77
|
-
@output[nth.to_i - 1].
|
|
77
|
+
expect(@output[nth.to_i - 1]).to eq line
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
Then(/^the (\d+).. nickname should be "([^"]+)"$/) do |nth, nickname|
|
|
81
|
-
@nicknames[nth.to_i - 1].
|
|
81
|
+
expect(@nicknames[nth.to_i - 1]).to eq nickname
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
Then(/^the (\d+).. organization should be "([^"]+)"$/) do |nth, organization|
|
|
85
|
-
@organizations[nth.to_i - 1].
|
|
85
|
+
expect(@organizations[nth.to_i - 1]).to eq organization
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
Then(/^the (\d+).. phone number should be "([^"]+)"$/) do |nth, phone_number|
|
|
89
|
-
@phone_numbers[nth.to_i - 1].
|
|
89
|
+
expect(@phone_numbers[nth.to_i - 1]).to eq phone_number
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
Then(/^the (\d+).. postal address should be "([^"]+)"$/) do |nth, address|
|
|
93
|
-
@postal_addresses[nth.to_i - 1].
|
|
93
|
+
expect(@postal_addresses[nth.to_i - 1]).to eq address
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
Then(/^the (\d+).. URL should be "([^"]+)"$/) do |nth, url|
|
|
97
|
-
@urls[nth.to_i - 1].
|
|
97
|
+
expect(@urls[nth.to_i - 1]).to eq url
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
And /^"([^"]+)" should be the favourite email address$/ do |email_address|
|
|
101
|
-
@email_addresses.
|
|
101
|
+
expect(@email_addresses).to include "* #{email_address}"
|
|
102
102
|
@email_addresses.each do |line|
|
|
103
103
|
if line.include? "*"
|
|
104
|
-
line.
|
|
104
|
+
expect(line).to eq "* #{email_address}"
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
And /^"([^"]+)" should be the preferred phone number$/ do |phone_number|
|
|
110
|
-
@phone_numbers.
|
|
110
|
+
expect(@phone_numbers).to include "* #{phone_number}"
|
|
111
111
|
@phone_numbers.each do |line|
|
|
112
112
|
if line.include? "*"
|
|
113
|
-
line.
|
|
113
|
+
expect(line).to eq "* #{phone_number}"
|
|
114
114
|
end
|
|
115
115
|
end
|
|
116
116
|
end
|
|
@@ -118,25 +118,25 @@ end
|
|
|
118
118
|
And /^"([^"]+)" should be the preferred postal address$/ do |postal_address|
|
|
119
119
|
@postal_addresses.each do |line|
|
|
120
120
|
if line.include? "*"
|
|
121
|
-
line.
|
|
121
|
+
expect(line).to include "* #{postal_address}"
|
|
122
122
|
end
|
|
123
123
|
end
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
And /^there should be no favourite email address$/ do
|
|
127
127
|
@email_addresses.each do |line|
|
|
128
|
-
line.
|
|
128
|
+
expect(line).not_to include "*"
|
|
129
129
|
end
|
|
130
130
|
end
|
|
131
131
|
|
|
132
132
|
And /^there should be no preferred phone number$/ do
|
|
133
133
|
@phone_numbers.each do |line|
|
|
134
|
-
line.
|
|
134
|
+
expect(line).not_to include "*"
|
|
135
135
|
end
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
Then /^(bob)'s birthday should be "([^"]+)"$/ do |id, birthday|
|
|
139
|
-
ppl("bday #{id}").
|
|
139
|
+
expect(ppl("bday #{id}")).to eq birthday
|
|
140
140
|
end
|
|
141
141
|
|
|
142
142
|
And /^(bob)'s name is "([^"]+)"$/ do |id, name|
|
|
@@ -6,7 +6,7 @@ class Ppl::Adapter::Storage::Disk < Ppl::Adapter::Storage
|
|
|
6
6
|
attr_accessor :vcard_adapter
|
|
7
7
|
|
|
8
8
|
def self.create_address_book(path)
|
|
9
|
-
if !Dir.
|
|
9
|
+
if !Dir.exist? path
|
|
10
10
|
FileUtils.mkdir_p(path)
|
|
11
11
|
end
|
|
12
12
|
storage = self.new(Dir.new(path))
|
|
@@ -41,7 +41,7 @@ class Ppl::Adapter::Storage::Disk < Ppl::Adapter::Storage
|
|
|
41
41
|
def load_contact(id)
|
|
42
42
|
filename = filename_for_contact_id(id)
|
|
43
43
|
contact = nil
|
|
44
|
-
if File.
|
|
44
|
+
if File.exist?(filename)
|
|
45
45
|
vcard = File.read filename
|
|
46
46
|
contact = @vcard_adapter.decode(vcard)
|
|
47
47
|
if !contact.nil? && contact.is_a?(Ppl::Entity::Contact)
|
|
@@ -64,9 +64,9 @@ class Ppl::Application::Configuration
|
|
|
64
64
|
end
|
|
65
65
|
filename = File.expand_path(USER_CONFIG)
|
|
66
66
|
@user_config = {}
|
|
67
|
-
if File.
|
|
67
|
+
if File.exist?(filename)
|
|
68
68
|
@user_config = IniFile::load(filename).to_h
|
|
69
|
-
elsif File.
|
|
69
|
+
elsif File.exist?(xdg_path)
|
|
70
70
|
@user_config = IniFile::load(xdg_path).to_h
|
|
71
71
|
end
|
|
72
72
|
return @user_config
|
|
@@ -26,7 +26,7 @@ class Ppl::Command::Completion < Ppl::Application::Command
|
|
|
26
26
|
|
|
27
27
|
def require_completion_existence(shell_name)
|
|
28
28
|
path = File.join(@completions_directory.path, shell_name)
|
|
29
|
-
if !File.
|
|
29
|
+
if !File.exist? path
|
|
30
30
|
raise Ppl::Error::CompletionNotFound, shell_name
|
|
31
31
|
end
|
|
32
32
|
path
|
data/lib/ppl/command/shell.rb
CHANGED
data/lib/ppl/command/version.rb
CHANGED
data/lib/ppl/version.rb
ADDED
data/lib/ppl.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Version = "3.0.1"
|
|
1
|
+
require "rubygems"
|
|
4
2
|
|
|
3
|
+
module Ppl
|
|
5
4
|
module Adapter
|
|
6
5
|
end
|
|
7
6
|
|
|
@@ -121,6 +120,7 @@ require "ppl/service/email_address"
|
|
|
121
120
|
require "ppl/service/name"
|
|
122
121
|
require "ppl/service/phone_number"
|
|
123
122
|
require "ppl/service/postal_address"
|
|
123
|
+
require "ppl/version"
|
|
124
124
|
|
|
125
125
|
class String
|
|
126
126
|
alias_method :each, :each_line
|
data/makefile
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
CASTS_DIR := ./site/casts
|
|
2
|
+
CASTS_SRC := $(wildcard $(CASTS_DIR)/*.cast)
|
|
3
|
+
CASTS_DST := $(patsubst %.cast, %.svg, $(CASTS_SRC))
|
|
4
|
+
SVGTERM_BIN := yarn svg-term
|
|
5
|
+
SVGTERM_ARGS := --width 60 --height 28 --padding 8
|
|
6
|
+
|
|
7
|
+
_site: $(CASTS_DST)
|
|
8
|
+
yarn build
|
|
9
|
+
|
|
10
|
+
$(CASTS_DIR)/%.svg:
|
|
11
|
+
cat $(CASTS_DIR)/$*.cast | $(SVGTERM_BIN) --out $@ $(SVGTERM_ARGS)
|
|
12
|
+
|
|
13
|
+
clean:
|
|
14
|
+
rm -f site/casts/*.svg
|
|
15
|
+
rm -rf _site
|
|
16
|
+
|
|
17
|
+
NEWS_SRC := $(shell git grep -l "layout: news" gh-pages/ )
|
|
18
|
+
NEWS := $(patsubst gh-pages/_posts/%, %, $(NEWS_SRC))
|
|
19
|
+
NEWS_DST := $(addsuffix .md, $(addprefix site/news/, $(NEWS)))
|
|
20
|
+
site/news/%.md:
|
|
21
|
+
git mv gh-pages/_posts/$* $@
|
|
22
|
+
|
|
23
|
+
config: $(NEWS_DST)
|
|
24
|
+
echo $(NEWS)
|
|
25
|
+
echo $(NEWS_DST)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
.PHONY: clean
|
|
29
|
+
|
data/ppl.gemspec
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/ppl/version'
|
|
4
|
+
|
|
1
5
|
Gem::Specification.new do |spec|
|
|
2
6
|
|
|
3
7
|
spec.name = "ppl"
|
|
4
|
-
spec.version =
|
|
8
|
+
spec.version = Ppl::VERSION
|
|
5
9
|
spec.date = "2021-04-02"
|
|
6
10
|
|
|
7
11
|
spec.required_ruby_version = ">= 3.0.0"
|
|
@@ -13,24 +17,27 @@ Gem::Specification.new do |spec|
|
|
|
13
17
|
spec.add_dependency("colored", "1.2")
|
|
14
18
|
spec.add_dependency("inifile", "3.0.0")
|
|
15
19
|
spec.add_dependency("mail", "2.7.1")
|
|
20
|
+
spec.add_dependency("net-imap", "0.4.14")
|
|
21
|
+
spec.add_dependency("net-pop", "0.1.2")
|
|
22
|
+
spec.add_dependency("net-smtp", "0.5.0")
|
|
16
23
|
spec.add_dependency("morphine", "0.1.1")
|
|
17
|
-
spec.add_dependency("rugged", "1.
|
|
24
|
+
spec.add_dependency("rugged", "1.7.2")
|
|
18
25
|
spec.add_dependency("vpim", "13.11.11")
|
|
19
26
|
|
|
20
27
|
spec.add_development_dependency("cucumber")
|
|
21
28
|
spec.add_development_dependency("pry")
|
|
22
29
|
spec.add_development_dependency("rspec")
|
|
23
30
|
spec.add_development_dependency("rake")
|
|
24
|
-
spec.add_development_dependency("fakefs")
|
|
31
|
+
spec.add_development_dependency("fakefs", "~> 1.9.0")
|
|
25
32
|
|
|
26
33
|
spec.authors = ["Henry Catalini Smith"]
|
|
27
|
-
spec.email = "
|
|
34
|
+
spec.email = "henry@catalinismith.com"
|
|
28
35
|
|
|
29
36
|
spec.executables = "ppl"
|
|
30
37
|
|
|
31
38
|
spec.files = `git ls-files`.split("\n")
|
|
32
39
|
spec.require_path = "lib"
|
|
33
|
-
spec.homepage = "https://github.com/
|
|
40
|
+
spec.homepage = "https://github.com/henrycatalinismith/ppl"
|
|
34
41
|
|
|
35
42
|
end
|
|
36
43
|
|
data/ppl.svg
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-1 0 12 8" stroke-linecap="round" stroke-linejoin="round" height="32px" width="64px">
|
|
2
|
+
<defs>
|
|
3
|
+
<path id="p" d="M0,6 L0,3 L2,3 L2,5 L0,5" />
|
|
4
|
+
<path id="l" d="M0,3 L0,6 L2,6" />
|
|
5
|
+
</defs>
|
|
6
|
+
<use xlink:href="#p" fill="none" stroke="#000000" stroke-width="2.8" x="0" y="0" />
|
|
7
|
+
<use xlink:href="#p" fill="none" stroke="#fff1e8" stroke-width="1" x="0" y="0" />
|
|
8
|
+
<use xlink:href="#p" fill="none" stroke="#000000" stroke-width="2.8" x="4" y="0" />
|
|
9
|
+
<use xlink:href="#p" fill="none" stroke="#fff1e8" stroke-width="1" x="4" y="0" />
|
|
10
|
+
<use xlink:href="#l" fill="none" stroke="#000000" stroke-width="2.8" x="8" y="0" />
|
|
11
|
+
<use xlink:href="#l" fill="none" stroke="#fff1e8" stroke-width="1" x="8" y="0" />
|
|
12
|
+
</svg>
|
data/readme.md
CHANGED
|
@@ -11,10 +11,10 @@ like "people". You might be interested in ppl if:
|
|
|
11
11
|
* You want ownership of your address book data back from the cloud
|
|
12
12
|
* You prefer to keep your data stored in an open format
|
|
13
13
|
|
|
14
|
-
<a href="https://github.com/
|
|
14
|
+
<a href="https://github.com/henrycatalinismith/ppl/actions/workflows/build.yml">
|
|
15
15
|
<img
|
|
16
16
|
alt="Build status"
|
|
17
|
-
src="https://github.com/
|
|
17
|
+
src="https://github.com/henrycatalinismith/ppl/actions/workflows/build.yml/badge.svg"
|
|
18
18
|
/>
|
|
19
19
|
</a>
|
|
20
20
|
|
|
@@ -77,9 +77,9 @@ Contributing
|
|
|
77
77
|
------------
|
|
78
78
|
|
|
79
79
|
Bug reports, fixes, and additional features are encouraged. The project uses
|
|
80
|
-
[Github issues](https://github.com/
|
|
80
|
+
[Github issues](https://github.com/henrycatalinismith/ppl/issues) to track bug reports.
|
|
81
81
|
|
|
82
|
-
Everyone interacting in ppl’s codebases, issue trackers etc is expected to follow the [code of conduct](https://github.com/
|
|
82
|
+
Everyone interacting in ppl’s codebases, issue trackers etc is expected to follow the [code of conduct](https://github.com/henrycatalinismith/ppl/blob/trunk/code_of_conduct.md).
|
|
83
83
|
|
|
84
84
|
License
|
|
85
85
|
-------
|
|
@@ -11,7 +11,7 @@ describe Ppl::Adapter::Storage::Disk, "#create_address_book" do
|
|
|
11
11
|
describe "#create_address_book" do
|
|
12
12
|
it "should create the directory if it doesn't exist yet" do
|
|
13
13
|
Ppl::Adapter::Storage::Disk.create_address_book("/contacts")
|
|
14
|
-
expect(Dir.
|
|
14
|
+
expect(Dir.exist?("/contacts")).to eq true
|
|
15
15
|
FileUtils.rm_rf("/contacts")
|
|
16
16
|
end
|
|
17
17
|
it "should return a Ppl::Adapter::Storage::Disk" do
|
|
@@ -130,7 +130,7 @@ describe Ppl::Adapter::Storage::Disk do
|
|
|
130
130
|
FileUtils.touch "/contacts/test.vcf"
|
|
131
131
|
@contact.id = "test"
|
|
132
132
|
@storage.delete_contact(@contact)
|
|
133
|
-
expect(File.
|
|
133
|
+
expect(File.exist?("/contacts/test.vcf")).to eq false
|
|
134
134
|
end
|
|
135
135
|
end
|
|
136
136
|
|
|
@@ -18,7 +18,7 @@ describe Ppl::Command::Completion do
|
|
|
18
18
|
|
|
19
19
|
before(:each) do
|
|
20
20
|
allow(@directory).to receive(:path).and_return("")
|
|
21
|
-
allow(File).to receive(:
|
|
21
|
+
allow(File).to receive(:exist?).and_return(true)
|
|
22
22
|
allow(File).to receive(:read)
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -29,7 +29,7 @@ describe Ppl::Command::Completion do
|
|
|
29
29
|
|
|
30
30
|
it "should raise an error if the shell is not recognised" do
|
|
31
31
|
@input.arguments = ["invalidshell"]
|
|
32
|
-
expect(File).to receive(:
|
|
32
|
+
expect(File).to receive(:exist?).with("/invalidshell").and_return(false)
|
|
33
33
|
expect{@command.execute(@input, @output)}.to raise_error(Ppl::Error::CompletionNotFound)
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -88,7 +88,7 @@ describe Ppl::Command::Shell do
|
|
|
88
88
|
allow(@input.stdin).to receive(:tty?) { true }
|
|
89
89
|
expect(@output).to receive(:line) do |line|
|
|
90
90
|
expect(line).to include "ppl"
|
|
91
|
-
expect(line).to include Ppl::
|
|
91
|
+
expect(line).to include Ppl::VERSION
|
|
92
92
|
end
|
|
93
93
|
expect(Readline).to receive(:readline).and_return(false)
|
|
94
94
|
allow(@command).to receive(:terminate_gracefully)
|
|
@@ -15,7 +15,7 @@ describe Ppl::Command::Version do
|
|
|
15
15
|
describe "#execute" do
|
|
16
16
|
it "should show the version number" do
|
|
17
17
|
expect(@output).to receive(:line) do |line|
|
|
18
|
-
expect(line).to include Ppl::
|
|
18
|
+
expect(line).to include Ppl::VERSION
|
|
19
19
|
end
|
|
20
20
|
expect(@command.execute(@input, @output)).to eq true
|
|
21
21
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ppl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.0.
|
|
4
|
+
version: 4.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Henry Catalini Smith
|
|
@@ -52,6 +52,48 @@ dependencies:
|
|
|
52
52
|
- - '='
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: 2.7.1
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: net-imap
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - '='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 0.4.14
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - '='
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 0.4.14
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: net-pop
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - '='
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: 0.1.2
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - '='
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: 0.1.2
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: net-smtp
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - '='
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 0.5.0
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - '='
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: 0.5.0
|
|
55
97
|
- !ruby/object:Gem::Dependency
|
|
56
98
|
name: morphine
|
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -72,14 +114,14 @@ dependencies:
|
|
|
72
114
|
requirements:
|
|
73
115
|
- - '='
|
|
74
116
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 1.
|
|
117
|
+
version: 1.7.2
|
|
76
118
|
type: :runtime
|
|
77
119
|
prerelease: false
|
|
78
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
121
|
requirements:
|
|
80
122
|
- - '='
|
|
81
123
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 1.
|
|
124
|
+
version: 1.7.2
|
|
83
125
|
- !ruby/object:Gem::Dependency
|
|
84
126
|
name: vpim
|
|
85
127
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -154,19 +196,19 @@ dependencies:
|
|
|
154
196
|
name: fakefs
|
|
155
197
|
requirement: !ruby/object:Gem::Requirement
|
|
156
198
|
requirements:
|
|
157
|
-
- - "
|
|
199
|
+
- - "~>"
|
|
158
200
|
- !ruby/object:Gem::Version
|
|
159
|
-
version:
|
|
201
|
+
version: 1.9.0
|
|
160
202
|
type: :development
|
|
161
203
|
prerelease: false
|
|
162
204
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
205
|
requirements:
|
|
164
|
-
- - "
|
|
206
|
+
- - "~>"
|
|
165
207
|
- !ruby/object:Gem::Version
|
|
166
|
-
version:
|
|
208
|
+
version: 1.9.0
|
|
167
209
|
description: ppl is a command-line address book using vCard & git for storage and
|
|
168
210
|
synchronisation
|
|
169
|
-
email:
|
|
211
|
+
email: henry@catalinismith.com
|
|
170
212
|
executables:
|
|
171
213
|
- ppl
|
|
172
214
|
extensions: []
|
|
@@ -176,12 +218,14 @@ files:
|
|
|
176
218
|
- ".github/workflows/build.yml"
|
|
177
219
|
- ".gitignore"
|
|
178
220
|
- ".rspec"
|
|
221
|
+
- ".ruby-version"
|
|
179
222
|
- Gemfile
|
|
180
223
|
- Rakefile
|
|
181
224
|
- bin/ppl
|
|
182
225
|
- code_of_conduct.md
|
|
183
226
|
- completions/bash
|
|
184
227
|
- completions/zsh
|
|
228
|
+
- demo.svg
|
|
185
229
|
- features/add.feature
|
|
186
230
|
- features/bday.feature
|
|
187
231
|
- features/email.feature
|
|
@@ -289,20 +333,20 @@ files:
|
|
|
289
333
|
- lib/ppl/service/name.rb
|
|
290
334
|
- lib/ppl/service/phone_number.rb
|
|
291
335
|
- lib/ppl/service/postal_address.rb
|
|
336
|
+
- lib/ppl/version.rb
|
|
292
337
|
- license
|
|
338
|
+
- makefile
|
|
293
339
|
- ppl.gemspec
|
|
340
|
+
- ppl.svg
|
|
294
341
|
- readme.md
|
|
295
342
|
- spec/ppl/adapter/color/colored_spec.rb
|
|
296
|
-
- spec/ppl/adapter/color_spec.rb
|
|
297
343
|
- spec/ppl/adapter/email_scraper/mail_spec.rb
|
|
298
|
-
- spec/ppl/adapter/email_scraper_spec.rb
|
|
299
344
|
- spec/ppl/adapter/output_spec.rb
|
|
300
345
|
- spec/ppl/adapter/storage/disk_spec.rb
|
|
301
346
|
- spec/ppl/adapter/storage/factory_spec.rb
|
|
302
347
|
- spec/ppl/adapter/storage/git_spec.rb
|
|
303
348
|
- spec/ppl/adapter/storage_spec.rb
|
|
304
349
|
- spec/ppl/adapter/vcard/greencard_spec.rb
|
|
305
|
-
- spec/ppl/adapter/vcard_spec.rb
|
|
306
350
|
- spec/ppl/application/bootstrap_spec.rb
|
|
307
351
|
- spec/ppl/application/command_spec.rb
|
|
308
352
|
- spec/ppl/application/command_suite_spec.rb
|
|
@@ -350,7 +394,6 @@ files:
|
|
|
350
394
|
- spec/ppl/format/address_book/phone_numbers_spec.rb
|
|
351
395
|
- spec/ppl/format/address_book/postal_addresses_spec.rb
|
|
352
396
|
- spec/ppl/format/address_book/urls_spec.rb
|
|
353
|
-
- spec/ppl/format/address_book_spec.rb
|
|
354
397
|
- spec/ppl/format/contact/age_spec.rb
|
|
355
398
|
- spec/ppl/format/contact/birthday_spec.rb
|
|
356
399
|
- spec/ppl/format/contact/email_addresses_spec.rb
|
|
@@ -361,23 +404,20 @@ files:
|
|
|
361
404
|
- spec/ppl/format/contact/postal_address_spec.rb
|
|
362
405
|
- spec/ppl/format/contact/postal_addresses_spec.rb
|
|
363
406
|
- spec/ppl/format/contact/urls_spec.rb
|
|
364
|
-
- spec/ppl/format/contact_spec.rb
|
|
365
407
|
- spec/ppl/format/custom/contact_spec.rb
|
|
366
408
|
- spec/ppl/format/custom/email_address_spec.rb
|
|
367
409
|
- spec/ppl/format/custom/phone_number_spec.rb
|
|
368
410
|
- spec/ppl/format/custom_spec.rb
|
|
369
411
|
- spec/ppl/format/name/full_only_spec.rb
|
|
370
|
-
- spec/ppl/format/name_spec.rb
|
|
371
412
|
- spec/ppl/format/postal_address/multi_line_spec.rb
|
|
372
413
|
- spec/ppl/format/postal_address/one_line_spec.rb
|
|
373
|
-
- spec/ppl/format/postal_address_spec.rb
|
|
374
414
|
- spec/ppl/format/table_spec.rb
|
|
375
415
|
- spec/ppl/service/email_address_spec.rb
|
|
376
416
|
- spec/ppl/service/name_spec.rb
|
|
377
417
|
- spec/ppl/service/phone_number_spec.rb
|
|
378
418
|
- spec/ppl/service/postal_address_spec.rb
|
|
379
419
|
- spec/spec_helper.rb
|
|
380
|
-
homepage: https://github.com/
|
|
420
|
+
homepage: https://github.com/henrycatalinismith/ppl
|
|
381
421
|
licenses:
|
|
382
422
|
- MIT
|
|
383
423
|
metadata: {}
|
|
@@ -396,7 +436,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
396
436
|
- !ruby/object:Gem::Version
|
|
397
437
|
version: '0'
|
|
398
438
|
requirements: []
|
|
399
|
-
rubygems_version: 3.
|
|
439
|
+
rubygems_version: 3.4.1
|
|
400
440
|
signing_key:
|
|
401
441
|
specification_version: 4
|
|
402
442
|
summary: The command line address book
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
describe Ppl::Adapter::Color do
|
|
2
|
-
|
|
3
|
-
before(:each) do
|
|
4
|
-
@adapter = Ppl::Adapter::Color.new
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
describe "#colorize" do
|
|
8
|
-
it "should raise not implemented error" do
|
|
9
|
-
expect{@adapter.colorize(nil, nil)}.to raise_error(NotImplementedError)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
describe Ppl::Adapter::EmailScraper do
|
|
2
|
-
|
|
3
|
-
before(:each) do
|
|
4
|
-
@adapter = Ppl::Adapter::EmailScraper.new
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
describe "#scrape_contacts" do
|
|
8
|
-
it "should raise not implemented error" do
|
|
9
|
-
expect{@adapter.scrape_contacts("")}.to raise_error(NotImplementedError)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
describe Ppl::Adapter::Vcard, "#encode" do
|
|
2
|
-
|
|
3
|
-
describe "#encode" do
|
|
4
|
-
before(:each) do
|
|
5
|
-
@adapter = Ppl::Adapter::Vcard.new
|
|
6
|
-
end
|
|
7
|
-
it "should raise not implemented error" do
|
|
8
|
-
expect{@adapter.encode(nil)}.to raise_error(NotImplementedError)
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
describe "#decode" do
|
|
14
|
-
before(:each) do
|
|
15
|
-
@adapter = Ppl::Adapter::Vcard.new
|
|
16
|
-
end
|
|
17
|
-
it "should raise not implemented error" do
|
|
18
|
-
expect{@adapter.decode(nil)}.to raise_error(NotImplementedError)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
end
|
|
23
|
-
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
describe Ppl::Format::AddressBook do
|
|
2
|
-
|
|
3
|
-
before(:each) do
|
|
4
|
-
@format = Ppl::Format::AddressBook.new
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
describe "#process" do
|
|
8
|
-
|
|
9
|
-
it "should raise a NotImplementedError" do
|
|
10
|
-
expect{@format.process(nil)}.to raise_error(NotImplementedError)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
describe Ppl::Format::Contact do
|
|
2
|
-
|
|
3
|
-
before(:each) do
|
|
4
|
-
@format = Ppl::Format::Contact.new
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
describe "#process" do
|
|
8
|
-
|
|
9
|
-
it "should raise a NotImplementedError" do
|
|
10
|
-
expect{@format.process(nil)}.to raise_error(NotImplementedError)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
describe Ppl::Format::Name do
|
|
2
|
-
|
|
3
|
-
before(:each) do
|
|
4
|
-
@format = Ppl::Format::Name.new
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
describe "#process" do
|
|
8
|
-
|
|
9
|
-
it "should raise a NotImplementedError" do
|
|
10
|
-
expect{@format.process(nil)}.to raise_error(NotImplementedError)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
describe Ppl::Format::PostalAddress do
|
|
2
|
-
|
|
3
|
-
before(:each) do
|
|
4
|
-
@format = Ppl::Format::PostalAddress.new
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
describe "#process" do
|
|
8
|
-
|
|
9
|
-
it "should raise a NotImplementedError" do
|
|
10
|
-
expect{@format.process(nil)}.to raise_error(NotImplementedError)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
|