cornell_ldap 1.4.0 → 1.4.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/.gitignore +4 -21
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -46
- data/cornell_ldap.gemspec +16 -44
- data/lib/cornell_ldap/record.rb +166 -0
- data/lib/cornell_ldap/version.rb +4 -0
- data/lib/cornell_ldap.rb +2 -150
- data/spec/cornell_ldap_spec.rb +12 -3
- data/spec/spec_helper.rb +5 -8
- metadata +54 -74
- data/.document +0 -5
- data/VERSION +0 -1
data/.gitignore
CHANGED
@@ -1,21 +1,4 @@
|
|
1
|
-
|
2
|
-
.
|
3
|
-
|
4
|
-
|
5
|
-
*.tmproj
|
6
|
-
tmtags
|
7
|
-
|
8
|
-
## EMACS
|
9
|
-
*~
|
10
|
-
\#*
|
11
|
-
.\#*
|
12
|
-
|
13
|
-
## VIM
|
14
|
-
*.swp
|
15
|
-
|
16
|
-
## PROJECT::GENERAL
|
17
|
-
coverage
|
18
|
-
rdoc
|
19
|
-
pkg
|
20
|
-
|
21
|
-
## PROJECT::SPECIFIC
|
1
|
+
*.gem
|
2
|
+
.bundle
|
3
|
+
Gemfile.lock
|
4
|
+
pkg/*
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -1,47 +1,2 @@
|
|
1
|
-
require
|
2
|
-
require 'rake'
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "cornell_ldap"
|
8
|
-
gem.summary = %Q{Toolkit for accessing information about people through the Cornell University LDAP directory.}
|
9
|
-
gem.description = %Q{Using ActiveLdap, this library provides an easy interface for communicating with the Cornell University LDAP directory. Use of this directory is restricted to purposes authorized by the university.}
|
10
|
-
gem.email = "aepstein607@gmail.com"
|
11
|
-
gem.homepage = "http://github.com/aepstein/cornell_ldap"
|
12
|
-
gem.authors = ["Ari Epstein"]
|
13
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
-
gem.add_dependency "net-ldap", '>= 0.1.1'
|
15
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
|
-
end
|
17
|
-
Jeweler::GemcutterTasks.new
|
18
|
-
rescue LoadError
|
19
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
20
|
-
end
|
21
|
-
|
22
|
-
require 'spec/rake/spectask'
|
23
|
-
Spec::Rake::SpecTask.new(:spec) do |spec|
|
24
|
-
spec.libs << 'lib' << 'spec'
|
25
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
26
|
-
end
|
27
|
-
|
28
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
29
|
-
spec.libs << 'lib' << 'spec'
|
30
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
31
|
-
spec.rcov = true
|
32
|
-
end
|
33
|
-
|
34
|
-
task :spec => :check_dependencies
|
35
|
-
|
36
|
-
task :default => :spec
|
37
|
-
|
38
|
-
require 'rake/rdoctask'
|
39
|
-
Rake::RDocTask.new do |rdoc|
|
40
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
41
|
-
|
42
|
-
rdoc.rdoc_dir = 'rdoc'
|
43
|
-
rdoc.title = "cornell_ldap #{version}"
|
44
|
-
rdoc.rdoc_files.include('README*')
|
45
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
46
|
-
end
|
1
|
+
require "bundler/gem_tasks"
|
47
2
|
|
data/cornell_ldap.gemspec
CHANGED
@@ -1,58 +1,30 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "cornell_ldap/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
6
|
+
s.name = "cornell_ldap"
|
7
|
+
s.version = CornellLdap::VERSION
|
8
|
+
s.authors = ["Ari Epstein"]
|
9
|
+
s.email = ["aepstein607@gmail.com"]
|
10
|
+
s.homepage = "http://github.com/aepstein/cornell_ldap"
|
11
|
+
s.summary = %q{Lightweight LDAP abstraction library to work Cornell's particular structure}
|
13
12
|
s.description = %q{Using ActiveLdap, this library provides an easy interface for communicating with the Cornell University LDAP directory. Use of this directory is restricted to purposes authorized by the university.}
|
14
|
-
|
15
|
-
s.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
s.files
|
20
|
-
".document",
|
21
|
-
".gitignore",
|
22
|
-
"LICENSE",
|
23
|
-
"README.rdoc",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"cornell_ldap.gemspec",
|
27
|
-
"lib/cornell_ldap.rb",
|
28
|
-
"spec/cornell_ldap_spec.rb",
|
29
|
-
"spec/spec.opts",
|
30
|
-
"spec/spec_helper.rb"
|
31
|
-
]
|
32
|
-
s.homepage = %q{http://github.com/aepstein/cornell_ldap}
|
33
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
13
|
+
|
14
|
+
s.rubyforge_project = "cornell_ldap"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
34
19
|
s.require_paths = ["lib"]
|
35
20
|
s.rubygems_version = %q{1.3.7}
|
36
|
-
s.summary = %q{Toolkit for accessing information about people through the Cornell University LDAP directory.}
|
37
21
|
s.test_files = [
|
38
22
|
"spec/cornell_ldap_spec.rb",
|
39
23
|
"spec/spec_helper.rb"
|
40
24
|
]
|
41
25
|
|
42
|
-
|
43
|
-
|
44
|
-
s.specification_version = 3
|
26
|
+
s.add_development_dependency 'rspec'
|
27
|
+
s.add_dependency 'net-ldap'
|
45
28
|
|
46
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
|
-
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
48
|
-
s.add_runtime_dependency(%q<net-ldap>, [">= 0.1.1"])
|
49
|
-
else
|
50
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
51
|
-
s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
|
52
|
-
end
|
53
|
-
else
|
54
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
55
|
-
s.add_dependency(%q<net-ldap>, [">= 0.1.1"])
|
56
|
-
end
|
57
29
|
end
|
58
30
|
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'rubygems' unless defined? Gem
|
2
|
+
require 'net/ldap' unless defined? Net::LDAP
|
3
|
+
|
4
|
+
module CornellLdap
|
5
|
+
class Record < Object
|
6
|
+
|
7
|
+
MAPPINGS = {
|
8
|
+
:cornelledutype => :status,
|
9
|
+
:cornelleduwrkngtitle1 => :status_title1,
|
10
|
+
:cornelleduwrkngtitle2 => :status_title2,
|
11
|
+
:cornelleduacadcollege => :college,
|
12
|
+
:cornelleducampusaddress => :campus_address,
|
13
|
+
:cornelledulocaladdress => :local_address,
|
14
|
+
:homepostaladdress => :home_address,
|
15
|
+
:givenname => :first_name,
|
16
|
+
:cornelledumiddlename => :middle_name,
|
17
|
+
:sn => :last_name,
|
18
|
+
:cornelleducampusphone => :campus_phone,
|
19
|
+
:homephone => :home_phone,
|
20
|
+
:cornelledulocalphone => :local_phone
|
21
|
+
}
|
22
|
+
|
23
|
+
CONNECTION_PARAMETERS = [ :port, :host, :auth ]
|
24
|
+
|
25
|
+
def self.setup_connection( params )
|
26
|
+
@@connection_params = params.inject({}) do |memo, (k, v)|
|
27
|
+
memo[k.to_sym] = v
|
28
|
+
memo
|
29
|
+
end
|
30
|
+
@@connection = Net::LDAP.new(
|
31
|
+
@@connection_params.inject({}) do |memo, (k, v)|
|
32
|
+
memo[k] = v if CONNECTION_PARAMETERS.include? k
|
33
|
+
memo
|
34
|
+
end
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.connection
|
39
|
+
@@connection
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.find( subject )
|
43
|
+
r = connection.search(
|
44
|
+
:base => 'ou=People,' + @@connection_params[:base], :size => 1,
|
45
|
+
:filter => Net::LDAP::Filter.eq( 'uid', subject ),
|
46
|
+
:scope => Net::LDAP::SearchScope_SingleLevel
|
47
|
+
)
|
48
|
+
return CornellLdap::Record.new( r.first ) if r && r.length > 0
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
# Takes an address string and converts it to a hash representation:
|
53
|
+
#
|
54
|
+
# [street] Street address
|
55
|
+
# [city] City
|
56
|
+
# [state] State
|
57
|
+
# [zip] Zip code
|
58
|
+
def self.address_attributes(string_address)
|
59
|
+
return if string_address.nil?
|
60
|
+
array_address = string_address.split(',').map! { |x| x.strip }
|
61
|
+
state = false
|
62
|
+
array_address.each_index { |i| state = i if array_address[i] =~ /^[A-Za-z]{2,2}$/ }
|
63
|
+
return unless state && state > 1
|
64
|
+
attributes = { :street => array_address[0..(state-2)].join(', '),
|
65
|
+
:city => array_address[state - 1],
|
66
|
+
:state => array_address[state] }
|
67
|
+
attributes[:zip] = array_address[state + 1] unless array_address[state + 1].nil?
|
68
|
+
attributes
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.sanitize_phone(string_phone)
|
72
|
+
return if string_phone.nil?
|
73
|
+
string_phone.gsub /[^0-9]/, ''
|
74
|
+
end
|
75
|
+
|
76
|
+
attr_accessor :attributes
|
77
|
+
|
78
|
+
def initialize( record )
|
79
|
+
self.attributes = Hash.new
|
80
|
+
MAPPINGS.each do |ldap, local|
|
81
|
+
self.attributes[local] = record[ldap].first unless record[ldap].nil? || record[ldap].empty?
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns a string representation of the person's status with the university
|
86
|
+
# of one of the following types:
|
87
|
+
#
|
88
|
+
# [staff] non-faculty employee
|
89
|
+
# [faculty] tenured or tenure-track faculty
|
90
|
+
# [undergrad] undergraduate student
|
91
|
+
# [grad] graduate or professional student
|
92
|
+
# [alumni] alumnus
|
93
|
+
# [temporary] temporary or casual employee
|
94
|
+
# false status unknown
|
95
|
+
def status
|
96
|
+
return @status unless @status.nil?
|
97
|
+
return unless attributes.key?( :status )
|
98
|
+
@status = case attributes[:status]
|
99
|
+
when /^staff/ then 'staff'
|
100
|
+
when /^acad/ then
|
101
|
+
if ( attributes.key?(:status_title1) && attributes[:status_title1] =~ /^Prof/ ) ||
|
102
|
+
( attributes.key?(:status_title2) && attributes[:status_title2] =~ /^Prof/ ) then
|
103
|
+
'faculty'
|
104
|
+
else
|
105
|
+
'staff'
|
106
|
+
end
|
107
|
+
when /^student/ then case attributes[:college]
|
108
|
+
when 'AS', 'AR', 'AG', 'IL', 'HE', 'HA', 'EN', 'UN' then 'undergrad'
|
109
|
+
else 'grad'
|
110
|
+
end
|
111
|
+
when /^alumni/ then 'alumni'
|
112
|
+
when /^temp/ then 'temporary'
|
113
|
+
else false
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# Returns has representation of on campus address for person if one is
|
118
|
+
# reported.
|
119
|
+
# See CornellLdap::Record#address_attributes for more information.
|
120
|
+
def campus_address
|
121
|
+
unless @campus_address.nil?
|
122
|
+
return @campus_address
|
123
|
+
end
|
124
|
+
@campus_address = false unless attributes.key?(:campus_address) &&
|
125
|
+
@campus_address = { :street => attributes[:campus_address].strip,
|
126
|
+
:on_campus => true }
|
127
|
+
return campus_address
|
128
|
+
end
|
129
|
+
|
130
|
+
# Returns local area (Ithaca area) address for person if one is reported
|
131
|
+
# See CornellLdap::Record#address_attributes for more information.
|
132
|
+
def local_address
|
133
|
+
unless @local_address.nil?
|
134
|
+
return @local_address
|
135
|
+
end
|
136
|
+
@local_address = false unless attributes.key?(:local_address) &&
|
137
|
+
@local_address = Record.address_attributes(attributes[:local_address])
|
138
|
+
return local_address
|
139
|
+
end
|
140
|
+
|
141
|
+
# Returns home address for person if one is reported
|
142
|
+
# See CornellLdap::Record#address_attributes for more information.
|
143
|
+
def home_address
|
144
|
+
unless @home_address.nil?
|
145
|
+
return @home_address
|
146
|
+
end
|
147
|
+
@home_address = false unless attributes.key?(:home_address) &&
|
148
|
+
@home_address = Record.address_attributes(attributes[:home_address])
|
149
|
+
return home_address
|
150
|
+
end
|
151
|
+
|
152
|
+
# Returns first name of person
|
153
|
+
def first_name; attributes[:first_name]; end
|
154
|
+
|
155
|
+
# Returns middle name of person
|
156
|
+
def middle_name; attributes[:middle_name]; end
|
157
|
+
|
158
|
+
# Returns last name of person
|
159
|
+
def last_name; attributes[:last_name]; end
|
160
|
+
|
161
|
+
def campus_phone; Record.sanitize_phone attributes[:campus_phone]; end
|
162
|
+
def local_phone; Record.sanitize_phone attributes[:local_phone]; end
|
163
|
+
def home_phone; Record.sanitize_phone attributes[:home_phone]; end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
data/lib/cornell_ldap.rb
CHANGED
@@ -1,154 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require 'net/ldap' unless defined? Net::LDAP
|
1
|
+
require "cornell_ldap/version"
|
3
2
|
|
4
3
|
module CornellLdap
|
5
|
-
|
6
|
-
|
7
|
-
MAPPINGS = {
|
8
|
-
:cornelledutype => :status,
|
9
|
-
:cornelleduwrkngtitle1 => :status_title1,
|
10
|
-
:cornelleduwrkngtitle2 => :status_title2,
|
11
|
-
:cornelleduacadcollege => :college,
|
12
|
-
:cornelleducampusaddress => :campus_address,
|
13
|
-
:cornelledulocaladdress => :local_address,
|
14
|
-
:homepostaladdress => :home_address,
|
15
|
-
:givenname => :first_name,
|
16
|
-
:cornelledumiddlename => :middle_name,
|
17
|
-
:sn => :last_name
|
18
|
-
}
|
19
|
-
|
20
|
-
CONNECTION_PARAMETERS = [ :port, :host, :auth ]
|
21
|
-
|
22
|
-
def self.setup_connection( params )
|
23
|
-
@@connection_params = params.inject({}) do |memo, (k, v)|
|
24
|
-
memo[k.to_sym] = v
|
25
|
-
memo
|
26
|
-
end
|
27
|
-
@@connection = Net::LDAP.new(
|
28
|
-
@@connection_params.inject({}) do |memo, (k, v)|
|
29
|
-
memo[k] = v if CONNECTION_PARAMETERS.include? k
|
30
|
-
memo
|
31
|
-
end
|
32
|
-
)
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.connection
|
36
|
-
@@connection
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.find( subject )
|
40
|
-
r = connection.search(
|
41
|
-
:base => 'ou=People,' + @@connection_params[:base], :size => 1,
|
42
|
-
:filter => Net::LDAP::Filter.eq( 'uid', subject ),
|
43
|
-
:scope => Net::LDAP::SearchScope_SingleLevel
|
44
|
-
)
|
45
|
-
return CornellLdap::Record.new( r.first ) if r && r.length > 0
|
46
|
-
nil
|
47
|
-
end
|
48
|
-
|
49
|
-
# Takes an address string and converts it to a hash representation:
|
50
|
-
#
|
51
|
-
# [street] Street address
|
52
|
-
# [city] City
|
53
|
-
# [state] State
|
54
|
-
# [zip] Zip code
|
55
|
-
def self.address_attributes(string_address)
|
56
|
-
return if string_address.nil?
|
57
|
-
array_address = string_address.split(',').map! { |x| x.strip }
|
58
|
-
state = false
|
59
|
-
array_address.each_index { |i| state = i if array_address[i] =~ /^[A-Za-z]{2,2}$/ }
|
60
|
-
return unless state && state > 1
|
61
|
-
attributes = { :street => array_address[0..(state-2)].join(', '),
|
62
|
-
:city => array_address[state - 1],
|
63
|
-
:state => array_address[state] }
|
64
|
-
attributes[:zip] = array_address[state + 1] unless array_address[state + 1].nil?
|
65
|
-
attributes
|
66
|
-
end
|
67
|
-
|
68
|
-
attr_accessor :attributes
|
69
|
-
|
70
|
-
def initialize( record )
|
71
|
-
self.attributes = Hash.new
|
72
|
-
MAPPINGS.each do |ldap, local|
|
73
|
-
self.attributes[local] = record[ldap].first unless record[ldap].nil? || record[ldap].empty?
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
# Returns a string representation of the person's status with the university
|
78
|
-
# of one of the following types:
|
79
|
-
#
|
80
|
-
# [staff] non-faculty employee
|
81
|
-
# [faculty] tenured or tenure-track faculty
|
82
|
-
# [undergrad] undergraduate student
|
83
|
-
# [grad] graduate or professional student
|
84
|
-
# [alumni] alumnus
|
85
|
-
# [temporary] temporary or casual employee
|
86
|
-
# false status unknown
|
87
|
-
def status
|
88
|
-
return @status unless @status.nil?
|
89
|
-
return unless attributes.key?( :status )
|
90
|
-
@status = case attributes[:status]
|
91
|
-
when /^staff/ then 'staff'
|
92
|
-
when /^acad/ then
|
93
|
-
if ( attributes.key?(:status_title1) && attributes[:status_title1] =~ /^Prof/ ) ||
|
94
|
-
( attributes.key?(:status_title2) && attributes[:status_title2] =~ /^Prof/ ) then
|
95
|
-
'faculty'
|
96
|
-
else
|
97
|
-
'staff'
|
98
|
-
end
|
99
|
-
when /^student/ then case attributes[:college]
|
100
|
-
when 'AS', 'AR', 'AG', 'IL', 'HE', 'HA', 'EN', 'UN' then 'undergrad'
|
101
|
-
else 'grad'
|
102
|
-
end
|
103
|
-
when /^alumni/ then 'alumni'
|
104
|
-
when /^temp/ then 'temporary'
|
105
|
-
else false
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
# Returns has representation of on campus address for person if one is
|
110
|
-
# reported.
|
111
|
-
# See CornellLdap::Record#address_attributes for more information.
|
112
|
-
def campus_address
|
113
|
-
unless @campus_address.nil?
|
114
|
-
return @campus_address
|
115
|
-
end
|
116
|
-
@campus_address = false unless attributes.key?(:campus_address) &&
|
117
|
-
@campus_address = { :street => attributes[:campus_address].strip,
|
118
|
-
:on_campus => true }
|
119
|
-
return campus_address
|
120
|
-
end
|
121
|
-
|
122
|
-
# Returns local area (Ithaca area) address for person if one is reported
|
123
|
-
# See CornellLdap::Record#address_attributes for more information.
|
124
|
-
def local_address
|
125
|
-
unless @local_address.nil?
|
126
|
-
return @local_address
|
127
|
-
end
|
128
|
-
@local_address = false unless attributes.key?(:local_address) &&
|
129
|
-
@local_address = Record.address_attributes(attributes[:local_address])
|
130
|
-
return local_address
|
131
|
-
end
|
132
|
-
|
133
|
-
# Returns home address for person if one is reported
|
134
|
-
# See CornellLdap::Record#address_attributes for more information.
|
135
|
-
def home_address
|
136
|
-
unless @home_address.nil?
|
137
|
-
return @home_address
|
138
|
-
end
|
139
|
-
@home_address = false unless attributes.key?(:home_address) &&
|
140
|
-
@home_address = Record.address_attributes(attributes[:home_address])
|
141
|
-
return home_address
|
142
|
-
end
|
143
|
-
|
144
|
-
# Returns first name of person
|
145
|
-
def first_name; attributes[:first_name]; end
|
146
|
-
|
147
|
-
# Returns middle name of person
|
148
|
-
def middle_name; attributes[:middle_name]; end
|
149
|
-
|
150
|
-
# Returns last name of person
|
151
|
-
def last_name; attributes[:last_name]; end
|
152
|
-
end
|
4
|
+
require 'cornell_ldap/record'
|
153
5
|
end
|
154
6
|
|
data/spec/cornell_ldap_spec.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require 'spec_helper'
|
3
2
|
require 'cornell_ldap'
|
4
3
|
|
5
4
|
CornellLdap::Record.setup_connection :host => 'directory.cornell.edu',
|
@@ -74,6 +73,13 @@ describe "CornellLdap" do
|
|
74
73
|
person.campus_address[:street].should eql '-100 Day Hall'
|
75
74
|
end
|
76
75
|
|
76
|
+
it "should strip non-numeric values from phone numbers" do
|
77
|
+
person = mock_person
|
78
|
+
person.campus_phone.should eql '6075551212'
|
79
|
+
person.local_phone.should eql '6075551212'
|
80
|
+
person.home_phone.should eql '6075551212'
|
81
|
+
end
|
82
|
+
|
77
83
|
def mock_person(values = {})
|
78
84
|
CornellLdap::Record.new( {
|
79
85
|
:cornelledutype => ['staff'],
|
@@ -83,7 +89,10 @@ describe "CornellLdap" do
|
|
83
89
|
:homepostaladdress => ['1 Broadway, New York, NY, 00000'],
|
84
90
|
:givenname => ['John'],
|
85
91
|
:cornelledumiddlename => ['A'],
|
86
|
-
:sn => ['Doe']
|
92
|
+
:sn => ['Doe'],
|
93
|
+
:cornelleducampusphone => ['607+555-1212'],
|
94
|
+
:homephone => ['607-555*1212'],
|
95
|
+
:cornelledulocalphone => ['607-555 1212']
|
87
96
|
}.merge(values) )
|
88
97
|
end
|
89
98
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
require 'spec/autorun'
|
6
|
-
|
7
|
-
Spec::Runner.configure do |config|
|
8
|
-
|
1
|
+
RSpec.configure do |config|
|
2
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
3
|
+
config.run_all_when_everything_filtered = true
|
4
|
+
config.filter_run :focus
|
9
5
|
end
|
6
|
+
|
metadata
CHANGED
@@ -1,110 +1,90 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: cornell_ldap
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 4
|
9
|
-
- 0
|
10
|
-
version: 1.4.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.2
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Ari Epstein
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-07-12 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rspec
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &9072920 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 2
|
33
|
-
- 9
|
34
|
-
version: 1.2.9
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
35
22
|
type: :development
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: net-ldap
|
39
23
|
prerelease: false
|
40
|
-
|
24
|
+
version_requirements: *9072920
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: net-ldap
|
27
|
+
requirement: &9072040 !ruby/object:Gem::Requirement
|
41
28
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
- 1
|
49
|
-
- 1
|
50
|
-
version: 0.1.1
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
51
33
|
type: :runtime
|
52
|
-
|
53
|
-
|
54
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *9072040
|
36
|
+
description: Using ActiveLdap, this library provides an easy interface for communicating
|
37
|
+
with the Cornell University LDAP directory. Use of this directory is restricted
|
38
|
+
to purposes authorized by the university.
|
39
|
+
email:
|
40
|
+
- aepstein607@gmail.com
|
55
41
|
executables: []
|
56
|
-
|
57
42
|
extensions: []
|
58
|
-
|
59
|
-
|
60
|
-
- LICENSE
|
61
|
-
- README.rdoc
|
62
|
-
files:
|
63
|
-
- .document
|
43
|
+
extra_rdoc_files: []
|
44
|
+
files:
|
64
45
|
- .gitignore
|
46
|
+
- .rspec
|
47
|
+
- Gemfile
|
65
48
|
- LICENSE
|
66
49
|
- README.rdoc
|
67
50
|
- Rakefile
|
68
|
-
- VERSION
|
69
51
|
- cornell_ldap.gemspec
|
70
52
|
- lib/cornell_ldap.rb
|
53
|
+
- lib/cornell_ldap/record.rb
|
54
|
+
- lib/cornell_ldap/version.rb
|
71
55
|
- spec/cornell_ldap_spec.rb
|
72
56
|
- spec/spec.opts
|
73
57
|
- spec/spec_helper.rb
|
74
|
-
has_rdoc: true
|
75
58
|
homepage: http://github.com/aepstein/cornell_ldap
|
76
59
|
licenses: []
|
77
|
-
|
78
60
|
post_install_message:
|
79
|
-
rdoc_options:
|
80
|
-
|
81
|
-
require_paths:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
82
63
|
- lib
|
83
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
65
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
|
89
|
-
segments:
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
segments:
|
90
71
|
- 0
|
91
|
-
|
92
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
hash: 4054269777481147648
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
74
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
|
98
|
-
segments:
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
segments:
|
99
80
|
- 0
|
100
|
-
|
81
|
+
hash: 4054269777481147648
|
101
82
|
requirements: []
|
102
|
-
|
103
|
-
|
104
|
-
rubygems_version: 1.3.7
|
83
|
+
rubyforge_project: cornell_ldap
|
84
|
+
rubygems_version: 1.8.15
|
105
85
|
signing_key:
|
106
86
|
specification_version: 3
|
107
|
-
summary:
|
108
|
-
test_files:
|
87
|
+
summary: Lightweight LDAP abstraction library to work Cornell's particular structure
|
88
|
+
test_files:
|
109
89
|
- spec/cornell_ldap_spec.rb
|
110
90
|
- spec/spec_helper.rb
|
data/.document
DELETED
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.4.0
|