dm-persevere-adapter 0.48.2 → 0.50.0
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/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
|