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 CHANGED
@@ -1 +1 @@
1
- 0.48.2
1
+ 0.50.0
data/lib/persevere.rb CHANGED
@@ -55,7 +55,7 @@ class Persevere
55
55
  'Content-Type' => 'application/json'
56
56
  } unless defined?(HEADERS)
57
57
 
58
- attr_accessor :server_url, :pservr
58
+ attr_accessor :server_url, :persevere
59
59
 
60
60
 
61
61
  def initialize(url)
@@ -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
- - 48
8
- - 2
9
- version: 0.48.2
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-19 00:00:00 -06:00
18
+ date: 2010-04-22 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency