dm-persevere-adapter 0.48.2 → 0.50.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/persevere.rb +1 -1
- data/lib/persevere_adapter.rb +45 -4
- data/spec/persevere_adapter_spec.rb +8 -1
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.50.0
|
data/lib/persevere.rb
CHANGED
data/lib/persevere_adapter.rb
CHANGED
@@ -191,7 +191,7 @@ module DataMapper
|
|
191
191
|
extend Chainable
|
192
192
|
extend Deprecate
|
193
193
|
|
194
|
-
RESERVED_CLASSNAMES = ['User','Transaction','Capability','File','Class', 'Object']
|
194
|
+
RESERVED_CLASSNAMES = ['User','Transaction','Capability','File','Class', 'Object', 'Versioned']
|
195
195
|
|
196
196
|
include Migrations::PersevereAdapter
|
197
197
|
|
@@ -477,6 +477,7 @@ module DataMapper
|
|
477
477
|
end
|
478
478
|
end
|
479
479
|
schema_hash['properties'].delete('id') if schema_hash['properties'].has_key?('id')
|
480
|
+
schema_hash['extends'] = { "$ref" => "/Class/Versioned" } if @options[:versioned]
|
480
481
|
result = @persevere.create(path, schema_hash)
|
481
482
|
if result.code == '201'
|
482
483
|
return JSON.parse(result.body)
|
@@ -555,7 +556,7 @@ module DataMapper
|
|
555
556
|
uri_or_options.each do |k,v|
|
556
557
|
@options[k.to_sym] = v
|
557
558
|
end
|
558
|
-
|
559
|
+
|
559
560
|
@options[:scheme] = @options[:adapter]
|
560
561
|
@options.delete(:scheme)
|
561
562
|
|
@@ -567,7 +568,7 @@ module DataMapper
|
|
567
568
|
|
568
569
|
connect
|
569
570
|
end
|
570
|
-
|
571
|
+
|
571
572
|
def connect
|
572
573
|
if ! @prepped
|
573
574
|
uri = URI::HTTP.build(@options).to_s
|
@@ -592,8 +593,48 @@ module DataMapper
|
|
592
593
|
else
|
593
594
|
puts "Error retrieving existing tables: ", result
|
594
595
|
end
|
596
|
+
|
597
|
+
#
|
598
|
+
# If the user specified a versioned datastore load the versioning REST code
|
599
|
+
#
|
600
|
+
if ! @classes.include?("Versioned") && @options[:versioned]
|
601
|
+
json_contents = <<-EOF
|
602
|
+
{
|
603
|
+
id:"Versioned",
|
604
|
+
prototype: {
|
605
|
+
getVersionMethod: function() {
|
606
|
+
return java.lang.Class.forName("org.persvr.data.Persistable").getMethod("getVersion");
|
607
|
+
},
|
608
|
+
isCurrentVersion: function() { return this.getVersionMethod.invoke(this).isCurrent(); },
|
609
|
+
getVersion: function() { return this.getVersionMethod.invoke(this).getVersionNumber(); },
|
610
|
+
getPreviousVersion: function() {
|
611
|
+
var prev = getVersionMethod.invoke(this).getPreviousVersion();
|
612
|
+
return prev;
|
613
|
+
},
|
614
|
+
"representation:application/json+versioned": {
|
615
|
+
quality:0.2,
|
616
|
+
output:function(object) {
|
617
|
+
var prev = object.getPreviousVersion();
|
618
|
+
response.setContentType("application/json+versioned");
|
619
|
+
response.getOutputStream().print(serialize({
|
620
|
+
version: object.getVersion(),
|
621
|
+
"parent-versions": prev ? [prev] : [],
|
622
|
+
content: object
|
623
|
+
}));
|
624
|
+
}
|
625
|
+
}
|
626
|
+
}
|
627
|
+
}
|
628
|
+
EOF
|
629
|
+
begin
|
630
|
+
response = @persevere.persevere.send_request('POST', URI.encode('/Class/'), json_contents, { 'Content-Type' => 'application/javascript' } )
|
631
|
+
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
|
632
|
+
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
|
633
|
+
puts "Persevere Create Failed: #{e}, Trying again."
|
634
|
+
end
|
635
|
+
end
|
595
636
|
end
|
596
|
-
|
637
|
+
|
597
638
|
##
|
598
639
|
# Convert a DataMapper Resource to a JSON.
|
599
640
|
#
|
@@ -11,7 +11,7 @@ require Pathname(__FILE__).dirname.expand_path.parent + 'lib/persevere_adapter'
|
|
11
11
|
describe DataMapper::Adapters::PersevereAdapter do
|
12
12
|
before :all do
|
13
13
|
# This needs to point to a valid persevere server
|
14
|
-
@adapter = DataMapper.setup(:default, { :adapter => 'persevere', :host => 'localhost', :port => '8080' })
|
14
|
+
@adapter = DataMapper.setup(:default, { :adapter => 'persevere', :host => 'localhost', :port => '8080', :versioned => true })
|
15
15
|
@repository = DataMapper.repository(@adapter.name)
|
16
16
|
|
17
17
|
class ::Bozon
|
@@ -112,6 +112,13 @@ describe DataMapper::Adapters::PersevereAdapter do
|
|
112
112
|
it 'should create the json schema for the hash' do
|
113
113
|
@adapter.put_schema(@test_schema_hash).should_not == false
|
114
114
|
end
|
115
|
+
|
116
|
+
it 'should create the schema as an extension of the Versioned schema' do
|
117
|
+
@adapter.put_schema(@test_schema_hash).should_not == false
|
118
|
+
test_result = @adapter.get_schema(@test_schema_hash['id'])
|
119
|
+
puts test_result.inspect
|
120
|
+
test_result[0]['extends']['$ref'].should eql "Versioned"
|
121
|
+
end
|
115
122
|
|
116
123
|
it 'should create the json schema for the hash under the specified project' do
|
117
124
|
@adapter.put_schema(@test_schema_hash, "test").should_not == false
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 50
|
8
|
+
- 0
|
9
|
+
version: 0.50.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ivan R. Judson
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-04-
|
18
|
+
date: 2010-04-22 00:00:00 -06:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|