friends 0.11 → 0.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2611eb26561b8f7b40bdae56b727170223657de4
4
- data.tar.gz: bc6d0a9247e655d9f42c439c2f576fb6dcb0c022
3
+ metadata.gz: b6fbeed1512a5fb14b7a89e5afebe885e48817ea
4
+ data.tar.gz: e4fa97ba906eb037fc70da65704aa33a456e0a99
5
5
  SHA512:
6
- metadata.gz: d6b161c62dd6b7202e833b0f1a93ddb3b7effe11792b1ba333f905f007180bc9c35ebc8b4105ab873243989eda3256955a984381a0c4e754c681c231b3424b90
7
- data.tar.gz: 76f47fc43841a2c225ea25122d560e46f46dd103f3907b96c66472e9d62ea8edc2d3a0932de04e67c003b841c0c020f117e17d1759000bdaf63c933061f6fe75
6
+ metadata.gz: 883ef235fc6d26aec8bc03ac5a72794e643f1d7d501944a5e5c587bf0451ed55320562b1188161616cd88e1c952ddfccce746d8a369cf05a080d0bd6cda5b2d3
7
+ data.tar.gz: 51557fe1705cf9d812087c5b7b3d5397517f48232a56668267ce8000d94301b7208b430dbf9f97c67694a50ce09f4d079b6f57e9033b084f6f10a0fe928c788b
@@ -1,5 +1,18 @@
1
1
  # Change Log
2
2
 
