dm-ldap-adapter 0.3.5 → 0.4.0.alpha2
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/.project +11 -0
- data/.yardoc +0 -0
- data/Manifest.txt +5 -2
- data/README-example.markdown +0 -1
- data/README.txt +15 -15
- data/Rakefile +4 -3
- data/env.sh +2 -0
- data/example/identity_map.rb +10 -10
- data/example/posix.rb +9 -9
- data/ldap-commands.txt +3 -0
- data/lib/adapters/ldap_adapter.rb +155 -118
- data/lib/adapters/noop_transaction.rb +16 -0
- data/lib/dummy_ldap_resource.rb +6 -6
- data/lib/ldap/array.rb +96 -12
- data/lib/ldap/conditions_2_filter.rb +95 -0
- data/lib/ldap/digest.rb +3 -3
- data/lib/ldap/net_ldap_facade.rb +28 -110
- data/lib/ldap/ruby_ldap_facade.rb +31 -116
- data/lib/ldap/version.rb +1 -1
- data/lib/ldap_resource.rb +113 -26
- data/spec/assiociations_ldap_adapter_spec.rb +129 -130
- data/spec/authentication_ldap_adapter_spec.rb +1 -6
- data/spec/ldap_adapter_spec.rb +164 -177
- data/spec/multi_repository_spec.rb +41 -5
- data/spec/multi_value_attributes_spec.rb +64 -31
- data/spec/sorting_spec.rb +16 -15
- data/spec/spec_helper.rb +34 -20
- metadata +67 -27
- data/lib/adapters/memory_adapter.rb +0 -79
- data/lib/adapters/simple_adapter.rb +0 -198
data/spec/sorting_spec.rb
CHANGED
@@ -2,28 +2,19 @@ $LOAD_PATH << File.dirname(__FILE__)
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe DataMapper.repository(:ldap).adapter do
|
5
|
-
|
5
|
+
|
6
6
|
describe 'belongs_to association' do
|
7
|
-
|
7
|
+
|
8
8
|
before do
|
9
9
|
DataMapper.repository(:ldap) do
|
10
10
|
User.all.destroy!
|
11
|
-
@user1 = User.create(:login => "black", :name => 'Black', :mail => "blackmail@
|
12
|
-
@user2 = User.create(:login => "brown", :name => 'brown', :mail => "brownmail@
|
11
|
+
@user1 = User.create(:login => "black", :name => 'Black', :mail => ["blackmail@example.com"], :age => 100)
|
12
|
+
@user2 = User.create(:login => "brown", :name => 'brown', :mail => ["brownmail@example.com"], :age => 25)
|
13
13
|
@user3 = User.create(:login => "blue", :name => 'Yellow')
|
14
14
|
@user4 = User.create(:login => "baluh", :name => 'Hmm')
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
18
|
-
after do
|
19
|
-
DataMapper.repository(:ldap) do
|
20
|
-
@user1.destroy
|
21
|
-
@user2.destroy
|
22
|
-
@user3.destroy
|
23
|
-
@user4.destroy
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
17
|
+
|
27
18
|
it 'should sort descending without order option' do
|
28
19
|
DataMapper.repository(:ldap) do
|
29
20
|
expected = User.all().sort do |u1, u2|
|
@@ -40,6 +31,12 @@ describe DataMapper.repository(:ldap).adapter do
|
|
40
31
|
end
|
41
32
|
User.all(:order => [:login]).should == expected
|
42
33
|
end
|
34
|
+
DataMapper.repository(:ldap) do
|
35
|
+
expected = User.all().sort do |u1, u2|
|
36
|
+
-1 * (u1.login <=> u2.login)
|
37
|
+
end
|
38
|
+
User.all(:order => [:login]).reverse.should == expected
|
39
|
+
end
|
43
40
|
end
|
44
41
|
it 'should sort case insensitive with order option' do
|
45
42
|
DataMapper.repository(:ldap) do
|
@@ -52,9 +49,13 @@ describe DataMapper.repository(:ldap).adapter do
|
|
52
49
|
|
53
50
|
it 'should sort with nil values' do
|
54
51
|
DataMapper.repository(:ldap) do
|
55
|
-
users = User.all(:order => [:
|
52
|
+
users = User.all(:order => [:name]).select { |u| !u.mail.nil? }
|
56
53
|
users.should == [@user1, @user2]
|
57
54
|
end
|
55
|
+
DataMapper.repository(:ldap) do
|
56
|
+
users = User.all(:order => [:name]).reverse.select { |u| !u.mail.nil? }
|
57
|
+
users.should == [@user2, @user1]
|
58
|
+
end
|
58
59
|
end
|
59
60
|
end
|
60
61
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,16 +3,17 @@ require 'rubygems'
|
|
3
3
|
require 'slf4r/ruby_logger'
|
4
4
|
Slf4r::LoggerFacade4RubyLogger.level = :info
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
require 'do_sqlite3'
|
6
|
+
require 'dm-sqlite-adapter'
|
7
|
+
require 'dm-migrations'
|
8
|
+
require 'dm-transactions'
|
10
9
|
require 'pathname'
|
11
10
|
$LOAD_PATH << Pathname(__FILE__).dirname.parent.expand_path + 'lib'
|
12
11
|
|
12
|
+
print "datamapper version:"
|
13
|
+
puts DataMapper::VERSION
|
14
|
+
|
13
15
|
require 'ldap_resource'
|
14
16
|
require 'adapters/ldap_adapter'
|
15
|
-
require 'adapters/memory_adapter'
|
16
17
|
|
17
18
|
DataMapper.setup(:default, 'sqlite3::memory:')
|
18
19
|
DataMapper.setup(:ldap, {
|
@@ -20,17 +21,30 @@ DataMapper.setup(:ldap, {
|
|
20
21
|
:host => 'localhost',
|
21
22
|
:port => '389',
|
22
23
|
:base => "dc=example,dc=com",
|
23
|
-
|
24
|
+
:facade => (ENV['FACADE'] || :net_ldap).to_sym,
|
24
25
|
:bind_name => "cn=admin,dc=example,dc=com",
|
25
|
-
:password => "
|
26
|
+
:password => "secret"
|
26
27
|
})
|
27
|
-
DataMapper.setup(:memory, {:adapter => 'memory'})
|
28
28
|
|
29
|
+
module DataMapper
|
30
|
+
module Resource
|
31
|
+
class State
|
32
|
+
|
33
|
+
# a persisted/deleted resource
|
34
|
+
class Deleted < Persisted
|
35
|
+
def set(subject, value)
|
36
|
+
warn 'Deleted resource cannot be modified ' + subject.inspect + ' ' + value.to_s + " " + @resource.inspect
|
37
|
+
super
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
29
43
|
class User
|
30
44
|
include DataMapper::Resource
|
31
45
|
property :id, Serial, :field => "uidnumber"
|
32
46
|
property :login, String, :field => "uid", :unique_index => true
|
33
|
-
property :hashed_password, String, :field => "userpassword", :
|
47
|
+
property :hashed_password, String, :field => "userpassword", :writer => :private
|
34
48
|
property :name, String, :field => "cn"
|
35
49
|
property :mail, String
|
36
50
|
property :age, Integer, :field => "postalcode"
|
@@ -62,7 +76,7 @@ class User
|
|
62
76
|
end
|
63
77
|
groups
|
64
78
|
end
|
65
|
-
|
79
|
+
|
66
80
|
dn_prefix { |user| "uid=#{user.login}"}
|
67
81
|
|
68
82
|
treebase "ou=people"
|
@@ -84,11 +98,11 @@ class Role
|
|
84
98
|
include DataMapper::Resource
|
85
99
|
property :id, Serial, :field => "gidnumber"
|
86
100
|
property :name, String, :field => "cn"
|
87
|
-
|
101
|
+
|
88
102
|
dn_prefix { |role| "cn=#{role.name}" }
|
89
|
-
|
103
|
+
|
90
104
|
treebase "ou=groups"
|
91
|
-
|
105
|
+
|
92
106
|
ldap_properties {{:objectclass => "posixGroup"}}
|
93
107
|
|
94
108
|
belongs_to :user
|
@@ -98,23 +112,23 @@ class Group
|
|
98
112
|
include DataMapper::Resource
|
99
113
|
property :id, Serial, :field => "gidnumber"
|
100
114
|
property :name, String, :field => "cn"
|
101
|
-
|
115
|
+
|
102
116
|
dn_prefix { |group| "cn=#{group.name}" }
|
103
|
-
|
117
|
+
|
104
118
|
treebase "ou=groups"
|
105
|
-
|
119
|
+
|
106
120
|
ldap_properties {{:objectclass => "posixGroup"}}
|
107
121
|
end
|
108
122
|
|
109
123
|
class GroupUser
|
110
124
|
include DataMapper::Resource
|
111
|
-
|
125
|
+
|
112
126
|
dn_prefix { |group_user| "cn=#{group_user.group.name}" }
|
113
|
-
|
127
|
+
|
114
128
|
treebase "ou=groups"
|
115
|
-
|
129
|
+
|
116
130
|
multivalue_field :memberuid
|
117
|
-
|
131
|
+
|
118
132
|
ldap_properties do |group_user|
|
119
133
|
{:cn=>"#{group_user.group.name}", :objectclass => "posixGroup"}
|
120
134
|
end
|
metadata
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-ldap-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 436503056
|
5
|
+
prerelease: true
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
- alpha2
|
11
|
+
version: 0.4.0.alpha2
|
5
12
|
platform: ruby
|
6
13
|
authors:
|
7
14
|
- mkristian
|
@@ -9,49 +16,71 @@ autorequire:
|
|
9
16
|
bindir: bin
|
10
17
|
cert_chain: []
|
11
18
|
|
12
|
-
date:
|
19
|
+
date: 2010-10-19 00:00:00 +05:30
|
13
20
|
default_executable:
|
14
21
|
dependencies:
|
15
22
|
- !ruby/object:Gem::Dependency
|
16
23
|
name: ruby-net-ldap
|
17
|
-
|
18
|
-
|
19
|
-
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
20
27
|
requirements:
|
21
28
|
- - "="
|
22
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 23
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
- 0
|
34
|
+
- 4
|
23
35
|
version: 0.0.4
|
24
|
-
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id001
|
25
38
|
- !ruby/object:Gem::Dependency
|
26
39
|
name: slf4r
|
27
|
-
|
28
|
-
|
29
|
-
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
30
43
|
requirements:
|
31
44
|
- - ">="
|
32
45
|
- !ruby/object:Gem::Version
|
46
|
+
hash: 3
|
47
|
+
segments:
|
48
|
+
- 0
|
33
49
|
version: "0"
|
34
|
-
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
35
52
|
- !ruby/object:Gem::Dependency
|
36
53
|
name: dm-core
|
37
|
-
|
38
|
-
|
39
|
-
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
40
57
|
requirements:
|
41
|
-
- -
|
58
|
+
- - ~>
|
42
59
|
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
60
|
+
hash: 23
|
61
|
+
segments:
|
62
|
+
- 1
|
63
|
+
- 0
|
64
|
+
- 0
|
65
|
+
version: 1.0.0
|
66
|
+
type: :runtime
|
67
|
+
version_requirements: *id003
|
45
68
|
- !ruby/object:Gem::Dependency
|
46
69
|
name: hoe
|
47
|
-
|
48
|
-
|
49
|
-
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
50
73
|
requirements:
|
51
74
|
- - ">="
|
52
75
|
- !ruby/object:Gem::Version
|
76
|
+
hash: 5
|
77
|
+
segments:
|
78
|
+
- 2
|
79
|
+
- 3
|
80
|
+
- 3
|
53
81
|
version: 2.3.3
|
54
|
-
|
82
|
+
type: :development
|
83
|
+
version_requirements: *id004
|
55
84
|
description: ldap adapter for datamapper which uses either net-ldap or ruby-ldap
|
56
85
|
email:
|
57
86
|
- m.kristian@web.de
|
@@ -65,20 +94,23 @@ extra_rdoc_files:
|
|
65
94
|
- README.txt
|
66
95
|
- ldap-commands.txt
|
67
96
|
files:
|
97
|
+
- .project
|
98
|
+
- .yardoc
|
68
99
|
- History.txt
|
69
100
|
- MIT-LICENSE
|
70
101
|
- Manifest.txt
|
71
102
|
- README-example.markdown
|
72
103
|
- README.txt
|
73
104
|
- Rakefile
|
105
|
+
- env.sh
|
74
106
|
- example/identity_map.rb
|
75
107
|
- example/posix.rb
|
76
108
|
- ldap-commands.txt
|
77
109
|
- lib/adapters/ldap_adapter.rb
|
78
|
-
- lib/adapters/
|
79
|
-
- lib/adapters/simple_adapter.rb
|
110
|
+
- lib/adapters/noop_transaction.rb
|
80
111
|
- lib/dummy_ldap_resource.rb
|
81
112
|
- lib/ldap/array.rb
|
113
|
+
- lib/ldap/conditions_2_filter.rb
|
82
114
|
- lib/ldap/digest.rb
|
83
115
|
- lib/ldap/net_ldap_facade.rb
|
84
116
|
- lib/ldap/ruby_ldap_facade.rb
|
@@ -104,21 +136,29 @@ rdoc_options:
|
|
104
136
|
require_paths:
|
105
137
|
- lib
|
106
138
|
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
107
140
|
requirements:
|
108
141
|
- - ">="
|
109
142
|
- !ruby/object:Gem::Version
|
143
|
+
hash: 3
|
144
|
+
segments:
|
145
|
+
- 0
|
110
146
|
version: "0"
|
111
|
-
version:
|
112
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
none: false
|
113
149
|
requirements:
|
114
|
-
- - "
|
150
|
+
- - ">"
|
115
151
|
- !ruby/object:Gem::Version
|
116
|
-
|
117
|
-
|
152
|
+
hash: 25
|
153
|
+
segments:
|
154
|
+
- 1
|
155
|
+
- 3
|
156
|
+
- 1
|
157
|
+
version: 1.3.1
|
118
158
|
requirements: []
|
119
159
|
|
120
160
|
rubyforge_project: dm-ldap-adapter
|
121
|
-
rubygems_version: 1.3.
|
161
|
+
rubygems_version: 1.3.7
|
122
162
|
signing_key:
|
123
163
|
specification_version: 3
|
124
164
|
summary: ""
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require "dm-core"
|
2
|
-
require 'adapters/simple_adapter'
|
3
|
-
|
4
|
-
# this and the SimpleAdapter is basically the
|
5
|
-
# dm-core/adapter/in_memory_adapter.rb most credits go dm-core.
|
6
|
-
# there are few bug fixes and enhancements.
|
7
|
-
module DataMapper
|
8
|
-
module Adapters
|
9
|
-
class MemoryAdapter < SimpleAdapter
|
10
|
-
|
11
|
-
public
|
12
|
-
|
13
|
-
# @see SimpleAdapter
|
14
|
-
def initialize(name, uri_or_options)
|
15
|
-
super
|
16
|
-
|
17
|
-
@records = Hash.new { |hash,model| hash[model] = Array.new }
|
18
|
-
@ids = Hash.new { |hash,model| hash[model] = 0 }
|
19
|
-
end
|
20
|
-
|
21
|
-
# @see SimpleAdapter
|
22
|
-
def create_resource(resource)
|
23
|
-
uniques = resource.model.properties.select do |prop|
|
24
|
-
prop if prop.unique_index
|
25
|
-
end
|
26
|
-
uniques.each do |prop|
|
27
|
-
raise PersistentError.new "#{prop.name} = #{prop.get(resource)} already exists" unless resource.model.first( prop.name => prop.get(resource) ).nil?
|
28
|
-
end
|
29
|
-
@records[resource.model] << resource
|
30
|
-
resource.id = (@ids[resource.model] += 1) if resource.key.size == 1
|
31
|
-
# and resource.key[0].serial?
|
32
|
-
resource
|
33
|
-
end
|
34
|
-
|
35
|
-
# @see SimpleAdapter
|
36
|
-
def update_resource(resource, attributes)
|
37
|
-
attributes.each do |property, value|
|
38
|
-
property.set!(resource, value)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
# @see SimpleAdapter
|
43
|
-
def delete_resource(resource)
|
44
|
-
records = @records[resource.model]
|
45
|
-
records.delete(resource)
|
46
|
-
end
|
47
|
-
|
48
|
-
# @see SimpleAdapter
|
49
|
-
def read_resource(query)
|
50
|
-
read(query, false)
|
51
|
-
end
|
52
|
-
|
53
|
-
# @see SimpleAdapter
|
54
|
-
def read_resources(query)
|
55
|
-
read(query, true)
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
# helper to read either one or many resources matching the given query
|
61
|
-
def read(query, many)
|
62
|
-
model = query.model
|
63
|
-
conditions = query.conditions
|
64
|
-
|
65
|
-
match_with = many ? :select : :detect
|
66
|
-
|
67
|
-
result = @records[model].send(match_with) do |resource|
|
68
|
-
filter_resource(resource, conditions)
|
69
|
-
end
|
70
|
-
|
71
|
-
# TODO Sort
|
72
|
-
|
73
|
-
# TODO Limit
|
74
|
-
|
75
|
-
return result
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
@@ -1,198 +0,0 @@
|
|
1
|
-
require "dm-core"
|
2
|
-
require 'slf4r'
|
3
|
-
|
4
|
-
module DataMapper
|
5
|
-
module Adapters
|
6
|
-
class NoopTransaction
|
7
|
-
|
8
|
-
def close ; end
|
9
|
-
def begin ; end
|
10
|
-
def prepare ; end
|
11
|
-
def commit ; end
|
12
|
-
def rollback ; end
|
13
|
-
def rollback_prepared ; end
|
14
|
-
|
15
|
-
end
|
16
|
-
class SimpleAdapter < AbstractAdapter
|
17
|
-
|
18
|
-
include Slf4r::Logger
|
19
|
-
|
20
|
-
# @see AbstractAdapter
|
21
|
-
def transaction_primitive
|
22
|
-
NoopTransaction.new
|
23
|
-
end
|
24
|
-
|
25
|
-
def initialize(name, uri_or_options)
|
26
|
-
super(name, uri_or_options)
|
27
|
-
end
|
28
|
-
|
29
|
-
protected
|
30
|
-
|
31
|
-
# checks whether a given resource fullfils the conditions
|
32
|
-
# @param [DataMapper::Resource] resource
|
33
|
-
# @param [Array<Condition>] conditions
|
34
|
-
# @return [Boolean]
|
35
|
-
# true if the resource are within the conditions otherwise false
|
36
|
-
def filter_resource(resource, conditions)
|
37
|
-
#puts "condi"
|
38
|
-
#p conditions
|
39
|
-
# no conditation => no filter
|
40
|
-
if conditions.size == 0
|
41
|
-
true
|
42
|
-
else
|
43
|
-
conditions.all? do |tuple|
|
44
|
-
operator, property, bind_value = *tuple
|
45
|
-
|
46
|
-
value = property.get!(resource)
|
47
|
-
case operator
|
48
|
-
when :eql, :in then equality_comparison(bind_value, value)
|
49
|
-
when :not then !equality_comparison(bind_value, value)
|
50
|
-
when :like then Regexp.new(bind_value.gsub(/%/, ".*")) =~ value
|
51
|
-
when :gt then !value.nil? && value > bind_value
|
52
|
-
when :gte then !value.nil? && value >= bind_value
|
53
|
-
when :lt then !value.nil? && value < bind_value
|
54
|
-
when :lte then !value.nil? && value <= bind_value
|
55
|
-
else raise "Invalid query operator: #{operator.inspect}"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
# helper method to dispatch the equality test for different
|
62
|
-
# classes
|
63
|
-
def equality_comparison(bind_value, value)
|
64
|
-
case bind_value
|
65
|
-
when Array, Range then bind_value.include?(value)
|
66
|
-
when NilClass then value.nil?
|
67
|
-
else bind_value == value
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
public
|
72
|
-
|
73
|
-
# @see AbstractAdapter
|
74
|
-
# @param [Array<DataMapper::Resources>] resources
|
75
|
-
# aaaa
|
76
|
-
# @return [Fixnum]
|
77
|
-
# number of the newly created resources
|
78
|
-
def create(resources)
|
79
|
-
resources.select do |resource|
|
80
|
-
|
81
|
-
create_resource(resource)
|
82
|
-
|
83
|
-
end.size # just return the number of create resources
|
84
|
-
end
|
85
|
-
|
86
|
-
# @see AbstractAdapter
|
87
|
-
# @param [Hash] attributes
|
88
|
-
# collection of attribute, i.e. the name/value pairs which
|
89
|
-
# needs to be updated
|
90
|
-
# @param [Query]
|
91
|
-
# on all resources which are selected by that query the
|
92
|
-
# update will be applied
|
93
|
-
# @return [Fixnum]
|
94
|
-
# number of the updated resources
|
95
|
-
def update(attributes, query)
|
96
|
-
read_many(query).select do |resource|
|
97
|
-
|
98
|
-
update_resource(resource, attributes)
|
99
|
-
|
100
|
-
end.size
|
101
|
-
end
|
102
|
-
|
103
|
-
# @see AbstractAdapter
|
104
|
-
# @param [DataMapper::Query] query
|
105
|
-
# which selects the resource
|
106
|
-
# @return [DataMapper::Resource]
|
107
|
-
# the found Resource or nil
|
108
|
-
def read_one(query)
|
109
|
-
result = read_resource(query)
|
110
|
-
if result.is_a? Resource
|
111
|
-
result
|
112
|
-
elsif result # assume result to be Array with the values
|
113
|
-
#puts "------------------"
|
114
|
-
#p result
|
115
|
-
query.model.load(result, query)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
# @see AbstractAdapter
|
120
|
-
# @param [DataMapper::Query] query
|
121
|
-
# which selects the resources
|
122
|
-
# @return [DataMapper::Collection]
|
123
|
-
# collection of Resources
|
124
|
-
def read_many(query)
|
125
|
-
Collection.new(query) do |set|
|
126
|
-
result = read_resources(query)
|
127
|
-
#puts "read_many"
|
128
|
-
#p result
|
129
|
-
if result.size > 0 and result.first.is_a? Resource
|
130
|
-
set.replace(result)
|
131
|
-
else
|
132
|
-
result.each do |values|
|
133
|
-
set.load(values)
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
# @see AbstractAdapter
|
140
|
-
# @param [Query] query
|
141
|
-
# which selects the resources to be deleted
|
142
|
-
# @return [Fixnum]
|
143
|
-
# number of the deleted resources
|
144
|
-
def delete(query)
|
145
|
-
read_many(query).each do |resource|
|
146
|
-
|
147
|
-
delete_resource(resource)
|
148
|
-
|
149
|
-
end.size
|
150
|
-
end
|
151
|
-
|
152
|
-
private
|
153
|
-
|
154
|
-
# @param [DataMapper::Resource] resource
|
155
|
-
# which will be created
|
156
|
-
# @return [DataMapper::Resource]
|
157
|
-
# either the resource itself if the creation was successful or nil
|
158
|
-
def create_resource(resource)
|
159
|
-
raise NotImplementedError.new
|
160
|
-
end
|
161
|
-
|
162
|
-
# @param [DataMapper::Query] query
|
163
|
-
# which selects the resource
|
164
|
-
# @return [DataMapper::Resource,Array<String>]
|
165
|
-
# the resource or a set of values ordered in the same manner as query.fields attributes
|
166
|
-
def read_resource(query)
|
167
|
-
raise NotImplementedError.new
|
168
|
-
end
|
169
|
-
|
170
|
-
# @param [DataMapper::Query] query
|
171
|
-
# which selects the resources
|
172
|
-
# @return [Array<DataMapper::Resource>,Array<String>]
|
173
|
-
# resources or ordered values
|
174
|
-
# @see #read_resource
|
175
|
-
def read_resources(query)
|
176
|
-
raise NotImplementedError.new
|
177
|
-
end
|
178
|
-
|
179
|
-
# @param [DataMapper::Resource] resource
|
180
|
-
# which will be updated with the given attributes.
|
181
|
-
# @param [Hash] attributes
|
182
|
-
# the keys are the property names and the values are the new values of that property.
|
183
|
-
# @return [DataMapper::Resource]
|
184
|
-
# resource on success otherwise nil
|
185
|
-
def update_resource(resource, attributes)
|
186
|
-
raise NotImplementedError.new
|
187
|
-
end
|
188
|
-
|
189
|
-
# @param [DataMapper::Resource] resource
|
190
|
-
# which will be deleted
|
191
|
-
# @return [DataMapper::Resource]
|
192
|
-
# either the resource if the deletion was successful or nil
|
193
|
-
def delete_resource(resource)
|
194
|
-
raise NotImplementedError.new
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|