friends 0.47 → 0.48

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25d9cad547bea00a886a1e1cf33bf5b2dcea793824cb55af973c2efb5927bc1f
4
- data.tar.gz: 850d9b4c193f081beaceee81d0721734892945e4d84a26d9a6e3ab887b38b21b
3
+ metadata.gz: e0447c3979f63bd070ad83451203382518d615a4128f1180aa673cc2d5bdaa6b
4
+ data.tar.gz: aff492bcb17479c7ec16e5025bf2ad7f0b59355ef54363ff8c6714c84a87a644
5
5
  SHA512:
6
- metadata.gz: 30a08967fcbd346a005e5e5b6f8a6bd44b70347306c608b6f887d788067dd15c24bb9de7895b768cef7a3c5031c189a9ddf18b1f7804e36cdf30d2757a9a6390
7
- data.tar.gz: c234ac819732d4b56fa2a567bb18777df4dba6f5fc81ad5e406552a1462e7bdcc30aac9cf3d2bc38405a0d9fe3a3fa7f4217129113836c07859853bd04416338
6
+ metadata.gz: 9121bba689b7b61af0ccc63f93e08e950885ac6d0d47eaf19a28bd826b65a8213e3dad5ee5546416540a03497b1bae0e21dfc8ee1f1243554b8b4700e39ecbba
7
+ data.tar.gz: ede549f847d3d962b69fd77c15a4c5a1c031cc3d6cc7c92aac29ea7da9fff928573681e3d0f1451611f00dd703ad338be4ee950e197c05ecbf11002a05ef7b34
@@ -4,29 +4,44 @@ If you're reading this, it means you want to contribute to this project. Hooray!
4
4
 
5
5
  Here's what to do:
6
6
 