3
+ ## [v0.12](https://github.com/JacobEvelyn/friends/tree/v0.12) (2016-01-16)
4
+ [Full Changelog](https://github.com/JacobEvelyn/friends/compare/v0.11...v0.12)
5
+
6
+ **Implemented enhancements:**
7
+
8
+ - Add examples for rename command in README [\#76](https://github.com/JacobEvelyn/friends/issues/76)
9
+ - Add change name command [\#68](https://github.com/JacobEvelyn/friends/issues/68)
10
+
11
+ **Merged pull requests:**
12
+
13
+ - Update README and CONTRIBUTING docs. Closes \#76 [\#77](https://github.com/JacobEvelyn/friends/pull/77) ([JacobEvelyn](https://github.com/JacobEvelyn))
14
+ - Add rename friend [\#75](https://github.com/JacobEvelyn/friends/pull/75) ([bloomyminded](https://github.com/bloomyminded))
15
+
3
16
  ## [v0.11](https://github.com/JacobEvelyn/friends/tree/v0.11) (2016-01-13)
4
17
  [Full Changelog](https://github.com/JacobEvelyn/friends/compare/v0.10...v0.11)
5
18
 
@@ -18,7 +18,8 @@ that's great as well!
18
18
  6. Make your changes. Add or modify tests if necessary!
19
19
  (Run tests with `rake test`.) Do your best to conform to
20
20
  existing style and commenting patterns.
21
- 7. Commit your changes
21
+ 7. Update the `README.md` as necessary to include your changes.
22
+ 8. Commit your changes
22
23
  (`git commit -am "Add some feature"`). You should see
23
24
  output from
24
25
  [`overcommit`](https://github.com/brigade/overcommit) as
@@ -44,10 +45,10 @@ it runs commit hooks that looks something like this:
44
45
  how! This practice is meant to keep the code clean but
45
46
  it shouldn't be scary and it's totally fine to need
46
47
  help!
47
- 8. Push your changes to GitHub, and open a Pull Request.
48
- 9. Your code will be reviewed and merged as quickly as
48
+ 9. Push your changes to GitHub, and open a Pull Request.
49
+ 10. Your code will be reviewed and merged as quickly as
49
50
  possible!
50
- 10. Check yourself out on the [contributors page](https://github.com/JacobEvelyn/friends/graphs/contributors)! Look at how cool you are!
51
+ 11. Check yourself out on the [contributors page](https://github.com/JacobEvelyn/friends/graphs/contributors)! Look at how cool you are!
51
52
 
52
53
  If you have any questions at all or get stuck on any step,
53
54
  don't hesitate to
data/README.md CHANGED
@@ -82,6 +82,11 @@ And they can be removed as well:
82
82
  $ friends remove nickname "Grace Hopper" "The Admiral"
83
83
  Nickname removed: "Grace Hopper (a.k.a. Amazing Grace)"
84
84
  ```
85
+ ##### Change a friend's name:
86
+ ```
87
+ $ friends rename friend "Grace Hopper" "Grace Brewster Murray Hopper"
88
+ Name changed: "Grace Brewster Murray Hopper (a.k.a. Amazing Grace)"
89
+ ```
85
90
  ##### Suggest a friend to do something with:
86
91
  ```
87
92
  $ friends suggest
@@ -220,6 +220,20 @@ command :stats do |stats|
220
220
  end
221
221
  end
222
222
 
223
+ desc "Renames a friend"
224
+ command :rename do |rename|
225
+ rename.desc "Renames a friend"
226
+ rename.arg_name "NAME NEW_NAME"
227
+ rename.command :friend do |rename_friend|
228
+ rename_friend.action do |_, _, args|
229
+ friend = @introvert.rename_friend(old_name: args.first,
230
+ new_name: args[1])
231
+ @message = "Name changed: \"#{friend}\""
232
+ @dirty = true # Mark the file for cleaning.
233
+ end
234
+ end
235
+ end
236
+
223
237
  # Before each command, clean up all arguments and create the global Introvert.
224
238
  pre do |global_options, _, options|
225
239
  @debug_mode = global_options[:debug]
@@ -124,6 +124,17 @@ module Friends
124
124
  @description.delete!("\\")
125
125
  end
126
126
 
127
+ # Updates a friend's old_name to their new_name
128
+ # @param [String] old_name
129
+ # @param [String] new_name
130
+ # @return [String] if name found in description
131
+ # @return [nil] if no change was made
132
+ def update_name(old_name:, new_name:)
133
+ description.gsub!(
134
+ Regexp.new("(?<=\\*\\*)#{old_name}(?=\\*\\*)"),
135
+ new_name)
136
+ end
137
+
127
138
  # @param friend [Friend] the friend to test
128
139
  # @return [Boolean] true iff this activity includes the given friend
129
140
  def includes_friend?(friend:)
@@ -49,6 +49,13 @@ module Friends
49
49
  @nicknames.uniq!
50
50
  end
51
51
 
52
+ # Renames a friend, avoiding duplicates and stripping surrounding
53
+ # whitespace.
54
+ # @param new_name [String] the friend's new name
55
+ def rename(new_name)
56
+ @name = new_name
57
+ end
58
+
52
59
  # @param nickname [String] the nickname to remove
53
60
  # @return [Boolean] true if the nickname was present, false otherwise
54
61
  def remove_nickname(nickname)
@@ -75,6 +75,20 @@ module Friends
75
75
  activity # Return the added activity.
76
76
  end
77
77
 
78
+ # Rename an existing added friend.
79
+ # @param old_name [String] the name of the friend
80
+ # @param new_name [String] the new name of the friend
81
+ # @raise [FriendsError] if 0 of 2+ friends match the given name
82
+ # @return [Friend] the existing friend
83
+ def rename_friend(old_name:, new_name:)
84
+ friend = friend_with_name_in(old_name.strip)
85
+ @activities.each do |activity|
86
+ activity.update_name(old_name: friend.name, new_name: new_name.strip)
87
+ end
88
+ friend.rename(new_name.strip)
89
+ friend
90
+ end
91
+
78
92
  # Add a nickname to an existing friend and write out the new friends file.
79
93
  # @param name [String] the name of the friend
80
94
  # @param nickname [String] the nickname to add to the friend
@@ -1,3 +1,3 @@
1
1
  module Friends
2
- VERSION = "0.11"
2
+ VERSION = "0.12"
3
3
  end
@@ -298,4 +298,34 @@ describe Friends::Activity do
298
298
  [past_act, future_act].sort.must_equal [future_act, past_act]
299
299
  end
300
300
  end
301
+
302
+ describe "#update_name" do
303
+ let(:description) { "Lunch with **John Candy**." }
304
+ subject do
305
+ activity.update_name(old_name: "John Candy", new_name: "John Cleese")
306
+ end
307
+
308
+ it "renames the given friend in the description" do
309
+ subject.must_equal "Lunch with **John Cleese**."
310
+ end
311
+
312
+ describe "when the description contains a fragment of the old name" do
313
+ let(:description) { "Lunch with **John Candy** at Johnny's Diner." }
314
+
315
+ it "only replaces the name" do
316
+ subject.must_equal "Lunch with **John Cleese** at Johnny's Diner."
317
+ end
318
+ end
319
+
320
+ describe "when the description contains the complete old name" do
321
+ let(:description) { "Coffee with **John** at John's Studio." }
322
+ subject do
323
+ activity.update_name(old_name: "John", new_name: "Joe")
324
+ end
325
+
326
+ it "only replaces the actual name" do
327
+ subject.must_equal "Coffee with **Joe** at John's Studio."
328
+ end
329
+ end
330
+ end
301
331
  end
@@ -30,6 +30,15 @@ describe Friends::Friend do
30
30
  it { subject.name.must_equal friend_name }
31
31
  end
32
32
 
33
+ describe "#rename" do
34
+ subject { friend }
35
+
36
+ it "renames the friend" do
37
+ friend.rename("Ada Lovelace")
38
+ subject.name.must_equal "Ada Lovelace"
39
+ end
40
+ end
41
+
33
42
  describe "#serialize" do
34
43
  subject { friend.serialize }
35
44
 
@@ -259,6 +259,41 @@ describe Friends::Introvert do
259
259
  end
260
260
  end
261
261
 
262
+ describe "#rename_friend" do
263
+ let(:new_name) { "David Bowie" }
264
+ subject do
265
+ introvert.rename_friend(old_name: friend_names.last, new_name: new_name)
266
+ end
267
+
268
+ it "replaces old name within activities to the new name" do
269
+ stub_friends(friends) do
270
+ stub_activities(activities) do
271
+ subject
272
+ introvert.activities.first.description.must_include new_name
273
+ introvert.activities.last.description.must_include new_name
274
+ end
275
+ end
276
+ end
277
+
278
+ describe "when given names with leading and trailing spaces" do
279
+ let(:new_name) { " David Bowie " }
280
+ let(:old_name) { friend_names.last + " " }
281
+ subject do
282
+ introvert.rename_friend(old_name: old_name, new_name: new_name)
283
+ end
284
+
285
+ it "correctly strips the spaces" do
286
+ stub_friends(friends) do
287
+ stub_activities(activities) do
288
+ subject
289
+ introvert.activities.first.description.must_include "David Bowie"
290
+ introvert.activities.last.description.must_include "David Bowie"
291
+ end
292
+ end
293
+ end
294
+ end
295
+ end
296
+
262
297
  describe "#add_nickname" do
263
298
  subject do
264
299
  introvert.add_nickname(name: friend_names.first, nickname: "The Dude")
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.11'
4
+ version: '0.12'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Evelyn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-13 00:00:00.000000000 Z
11
+ date: 2016-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli