adauth 2.0.2 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48e8b82dd827473a19acccdc250b66bcdf00e44a
4
- data.tar.gz: af6839234b1405eecbb6551dcf91acecc6d76c2b
3
+ metadata.gz: 1a01855a1bb516984482d2cbdaa7020445431786
4
+ data.tar.gz: 077068256ee217f616c28322931be7500e8fb967
5
5
  SHA512:
6
- metadata.gz: 0fc542e5a2f1392253738852897817726bdb2b1bfb697dc82fe287a775729cd75131b85f1135727a3d7e9e869fe4b3131829417c828bd625ff0e09303f45b41b
7
- data.tar.gz: 1a08d5744964257fd2284f7c52de1fd853f5c3783f1c182d0e77b5c6821a32f82f793fd48beb0ba753de391228c8cbbadbe3c3e3ece4e07e7ad7d854b66152c0
6
+ metadata.gz: 6e9fd1e2c0af98fff7ce34b6bfe0300490a718c5408d4d7da9f49f84d709070c4ec1163a9fa4ebc90f579295ffa10b7068ba819f3822d4d39241561790af6db5
7
+ data.tar.gz: 120341150092ad1327e8cac8a20ba4c321215c504c2964265920cd33762a4670b87bbeaf9b66c86cce5c99f6ce5827673531f4aaaa91d7f2a2d743fad48838cc
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- adauth (2.0.1)
4
+ adauth (2.0.2)
5
5
  expects (~> 0.0.2)
6
6
  net-ldap
7
7
 
@@ -10,6 +10,7 @@ require 'adauth/ad_object'
10
10
  require 'adauth/authenticate'
11
11
  require 'adauth/config'
12
12
  require 'adauth/connection'
13
+ require 'adauth/search_results'
13
14
  # AdObjects
14
15
  require 'adauth/ad_objects/computer'
15
16
  require 'adauth/ad_objects/folder'
@@ -16,11 +16,33 @@ module Adauth
16
16
  # Provides all the common functions for Active Directory.
17
17
  class AdObject
18
18
  include Expects
19
-
19
+
20
+ def self.method_missing(method, *args)
21
+ return super unless method =~ /^find_by_/
22
+ method_field = method.to_s.split("_").last
23
+ field = self::Fields[method_field.to_sym]
24
+ return super unless field
25
+ self.where(field, args.first)
26
+ end
27
+
28
+ def method_missing(method, *args)
29
+ field = self.class::Fields[method]
30
+ return handle_field(field) if field
31
+ return super
32
+ end
33
+
34
+ def self.reverse_field(search)
35
+ hash = {}
36
+ self::Fields.each do |k, v|
37
+ hash[v] = k
38
+ end
39
+ return hash[search]
40
+ end
41
+
20
42
  # Returns all objects which have the ObjectClass of the inherited class
21
43
  def self.all
22
44
  Adauth.logger.info(self.class.inspect) { "Searching for all objects matching filter \"#{self::ObjectFilter}\"" }
23
- self.filter(self::ObjectFilter)
45
+ Adauth::SearchResults.new(self.filter(self::ObjectFilter))
24
46
  end
25
47
 
26
48
  # Returns all the objects which match the supplied query
@@ -29,7 +51,7 @@ module Adauth
29
51
  def self.where(field, value)
30
52
  search_filter = Net::LDAP::Filter.eq(field, value)
31
53
  Adauth.logger.info(self.class.inspect) { "Searching for all \"#{self::ObjectFilter}\" where #{field} = #{value}" }
32
- filter(add_object_filter(search_filter))
54
+ Adauth::SearchResults.new(filter(add_object_filter(search_filter)))
33
55
  end
34
56
 
35
57
  # Returns all LDAP objects that match the given filter
@@ -65,13 +87,6 @@ module Adauth
65
87
  @ldap_object
66
88
  end
67
89
 
68
- # Over ride method missing to see if the object has a field by that name
69
- def method_missing(method, *args)
70
- field = self.class::Fields[method]
71
- return handle_field(field) if field
72
- return super
73
- end
74
-
75
90
  # Handle the output for the given field
76
91
  def handle_field(field)
77
92
  case field
@@ -18,7 +18,7 @@ module Adauth
18
18
  Fields = {
19
19
  :name => :samaccountname,
20
20
  :cn_members => [ :member,
21
- Proc.new {|g| g.sub(/.*?CN=(.*?),.*/, '\1')} ],
21
+ Proc.new {|g| g.sub(/.*?CN=(.*?),.*/, '\1').to_s} ],
22
22
  :memberof => :member
23
23
  }
24
24
 
@@ -21,7 +21,7 @@ module Adauth
21
21
  :email => :mail,
22
22
  :name => :name,
23
23
  :cn_groups => [ :memberof,
24
- Proc.new {|g| g.sub(/.*?CN=(.*?),.*/, '\1')} ]
24
+ Proc.new {|g| g.sub(/.*?CN=(.*?),.*/, '\1').to_s} ]
25
25
  }
26
26
 
27
27
  # Object Net::LDAP filter
@@ -0,0 +1,18 @@
1
+ module Adauth
2
+ class SearchResults < Array
3
+ def limit(x)
4
+ return self[0..(x-1)]
5
+ end
6
+
7
+ def order(field, direction = :asc)
8
+ case direction
9
+ when :asc
10
+ return sort! { |x, y| x.send(field) <=> y.send(field) }
11
+ when :desc
12
+ return order(field, :asc).reverse!
13
+ else
14
+ raise "Invalid Order Provided, please use :asc or :desc"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,4 +1,4 @@
1
1
  module Adauth
2
2
  # Adauths Version Number
3
- Version = '2.0.2'
3
+ Version = '2.0.3'
4
4
  end
@@ -46,9 +46,9 @@ describe Adauth::AdObjects::User do
46
46
  it "should allow for additional methods" do
47
47
  default_config
48
48
  Adauth.add_field(Adauth::AdObjects::User, :description, :description)
49
- administrator.description.should be_a String
49
+ user.description.should be_a String
50
50
  Adauth.add_field(Adauth::AdObjects::User, :objectguid, :objectguid)
51
- administrator.objectguid.should be_a String
51
+ user.objectguid.should be_a String
52
52
  end
53
53
 
54
54
  it "should allow you to reset the password" do
@@ -86,4 +86,10 @@ describe Adauth::AdObjects::User do
86
86
  rq_user.member_of?("Adauth Test Group").should be_false
87
87
  new_group.delete
88
88
  end
89
+
90
+ it "should have find_by methods (and not break method_missing)" do
91
+ default_config
92
+ lambda { Adauth::AdObjects::User.fooooooooo }.should raise_exception
93
+ Adauth::AdObjects::User.find_by_login(test_data("domain", "breakable_user")).should be_a Adauth::SearchResults
94
+ end
89
95
  end
@@ -21,17 +21,21 @@ class TestUserModel
21
21
  end
22
22
 
23
23
  describe Adauth::Rails::ModelBridge do
24
+ let(:user) do
25
+ Adauth::AdObjects::User.where('sAMAccountName', test_data("domain", "breakable_user")).first
26
+ end
27
+
24
28
  it "should extend", :no_ad => true do
25
29
  TestUserModel.should respond_to :create_from_adauth
26
30
  end
27
31
 
28
32
  it "should create the model" do
29
33
  default_config
30
- TestUserModel.create_from_adauth(administrator)
34
+ TestUserModel.create_from_adauth(user)
31
35
  end
32
36
 
33
37
  it "should return and create the model" do
34
38
  default_config
35
- TestUserModel.return_and_create_from_adauth(administrator)
39
+ TestUserModel.return_and_create_from_adauth(user)
36
40
  end
37
41
  end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Adauth::SearchResults, :no_ad => true do
4
+ let(:test_array) do
5
+ [OpenStruct.new({name: "foo"}), OpenStruct.new({name: "bar"}), OpenStruct.new({name: "widget"})]
6
+ end
7
+
8
+ let(:sorted_array) do
9
+ [OpenStruct.new({name: "bar"}), OpenStruct.new({name: "foo"}), OpenStruct.new({name: "widget"})]
10
+ end
11
+
12
+ let(:search_results) do
13
+ Adauth::SearchResults.new(test_array)
14
+ end
15
+
16
+ it "should create self from_array" do
17
+ Adauth::SearchResults.new(test_array).should be_a Adauth::SearchResults
18
+ end
19
+
20
+ it "should have the limit function" do
21
+ search_results.limit(2).length.should eq 2
22
+ search_results.limit(2).last.should_not eq test_array.last
23
+ search_results.limit(2).should be_a Adauth::SearchResults
24
+ end
25
+
26
+ it "should have the order function" do
27
+ search_results.order(:name, :asc).should eq sorted_array
28
+ search_results.order(:name, :asc).should be_a Adauth::SearchResults
29
+ search_results.order(:name, :desc).should eq sorted_array.reverse
30
+ search_results.order(:name, :desc).should be_a Adauth::SearchResults
31
+ end
32
+
33
+ it "should handle having a wrong direction passed to it" do
34
+ lambda { search_results.order(:name, :foo) }.should raise_exception
35
+ end
36
+
37
+ it "should default to :asc for order" do
38
+ search_results.order(:name).should eq sorted_array
39
+ search_results.order(:name).should be_a Adauth::SearchResults
40
+ end
41
+ end
@@ -23,15 +23,3 @@ def test_data(set, key)
23
23
  @yaml ||= YAML::load(File.open('spec/test_data.yml'))
24
24
  @yaml[set][key]
25
25
  end
26
-
27
- def administrator
28
- Adauth::AdObjects::User.where('sAMAccountName', "administrator").first
29
- end
30
-
31
- #def breakable_user
32
- # Adauth::AdObjects::User.where('sAMAccountName', test_data("domain", "breakable_user")).first
33
- #end
34
-
35
- def query_user
36
- Adauth::AdObjects::User.where('sAMAccountName', test_data("domain", "query_user")).first
37
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam "Arcath" Laycock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-28 00:00:00.000000000 Z
11
+ date: 2013-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -124,6 +124,7 @@ files:
124
124
  - lib/adauth/rails.rb
125
125
  - lib/adauth/rails/helpers.rb
126
126
  - lib/adauth/rails/model_bridge.rb
127
+ - lib/adauth/search_results.rb
127
128
  - lib/adauth/version.rb
128
129
  - lib/generators/adauth/config/USAGE
129
130
  - lib/generators/adauth/config/config_generator.rb
@@ -144,6 +145,7 @@ files:
144
145
  - spec/adauth_connection_spec.rb
145
146
  - spec/adauth_issue_spec.rb
146
147
  - spec/adauth_rails_model_bridge_spec.rb
148
+ - spec/adauth_search_results_spec.rb
147
149
  - spec/adauth_spec.rb
148
150
  - spec/spec_helper.rb
149
151
  - spec/test_data.example.yml
@@ -183,6 +185,7 @@ test_files:
183
185
  - spec/adauth_connection_spec.rb
184
186
  - spec/adauth_issue_spec.rb
185
187
  - spec/adauth_rails_model_bridge_spec.rb
188
+ - spec/adauth_search_results_spec.rb
186
189
  - spec/adauth_spec.rb
187
190
  - spec/spec_helper.rb
188
191
  - spec/test_data.example.yml