friends 0.0.2 → 0.0.3
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/.ruby-version +1 -1
- data/bin/friends +7 -1
- data/friends.gemspec +2 -1
- data/lib/friends/activity.rb +9 -1
- data/lib/friends/introvert.rb +39 -33
- data/lib/friends/version.rb +1 -1
- data/test/activity_spec.rb +33 -0
- data/test/friend_spec.rb +10 -6
- data/test/introvert_spec.rb +50 -2
- metadata +26 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 018ee9e9043561fd60353d6db09a37ca42822a8d
|
4
|
+
data.tar.gz: 0591a729fb07a42bcd4ea872e280d849f6eb1bea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa12a4235f2aa2b5d24f6a507e872d8509caa06c356de44cf564c528e73767f181ea8f7d5ec459e48b95c221992d767f5a00844e87eeab9894bd05e82231859b
|
7
|
+
data.tar.gz: a8543253d63c267ac33a7dbb9535f6465f97df093528ac181d84325bc3b14728a98bd88366adf6191c2a3db075e683d0752d76909c401fe326b7dd14f1d06e83
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.0
|
data/bin/friends
CHANGED
@@ -60,12 +60,18 @@ command :list do |c|
|
|
60
60
|
|
61
61
|
c.desc "Lists all activities"
|
62
62
|
c.command :activities do |list_activities|
|
63
|
+
list_activities.flag [:limit],
|
64
|
+
arg_name: "NUMBER",
|
65
|
+
default_value: 10,
|
66
|
+
desc: "The number of activities to return"
|
67
|
+
|
63
68
|
list_activities.flag [:with],
|
64
69
|
arg_name: "NAME",
|
65
70
|
desc: "List only activities involving the given friend"
|
66
71
|
|
67
72
|
list_activities.action do |_, options|
|
68
|
-
|
73
|
+
limit = options[:limit].to_i
|
74
|
+
puts @introvert.list_activities(limit: limit, with: options[:with])
|
69
75
|
end
|
70
76
|
end
|
71
77
|
end
|
data/friends.gemspec
CHANGED
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "gli", "~> 2.12"
|
22
22
|
spec.add_dependency "memoist", "~> 0.11"
|
23
23
|
|
24
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
25
24
|
spec.add_development_dependency "bundler", "~> 1.7"
|
26
25
|
spec.add_development_dependency "codeclimate-test-reporter", "~> 0.4"
|
26
|
+
spec.add_development_dependency "minitest", "~> 5.5"
|
27
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
27
28
|
end
|
data/lib/friends/activity.rb
CHANGED
@@ -113,12 +113,20 @@ module Friends
|
|
113
113
|
no_leading_asterisks = "(?<!\\*\\*)"
|
114
114
|
no_ending_asterisks = "(?!\\*\\*)"
|
115
115
|
|
116
|
+
# We don't want to match names that are part of other words.
|
117
|
+
no_leading_alphabeticals = "(?<![A-z])"
|
118
|
+
no_ending_alphabeticals = "(?![A-z])"
|
119
|
+
|
116
120
|
# Create the list of regexes and return it.
|
117
121
|
chunks = name.split(Regexp.new(splitter))
|
118
122
|
|
119
123
|
[chunks, [chunks.first]].map do |words|
|
120
124
|
Regexp.new(
|
121
|
-
no_leading_asterisks +
|
125
|
+
no_leading_asterisks +
|
126
|
+
no_leading_alphabeticals +
|
127
|
+
words.join(splitter) +
|
128
|
+
no_ending_alphabeticals +
|
129
|
+
no_ending_asterisks,
|
122
130
|
Regexp::IGNORECASE
|
123
131
|
)
|
124
132
|
end
|
data/lib/friends/introvert.rb
CHANGED
@@ -48,12 +48,6 @@ module Friends
|
|
48
48
|
filename
|
49
49
|
end
|
50
50
|
|
51
|
-
# List all friend names in the friends file.
|
52
|
-
# @return [Array] a list of all friend names
|
53
|
-
def list_friends
|
54
|
-
friends.map(&:name)
|
55
|
-
end
|
56
|
-
|
57
51
|
# Add a friend and write out the new friends file.
|
58
52
|
# @param name [String] the name of the friend to add
|
59
53
|
# @raise [FriendsError] when a friend with that name is already in the file
|
@@ -75,31 +69,6 @@ module Friends
|
|
75
69
|
friend # Return the added friend.
|
76
70
|
end
|
77
71
|
|
78
|
-
# List all activity details.
|
79
|
-
# @param [String] the name of a friend to filter by, or nil for unfiltered
|
80
|
-
# @return [Array] a list of all activity text values
|
81
|
-
def list_activities(with:)
|
82
|
-
acts = activities
|
83
|
-
|
84
|
-
# Filter by friend name if argument is passed.
|
85
|
-
unless with.nil?
|
86
|
-
friends = friends_with_name_in(with)
|
87
|
-
|
88
|
-
case friends.size
|
89
|
-
when 1
|
90
|
-
# If exactly one friend matches, use that friend to filter.
|
91
|
-
acts = acts.select { |a| a.friend_names.include? friends.first.name }
|
92
|
-
when 0 then raise FriendsError, "No friend found for \"#{with}\""
|
93
|
-
else
|
94
|
-
raise FriendsError,
|
95
|
-
"More than one friend found for \"#{with}\": "\
|
96
|
-
"#{friends.map(&:name).join(', ')}"
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
acts.map(&:display_text)
|
101
|
-
end
|
102
|
-
|
103
72
|
# Add an activity and write out the new friends file.
|
104
73
|
# @param serialization [String] the serialized activity
|
105
74
|
# @return [Activity] the added activity
|
@@ -117,9 +86,15 @@ module Friends
|
|
117
86
|
activity # Return the added activity.
|
118
87
|
end
|
119
88
|
|
89
|
+
# List all friend names in the friends file.
|
90
|
+
# @return [Array] a list of all friend names
|
91
|
+
def list_friends
|
92
|
+
friends.map(&:name)
|
93
|
+
end
|
94
|
+
|
120
95
|
# List your favorite friends.
|
121
|
-
# @param
|
122
|
-
#
|
96
|
+
# @param limit [Integer] the number of favorite friends to return, or nil
|
97
|
+
# for no limit
|
123
98
|
# @return [Array] a list of the favorite friends' names and activity
|
124
99
|
# counts
|
125
100
|
def list_favorites(limit:)
|
@@ -147,6 +122,37 @@ module Friends
|
|
147
122
|
results.map(&:first)
|
148
123
|
end
|
149
124
|
|
125
|
+
# List all activity details.
|
126
|
+
# @param limit [Integer] the number of activities to return, or nil for no
|
127
|
+
# limit
|
128
|
+
# @param with [String] the name of a friend to filter by, or nil for
|
129
|
+
# unfiltered
|
130
|
+
# @return [Array] a list of all activity text values
|
131
|
+
def list_activities(limit:, with:)
|
132
|
+
acts = activities
|
133
|
+
|
134
|
+
# Filter by friend name if argument is passed.
|
135
|
+
unless with.nil?
|
136
|
+
friends = friends_with_name_in(with)
|
137
|
+
|
138
|
+
case friends.size
|
139
|
+
when 1
|
140
|
+
# If exactly one friend matches, use that friend to filter.
|
141
|
+
acts = acts.select { |a| a.friend_names.include? friends.first.name }
|
142
|
+
when 0 then raise FriendsError, "No friend found for \"#{with}\""
|
143
|
+
else
|
144
|
+
raise FriendsError,
|
145
|
+
"More than one friend found for \"#{with}\": "\
|
146
|
+
"#{friends.map(&:name).join(', ')}"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# If we need to, trim the list.
|
151
|
+
acts = acts.take(limit) unless limit.nil?
|
152
|
+
|
153
|
+
acts.map(&:display_text)
|
154
|
+
end
|
155
|
+
|
150
156
|
private
|
151
157
|
|
152
158
|
# Gets the list of friends as read from the file.
|
data/lib/friends/version.rb
CHANGED
data/test/activity_spec.rb
CHANGED
@@ -112,6 +112,39 @@ describe Friends::Activity do
|
|
112
112
|
activity.description.must_equal "Dinner with Elizabeth." # No match found.
|
113
113
|
end
|
114
114
|
|
115
|
+
it "ignores when at beginning of word" do
|
116
|
+
activity = Friends::Activity.new(
|
117
|
+
date_s: Date.today.to_s,
|
118
|
+
description: "Field trip to the Johnson Co."
|
119
|
+
)
|
120
|
+
activity.highlight_friends(friends: friends)
|
121
|
+
|
122
|
+
# No match found.
|
123
|
+
activity.description.must_equal "Field trip to the Johnson Co."
|
124
|
+
end
|
125
|
+
|
126
|
+
it "ignores when in middle of word" do
|
127
|
+
activity = Friends::Activity.new(
|
128
|
+
date_s: Date.today.to_s,
|
129
|
+
description: "Field trip to the JimJohnJames Co."
|
130
|
+
)
|
131
|
+
activity.highlight_friends(friends: friends)
|
132
|
+
|
133
|
+
# No match found.
|
134
|
+
activity.description.must_equal "Field trip to the JimJohnJames Co."
|
135
|
+
end
|
136
|
+
|
137
|
+
it "ignores when at end of word" do
|
138
|
+
activity = Friends::Activity.new(
|
139
|
+
date_s: Date.today.to_s,
|
140
|
+
description: "Field trip to the JimJohn Co."
|
141
|
+
)
|
142
|
+
activity.highlight_friends(friends: friends)
|
143
|
+
|
144
|
+
# No match found.
|
145
|
+
activity.description.must_equal "Field trip to the JimJohn Co."
|
146
|
+
end
|
147
|
+
|
115
148
|
it "does not match with leading asterisks" do
|
116
149
|
activity = Friends::Activity.new(
|
117
150
|
date_s: Date.today.to_s,
|
data/test/friend_spec.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
require_relative "helper"
|
2
2
|
|
3
3
|
describe Friends::Friend do
|
4
|
-
let(:
|
5
|
-
let(:friend) { Friends::Friend.new(name:
|
4
|
+
let(:friend_name) { "Jacob Evelyn" }
|
5
|
+
let(:friend) { Friends::Friend.new(name: friend_name) }
|
6
6
|
|
7
7
|
describe ".deserialize" do
|
8
8
|
subject { Friends::Friend.deserialize(serialized_str) }
|
9
9
|
|
10
10
|
describe "when string is well-formed" do
|
11
11
|
let(:serialized_str) do
|
12
|
-
"#{Friends::Friend::SERIALIZATION_PREFIX}#{
|
12
|
+
"#{Friends::Friend::SERIALIZATION_PREFIX}#{friend_name}"
|
13
13
|
end
|
14
14
|
|
15
15
|
it "creates a friend with the correct name" do
|
16
|
-
subject.name.must_equal
|
16
|
+
subject.name.must_equal friend_name
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -27,13 +27,17 @@ describe Friends::Friend do
|
|
27
27
|
describe "#new" do
|
28
28
|
subject { friend }
|
29
29
|
|
30
|
-
it { subject.name.must_equal
|
30
|
+
it { subject.name.must_equal friend_name }
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "#serialize" do
|
34
34
|
subject { friend.serialize }
|
35
35
|
|
36
|
-
it
|
36
|
+
it do
|
37
|
+
subject.must_equal(
|
38
|
+
"#{Friends::Friend::SERIALIZATION_PREFIX}#{friend_name}"
|
39
|
+
)
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
43
|
describe "#<=>" do
|
data/test/introvert_spec.rb
CHANGED
@@ -41,7 +41,7 @@ describe Friends::Introvert do
|
|
41
41
|
subject { introvert.clean }
|
42
42
|
|
43
43
|
# Delete the file that is created each time.
|
44
|
-
after { File.delete(filename) }
|
44
|
+
after { File.delete(filename) if File.exists?(filename) }
|
45
45
|
|
46
46
|
it "writes cleaned file" do
|
47
47
|
sorted_friends = friends.sort
|
@@ -85,6 +85,9 @@ describe Friends::Introvert do
|
|
85
85
|
let(:new_friend_name) { "Jacob Evelyn" }
|
86
86
|
subject { introvert.add_friend(name: new_friend_name) }
|
87
87
|
|
88
|
+
# Delete the file that is created each time.
|
89
|
+
after { File.delete(filename) if File.exists?(filename) }
|
90
|
+
|
88
91
|
describe "when there is no existing friend with that name" do
|
89
92
|
it "adds the given friend" do
|
90
93
|
introvert.stub(:friends, friends) do
|
@@ -112,7 +115,49 @@ describe Friends::Introvert do
|
|
112
115
|
end
|
113
116
|
|
114
117
|
describe "#list_activities" do
|
115
|
-
subject { introvert.list_activities(with: with) }
|
118
|
+
subject { introvert.list_activities(limit: limit, with: with) }
|
119
|
+
let(:limit) { nil }
|
120
|
+
let(:with) { nil }
|
121
|
+
|
122
|
+
describe "when the limit is lower than the number of activities" do
|
123
|
+
let(:limit) { 1 }
|
124
|
+
|
125
|
+
it "lists that number of activities" do
|
126
|
+
introvert.stub(:activities, activities) do
|
127
|
+
subject.size.must_equal limit
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe "when the limit is equal to the number of activities" do
|
133
|
+
let(:limit) { activities.size }
|
134
|
+
|
135
|
+
it "lists all activities" do
|
136
|
+
introvert.stub(:activities, activities) do
|
137
|
+
subject.size.must_equal activities.size
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe "when the limit is greater than the number of activities" do
|
143
|
+
let(:limit) { activities.size + 5 }
|
144
|
+
|
145
|
+
it "lists all activities" do
|
146
|
+
introvert.stub(:activities, activities) do
|
147
|
+
subject.size.must_equal activities.size
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "when the limit is nil" do
|
153
|
+
let(:limit) { nil }
|
154
|
+
|
155
|
+
it "lists all activities" do
|
156
|
+
introvert.stub(:activities, activities) do
|
157
|
+
subject.size.must_equal activities.size
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
116
161
|
|
117
162
|
describe "when not filtering by a friend" do
|
118
163
|
let(:with) { nil }
|
@@ -169,6 +214,9 @@ describe Friends::Introvert do
|
|
169
214
|
let(:activity_description) { "Snorkeling with **Betsy Ross**." }
|
170
215
|
subject { introvert.add_activity(serialization: activity_serialization) }
|
171
216
|
|
217
|
+
# Delete the file that is created each time.
|
218
|
+
after { File.delete(filename) if File.exists?(filename) }
|
219
|
+
|
172
220
|
it "adds the given activity" do
|
173
221
|
introvert.stub(:friends, friends) do
|
174
222
|
subject
|
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.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Evelyn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gli
|
@@ -39,47 +39,61 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.11'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.7'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.7'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: codeclimate-test-reporter
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '0.4'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0.4'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: minitest
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '5.5'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '5.5'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
83
97
|
description: Spend time with the people you care about. Introvert-tested. Extrovert-approved.
|
84
98
|
email:
|
85
99
|
- jacobevelyn@gmail.com
|
@@ -132,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
146
|
version: '0'
|
133
147
|
requirements: []
|
134
148
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.
|
149
|
+
rubygems_version: 2.4.5
|
136
150
|
signing_key:
|
137
151
|
specification_version: 4
|
138
152
|
summary: Spend time with the people you care about.
|