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 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