mit_stalker 1.0.1 → 1.0.2

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v1.0.2. Workaround for people undergoing name changes.
2
+
1
3
  v1.0.1. Fixed copy-pasted manifest.
2
4
 
3
5
  v1.0. Initial release.
data/lib/mit_stalker.rb CHANGED
@@ -75,7 +75,7 @@ module MitStalker
75
75
  #
76
76
  # Returns a single user information hash, or nil if no user has the given
77
77
  # full name.
78
- def self.refine_mitdir_response(users, full_name)
78
+ def self.refine_mitdir_response_by_name(users, full_name)
79
79
  vector = name_vector(full_name)
80
80
  user_base_info = users.find { |user| name_vector(user[:name]) == vector }
81
81
  return nil unless user_base_info
@@ -88,6 +88,28 @@ module MitStalker
88
88
  users and users.first
89
89
  end
90
90
 
91
+ # Narrows down a MIT directory response to a single user.
92
+ #
93
+ # Returns a single user information hash, or nil if no user has the given
94
+ # e-mail.
95
+ def self.refine_mitdir_response_by_email(users, user_name)
96
+ users.each do |user|
97
+ if user[:email]
98
+ next unless user[:email].split('@').first == user_name
99
+ users = parse_mitdir_response finger(user[:alias], 'web.mit.edu')
100
+ return users && users.first
101
+ else
102
+ users = parse_mitdir_response finger(user[:alias], 'web.mit.edu')
103
+ next unless users
104
+ user = users.first
105
+ if user[:email] and user[:email].split('@').first == user_name
106
+ return user
107
+ end
108
+ end
109
+ end
110
+ nil
111
+ end
112
+
91
113
  # Retrieves information about an MIT student from an Athena username.
92
114
  #
93
115
  # Returns a hash containing user information, or nil if the user was not
@@ -101,7 +123,8 @@ module MitStalker
101
123
  users = parse_mitdir_response finger(user_name, 'web.mit.edu')
102
124
  end
103
125
 
104
- user = refine_mitdir_response(users, full_name)
126
+ user = refine_mitdir_response_by_name(users, full_name)
127
+ user = refine_mitdir_response_by_email(users, user_name) unless user
105
128
  user and user.merge(:full_name => full_name)
106
129
  end
107
130
  end
data/mit_stalker.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{mit_stalker}
5
- s.version = "1.0.1"
5
+ s.version = "1.0.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Victor Costan"]
9
- s.date = %q{2009-09-29}
9
+ s.date = %q{2010-02-07}
10
10
  s.description = %q{Fetches publicly available information about MIT students.}
11
11
  s.email = %q{victor@zergling.net}
12
12
  s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.textile", "lib/mit_stalker.rb"]
@@ -61,16 +61,31 @@ class MitStalkerTest < Test::Unit::TestCase
61
61
  end
62
62
  end
63
63
 
64
- def test_refine_mitdir_response
64
+ def test_refine_mitdir_response_by_name
65
65
  flexmock(MitStalker).should_receive(:finger).with('Y-li16', 'web.mit.edu').
66
- and_return(fixture('single_response.txt'))
66
+ and_return(fixture('single_response.txt')).once
67
67
 
68
68
  multi_response =
69
69
  MitStalker.parse_mitdir_response fixture('multi_response.txt')
70
- user = MitStalker.refine_mitdir_response multi_response, 'Yan Ping Li'
70
+ user = MitStalker.refine_mitdir_response_by_name multi_response,
71
+ 'Yan Ping Li'
71
72
  assert_equal 'costan@MIT.EDU', user[:email], 'Wrong user information'
72
73
  end
73
74
 
75
+ def test_refine_mitdir_response_by_email
76
+ flexmock(MitStalker).should_receive(:finger).with('V-costan', 'web.mit.edu').
77
+ and_return(fixture('single_response.txt')).once
78
+ flexmock(MitStalker).should_receive(:finger).with('A-li', 'web.mit.edu').
79
+ and_return(fixture('single_response2.txt')).once
80
+
81
+ mixed_response =
82
+ MitStalker.parse_mitdir_response fixture('mixed_response.txt')
83
+ user = MitStalker.refine_mitdir_response_by_email mixed_response.reverse,
84
+ 'aliceli'
85
+ assert user, 'No user returned'
86
+ assert_equal 'Li, Alice', user[:name]
87
+ end
88
+
74
89
  def test_from_user_name
75
90
  assert_equal nil, MitStalker.from_user_name('no_such_user')
76
91
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mit_stalker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Costan
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-29 00:00:00 -04:00
12
+ date: 2010-02-07 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency