sdb_dal 0.0.9 → 0.0.11
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/lib/sdb_dal/configuration.rb +114 -0
- data/lib/sdb_dal/crypto.rb +22 -15
- data/lib/sdb_dal/domain_attribute_description.rb +6 -1
- data/lib/sdb_dal/domain_object.rb +26 -2
- data/lib/sdb_dal/index_description.rb +0 -5
- data/lib/sdb_dal/repository_factory.rb +38 -76
- data/lib/sdb_dal/s3.rb +33 -45
- data/lib/sdb_dal.rb +10 -10
- metadata +3 -2
@@ -0,0 +1,114 @@
|
|
1
|
+
require "openssl"
|
2
|
+
|
3
|
+
|
4
|
+
module SdbDal
|
5
|
+
class Configuration
|
6
|
+
include OpenSSL
|
7
|
+
|
8
|
+
include OpenSSL::Cipher
|
9
|
+
|
10
|
+
attr_reader :repository_class
|
11
|
+
attr_reader :domain_prefix
|
12
|
+
attr_reader :clob_bucket
|
13
|
+
attr_reader :aws_key_id
|
14
|
+
attr_reader :aws_secret_key
|
15
|
+
attr_reader :memcache_servers
|
16
|
+
attr_reader :append_table_to_domain
|
17
|
+
attr_reader :fail_fast
|
18
|
+
|
19
|
+
attr_reader :cipher_key_file
|
20
|
+
attr_reader :cipher_iv_file
|
21
|
+
|
22
|
+
def self.singleton
|
23
|
+
@singleton ||= SdbDal::Configuration.new
|
24
|
+
return @singleton
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize()
|
28
|
+
sdb_dal_config=find_config_section
|
29
|
+
|
30
|
+
if sdb_dal_config
|
31
|
+
if sdb_dal_config.has_key?("repository_class")
|
32
|
+
@repository_class=eval sdb_dal_config["repository_class"]
|
33
|
+
else
|
34
|
+
@repository_class=SdbDal::Repository
|
35
|
+
end
|
36
|
+
@domain_prefix= sdb_dal_config["sdb_domain_prefix"] || ""
|
37
|
+
@clob_bucket= sdb_dal_config["s3_clob_bucket"]
|
38
|
+
@aws_key_id = sdb_dal_config["aws_key_id"]
|
39
|
+
@aws_secret_key = sdb_dal_config["aws_secret_key"]
|
40
|
+
@memcache_servers= sdb_dal_config['memcache_servers']
|
41
|
+
@memcache_servers = memcache_servers.split(",") if memcache_servers
|
42
|
+
|
43
|
+
@append_table_to_domain=sdb_dal_config['append_table_to_domain']
|
44
|
+
@fail_fast=sdb_dal_config['fail_fast']
|
45
|
+
|
46
|
+
@cipher_key_file = sdb_dal_config['cipher_key_file']
|
47
|
+
@cipher_key_file ||= "./.cipher_key"
|
48
|
+
if @cipher_key_file and File.exists?(@cipher_key_file)
|
49
|
+
@cipher_key=File.open(@cipher_key_file).read
|
50
|
+
end
|
51
|
+
|
52
|
+
@cipher_iv_file ||= "./cipher_iv"
|
53
|
+
@cipher_iv_file=sdb_dal_config['cipher_iv_file']
|
54
|
+
if @cipher_iv_file and File.exists?(@cipher_iv_file)
|
55
|
+
@cipher_iv=File.open(@cipher_iv_file).read
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def cipher_key
|
62
|
+
unless @cipher_key
|
63
|
+
@cipher = Cipher.new("AES-256-CBC")
|
64
|
+
|
65
|
+
@cipher_key = @cipher.random_key()
|
66
|
+
File.open(self.cipher_key_file,'w').write(@cipher_key)
|
67
|
+
end
|
68
|
+
return @cipher_key
|
69
|
+
end
|
70
|
+
|
71
|
+
def cipher_iv
|
72
|
+
unless @cipher_iv
|
73
|
+
@cipher = Cipher.new("AES-256-CBC")
|
74
|
+
|
75
|
+
@cipher_iv = @cipher.random_iv()
|
76
|
+
File.open(self.cipher_iv_file,'w').write(@cipher_iv)
|
77
|
+
end
|
78
|
+
return @cipher_iv
|
79
|
+
end
|
80
|
+
|
81
|
+
def find_config_section
|
82
|
+
return $sdb_dal_config if $sdb_dal_config
|
83
|
+
config_file_path=nil
|
84
|
+
config_section=nil
|
85
|
+
|
86
|
+
#when using rails use config/database.yml
|
87
|
+
if Object.const_defined?(:RAILS_ROOT) and ENV.has_key?('RAILS_ENV')
|
88
|
+
config_file_path = File.join("#{RAILS_ROOT}","config","database.yml")
|
89
|
+
|
90
|
+
config_section =ENV['RAILS_ENV']+"_sdb_dal"
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
else
|
95
|
+
#when not using rails use try database.yml then try config/database.yml
|
96
|
+
|
97
|
+
if File.exists?("database.yml")
|
98
|
+
|
99
|
+
config_file_path = "database.yml"
|
100
|
+
elsif File.exists?(File.join("config", "database.yml"))
|
101
|
+
config_file_path = File.join("config", "database.yml")
|
102
|
+
end
|
103
|
+
|
104
|
+
config_section =(ENV['SDB_DAL_ENV'] || "production")+"_sdb_dal"
|
105
|
+
end
|
106
|
+
if config_file_path and config_section
|
107
|
+
config_file = YAML.load(File.open( config_file_path))
|
108
|
+
|
109
|
+
$sdb_dal_config = config_file[config_section]
|
110
|
+
end
|
111
|
+
return $sdb_dal_config
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
data/lib/sdb_dal/crypto.rb
CHANGED
@@ -1,29 +1,36 @@
|
|
1
1
|
require "openssl"
|
2
|
-
include OpenSSL
|
3
2
|
|
4
3
|
module SdbDal
|
5
4
|
class Crypto
|
5
|
+
include OpenSSL
|
6
|
+
|
6
7
|
include OpenSSL::Cipher
|
7
8
|
def initialize(options={})
|
8
|
-
key_dir=options[:key_dir] if options.has_key?(:key_dir)
|
9
|
-
key_dir ||="/tmp"
|
10
9
|
@cipher = Cipher.new("AES-256-CBC")
|
11
10
|
|
12
|
-
if
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
@key=options[:cipher_key] if options.has_key?(:cipher_key)
|
12
|
+
@iv=options[:cipher_iv] if options.has_key?(:cipher_iv)
|
13
|
+
|
14
|
+
unless @key
|
15
|
+
key_dir=options[:key_dir] if options.has_key?(:key_dir)
|
16
|
+
key_dir ||="/tmp"
|
17
|
+
|
18
|
+
if File.exists?(key_dir+'/.cipher_key')
|
19
|
+
@key=File.open(key_dir+'/.cipher_key').read
|
20
|
+
else
|
21
|
+
@key = @cipher.random_key()
|
22
|
+
File.open(key_dir+"/.cipher_key",'w').write(@key)
|
23
|
+
end
|
17
24
|
end
|
18
25
|
|
19
26
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
+
unless @iv
|
28
|
+
if File.exists?(key_dir+'/.cipher_iv')
|
29
|
+
@iv=File.open(key_dir+'/.cipher_iv').read
|
30
|
+
else
|
31
|
+
@iv = @cipher.random_iv()
|
32
|
+
File.open(key_dir+"/.cipher_iv",'w').write(@iv)
|
33
|
+
end
|
27
34
|
end
|
28
35
|
end
|
29
36
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module SdbDal
|
2
2
|
require File.dirname(__FILE__) +'/sdb_formatter.rb'
|
3
|
+
require File.dirname(__FILE__) +'/crypto.rb'
|
4
|
+
require File.dirname(__FILE__) +'/configuration.rb'
|
3
5
|
class DomainAttributeDescription
|
4
6
|
include SdbFormatter
|
5
7
|
attr_accessor :name
|
@@ -9,7 +11,10 @@ class DomainAttributeDescription
|
|
9
11
|
attr_accessor :is_encrypted
|
10
12
|
|
11
13
|
def self.crypto
|
12
|
-
@@crypto||=Crypto.new
|
14
|
+
@@crypto||=Crypto.new(
|
15
|
+
:cipher_key => Configuration.singleton.cipher_key,
|
16
|
+
:cipher_iv => Configuration.singleton.cipher_iv
|
17
|
+
)
|
13
18
|
@@crypto
|
14
19
|
end
|
15
20
|
|
@@ -5,7 +5,6 @@ require File.dirname(__FILE__) +"/reference.rb"
|
|
5
5
|
require File.dirname(__FILE__) +"/index_description.rb"
|
6
6
|
require File.dirname(__FILE__) +"/lazy_loading_text.rb"
|
7
7
|
require File.dirname(__FILE__) +"/repository_factory.rb"
|
8
|
-
require File.dirname(__FILE__) +"/crypto.rb"
|
9
8
|
module SdbDal
|
10
9
|
class DomainObject
|
11
10
|
@@is_encrypted=false
|
@@ -259,6 +258,31 @@ module SdbDal
|
|
259
258
|
find(#{scope},options)
|
260
259
|
end
|
261
260
|
GETTERDONE
|
261
|
+
|
262
|
+
if options.has_key?(:enum)
|
263
|
+
attribute_name=attribute_description.name.to_s
|
264
|
+
x=""
|
265
|
+
enum_val=1
|
266
|
+
options[:enum].each { |enum|
|
267
|
+
x<<"#{enum.to_s.upcase} = #{enum_val}\n"
|
268
|
+
enum_val+=1
|
269
|
+
class_eval <<-GETTERDONE
|
270
|
+
def is_#{attribute_name}_#{enum.to_s.downcase}?
|
271
|
+
#{attribute_name} == #{attribute_name.capitalize}::#{enum.to_s.upcase}
|
272
|
+
end
|
273
|
+
GETTERDONE
|
274
|
+
|
275
|
+
}
|
276
|
+
class_eval <<-GETTERDONE
|
277
|
+
class #{attribute_name.capitalize}
|
278
|
+
#{x}
|
279
|
+
end
|
280
|
+
GETTERDONE
|
281
|
+
|
282
|
+
|
283
|
+
end
|
284
|
+
|
285
|
+
|
262
286
|
end
|
263
287
|
|
264
288
|
def self.belongs_to(domain_class,foreign_key_attribute=nil,accesser_attribute_name=nil,options={})
|
@@ -310,7 +334,7 @@ module SdbDal
|
|
310
334
|
GETTERDONE
|
311
335
|
index("#{foreign_key_attribute}_index".to_sym,[foreign_key_attribute])
|
312
336
|
end
|
313
|
-
|
337
|
+
|
314
338
|
end
|
315
339
|
def self.many_to_many(domain_class,
|
316
340
|
through_class,
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "sdb_dal/repository.rb"
|
2
|
+
require "sdb_dal/configuration.rb"
|
2
3
|
require "sdb_dal/memory_repository.rb"
|
3
4
|
|
4
5
|
module SdbDal
|
@@ -8,98 +9,59 @@ module SdbDal
|
|
8
9
|
$sdb_dal_config=nil
|
9
10
|
$repository=nil
|
10
11
|
end
|
12
|
+
|
11
13
|
def self.instance=(repo)
|
12
14
|
@repository=repo
|
13
|
-
end
|
15
|
+
end
|
16
|
+
|
14
17
|
def self.instance(options={})
|
18
|
+
|
15
19
|
if options and options.has_key?(:repository)
|
16
20
|
return options[:repository]
|
17
21
|
end
|
18
|
-
if @repository
|
19
|
-
return @repository
|
20
|
-
end
|
21
|
-
|
22
|
-
sdb_dal_config=find_config_section
|
23
22
|
|
24
|
-
if
|
25
|
-
if sdb_dal_config.has_key?("repository_class")
|
26
|
-
repo_class=eval sdb_dal_config["repository_class"]
|
27
|
-
else
|
28
|
-
repo_class=SdbDal::Repository
|
29
|
-
end
|
30
|
-
domain_prefix= sdb_dal_config["sdb_domain_prefix"] || ""
|
31
|
-
clob_bucket= sdb_dal_config["s3_clob_bucket"]
|
32
|
-
aws_key_id = sdb_dal_config["aws_key_id"]
|
33
|
-
aws_secret_key = sdb_dal_config["aws_secret_key"]
|
34
|
-
memcache_servers= sdb_dal_config['memcache_servers']
|
35
|
-
memcache_servers = memcache_servers.split(",") if memcache_servers
|
23
|
+
return @repository if @repository
|
36
24
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
25
|
+
config=SdbDal::Configuration.singleton
|
26
|
+
|
27
|
+
options[:fail_fast]=config.fail_fast
|
28
|
+
@repository= config.repository_class.new(
|
29
|
+
config.domain_prefix,
|
30
|
+
config.clob_bucket,
|
31
|
+
config.aws_key_id,
|
32
|
+
config.aws_secret_key,
|
33
|
+
config.memcache_servers,
|
34
|
+
nil,
|
35
|
+
config.append_table_to_domain,
|
36
|
+
options)
|
37
|
+
|
44
38
|
end
|
45
39
|
|
46
40
|
|
47
41
|
|
48
|
-
def self.find_config_section
|
49
|
-
return $sdb_dal_config if $sdb_dal_config
|
50
|
-
config_file_path=nil
|
51
|
-
config_section=nil
|
52
|
-
|
53
|
-
#when using rails use config/database.yml
|
54
|
-
if const_defined?(:RAILS_ROOT) and ENV.has_key?('RAILS_ENV')
|
55
|
-
config_file_path = File.join("#{RAILS_ROOT}","config","database.yml")
|
56
|
-
|
57
|
-
config_section =ENV['RAILS_ENV']+"_sdb_dal"
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
else
|
62
|
-
#when not using rails use try database.yml then try config/database.yml
|
63
|
-
|
64
|
-
if File.exists?("database.yml")
|
65
|
-
|
66
|
-
config_file_path = "database.yml"
|
67
|
-
elsif File.exists?(File.join("config", "database.yml"))
|
68
|
-
config_file_path = File.join("config", "database.yml")
|
69
|
-
end
|
70
|
-
|
71
|
-
config_section =(ENV['SDB_DAL_ENV'] || "production")+"_sdb_dal"
|
72
|
-
end
|
73
|
-
if config_file_path and config_section
|
74
|
-
config_file = YAML.load(File.open( config_file_path))
|
75
|
-
|
76
|
-
$sdb_dal_config = config_file[config_section]
|
77
|
-
end
|
78
|
-
return $sdb_dal_config
|
79
|
-
end
|
80
42
|
def self.set_repository(repository)
|
81
43
|
@repository=repository
|
82
44
|
end
|
83
45
|
|
84
46
|
end
|
85
|
-
def self.qualified_const_get(str)
|
86
|
-
path = str.to_s.split('::')
|
87
|
-
from_root = path[0].empty?
|
88
|
-
if from_root
|
89
|
-
from_root = []
|
90
|
-
path = path[1..-1]
|
91
|
-
else
|
92
|
-
start_ns = ((Class === self)||(Module === self)) ? self : self.class
|
93
|
-
from_root = start_ns.to_s.split('::')
|
94
|
-
end
|
95
|
-
until from_root.empty?
|
96
|
-
begin
|
97
|
-
return (from_root+path).inject(Object) { |ns,name| ns.const_get(name) }
|
98
|
-
rescue NameError
|
99
|
-
from_root.delete_at(-1)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
path.inject(Object) { |ns,name| ns.const_get(name) }
|
103
|
-
end
|
47
|
+
# def self.qualified_const_get(str)
|
48
|
+
# path = str.to_s.split('::')
|
49
|
+
# from_root = path[0].empty?
|
50
|
+
# if from_root
|
51
|
+
# from_root = []
|
52
|
+
# path = path[1..-1]
|
53
|
+
# else
|
54
|
+
# start_ns = ((Class === self)||(Module === self)) ? self : self.class
|
55
|
+
# from_root = start_ns.to_s.split('::')
|
56
|
+
# end
|
57
|
+
# until from_root.empty?
|
58
|
+
# begin
|
59
|
+
# return (from_root+path).inject(Object) { |ns,name| ns.const_get(name) }
|
60
|
+
# rescue NameError
|
61
|
+
# from_root.delete_at(-1)
|
62
|
+
# end
|
63
|
+
# end
|
64
|
+
# path.inject(Object) { |ns,name| ns.const_get(name) }
|
65
|
+
# end
|
104
66
|
end
|
105
67
|
|
data/lib/sdb_dal/s3.rb
CHANGED
@@ -40,7 +40,7 @@ module S3
|
|
40
40
|
METADATA_PREFIX = 'x-amz-meta-'
|
41
41
|
AMAZON_HEADER_PREFIX = 'x-amz-'
|
42
42
|
AMAZON_TOKEN_HEADER_PREFIX = "x-amz-security-token"
|
43
|
-
|
43
|
+
|
44
44
|
# builds the canonical string for signing.
|
45
45
|
def S3.canonical_string(method, bucket="", path="", path_args={}, headers={}, expires=nil)
|
46
46
|
interesting_headers = {}
|
@@ -86,13 +86,14 @@ module S3
|
|
86
86
|
# append a slash regardless
|
87
87
|
buf << "/#{path}"
|
88
88
|
|
89
|
-
# if there is an acl, logging,
|
89
|
+
# if there is an acl, logging, or torrent parameter
|
90
90
|
# add them to the string
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
91
|
+
if path_args.has_key?('acl')
|
92
|
+
buf << '?acl'
|
93
|
+
elsif path_args.has_key?('torrent')
|
94
|
+
buf << '?torrent'
|
95
|
+
elsif path_args.has_key?('logging')
|
96
|
+
buf << '?logging'
|
96
97
|
end
|
97
98
|
|
98
99
|
return buf
|
@@ -143,7 +144,7 @@ module S3
|
|
143
144
|
is_secure=true,
|
144
145
|
server=DEFAULT_HOST,
|
145
146
|
port=PORTS_BY_SECURITY[is_secure],
|
146
|
-
calling_format=CallingFormat::
|
147
|
+
calling_format=CallingFormat::SUBDOMAIN)
|
147
148
|
@aws_access_key_id = aws_access_key_id
|
148
149
|
@aws_secret_access_key = aws_secret_access_key
|
149
150
|
@server = server
|
@@ -181,6 +182,26 @@ module S3
|
|
181
182
|
make_request('PUT', bucket, CGI::escape(key), {}, headers, object.data, object.metadata)
|
182
183
|
)
|
183
184
|
end
|
185
|
+
def copy(source_bucket, source_key, destination_bucket,destination_key, headers={})
|
186
|
+
headers['x-amz-copy-source']="#{source_bucket}/#{source_key}"
|
187
|
+
headers['x-amz-metadata-directive']="REPLACE "
|
188
|
+
return GetResponse.new(make_request('PUT', destination_bucket, CGI::escape(destination_key),{}, headers))
|
189
|
+
end
|
190
|
+
|
191
|
+
def get_head(bucket, key, headers={})
|
192
|
+
return GetResponse.new(make_request('HEAD',bucket, CGI::escape(key),{}, headers))
|
193
|
+
end
|
194
|
+
def get_content_type(bucket, key, headers={})
|
195
|
+
response= get_head(bucket, key, headers)
|
196
|
+
if response.http_response.code=='404'
|
197
|
+
return nil
|
198
|
+
|
199
|
+
elsif response.http_response.code=='200'
|
200
|
+
return response.http_response.header.content_type
|
201
|
+
end
|
202
|
+
raise response.http_response.code
|
203
|
+
end
|
204
|
+
|
184
205
|
|
185
206
|
def get(bucket, key, headers={})
|
186
207
|
return GetResponse.new(make_request('GET', bucket, CGI::escape(key), {}, headers))
|
@@ -220,39 +241,6 @@ module S3
|
|
220
241
|
)
|
221
242
|
end
|
222
243
|
|
223
|
-
|
224
|
-
#payer may be RequestPayer::REQUESTER or RequestPayer::BUCKET_OWNER
|
225
|
-
def put_bucket_request_payment( bucket, payer=RequestPayer::REQUESTER, headers={})
|
226
|
-
|
227
|
-
body = "<RequestPaymentConfiguration xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\"><Payer>#{payer}</Payer></RequestPaymentConfiguration>"
|
228
|
-
|
229
|
-
result= make_request(
|
230
|
-
'PUT',
|
231
|
-
bucket,
|
232
|
-
'',
|
233
|
-
{'requestPayment' => nil },
|
234
|
-
headers,
|
235
|
-
body,
|
236
|
-
{} )
|
237
|
-
return GetResponse.new(result)
|
238
|
-
|
239
|
-
end
|
240
|
-
|
241
|
-
def get_bucket_request_payment( bucket, headers={})
|
242
|
-
|
243
|
-
result= make_request(
|
244
|
-
'GET',
|
245
|
-
bucket,
|
246
|
-
'',
|
247
|
-
{'requestPayment' => nil },
|
248
|
-
headers,
|
249
|
-
'',
|
250
|
-
{} )
|
251
|
-
return GetResponse.new(result)
|
252
|
-
|
253
|
-
end
|
254
|
-
|
255
|
-
|
256
244
|
def list_all_my_buckets(headers={})
|
257
245
|
return ListAllMyBucketsResponse.new(make_request('GET', '', '', {}, headers))
|
258
246
|
end
|
@@ -306,6 +294,7 @@ module S3
|
|
306
294
|
return http.request(req)
|
307
295
|
end
|
308
296
|
end
|
297
|
+
|
309
298
|
end
|
310
299
|
|
311
300
|
def method_to_request_class(method)
|
@@ -316,6 +305,8 @@ module S3
|
|
316
305
|
return Net::HTTP::Put
|
317
306
|
when 'DELETE'
|
318
307
|
return Net::HTTP::Delete
|
308
|
+
when 'HEAD'
|
309
|
+
return Net::HTTP::Head
|
319
310
|
else
|
320
311
|
raise "Unsupported method #{method}"
|
321
312
|
end
|
@@ -356,10 +347,6 @@ module S3
|
|
356
347
|
end
|
357
348
|
end
|
358
349
|
|
359
|
-
module RequestPayer
|
360
|
-
REQUESTER="Requester"
|
361
|
-
BUCKET_OWNER="BucketOwner"
|
362
|
-
end
|
363
350
|
# class for storing calling format constants
|
364
351
|
module CallingFormat
|
365
352
|
REGULAR = 0 # http://s3.amazonaws.com/bucket/key
|
@@ -435,6 +422,7 @@ module S3
|
|
435
422
|
|
436
423
|
# we have one, add him to the entries list
|
437
424
|
def tag_end(name)
|
425
|
+
# this prefix is the one we echo back from the request
|
438
426
|
# this prefix is the one we echo back from the request
|
439
427
|
if name == 'Name'
|
440
428
|
@properties.name = @curr_text
|
data/lib/sdb_dal.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require "sdb_dal/repository.rb"
|
2
|
-
require "sdb_dal/repository_factory.rb"
|
3
|
-
require "sdb_dal/acts_as_sdb_application.rb"
|
4
|
-
require "sdb_dal/memory_repository.rb"
|
5
|
-
require "sdb_dal/domain_object.rb"
|
6
|
-
require "sdb_dal/storage.rb"
|
7
|
-
require "sdb_dal/s3.rb"
|
8
|
-
require "sdb_dal/attribute_range.rb"
|
9
|
-
require "sdb_dal/and_condition.rb"
|
10
|
-
require "sdb_dal/or_condition.rb"
|
1
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/repository.rb"
|
2
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/repository_factory.rb"
|
3
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/acts_as_sdb_application.rb"
|
4
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/memory_repository.rb"
|
5
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/domain_object.rb"
|
6
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/storage.rb"
|
7
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/s3.rb"
|
8
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/attribute_range.rb"
|
9
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/and_condition.rb"
|
10
|
+
require "#{File.dirname(__FILE__)}/sdb_dal/or_condition.rb"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sdb_dal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Knight
|
@@ -9,7 +9,7 @@ autorequire: sdb_dal
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-02-
|
12
|
+
date: 2009-02-10 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- ./lib/sdb_dal/acts_as_sdb_application.rb
|
27
27
|
- ./lib/sdb_dal/and_condition.rb
|
28
28
|
- ./lib/sdb_dal/attribute_range.rb
|
29
|
+
- ./lib/sdb_dal/configuration.rb
|
29
30
|
- ./lib/sdb_dal/crypto.rb
|
30
31
|
- ./lib/sdb_dal/domain_attribute_description.rb
|
31
32
|
- ./lib/sdb_dal/domain_object.rb
|