7
- 1. If you're looking for a task to work on, check the
8
- ["up-for-grabs" issues](https://github.com/JacobEvelyn/friends/labels/upforgrabs). If you see something there that catches your
9
- eye, leave a comment indicating you'll work on it and
10
- it's yours! If you already have something to work on,
11
- that's great as well!
12
- 2. Fork the repository (https://github.com/JacobEvelyn/friends/fork).
13
- 3. Clone your forked repository.
14
- 4. From within the repository directory, run
15
- `bundle install` to install all dependencies needed for development.
16
- 5. Create your feature branch
17
- (`git checkout -b my-new-feature`).
18
- 6. Make your changes. Add or modify tests if necessary!
19
- (Run tests with `bundle exec rake test`.) Do your best to conform to
20
- existing style and commenting patterns. You can run the local version of the
21
- `friends` script with `bundle exec bin/friends`.
22
- 7. Update the `README.md` as necessary to include your changes.
23
- 8. Check your changes for code style by running `bundle exec rubocop .` in
24
- the repository directory. You may see output indicating that some lines
25
- differ from the style guidelines. Change your code so that Rubocop gives
26
- no warnings or errors (and don't hesitate to reach out if you don't know how!—this practice is meant to keep the code clean but it shouldn't be
27
- scary and it's totally fine to need help!).
28
- 9. Commit your changes
29
- (`git commit -am "Add some feature"`).
7
+ 1. If you're looking for a task to work on, check the
8
+ ["up-for-grabs" issues](https://github.com/JacobEvelyn/friends/labels/upforgrabs). If you see something there that catches your
9
+ eye, leave a comment indicating you'll work on it and
10
+ it's yours! If you already have something to work on,
11
+ that's great as well!
12
+ 2. Fork the repository (https://github.com/JacobEvelyn/friends/fork).
13
+ 3. Clone your forked repository.
14
+ 4. From within the repository directory, run
15
+ `bundle install` to install all dependencies needed for development.
16
+ 5. Create your feature branch
17
+ (`git checkout -b my-new-feature`).
18
+ 6. Make your changes. Add or modify tests if necessary!
19
+ - Run tests with `bundle exec rake test`. To run a subset of tests:
20
+ 1. temporarily add this to `friends.gemspec`:
21
+
22
+
23
+ ```ruby
24
+ spec.add_development_dependency "minitest-focus"
25
+ ```
26
+ 2. Re-run `bundle install` to install `minitest-focus`.
27
+ 3. Replace the `it` for the test(s) you want to run with:
28
+
29
+
30
+ ```ruby
31
+ require "minitest/focus" ; focus ; it
32
+ ```
33
+ 4. Run tests as usual with `bundle exec rake test`.
34
+ 5. Don't forget to remove these debugging lines when you're done!
35
+ - You can run your version of the `friends` script with `bundle exec bin/friends`.
36
+ - Do your best to conform to existing style and commenting patterns.
37
+ 7. Update the `README.md` as necessary to include your changes.
38
+ 8. Check your changes for code style by running `bundle exec rubocop .` in
39
+ the repository directory. You may see output indicating that some lines
40
+ differ from the style guidelines. Change your code so that Rubocop gives
41
+ no warnings or errors (and don't hesitate to reach out if you don't know how!—this practice is meant to keep the code clean but it shouldn't be
42
+ scary and it's totally fine to need help!).
43
+ 9. Commit your changes
44
+ (`git commit -am "Add some feature"`).
30
45
  10. Push your changes to GitHub, and open a pull request.
31
46
  11. Your code will be reviewed and merged as quickly as
32
47
  possible!
@@ -45,19 +60,9 @@ If you're a polite, reasonable person you won't have any issues!
45
60
 
46
61
  ## Financial contributions
47
62
 
48
- `friends` is a volunteer project. If you find it useful, please consider
49
- making a small donation (🙏) to show you appreciate its continued development.
50
-
51
- 👇 Donate with these buttons! 👇
52
-
53
- [![Backers on Open Collective](<https://opencollective.com/friends/backers_(Open_Collective)/badge.svg>)](https://opencollective.com/friends#backer) [![Sponsors on Open Collective](<https://opencollective.com/friends/sponsors_(Open_Collective)/badge.svg>)](https://opencollective.com/friends#sponsor)
54
- [![Support via Patreon](https://img.shields.io/badge/support-Patreon-green.svg)](https://www.patreon.com/jacobevelyn)
55
- [![Donate via Liberapay](https://img.shields.io/badge/donate-Liberapay-green.svg)](https://liberapay.com/jacobevelyn/donate)
56
- [![Donate via PayPal](https://img.shields.io/badge/donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=jacobevelyn%40gmail%2ecom&lc=US&item_name=Development%20of%20JacobEvelyn%2ffriends%20%28GitHub%20repository%29&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHostedGuest)
57
- [![Flattr this](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=jacobevelyn&url=https://github.com/JacobEvelyn/friends&title=friends&tags=github&category=software)
58
- [![Donate bitcoin](https://img.shields.io/badge/donate-Bitcoin-green.svg)](https://nrobinson2000.github.io/donate-bitcoin?address=1CFu6gWpmS89EnitPPdYssZhFMRWx5qhW4&amount=10&name=support-friends-development)
59
-
60
- 👆 Donate with these buttons! 👆
63
+ `friends` is a volunteer project. If you find it valuable, please consider
64
+ making a small donation (🙏) with the **Sponsor** button at the top of this page
65
+ to show you appreciate its continued development.
61
66
 
62
67
  ## Contributors
63
68
 
@@ -0,0 +1,4 @@
1
+ github: JacobEvelyn
2
+ open_collective: jacobevelyn
3
+ liberapay: jacobevelyn
4
+ custom: "https://paypal.me/JacobEvelyn"
@@ -1,6 +1 @@
1
- <!-- Love friends? Please consider making a small donation (🙏) to show you appreciate its continued development:
2
-
3
- 👉 https://opencollective.com/friends/donate
4
- 👉 https://www.patreon.com/jacobevelyn
5
- 👉 https://liberapay.com/jacobevelyn/donate
6
- 👉 ...or for more ways to donate (PayPal, Flattr, Bitcoin) see the README. -->
1
+ <!-- Love friends? Please consider making a small donation (🙏) with the **Sponsor** button at the top of this page to show you appreciate its continued development! 💝 -->
@@ -1,18 +1,25 @@
1
1
  # Changelog
2
2
 
3
- `friends` is a volunteer project. If you find it useful, please consider
4
- making a small donation (🙏) to show you appreciate its continued development.
3
+ `friends` is a volunteer project. If you find it valuable, please consider
4
+ making a small donation (🙏) with the **Sponsor** button at the top of this page to
5
+ show you appreciate its continued development.
5
6
 
6
- 👇 Donate with these buttons! 👇
7
+ ## [v0.48](https://github.com/JacobEvelyn/friends/tree/v0.48) (2020-03-27)
7
8
 
8
- [![Backers on Open Collective](<https://opencollective.com/friends/backers_(Open_Collective)/badge.svg>)](https://opencollective.com/friends#backer) [![Sponsors on Open Collective](<https://opencollective.com/friends/sponsors_(Open_Collective)/badge.svg>)](https://opencollective.com/friends#sponsor)
9
- [![Support via Patreon](https://img.shields.io/badge/support-Patreon-green.svg)](https://www.patreon.com/jacobevelyn)
10
- [![Donate via Liberapay](https://img.shields.io/badge/donate-Liberapay-green.svg)](https://liberapay.com/jacobevelyn/donate)
11
- [![Donate via PayPal](https://img.shields.io/badge/donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=jacobevelyn%40gmail%2ecom&lc=US&item_name=Development%20of%20JacobEvelyn%2ffriends%20%28GitHub%20repository%29&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHostedGuest)
12
- [![Flattr this](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=jacobevelyn&url=https://github.com/JacobEvelyn/friends&title=friends&tags=github&category=software)
13
- [![Donate bitcoin](https://img.shields.io/badge/donate-Bitcoin-green.svg)](https://nrobinson2000.github.io/donate-bitcoin?address=1CFu6gWpmS89EnitPPdYssZhFMRWx5qhW4&amount=10&name=support-friends-development)
9
+ [Full Changelog](https://github.com/JacobEvelyn/friends/compare/v0.47...v0.48)
14
10
 
15
- 👆 Donate with these buttons! 👆
11
+ **Implemented enhancements:**
12
+
13
+ - Change trigger for implicit location from `moved to \_LOCATION\_` to `to \_LOCATION\_` [\#245](https://github.com/JacobEvelyn/friends/pull/245) ([shen-sat](https://github.com/shen-sat))
14
+
15
+ **Closed issues:**
16
+
17
+ - Fix minitest deprecation warnings [\#249](https://github.com/JacobEvelyn/friends/issues/249)
18
+
19
+ **Merged pull requests:**
20
+
21
+ - Fix minitest deprecation warnings [\#250](https://github.com/JacobEvelyn/friends/pull/250) ([JacobEvelyn](https://github.com/JacobEvelyn))
22
+ - Bump simplecov from cb968abf857a704364283b5dec4d9fa3d096287e to 0.18.0 [\#248](https://github.com/JacobEvelyn/friends/pull/248) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview))
16
23
 
17
24
  ## [v0.47](https://github.com/JacobEvelyn/friends/tree/v0.47) (2019-12-11)
18
25
 
data/Gemfile CHANGED
@@ -10,7 +10,5 @@ end
10
10
 
11
11
  group :test do
12
12
  gem "codecov", "~> 0.1.14"
13
- gem "simplecov",
14
- git: "https://github.com/colszowka/simplecov",
15
- ref: "cb968abf857a704364283b5dec4d9fa3d096287e"
13
+ gem "simplecov"
16
14
  end
data/README.md CHANGED
@@ -5,19 +5,9 @@
5
5
  [![Inline docs](http://inch-ci.org/github/JacobEvelyn/friends.png)](http://inch-ci.org/github/JacobEvelyn/friends)
6
6
  [![Gem](https://img.shields.io/gem/dt/friends.svg)](https://rubygems.org/gems/friends)
7
7
 
8
- `friends` is a volunteer project. If you find it useful, please consider
9
- making a small donation (🙏) to show you appreciate its continued development.
10
-
11
- 👇 Donate with these buttons! 👇
12
-
13
- [![Backers on Open Collective](<https://opencollective.com/friends/backers_(Open_Collective)/badge.svg>)](#backers) [![Sponsors on Open Collective](<https://opencollective.com/friends/sponsors_(Open_Collective)/badge.svg>)](#sponsors)
14
- [![Support via Patreon](https://img.shields.io/badge/support-Patreon-green.svg)](https://www.patreon.com/jacobevelyn)
15
- [![Donate via Liberapay](https://img.shields.io/badge/donate-Liberapay-green.svg)](https://liberapay.com/jacobevelyn/donate)
16
- [![Donate via PayPal](https://img.shields.io/badge/donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=jacobevelyn%40gmail%2ecom&lc=US&item_name=Development%20of%20JacobEvelyn%2ffriends%20%28GitHub%20repository%29&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHostedGuest)
17
- [![Flattr this](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=jacobevelyn&url=https://github.com/JacobEvelyn/friends&title=friends&tags=github&category=software)
18
- [![Donate bitcoin](https://img.shields.io/badge/donate-Bitcoin-green.svg)](https://nrobinson2000.github.io/donate-bitcoin?address=1CFu6gWpmS89EnitPPdYssZhFMRWx5qhW4&amount=10&name=support-friends-development)
19
-
20
- 👆 Donate with these buttons! 👆
8
+ `friends` is a volunteer project. If you find it valuable, please consider
9
+ making a small donation (🙏) with the **Sponsor** button at the top of this page
10
+ to show you appreciate its continued development.
21
11
 
22
12
  # `friends`
23
13
 
@@ -47,6 +37,7 @@ lots of help), and give feedback! This project is
47
37
  - [`add tag`](#add-tag)
48
38
  - [`add location`](#add-location)
49
39
  - [`add nickname`](#add-nickname)
40
+ - [Adding a default location](#adding-a-default-location)
50
41
  - [`clean`](#clean)
51
42
  - [`graph`](#graph)
52
43
  - [`help`](#help)
@@ -141,7 +132,7 @@ FRIENDS_PAGER="less -RF"
141
132
  - **Friends**: The people you do _activities_ with. Each friend has a name and,
142
133
  optionally, one or several nicknames. (Examples: `John`, `Grace Hopper`)
143
134
  - **Locations**: The places in which _activities_ happen. (Examples: `Paris`,
144
- `Marie's Diner`)
135
+ `Martha's Vineyard`)
145
136
  - **Tags**: A way to categorize your _activities_ with tags of your
146
137
  choosing. Tags may contain colons and hyphens inside them. (Examples: `@exercise:running`, `@school`, `@science:indoors:agronomy-with-hydroponics`)
147
138
  - **Notes**: Any additional information you want to record about a _friend_
@@ -155,7 +146,7 @@ The `friends.md` Markdown file that stores all of your data contains:
155
146
  ### Locations:
156
147
 
157
148
  - Atlantis
158
- - Marie's Diner
149
+ - Martha's Vineyard
159
150
  - Paris
160
151
  ```
161
152
 
@@ -174,7 +165,7 @@ The `friends.md` Markdown file that stores all of your data contains:
174
165
  ```markdown
175
166
  ### Activities:
176
167
 
177
- - 2018-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute.
168
+ - 2018-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
178
169
  - 2018-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**.
179
170
  - 2017-12-31: Celebrated the new year in _Paris_ with **Marie Curie**.
180
171
  - 2017-11-15: Talked to **George Washington Carver** on the phone for an hour.
@@ -339,8 +330,8 @@ $ friends add activity last Monday
339
330
  You can escape the names of friends you don't want `friends` to match with a backslash:
340
331
 
341
332
  ```bash
342
- $ friends add activity "2018-11-01: Grace and I went to \Marie's Diner. \George had to cancel at the last minute."
343
- Activity added: "2018-11-01: Grace Hopper and I went to Marie's Diner. George had to cancel at the last minute."
333
+ $ friends add activity "2018-11-01: Grace and I went to \Martha's Vineyard. \George had to cancel at the last minute."
334
+ Activity added: "2018-11-01: Grace Hopper and I went to Martha's Vineyard. George had to cancel at the last minute."
344
335
  ```
345
336
 
346
337
  And if an activity contains friends or locations you haven't yet added, you can simply
@@ -420,6 +411,27 @@ $ friends add nickname "Grace Hopper" "Amazing Grace"
420
411
  Nickname added: "Grace Hopper (a.k.a. The Admiral a.k.a. Amazing Grace)"
421
412
  ```
422
413
 
414
+ #### Setting a default location
415
+
416
+ When an activity includes the phrase to \_LOCATION\_ (e.g., Took a plane to \_Paris\_), all future activities that have no explicit location will be associated with that location:
417
+
418
+ ```bash
419
+ $ friends add activity Took a plane to Paris
420
+ Activity added: "2020-01-04: Took a plane to Paris"
421
+ Default location set to: "Paris"
422
+ $ friends add activity Ate lunch at a charming café
423
+ Activity added: "2020-01-04: Ate lunch at a charming café"
424
+ $ friends add activity Left the city to go to Chamonix
425
+ Activity added: "2020-01-04: Left the city to go to Chamonix"
426
+ Default location set to: "Chamonix"
427
+ ```
428
+
429
+ ```bash
430
+ $ friends list activities --in Paris
431
+ 2019-01-04: Ate lunch at a charming café
432
+ 2019-01-04: Took a plane to Paris
433
+ ```
434
+
423
435
  #### `clean`
424
436
 
425
437
  Reads and re-writes the `friends.md` file:
@@ -951,16 +963,7 @@ A big big thanks to all of this project's lovely
951
963
 
952
964
  <a href="https://github.com/JacobEvelyn/friends/graphs/contributors"><img src="https://opencollective.com/friends/contributors.svg?width=890" /></a>
953
965
 
954
- Another way to contribute is to make a donation with any of these buttons:
955
-
956
- [![Backers on Open Collective](<https://opencollective.com/friends/backers_(Open_Collective)/badge.svg>)](https://opencollective.com/friends#backer) [![Sponsors on Open Collective](<https://opencollective.com/friends/sponsors_(Open_Collective)/badge.svg>)](https://opencollective.com/friends#sponsor)
957
- [![Support via Patreon](https://img.shields.io/badge/support-Patreon-green.svg)](https://www.patreon.com/jacobevelyn)
958
- [![Donate via Liberapay](https://img.shields.io/badge/donate-Liberapay-green.svg)](https://liberapay.com/jacobevelyn/donate)
959
- [![Donate via PayPal](https://img.shields.io/badge/donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=jacobevelyn%40gmail%2ecom&lc=US&item_name=Development%20of%20JacobEvelyn%2ffriends%20%28GitHub%20repository%29&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHostedGuest)
960
- [![Flattr this](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=jacobevelyn&url=https://github.com/JacobEvelyn/friends&title=friends&tags=github&category=software)
961
- [![Donate bitcoin](https://img.shields.io/badge/donate-Bitcoin-green.svg)](https://nrobinson2000.github.io/donate-bitcoin?address=1CFu6gWpmS89EnitPPdYssZhFMRWx5qhW4&amount=10&name=support-friends-development)
962
-
963
- 👆 Donate with these buttons right here! 👆
966
+ Another way to contribute is to make a donation with the **Sponsor** button at the top of this page!
964
967
 
965
968
  ### Backers
966
969
 
@@ -8,7 +8,7 @@ These are steps for the maintainer to take to release a new version of this gem.
8
8
  3. Add a tag (`git tag -am "vX.X" vX.X`).
9
9
  4. `git push && git push --tags`
10
10
  5. Copy the top of `CHANGELOG` to the clipboard.
11
- 6. `CHANGELOG_GITHUB_TOKEN=... github_changelog_generator`
11
+ 6. `CHANGELOG_GITHUB_TOKEN=... github_changelog_generator --user JacobEvelyn --project friends`
12
12
  7. Paste from the clipboard to the top of the `CHANGELOG`.
13
13
  8. Confirm the `CHANGELOG` looks correct with `git diff`
14
14
  9. `git add -A && git commit -m 'Update CHANGELOG for vX.X'`
data/friends.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ### Activities:
2
- - 2018-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
2
+ - 2018-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
3
3
  - 2018-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
4
4
  - 2017-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying
5
5
  - 2017-11-15: Talked to **George Washington Carver** on the phone for an hour.
@@ -15,5 +15,5 @@
15
15
 
16
16
  ### Locations:
17
17
  - Atlantis
18
- - Marie's Diner
18
+ - Martha's Vineyard
19
19
  - Paris
@@ -9,8 +9,8 @@ command :edit do |edit|
9
9
  puts "Opening \"#{filename}\" with \"#{editor}\"" unless global_options[:quiet]
10
10
 
11
11
  # Mark the file for cleaning once the editor was closed correctly.
12
- if Kernel.system("#{editor} #{filename}")
13
- @introvert = Friends::Introvert.new(filename: global_options[:filename])
12
+ if Kernel.system(editor, filename)
13
+ @introvert = Friends::Introvert.new(filename: filename)
14
14
  @clean_command = true
15
15
  @dirty = true
16
16
  elsif !global_options[:quiet]
@@ -138,8 +138,8 @@ module Friends
138
138
  location_in_description?(location) || location_is_implicit?(location)
139
139
  end
140
140
 
141
- def moved_to_location
142
- @description[/(?<=[mM]oved to _)\w[^_]*(?=_)/]
141
+ def default_location
142
+ @default_location ||= @description[/(?<=to _)\w[^_]*(?=_)/]
143
143
  end
144
144
 
145
145
  # @param friend [Friend] the friend to test
@@ -107,9 +107,11 @@ module Friends
107
107
 
108
108
  activity.highlight_description(introvert: self)
109
109
 
110
- @activities.unshift(activity)
111
-
112
110
  @output << "Activity added: \"#{activity}\""
111
+
112
+ @output << default_location_output(activity) if activity.default_location
113
+
114
+ @activities.unshift(activity)
113
115
  end
114
116
  end
115
117
 
@@ -660,8 +662,9 @@ module Friends
660
662
 
661
663
  def set_implicit_locations!
662
664
  implicit_location = nil
665
+ # reverse_each here moves through the activities in chronological order
663
666
  @activities.reverse_each do |activity|
664
- implicit_location = activity.moved_to_location if activity.moved_to_location
667
+ implicit_location = activity.default_location if activity.default_location
665
668
  activity.implicit_location = implicit_location if activity.description_location_names.empty?
666
669
  end
667
670
  end
@@ -685,6 +688,9 @@ module Friends
685
688
  # Parse the line and update the parsing state.
686
689
  state = parse_line!(line, line_num: line_num, state: state)
687
690
  end
691
+ # sort the activities from earliest to latest, in case friends.md has been corrupted
692
+ @activities = stable_sort(@activities)
693
+
688
694
  set_implicit_locations!
689
695
 
690
696
  set_n_activities!(:friend)
@@ -719,7 +725,7 @@ module Friends
719
725
 
720
726
  begin
721
727
  instance_variable_get("@#{stage.id}") << stage.klass.deserialize(line)
722
- rescue => ex # rubocop:disable Style/RescueStandardError
728
+ rescue StandardError => ex
723
729
  bad_line(ex, line_num)
724
730
  end
725
731
 
@@ -777,5 +783,37 @@ module Friends
777
783
  def bad_line(expected, line_num)
778
784
  raise FriendsError, "Expected \"#{expected}\" on line #{line_num}"
779
785
  end
786
+
787
+ # @param [Activity] the activity that was added by the user
788
+ # @return [String] specifying default location and its time range
789
+ def default_location_output(activity)
790
+ str = "Default location"
791
+
792
+ earlier_activities, later_activities = @activities.partition { |a| a.date <= activity.date }
793
+
794
+ earlier_activity_with_default_location = activity
795
+
796
+ earlier_activities.each do |a|
797
+ next unless a.default_location
798
+
799
+ break unless a.default_location == activity.default_location
800
+
801
+ earlier_activity_with_default_location = a
802
+ end
803
+
804
+ unless later_activities.empty?
805
+ str += " from #{Paint[earlier_activity_with_default_location.date, :bold]}"
806
+
807
+ later_activity = later_activities.find do |a|
808
+ a.default_location && a.default_location != activity.default_location
809
+ end
810
+
811
+ str += " to #{Paint[(later_activity.date if later_activity) || 'present', :bold]}"
812
+ end
813
+
814
+ str += " already" if earlier_activity_with_default_location != activity
815
+
816
+ "#{str} set to: \"#{activity.default_location}\""
817
+ end
780
818
  end
781
819
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Friends
4
- VERSION = "0.47".freeze
4
+ VERSION = "0.48".freeze
5
5
  end
@@ -449,15 +449,15 @@ FILE
449
449
  end
450
450
 
451
451
  describe "when description contains both names and locations" do
452
- let(:description) { "Grace and I went to Atlantis and then Paris for lunch with George." }
452
+ let(:description) { "Grace and I visited Atlantis and then Paris for lunch with George." }
453
453
 
454
454
  it do
455
- line_added "- #{date}: **Grace Hopper** and I went to _Atlantis_ and then _Paris_ for "\
455
+ line_added "- #{date}: **Grace Hopper** and I visited _Atlantis_ and then _Paris_ for "\
456
456
  "lunch with **George Washington Carver**."
457
457
  end
458
458
  if test_stdout
459
459
  it do
460
- stdout_only "#{capitalized_event} added: \"#{date}: Grace Hopper and I went to "\
460
+ stdout_only "#{capitalized_event} added: \"#{date}: Grace Hopper and I visited "\
461
461
  "Atlantis and then Paris for lunch with George Washington Carver.\""
462
462
  end
463
463
  end
@@ -51,5 +51,299 @@ FILE
51
51
  end
52
52
  end
53
53
 
54
+ describe "adding default location" do
55
+ describe "when it is the latest activity" do
56
+ subject { run_cmd("add activity Moved to _Paris_") }
57
+ let(:content) do
58
+ <<-FILE
59
+ ### Activities:
60
+ - #{preceding_activity}
61
+
62
+ ### Notes:
63
+
64
+ ### Friends:
65
+
66
+ ### Locations:
67
+ FILE
68
+ end
69
+
70
+ describe "when there is no preceding default location" do
71
+ let(:preceding_activity) { "2016-01-01: Went to the library." }
72
+
73
+ it "prints 'Default location set to [LOCATION]'" do
74
+ output = 'Default location set to: "Paris"'
75
+ assert_default_location_output(output)
76
+ end
77
+ end
78
+
79
+ describe "when preceding default location is different" do
80
+ let(:preceding_activity) { "2016-01-01: Moved to _Berlin_." }
81
+
82
+ it "prints 'Default location set to [LOCATION]'" do
83
+ output = 'Default location set to: "Paris"'
84
+ assert_default_location_output(output)
85
+ end
86
+ end
87
+
88
+ describe "when preceding default location is the same" do
89
+ let(:preceding_activity) { "2016-01-01: Flew to _Paris_." }
90
+
91
+ it "prints 'Default location already set to [LOCATION]'" do
92
+ output = 'Default location already set to: "Paris"'
93
+ assert_default_location_output(output)
94
+ end
95
+ end
96
+ end
97
+
98
+ describe "when it is not the latest activity" do
99
+ subject { run_cmd("add activity 2009-01-01: Moved to _Paris_") }
100
+ let(:content) do
101
+ <<-FILE
102
+ ### Activities:
103
+ - #{following_activity}
104
+ - #{preceding_activity}
105
+
106
+ ### Notes:
107
+
108
+ ### Friends:
109
+
110
+ ### Locations:
111
+ FILE
112
+ end
113
+
114
+ describe "when there is no following default location" do
115
+ let(:following_activity) { "2019-01-01: Visited a cafe" }
116
+
117
+ describe "when there is no preceding default location" do
118
+ let(:preceding_activity) { "1999-01-01: Visited a library" }
119
+
120
+ it "prints 'Default location from [ADDED ACTIVITY DATE] to present set to [LOCATION]'" do
121
+ message = 'Default location from 2009-01-01 to present set to: "Paris"'
122
+ assert_default_location_output(message)
123
+ end
124
+ end
125
+
126
+ describe "when preceding default location is different" do
127
+ let(:preceding_activity) { "1999-01-01: Went to _Berlin_" }
128
+
129
+ it "prints 'Default location from [ADDED ACTIVITY DATE] to present set to [LOCATION]'" do
130
+ output = 'Default location from 2009-01-01 to present set to: "Paris"'
131
+ assert_default_location_output(output)
132
+ end
133
+ end
134
+
135
+ describe "when preceding default location is same" do
136
+ let(:preceding_activity) { "1999-01-01: Went to _Paris_" }
137
+
138
+ it "prints 'Default location from [PRECEDING DEFAULT LOCATION ACTIVITY DATE] to " \
139
+ "present already set to [LOCATION]'" do
140
+ output = 'Default location from 1999-01-01 to present already set to: "Paris"'
141
+ assert_default_location_output(output)
142
+ end
143
+ end
144
+
145
+ describe "when multiple preceding default locations are same and consecutive" do
146
+ let(:content) do
147
+ <<-FILE
148
+ ### Activities:
149
+ - 2019-01-01: Visited a cafe
150
+ - 1999-01-01: Went to _Paris_
151
+ - 1989-01-01: Relocated to _Paris_
152
+
153
+ ### Notes:
154
+
155
+ ### Friends:
156
+
157
+ ### Locations:
158
+ FILE
159
+ end
160
+
161
+ it "prints 'Default location from " \
162
+ "[EARLIEST CONSECUTIVE DEFAULT LOCATION ACTIVITY DATE] to " \
163
+ "present already set to [LOCATION]'" do
164
+ output = 'Default location from 1989-01-01 to present already set to: "Paris"'
165
+ assert_default_location_output(output)
166
+ end
167
+ end
168
+
169
+ describe "when multiple preceding default locations are the same but not consecutive" do
170
+ let(:content) do
171
+ <<-FILE
172
+ ### Activities:
173
+ - 2019-01-01: Visited a cafe
174
+ - 1999-01-01: Went to _Paris_
175
+ - 1989-01-01: Went to _Berlin_
176
+ - 1979-01-01: Relocated to _Paris_
177
+
178
+ ### Notes:
179
+
180
+ ### Friends:
181
+
182
+ ### Locations:
183
+ FILE
184
+ end
185
+
186
+ it "prints 'Default location from " \
187
+ "[EARLIEST CONSECUTIVE DEFAULT LOCATION ACTIVITY DATE] to " \
188
+ "present already set to [LOCATION]'" do
189
+ output = 'Default location from 1999-01-01 to present already set to: "Paris"'
190
+ assert_default_location_output(output)
191
+ end
192
+ end
193
+ end
194
+
195
+ describe "when there are no preceding default locations" do
196
+ let(:preceding_activity) { "1999-01-01: Visited a cafe" }
197
+
198
+ describe "when following default location is the same" do
199
+ let(:following_activity) { "2019-01-01: Went to _Paris_" }
200
+
201
+ it "prints 'Default location from [ADDED ACTIVITY DATE] to present set to [LOCATION]'" do
202
+ output = 'Default location from 2009-01-01 to present set to: "Paris"'
203
+ assert_default_location_output(output)
204
+ end
205
+ end
206
+
207
+ describe "when following default location is different" do
208
+ let(:following_activity) { "2019-01-01: Went to _Berlin_" }
209
+
210
+ it "prints 'Default location from [ADDED ACTIVITY DATE] to " \
211
+ "[NEXT DIFFERENT DEFAULT LOCATION ACIVITY DATE] set to [LOCATION]'" do
212
+ output = 'Default location from 2009-01-01 to 2019-01-01 set to: "Paris"'
213
+ assert_default_location_output(output)
214
+ end
215
+ end
216
+
217
+ describe "when multiple following default locations are the same and consecutive" do
218
+ let(:content) do
219
+ <<-FILE
220
+ ### Activities:
221
+ - 2019-01-01: Went to _Paris_
222
+ - 2018-01-01: Relocated to _Paris_
223
+
224
+ ### Notes:
225
+
226
+ ### Friends:
227
+
228
+ ### Locations:
229
+ FILE
230
+ end
231
+
232
+ it "prints 'Default location from [ADDED ACTIVITY DATE] to present set to [LOCATION]'" do
233
+ output = 'Default location from 2009-01-01 to present set to: "Paris"'
234
+ assert_default_location_output(output)
235
+ end
236
+ end
237
+
238
+ describe "when multiple following default locations are the same but not consecutive" do
239
+ let(:content) do
240
+ <<-FILE
241
+ ### Activities:
242
+ - 2019-01-01: Went to _Paris_
243
+ - 2018-01-01: Went to _Berlin_
244
+ - 2017-01-01: Relocated to _Paris_
245
+
246
+ ### Notes:
247
+
248
+ ### Friends:
249
+
250
+ ### Locations:
251
+ FILE
252
+ end
253
+
254
+ it "prints 'Default location from [ADDED ACTIVITY DATE] to " \
255
+ "[NEXT DIFFERENT DEFAULT LOCATION ACIVITY DATE] set to [LOCATION]'" do
256
+ output = 'Default location from 2009-01-01 to 2018-01-01 set to: "Paris"'
257
+ assert_default_location_output(output)
258
+ end
259
+ end
260
+ end
261
+
262
+ describe "when preceding default location is the same" do
263
+ let(:preceding_activity) { "1999-01-01: Went to _Paris_" }
264
+
265
+ describe "when following default location is the same" do
266
+ let(:following_activity) { "2019-01-01: Relocated to _Paris_" }
267
+
268
+ it "prints 'Default location from " \
269
+ "[PRECEDING ACTIVITY DATE] to present already set to [LOCATION]'" do
270
+ output = 'Default location from 1999-01-01 to present already set to: "Paris"'
271
+ assert_default_location_output(output)
272
+ end
273
+ end
274
+
275
+ describe "when following default location is different" do
276
+ let(:following_activity) { "2019-01-01: Relocated to _Berlin_" }
277
+
278
+ it "prints 'Default location from " \
279
+ "[PRECEDING ACTIVITY DATE] to " \
280
+ "[FOLLOWING ACTIVITY DATE] set to [LOCATION]'" do
281
+ output = 'Default location from 1999-01-01 to 2019-01-01 already set to: "Paris"'
282
+ assert_default_location_output(output)
283
+ end
284
+ end
285
+ end
286
+
287
+ describe "when preceding default location is different" do
288
+ let(:preceding_activity) { "1999-01-01: Went to _Berlin_" }
289
+
290
+ describe "when following default location is the same" do
291
+ let(:following_activity) { "2019-01-01: Relocated to _Paris_" }
292
+
293
+ it "prints 'Default location from [ADDED ACTIVITY DATE] to present set to [LOCATION]'" do
294
+ output = 'Default location from 2009-01-01 to present set to: "Paris"'
295
+ assert_default_location_output(output)
296
+ end
297
+ end
298
+
299
+ describe "when following default location is different" do
300
+ let(:following_activity) { "2019-01-01: Relocated to _Berlin_" }
301
+
302
+ it "prints 'Default location from " \
303
+ "[ADDED ACTIVITY DATE] to " \
304
+ "[FOLLOWING ACTIVITY DATE] set to [LOCATION]'" do
305
+ output = 'Default location from 2009-01-01 to 2019-01-01 set to: "Paris"'
306
+ assert_default_location_output(output)
307
+ end
308
+ end
309
+ end
310
+
311
+ describe "when activities are out of order" do
312
+ let(:content) do
313
+ <<-FILE
314
+ ### Activities:
315
+ - 2018-01-01: Went to _Berlin_
316
+ - 2019-01-01: Went to _Paris_
317
+
318
+ ### Notes:
319
+
320
+ ### Friends:
321
+
322
+ ### Locations:
323
+ FILE
324
+ end
325
+
326
+ it "uses the sorted order for determining output" do
327
+ output = 'Default location from 2009-01-01 to 2018-01-01 set to: "Paris"'
328
+ assert_default_location_output(output)
329
+ end
330
+ end
331
+ end
332
+ end
333
+
54
334
  parsing_specs(event: :activity)
335
+
336
+ private
337
+
338
+ def assert_default_location_output(expected_output)
339
+ output = select_default_activity_output(subject[:stdout])
340
+
341
+ value(output.size).must_equal(1)
342
+ value(output).must_include(expected_output)
343
+ end
344
+
345
+ def select_default_activity_output(output)
346
+ lines = output.split("\n")
347
+ lines.select { |line| line.include?("Default") }
348
+ end
55
349
  end
@@ -78,7 +78,7 @@ Not cleaning file: "#{filename}" ("exit 1 #" did not exit successfully)
78
78
  <<-EXPECTED_CONTENT
79
79
  ### Activities:
80
80
  - 2018-02-06: @science:indoors:agronomy-with-hydroponics: **Norman Borlaug** and **George Washington Carver** scored a tour of _Atlantis_' hydroponics gardens through wetplants@example.org and they took me along.
81
- - 2015-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
81
+ - 2015-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
82
82
  - 2015-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
83
83
  - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying
84
84
  - 2014-12-16: Okay, yep, I definitely just saw **Bigfoot** in the _Mysterious Mountains_!
@@ -101,7 +101,7 @@ Not cleaning file: "#{filename}" ("exit 1 #" did not exit successfully)
101
101
 
102
102
  ### Locations:
103
103
  - Atlantis
104
- - Marie's Diner
104
+ - Martha's Vineyard
105
105
  - Mysterious Mountains
106
106
  - Paris
107
107
  EXPECTED_CONTENT
@@ -27,7 +27,7 @@ clean_describe "graph" do
27
27
  let(:content) do
28
28
  <<-FILE
29
29
  ### Activities:
30
- - 2015-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
30
+ - 2015-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
31
31
  - 2015-01-14: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
32
32
  - 2015-01-06: Did some other things in _Paris_.
33
33
  - 2015-01-06: Did even more things in _Paris_.
@@ -42,7 +42,7 @@ clean_describe "graph" do
42
42
 
43
43
  ### Locations:
44
44
  - Atlantis
45
- - Marie's Diner
45
+ - Martha's Vineyard
46
46
  - Paris
47
47
  FILE
48
48
  end
@@ -273,7 +273,7 @@ Nov 2014 |∙|
273
273
 
274
274
  it "matches tag case-insensitively and scales the graph" do
275
275
  stdout_only <<-OUTPUT
276
- Nov 2015 |█████∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙|
276
+ Nov 2015 |∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙|
277
277
  Oct 2015 |∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙|
278
278
  Sep 2015 |∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙|
279
279
  Aug 2015 |∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙|
@@ -294,7 +294,7 @@ Nov 2014 |∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙|
294
294
 
295
295
  it "matches tag case-insensitively and does not scale graph" do
296
296
  stdout_only <<-OUTPUT
297
- Nov 2015 |█
297
+ Nov 2015 |∙|
298
298
  Oct 2015 |
299
299
  Sep 2015 |
300
300
  Aug 2015 |
@@ -26,13 +26,13 @@ clean_describe "list activities" do
26
26
  # only reads from the (usually-sorted) file.
27
27
  let(:content) { SCRAMBLED_CONTENT }
28
28
 
29
- it "lists activities in file order" do
29
+ it "lists activities in sorted order" do
30
30
  stdout_only <<-OUTPUT
31
- 2015-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
32
- 2015-11-01: Grace Hopper and I went to Marie's Diner. George had to cancel at the last minute. @food
33
31
  2018-02-06: @science:indoors:agronomy-with-hydroponics: Norman Borlaug and George Washington Carver scored a tour of Atlantis' hydroponics gardens through wetplants@example.org and they took me along.
34
- 2014-11-15: Talked to George Washington Carver on the phone for an hour.
32
+ 2015-11-01: Grace Hopper and I went to Martha's Vineyard. George had to cancel at the last minute.
33
+ 2015-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
35
34
  2014-12-31: Celebrated the new year in Paris with Marie Curie. @partying
35
+ 2014-11-15: Talked to George Washington Carver on the phone for an hour.
36
36
  OUTPUT
37
37
  end
38
38
 
@@ -55,15 +55,16 @@ clean_describe "list activities" do
55
55
 
56
56
  describe "when implicit location is set" do
57
57
  let(:location_name) { "atlantis" }
58
- let(:content) do
59
- <<-FILE
58
+ describe "when activities are in order" do
59
+ let(:content) do
60
+ <<-FILE
60
61
  ### Activities:
61
- - 2015-01-30: Went to a museum with **George Washington Carver**.
62
- - 2015-01-29: moved to _Paris_.
63
- - 2015-01-01: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
64
- - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying @food
65
- - 2014-12-30: Moved to _Atlantis_.
66
- - 2014-12-29: Talked to **George Washington Carver** on the phone for an hour.
62
+ - 2000-01-06: Went to a museum with **George Washington Carver**.
63
+ - 2000-01-05: Moved to _Paris_.
64
+ - 2000-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
65
+ - 2000-01-03: Celebrated my birthday in _Paris_ with **Marie Curie**. @partying @food
66
+ - 2000-01-02: Went to _Atlantis_.
67
+ - 2000-01-01: Talked to **George Washington Carver** on the phone for an hour.
67
68
 
68
69
  ### Friends:
69
70
  - George Washington Carver
@@ -73,14 +74,44 @@ clean_describe "list activities" do
73
74
  ### Locations:
74
75
  - Atlantis
75
76
  - Paris
76
- FILE
77
+ FILE
78
+ end
79
+
80
+ it "matches location case-insensitively" do
81
+ stdout_only <<-OUTPUT
82
+ 2000-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
83
+ 2000-01-02: Went to Atlantis.
84
+ OUTPUT
85
+ end
77
86
  end
87
+ describe "when activities are not in order" do
88
+ let(:content) do
89
+ <<-FILE
90
+ ### Activities:
91
+ - 2000-01-06: Went to a museum with **George Washington Carver**.
92
+ - 2000-01-02: Went to _Atlantis_.
93
+ - 2000-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
94
+ - 2000-01-03: Celebrated my birthday in _Paris_ with **Marie Curie**. @partying @food
95
+ - 2000-01-05: Moved to _Paris_.
96
+ - 2000-01-01: Talked to **George Washington Carver** on the phone for an hour.
78
97
 
79
- it "matches location case-insensitively" do
80
- stdout_only <<-OUTPUT
81
- 2015-01-01: Got lunch with Grace Hopper and George Washington Carver. @food
82
- 2014-12-30: Moved to Atlantis.
83
- OUTPUT
98
+ ### Friends:
99
+ - George Washington Carver
100
+ - Marie Curie [Atlantis] @science
101
+ - Grace Hopper (a.k.a. The Admiral a.k.a. Amazing Grace) [Paris] @navy @science
102
+
103
+ ### Locations:
104
+ - Atlantis
105
+ - Paris
106
+ FILE
107
+ end
108
+
109
+ it "matches location case-insensitively" do
110
+ stdout_only <<-OUTPUT
111
+ 2000-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
112
+ 2000-01-02: Went to Atlantis.
113
+ OUTPUT
114
+ end
84
115
  end
85
116
  end
86
117
  end
@@ -127,7 +158,6 @@ clean_describe "list activities" do
127
158
  it "matches tag case-insensitively" do
128
159
  stdout_only <<-OUTPUT
129
160
  2015-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
130
- 2015-11-01: Grace Hopper and I went to Marie's Diner. George had to cancel at the last minute. @food
131
161
  OUTPUT
132
162
  end
133
163
 
@@ -139,7 +169,7 @@ clean_describe "list activities" do
139
169
  <<-FILE
140
170
  ### Activities:
141
171
  - 2015-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
142
- - 2015-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
172
+ - 2015-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
143
173
  - 2014-11-15: Talked to **George Washington Carver** on the phone for an hour.
144
174
  - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying @food
145
175
 
@@ -161,11 +191,11 @@ FILE
161
191
  describe "--since" do
162
192
  subject { run_cmd("list activities --since 'January 4th 2015'") }
163
193
 
164
- it "lists activities on and after the specified date" do
194
+ it "lists activities on and after the specified date in order" do
165
195
  stdout_only <<-OUTPUT
166
- 2015-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
167
- 2015-11-01: Grace Hopper and I went to Marie's Diner. George had to cancel at the last minute. @food
168
196
  2018-02-06: @science:indoors:agronomy-with-hydroponics: Norman Borlaug and George Washington Carver scored a tour of Atlantis' hydroponics gardens through wetplants@example.org and they took me along.
197
+ 2015-11-01: Grace Hopper and I went to Martha's Vineyard. George had to cancel at the last minute.
198
+ 2015-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
169
199
  OUTPUT
170
200
  end
171
201
  end
@@ -173,11 +203,11 @@ FILE
173
203
  describe "--until" do
174
204
  subject { run_cmd("list activities --until 'January 4th 2015'") }
175
205
 
176
- it "lists activities before and on the specified date" do
206
+ it "lists activities before and on the specified date in order" do
177
207
  stdout_only <<-OUTPUT
178
208
  2015-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
179
- 2014-11-15: Talked to George Washington Carver on the phone for an hour.
180
209
  2014-12-31: Celebrated the new year in Paris with Marie Curie. @partying
210
+ 2014-11-15: Talked to George Washington Carver on the phone for an hour.
181
211
  OUTPUT
182
212
  end
183
213
  end
@@ -26,7 +26,7 @@ clean_describe "list favorite friends" do
26
26
  <<-FILE
27
27
  ### Activities:
28
28
  - 2017-01-01: Did some math with **Grace Hopper**.
29
- - 2015-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
29
+ - 2015-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
30
30
  - 2015-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
31
31
  - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying
32
32
  - 2014-11-15: Talked to **George Washington Carver** on the phone for an hour.
@@ -25,8 +25,8 @@ clean_describe "list favorite locations" do
25
25
  let(:content) do
26
26
  <<-FILE
27
27
  ### Activities:
28
- - 2017-01-01: **Grace Hopper** and I went to _Marie's Diner_ for breakfast.
29
- - 2015-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
28
+ - 2017-01-01: **Grace Hopper** and I went to _Martha's Vineyard_ for breakfast.
29
+ - 2015-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
30
30
  - 2015-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
31
31
  - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying
32
32
  - 2014-11-15: Talked to **George Washington Carver** on the phone for an hour.
@@ -38,7 +38,7 @@ clean_describe "list favorite locations" do
38
38
 
39
39
  ### Locations:
40
40
  - Atlantis
41
- - Marie's Diner
41
+ - Martha's Vineyard
42
42
  - Paris
43
43
  FILE
44
44
  end
@@ -46,9 +46,9 @@ FILE
46
46
  it "lists locations in order of decreasing activity" do
47
47
  stdout_only <<-OUTPUT
48
48
  Your favorite locations:
49
- 1. Marie's Diner (2 activities)
50
- 2. Paris (1)
51
- 3. Atlantis (0)
49
+ 1. Martha's Vineyard (2 activities)
50
+ 2. Paris (1)
51
+ 3. Atlantis (0)
52
52
  OUTPUT
53
53
  end
54
54
 
@@ -120,10 +120,10 @@ FILE
120
120
  <<-FILE
121
121
  ### Activities:
122
122
  - 2015-01-30: Went to a museum with **George Washington Carver**.
123
- - 2015-01-29: moved to _Paris_.
123
+ - 2015-01-29: Moved to _Paris_.
124
124
  - 2015-01-01: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
125
125
  - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying @food
126
- - 2014-12-30: Moved to _Atlantis_.
126
+ - 2014-12-30: Went to _Atlantis_.
127
127
  - 2014-12-29: Talked to **George Washington Carver** on the phone for an hour.
128
128
 
129
129
  ### Friends:
@@ -30,7 +30,7 @@ clean_describe "list locations" do
30
30
  stdout_only <<-OUTPUT
31
31
  Paris
32
32
  Atlantis
33
- Marie's Diner
33
+ Martha's Vineyard
34
34
  OUTPUT
35
35
  end
36
36
  end
@@ -35,7 +35,7 @@ clean_describe "rename friend" do
35
35
  it "updates friend name in activities" do
36
36
  value(run_cmd("list activities")[:stdout]).must_equal <<-FILE
37
37
  2018-02-06: @science:indoors:agronomy-with-hydroponics: Norman Borlaug and George Washington Carver scored a tour of Atlantis' hydroponics gardens through wetplants@example.org and they took me along.
38
- 2015-11-01: Grace Hopper and I went to Marie's Diner. George had to cancel at the last minute. @food
38
+ 2015-11-01: Grace Hopper and I went to Martha's Vineyard. George had to cancel at the last minute.
39
39
  2015-01-04: Got lunch with Grace Hopper and George Washington Carver. @food
40
40
  2014-12-31: Celebrated the new year in Paris with Marie Curie. @partying
41
41
  2014-11-15: Talked to George Washington Carver on the phone for an hour.
@@ -43,7 +43,7 @@ clean_describe "rename friend" do
43
43
  subject
44
44
  value(run_cmd("list activities")[:stdout]).must_equal <<-FILE
45
45
  2018-02-06: @science:indoors:agronomy-with-hydroponics: Norman Borlaug and George Washington scored a tour of Atlantis' hydroponics gardens through wetplants@example.org and they took me along.
46
- 2015-11-01: Grace Hopper and I went to Marie's Diner. George had to cancel at the last minute. @food
46
+ 2015-11-01: Grace Hopper and I went to Martha's Vineyard. George had to cancel at the last minute.
47
47
  2015-01-04: Got lunch with Grace Hopper and George Washington. @food
48
48
  2014-12-31: Celebrated the new year in Paris with Marie Curie. @partying
49
49
  2014-11-15: Talked to George Washington on the phone for an hour.
@@ -48,7 +48,7 @@ Close friend: None found
48
48
  - 2016-03-01: Met up with **Grace Hopper**.
49
49
  - 2016-02-01: Met up with **Grace Hopper**.
50
50
  - 2016-01-01: Met up with **Grace Hopper**.
51
- - 2015-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
51
+ - 2015-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
52
52
  - 2015-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
53
53
  - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying
54
54
  - 2014-11-15: Talked to **George Washington Carver** on the phone for an hour.
@@ -60,7 +60,7 @@ Close friend: None found
60
60
 
61
61
  ### Locations:
62
62
  - Atlantis
63
- - Marie's Diner
63
+ - Martha's Vineyard
64
64
  - Paris
65
65
  FILE
66
66
  end
@@ -27,7 +27,7 @@ require "friends"
27
27
  CONTENT = <<-FILE.freeze
28
28
  ### Activities:
29
29
  - 2018-02-06: @science:indoors:agronomy-with-hydroponics: **Norman Borlaug** and **George Washington Carver** scored a tour of _Atlantis_' hydroponics gardens through wetplants@example.org and they took me along.
30
- - 2015-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
30
+ - 2015-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
31
31
  - 2015-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
32
32
  - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying
33
33
  - 2014-11-15: Talked to **George Washington Carver** on the phone for an hour.
@@ -47,7 +47,7 @@ CONTENT = <<-FILE.freeze
47
47
 
48
48
  ### Locations:
49
49
  - Atlantis
50
- - Marie's Diner
50
+ - Martha's Vineyard
51
51
  - Paris
52
52
  FILE
53
53
 
@@ -55,7 +55,7 @@ FILE
55
55
  SCRAMBLED_CONTENT = <<-FILE.freeze
56
56
  ### Activities:
57
57
  - 2015-01-04: Got lunch with **Grace Hopper** and **George Washington Carver**. @food
58
- - 2015-11-01: **Grace Hopper** and I went to _Marie's Diner_. George had to cancel at the last minute. @food
58
+ - 2015-11-01: **Grace Hopper** and I went to _Martha's Vineyard_. George had to cancel at the last minute.
59
59
  - 2018-02-06: @science:indoors:agronomy-with-hydroponics: **Norman Borlaug** and **George Washington Carver** scored a tour of _Atlantis_' hydroponics gardens through wetplants@example.org and they took me along.
60
60
  - 2014-11-15: Talked to **George Washington Carver** on the phone for an hour.
61
61
  - 2014-12-31: Celebrated the new year in _Paris_ with **Marie Curie**. @partying
@@ -76,7 +76,7 @@ SCRAMBLED_CONTENT = <<-FILE.freeze
76
76
  ### Locations:
77
77
  - Paris
78
78
  - Atlantis
79
- - Marie's Diner
79
+ - Martha's Vineyard
80
80
  FILE
81
81
 
82
82
  # Define these methods so they can be referenced in the methods below. They'll be overridden in
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: friends
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.47'
4
+ version: '0.48'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Evelyn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-11 00:00:00.000000000 Z
11
+ date: 2020-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic
@@ -137,6 +137,7 @@ extensions: []
137
137
  extra_rdoc_files: []
138
138
  files:
139
139
  - ".github/CONTRIBUTING.md"
140
+ - ".github/FUNDING.yml"
140
141
  - ".github/ISSUE_TEMPLATE.md"
141
142
  - ".github/PULL_REQUEST_TEMPLATE.md"
142
143
  - ".gitignore"