ambitious-activeldap 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest ADDED
@@ -0,0 +1,8 @@
1
+ lib/ambition/adapters/active_ldap/base.rb
2
+ lib/ambition/adapters/active_ldap/query.rb
3
+ lib/ambition/adapters/active_ldap/select.rb
4
+ test/enumerable_test.rb
5
+ test/helper.rb
6
+ test/integration_test.rb
7
+ test/select_test.rb
8
+ Manifest
@@ -0,0 +1,55 @@
1
+
2
+ # Gem::Specification for Ambitious-activeldap-0.1.0
3
+ # Originally generated by Echoe
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{ambitious-activeldap}
7
+ s.version = "0.1.0"
8
+ s.date = %q{2008-01-29}
9
+ s.summary = %q{An ambitious adapter for ActiveLDAP}
10
+ s.email = %q{chris@ozmm.org}
11
+ s.homepage = %q{http://ambition.rubyforge.org/}
12
+ s.rubyforge_project = %q{ambition}
13
+ s.description = %q{An ambitious adapter for ActiveLDAP}
14
+ s.has_rdoc = true
15
+ s.authors = ["Chris Wanstrath"]
16
+ s.files = ["lib/ambition/adapters/active_ldap/base.rb", "lib/ambition/adapters/active_ldap/query.rb", "lib/ambition/adapters/active_ldap/select.rb", "test/enumerable_test.rb", "test/helper.rb", "test/integration_test.rb", "test/select_test.rb", "Manifest", "ambitious-activeldap.gemspec"]
17
+ s.test_files = ["test/enumerable_test.rb", "test/integration_test.rb", "test/select_test.rb"]
18
+ s.add_dependency(%q<ruby-activeldap>, [">= 0.8.3.1"])
19
+ s.add_dependency(%q<ambition>, [">= 0.5.0"])
20
+ end
21
+
22
+
23
+ # # Original Rakefile source (requires the Echoe gem):
24
+ #
25
+ # require 'rake'
26
+ #
27
+ # Version = '0.1.0'
28
+ #
29
+ # begin
30
+ # require 'rubygems'
31
+ # gem 'echoe', '>=2.7'
32
+ # ENV['RUBY_FLAGS'] = ""
33
+ # require 'echoe'
34
+ #
35
+ # Echoe.new('ambitious-activeldap') do |p|
36
+ # p.dependencies << 'ruby-activeldap >=0.8.3.1'
37
+ # p.summary = "An ambitious adapter for ActiveLDAP"
38
+ # p.author = 'Chris Wanstrath'
39
+ # p.email = "chris@ozmm.org"
40
+ #
41
+ # p.project = 'ambition'
42
+ # p.url = "http://ambition.rubyforge.org/"
43
+ # p.test_pattern = 'test/*_test.rb'
44
+ # p.version = Version
45
+ # p.dependencies << 'ambition >=0.5.0'
46
+ # end
47
+ #
48
+ # rescue LoadError
49
+ # puts "Not doing any of the Echoe gemmy stuff, because you don't have the specified gem versions"
50
+ # end
51
+ #
52
+ # desc 'Install as a gem'
53
+ # task :install_gem do
54
+ # puts `rake manifest package && gem install pkg/ambitious-activeldap-#{Version}.gem`
55
+ # end
@@ -0,0 +1,15 @@
1
+ module Ambition
2
+ module Adapters
3
+ module ActiveLdap
4
+ class Base
5
+ def sanitize(object)
6
+ case object
7
+ when true then 'TRUE'
8
+ when false then 'FALSE'
9
+ else object.to_s
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ module Ambition
2
+ module Adapters
3
+ module ActiveLdap
4
+ class Query
5
+
6
+ def kick
7
+ owner.find(:all, to_hash)
8
+ end
9
+
10
+ def size
11
+ raise "Not Implemented"
12
+ end
13
+
14
+ def to_hash
15
+ hash = {}
16
+ hash[:filter] = to_s unless to_s.empty?
17
+ hash
18
+ end
19
+
20
+ def to_s
21
+ Array(clauses[:select]).join
22
+ clauses[:select].first.to_s
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,65 @@
1
+ module Ambition
2
+ module Adapters
3
+ module ActiveLdap
4
+ class Select < Base
5
+ def call(*methods)
6
+ method = methods.first.to_s
7
+ if method[-1] == ??
8
+ "(#{method[0...-1]}=#{sanitize true})"
9
+ else
10
+ method
11
+ end
12
+ end
13
+
14
+ def chained_call(*methods)
15
+ call(*methods)
16
+ end
17
+
18
+ def both(left, right)
19
+ "(&#{left}#{sanitize right})"
20
+ end
21
+
22
+ def either(left, right)
23
+ "(|#{left}#{sanitize right})"
24
+ end
25
+
26
+ def ==(left, right)
27
+ "(#{left}=#{sanitize right})"
28
+ end
29
+
30
+ # !=
31
+ def not_equal(left, right)
32
+ "(!(#{left}=#{sanitize right}))"
33
+ end
34
+
35
+ def =~(left, right)
36
+ end
37
+
38
+ # !~
39
+ def not_regexp(left, right)
40
+ end
41
+
42
+ def <(left, right)
43
+ self.<=(left, right)
44
+ end
45
+
46
+ def >(left, right)
47
+ self.>=(left, right)
48
+ end
49
+
50
+ def >=(left, right)
51
+ "(#{left}>=#{sanitize right})"
52
+ end
53
+
54
+ def <=(left, right)
55
+ "(#{left}<=#{sanitize right})"
56
+ end
57
+
58
+ def include?(left, right)
59
+ bits = left.map { |item| "(#{right}=#{item})" }
60
+ "(|#{bits})"
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,95 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ context "Each" do
4
+ specify "simple ==" do
5
+ hash = { :filter => "(uid=mking)" }
6
+ LDAPUser.expects(:find).with(:all, hash).returns([])
7
+ LDAPUser.select { |m| m.uid == 'mking' }.each do |user|
8
+ puts user.cn
9
+ end
10
+ end
11
+
12
+ xspecify "limit and conditions" do
13
+ hash = { :limit => 5, :filter => "(uid=mking)" }
14
+ LDAPUser.expects(:find).with(:all, hash).returns([])
15
+ LDAPUser.select { |m| m.uid == 'mking' }.first(5).each do |user|
16
+ puts user.cn
17
+ end
18
+ end
19
+
20
+ xspecify "limit and conditions and order" do
21
+ hash = { :limit => 5, :filter => "(uid=mking)", :sort_by => 'sn' }
22
+ LDAPUser.expects(:find).with(:all, hash).returns([])
23
+ LDAPUser.select { |m| m.uid == 'mking' }.sort_by { |m| m.sn }.first(5).each do |user|
24
+ puts user.cn
25
+ end
26
+ end
27
+
28
+ xspecify "limit and order" do
29
+ hash = { :limit => 5, :sort_by => 'sn' }
30
+ LDAPUser.expects(:find).with(:all, hash).returns([])
31
+ LDAPUser.sort_by { |m| m.sn }.first(5).each do |user|
32
+ puts user.name
33
+ end
34
+ end
35
+ end
36
+
37
+ context "Enumerable Methods" do
38
+ specify "map" do
39
+ hash = { :filter => "(uid=mking)" }
40
+ LDAPUser.expects(:find).with(:all, hash).returns([])
41
+ LDAPUser.select { |m| m.uid == 'mking' }.map { |u| u.name }
42
+ end
43
+
44
+ specify "each_with_index" do
45
+ hash = { :filter => "(uid=mking)" }
46
+ LDAPUser.expects(:find).with(:all, hash).returns([])
47
+ LDAPUser.select { |m| m.uid == 'mking' }.each_with_index do |user, i|
48
+ puts "#{i}: #{user.name}"
49
+ end
50
+ end
51
+
52
+ # specify "any?" do
53
+ # LDAPUser.expects(:count).with(:conditions => "users.age > 21").returns(1)
54
+ # LDAPUser.any? { |u| u.age > 21 }.should == true
55
+ # end
56
+
57
+ # specify "all?" do
58
+ # LDAPUser.expects(:count).at_least_once.returns(10, 20)
59
+ # LDAPUser.all? { |u| u.age > 21 }.should == false
60
+ #
61
+ # LDAPUser.expects(:count).at_least_once.returns(10, 10)
62
+ # LDAPUser.all? { |u| u.age > 21 }.should == true
63
+ # end
64
+ #
65
+ # specify "empty?" do
66
+ # LDAPUser.expects(:count).with(:conditions => "users.age > 21").returns(1)
67
+ # LDAPUser.select { |u| u.age > 21 }.empty?.should.equal false
68
+ #
69
+ # LDAPUser.expects(:count).with(:conditions => "users.age > 21").returns(0)
70
+ # LDAPUser.select { |u| u.age > 21 }.empty?.should.equal true
71
+ # end
72
+ #
73
+ specify "entries" do
74
+ LDAPUser.expects(:find).with(:all, {})
75
+ LDAPUser.entries
76
+
77
+ hash = { :filter => "(uid=mking)" }
78
+ LDAPUser.expects(:find).with(:all, hash).returns([])
79
+ LDAPUser.select { |m| m.uid == 'mking' }.entries
80
+ end
81
+
82
+ specify "to_a" do
83
+ LDAPUser.expects(:find).with(:all, {})
84
+ LDAPUser.to_a
85
+ end
86
+ #
87
+ # xspecify "each_slice" do
88
+ # end
89
+ #
90
+ # xspecify "max" do
91
+ # end
92
+ #
93
+ # xspecify "min" do
94
+ # end
95
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,17 @@
1
+ %w( rubygems test/spec mocha redgreen English ).each { |f| require f }
2
+
3
+ $LOAD_PATH.unshift *[ File.dirname(__FILE__) + '/../lib', File.dirname(__FILE__) + '/../../../lib' ]
4
+ require 'ambition/adapters/active_ldap'
5
+
6
+ ActiveLdap::Base.class_eval do
7
+ def self.find(*args)
8
+ 'dummy find method'
9
+ end
10
+ end
11
+
12
+ class LDAPUser < ActiveLdap::Base
13
+ def self.table_name
14
+ # in real life would call the base class method on the ActiveLdap model class
15
+ 'ou=people,dc=automatthew,dc=com'
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ context "LDAP model after including LDAP Adapter" do
4
+ specify "should still have original find method" do
5
+ LDAPUser.find(:all).should == "dummy find method"
6
+ end
7
+ end
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ context "LDAP Adapter :: Select" do
4
+ context "Filter (using select)" do
5
+ specify "simple ==" do
6
+ filter = LDAPUser.select { |m| m.name == 'jon' }.to_s
7
+ filter.should == "(name=jon)"
8
+ end
9
+
10
+ specify "simple !=" do
11
+ filter = LDAPUser.select { |m| m.name != 'jon' }.to_s
12
+ filter.should == "(!(name=jon))"
13
+ end
14
+
15
+ specify "simple == && ==" do
16
+ filter = LDAPUser.select { |m| m.name == 'jon' && m.age == 21 }.to_s
17
+ filter.should == "(&(name=jon)(age=21))"
18
+ end
19
+
20
+ specify "simple == || ==" do
21
+ filter = LDAPUser.select { |m| m.name == 'jon' || m.age == 21 }.to_s
22
+ filter.should == "(|(name=jon)(age=21))"
23
+ end
24
+
25
+ specify "mixed && and ||" do
26
+ filter = LDAPUser.select { |m| m.name == 'jon' || m.age == 21 && m.password == 'pass' }.to_s
27
+ filter.should == "(|(name=jon)(&(age=21)(password=pass)))"
28
+ end
29
+
30
+ specify "grouped && and ||" do
31
+ filter = LDAPUser.select { |m| (m.name == 'jon' || m.name == 'rick') && m.age == 21 }.to_s
32
+ filter.should == "(&(|(name=jon)(name=rick))(age=21))"
33
+ end
34
+
35
+ specify "simple >/<" do
36
+ # LDAP apparently only supports >= and <=
37
+ filter = LDAPUser.select { |m| m.age > 21 }.to_s
38
+ filter.should == "(age>=21)"
39
+
40
+ filter = LDAPUser.select { |m| m.age >= 21 }.to_s
41
+ filter.should == "(age>=21)"
42
+
43
+ filter = LDAPUser.select { |m| m.age < 21 }.to_s
44
+ filter.should == "(age<=21)"
45
+
46
+ filter = LDAPUser.select { |m| m.age <= 21 }.to_s
47
+ filter.should == "(age<=21)"
48
+ end
49
+
50
+ specify "array.include? item" do
51
+ filter = LDAPUser.select { |m| [1, 2, 3, 4].include? m.id }.to_s
52
+ # I'm not sure whether this is idiomatic, but it works.
53
+ filter.should == "(|(id=1)(id=2)(id=3)(id=4))"
54
+ end
55
+
56
+ specify "variable'd array.include? item" do
57
+ array = [1, 2, 3, 4]
58
+ filter = LDAPUser.select { |m| array.include? m.id }.to_s
59
+ filter.should == "(|(id=1)(id=2)(id=3)(id=4))"
60
+ end
61
+
62
+ specify "simple == with variables" do
63
+ me = 'chris'
64
+ filter = LDAPUser.select { |m| m.name == me }.to_s
65
+ filter.should == "(name=#{me})"
66
+ end
67
+
68
+ specify "simple == with true" do
69
+ filter = LDAPUser.select { |m| m.disabled == true }.to_s
70
+ filter.should == "(disabled=TRUE)"
71
+ end
72
+
73
+ xspecify "implicit true" do
74
+ filter = LDAPUser.select { |m| m.disabled }.to_s
75
+ filter.should == "(disabled=TRUE)"
76
+ end
77
+
78
+ specify "predicate method" do
79
+ filter = LDAPUser.select { |m| m.disabled? }.to_s
80
+ filter.should == "(disabled=TRUE)"
81
+ end
82
+ end
83
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: ambitious-activeldap
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.0
7
+ date: 2008-01-29 00:00:00 -08:00
8
+ summary: An ambitious adapter for ActiveLDAP
9
+ require_paths:
10
+ - lib
11
+ email: chris@ozmm.org
12
+ homepage: http://ambition.rubyforge.org/
13
+ rubyforge_project: ambition
14
+ description: An ambitious adapter for ActiveLDAP
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Chris Wanstrath
31
+ files:
32
+ - lib/ambition/adapters/active_ldap/base.rb
33
+ - lib/ambition/adapters/active_ldap/query.rb
34
+ - lib/ambition/adapters/active_ldap/select.rb
35
+ - test/enumerable_test.rb
36
+ - test/helper.rb
37
+ - test/integration_test.rb
38
+ - test/select_test.rb
39
+ - Manifest
40
+ - ambitious-activeldap.gemspec
41
+ test_files:
42
+ - test/enumerable_test.rb
43
+ - test/integration_test.rb
44
+ - test/select_test.rb
45
+ rdoc_options: []
46
+
47
+ extra_rdoc_files: []
48
+
49
+ executables: []
50
+
51
+ extensions: []
52
+
53
+ requirements: []
54
+
55
+ dependencies:
56
+ - !ruby/object:Gem::Dependency
57
+ name: ruby-activeldap
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Version::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.8.3.1
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: ambition
67
+ version_requirement:
68
+ version_requirements: !ruby/object:Gem::Version::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.5.0
73
+ version: