dm-persevere-adapter 0.71.4 → 0.72.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,202 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ require Pathname(__FILE__).dirname.expand_path.parent + 'lib/persevere_client'
3
+
4
+ describe PersevereClient do
5
+ #
6
+ # Create an object to interact with Persevere
7
+ #
8
+ before :all do
9
+ @p = PersevereClient.new('http://localhost:8080')
10
+
11
+ @blobObj = {
12
+ 'id' => 'Yogo',
13
+ 'prototype' => {},
14
+ 'properties' => {
15
+ 'cid' => {'type' => 'string', 'optional' => true },
16
+ 'parent' => { 'type' => 'string', 'optional' => true},
17
+ 'data' => { 'type' => 'string', 'optional' => true}
18
+ }
19
+ }
20
+
21
+ @corruptObj = {
22
+ 'id' => 'Corrupt',
23
+ 'properties' => {
24
+ 'id' => 1234,
25
+ 'parent' => { 'type' => 'string'},
26
+ 'data' => { 'type' => 'string'}
27
+ }
28
+ }
29
+
30
+ @mockObj = {
31
+ 'id' => 'Yogo',
32
+ 'properties' => {
33
+ 'cid' => {'type' => 'string', 'optional' => true },
34
+ 'parent' => { 'type' => 'string', 'optional' => true},
35
+ 'data' => { 'type' => 'string', 'optional' => true}
36
+ },
37
+ 'prototype' => {}
38
+ }
39
+
40
+ @object = {
41
+ 'cid' => '123',
42
+ 'parent' => 'none',
43
+ 'data' => 'A Chunk Of Data'
44
+ }
45
+
46
+ end
47
+
48
+
49
+ # Test POST to create a new class
50
+
51
+ describe '#post' do
52
+ it 'should create a new object in persevere' do
53
+ result = @p.create('/Class/', @blobObj)
54
+ result.code.should == "201"
55
+ JSON.parse(result.body).should == @mockObj
56
+ end
57
+
58
+ # it 'should not allow posting with a bad object' do
59
+ # result = @p.create('/Class/', @corruptObj)
60
+ # result.code.should == "500"
61
+ # result.body.should == "\"Can not modify queries\""
62
+ # end
63
+
64
+ it 'should not allow posting to an existing object/id/path' do
65
+ result = @p.create('/Class/', @blobObj)
66
+ result.code.should == "201"
67
+ JSON.parse(result.body).should == @blobObj
68
+ # This shouldn't be a 201, it should say something mean.
69
+ end
70
+ end
71
+
72
+ #
73
+ # Test GET to retrieve the list of classes from Persvr
74
+ #
75
+ describe '#get' do
76
+ it 'should retrieve the previously created object from persevere' do
77
+ result = @p.retrieve('/Class/Yogo')
78
+ result.code.should == "200"
79
+ JSON.parse(result.body).should == @blobObj
80
+ end
81
+
82
+ it 'should 404 on a non-existent object' do
83
+ result = @p.retrieve('/Class/GetNotThere')
84
+ result.code.should == "404"
85
+ result.message.should == "Not Found"
86
+ end
87
+ end
88
+
89
+ #
90
+ # Test PUT to modify an existing class
91
+ #
92
+ describe '#put' do
93
+ it 'should modify the previously created object in persevere' do
94
+ @blobObj['properties']['tstAttribute'] = { 'type' => 'string' }
95
+ result = @p.update('/Class/Yogo', @blobObj)
96
+ result.code.should == "200"
97
+ JSON.parse(result.body).should == @blobObj
98
+ end
99
+
100
+ it 'should fail to modify a non-existent item' do
101
+ result = @p.update('/Class/NonExistent', @blobObj)
102
+ result.code.should == "500"
103
+ result.body.should == "\"id does not match location\""
104
+ @p.delete('/Class/NonExistent') # A bug(?) in Persevere makes a broken NonExistent class.
105
+ # This should be a 404 and not throw a persevere server exception
106
+ end
107
+ end
108
+
109
+ #
110
+ # Test DELETE to remove the previously created and modified class
111
+ #
112
+ describe '#delete' do
113
+ it 'should remove the previously created and modified object from persevere' do
114
+ result = @p.delete('/Class/Yogo')
115
+ result.code.should == "204"
116
+ @p.retrieve('/Class/Yogo').code.should == "404"
117
+ end
118
+
119
+ it 'should fail to delete a non-existent item' do
120
+ result = @p.delete('/Class/NotThere')
121
+ result.code.should == "404"
122
+ result.message.should == "Not Found"
123
+ result.body.should == "\"Class/NotThere not found\""
124
+ end
125
+ end
126
+
127
+ describe "POSTing objects" do
128
+ before(:all) do
129
+ @p.create('/Class/', @blobObj)
130
+ end
131
+
132
+ it "should not allow nil fields to be posted" do
133
+ obj_with_nil = @object.merge({'cid' => nil})
134
+ result = @p.create('/Yogo', obj_with_nil)
135
+ result.code.should == "201"
136
+ JSON.parse(result.body).reject{|key,value| key == 'id' }.should ==
137
+ obj_with_nil.reject{|key,value| value.nil?}
138
+ end
139
+
140
+ after(:all) do
141
+ @p.delete('/Class/Yogo')
142
+ end
143
+ end
144
+
145
+ describe "GETting limits and offsets" do
146
+ before(:all) do
147
+ @p.create('/Class/', @blobObj)
148
+ (0..99).each do |i|
149
+ @p.create('/Yogo/', @object.merge({'cid' => "#{i}"}))
150
+ end
151
+ end
152
+
153
+ it "should only retrieve all objects" do
154
+ result = @p.retrieve('/Yogo/')
155
+ result.code.should == "200"
156
+ JSON.parse(result.body).length.should == 100
157
+ end
158
+
159
+ it "should retrieve the first objects" do
160
+ result = @p.retrieve('/Yogo/1')
161
+ result.code.should == "200"
162
+ JSON.parse(result.body)['id'].should == '1'
163
+ end
164
+
165
+ it "should retrieve a 10 of the objects" do
166
+ result = @p.retrieve('/Yogo/', {'Range' => "items=1-10"})
167
+ result.code.should == '206'
168
+ JSON.parse(result.body).length.should == 10
169
+ end
170
+
171
+ it "should return the first 2 objects" do
172
+ result = @p.retrieve('/Yogo/', {'Range' => "items=0-1"})
173
+ result.code.should == '206'
174
+ json = JSON.parse(result.body)
175
+ json.length.should == 2
176
+ json[0]['id'].should == '1'
177
+ json[1]['id'].should == '2'
178
+ end
179
+
180
+ it "should return 21 and up objects" do
181
+ result = @p.retrieve('/Yogo/', {'Range' => 'items=20-'})
182
+ result.code.should == '206'
183
+ json = JSON.parse(result.body)
184
+ json.length.should == 80
185
+ json[0]['id'].should == '21'
186
+ json[-1]['id'].should == '100'
187
+ end
188
+
189
+ it "should return objects with id's 11 - 15" do
190
+ result = @p.retrieve('/Yogo/', {'Range' => 'items=10-14'})
191
+ result.code.should == '206'
192
+ json = JSON.parse(result.body)
193
+ json.length.should == 5
194
+ json[0]['id'].should == '11'
195
+ json[-1]['id'].should == '15'
196
+ end
197
+
198
+ after(:all) do
199
+ @p.delete('/Class/Yogo')
200
+ end
201
+ end
202
+ end
@@ -1,7 +1,9 @@
1
- require 'pathname'
2
1
  require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.setup
4
+
5
+ require 'pathname'
3
6
  require 'addressable/uri'
4
- require 'spec'
5
7
 
6
8
  require 'ruby-debug'
7
9
  Debugger.start
@@ -15,4 +17,11 @@ def path_to(gem_name, version=nil)
15
17
  spec_path = spec.loaded_from
16
18
  expanded_path = File.join(File.dirname(spec_path), '..', 'gems', "#{spec.name}-#{spec.version}")
17
19
  end
18
- end
20
+ end
21
+
22
+ def path_in_gem(name, *paths)
23
+ loaded_gem = Gem.loaded_specs[name]
24
+ return null unless loaded_gem
25
+
26
+ File.join(loaded_gem.full_gem_path, *paths)
27
+ end
@@ -1,5 +1,4 @@
1
1
  begin
2
- gem 'rspec'
3
2
  require 'spec'
4
3
  require 'spec/rake/spectask'
5
4
 
metadata CHANGED
@@ -1,44 +1,75 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-persevere-adapter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 267
4
+ hash: 319
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 71
9
- - 4
10
- version: 0.71.4
8
+ - 72
9
+ - 0
10
+ version: 0.72.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ivan R. Judson
14
+ - Ryan Heimbuch
14
15
  - The Yogo Data Management Development Team
15
16
  autorequire:
16
17
  bindir: bin
17
18
  cert_chain: []
18
19
 
19
- date: 2010-07-06 00:00:00 -06:00
20
+ date: 2010-08-03 00:00:00 -06:00
20
21
  default_executable:
21
22
  dependencies:
22
23
  - !ruby/object:Gem::Dependency
24
+ type: :runtime
25
+ prerelease: false
23
26
  name: dm-core
27
+ version_requirements: &id001 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ hash: 15
33
+ segments:
34
+ - 1
35
+ - 0
36
+ version: "1.0"
37
+ requirement: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ type: :runtime
24
40
  prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
41
+ name: dm-aggregates
42
+ version_requirements: &id002 !ruby/object:Gem::Requirement
26
43
  none: false
27
44
  requirements:
28
- - - ">="
45
+ - - ~>
29
46
  - !ruby/object:Gem::Version
30
- hash: 51
47
+ hash: 15
31
48
  segments:
49
+ - 1
32
50
  - 0
33
- - 10
34
- - 2
35
- version: 0.10.2
51
+ version: "1.0"
52
+ requirement: *id002
53
+ - !ruby/object:Gem::Dependency
36
54
  type: :runtime
37
- version_requirements: *id001
55
+ prerelease: false
56
+ name: dm-types
57
+ version_requirements: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ hash: 15
63
+ segments:
64
+ - 1
65
+ - 0
66
+ version: "1.0"
67
+ requirement: *id003
38
68
  - !ruby/object:Gem::Dependency
39
- name: extlib
69
+ type: :runtime
40
70
  prerelease: false
41
- requirement: &id002 !ruby/object:Gem::Requirement
71
+ name: dm-migrations
72
+ version_requirements: &id004 !ruby/object:Gem::Requirement
42
73
  none: false
43
74
  requirements:
44
75
  - - ">="
@@ -47,8 +78,105 @@ dependencies:
47
78
  segments:
48
79
  - 0
49
80
  version: "0"
81
+ requirement: *id004
82
+ - !ruby/object:Gem::Dependency
50
83
  type: :runtime
51
- version_requirements: *id002
84
+ prerelease: false
85
+ name: dm-validations
86
+ version_requirements: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ requirement: *id005
96
+ - !ruby/object:Gem::Dependency
97
+ type: :development
98
+ prerelease: false
99
+ name: jeweler
100
+ version_requirements: &id006 !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ hash: 3
106
+ segments:
107
+ - 0
108
+ version: "0"
109
+ requirement: *id006
110
+ - !ruby/object:Gem::Dependency
111
+ type: :development
112
+ prerelease: false
113
+ name: rspec
114
+ version_requirements: &id007 !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ hash: 3
120
+ segments:
121
+ - 0
122
+ version: "0"
123
+ requirement: *id007
124
+ - !ruby/object:Gem::Dependency
125
+ type: :development
126
+ prerelease: false
127
+ name: yard
128
+ version_requirements: &id008 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ hash: 3
134
+ segments:
135
+ - 0
136
+ version: "0"
137
+ requirement: *id008
138
+ - !ruby/object:Gem::Dependency
139
+ type: :development
140
+ prerelease: false
141
+ name: ruby-debug
142
+ version_requirements: &id009 !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ hash: 3
148
+ segments:
149
+ - 0
150
+ version: "0"
151
+ requirement: *id009
152
+ - !ruby/object:Gem::Dependency
153
+ type: :development
154
+ prerelease: false
155
+ name: addressable
156
+ version_requirements: &id010 !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ hash: 3
162
+ segments:
163
+ - 0
164
+ version: "0"
165
+ requirement: *id010
166
+ - !ruby/object:Gem::Dependency
167
+ type: :development
168
+ prerelease: false
169
+ name: rake
170
+ version_requirements: &id011 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ hash: 3
176
+ segments:
177
+ - 0
178
+ version: "0"
179
+ requirement: *id011
52
180
  description: A DataMapper Adapter for persevere
53
181
  email:
54
182
  - irjudson [a] gmail [d] com
@@ -61,26 +189,33 @@ extra_rdoc_files:
61
189
  - README.txt
62
190
  files:
63
191
  - .gitignore
192
+ - Gemfile
64
193
  - History.txt
65
194
  - LICENSE.txt
66
195
  - Manifest.txt
67
196
  - README.txt
68
197
  - Rakefile
69
198
  - VERSION
70
- - lib/dm/associations/many_to_many.rb
71
- - lib/dm/associations/relationship.rb
72
- - lib/dm/model.rb
73
- - lib/dm/property.rb
74
- - lib/dm/query.rb
75
- - lib/dm/resource.rb
76
- - lib/persevere.rb
77
199
  - lib/persevere_adapter.rb
200
+ - lib/persevere_adapter/adapter.rb
201
+ - lib/persevere_adapter/aggregates.rb
202
+ - lib/persevere_adapter/enhance.rb
203
+ - lib/persevere_adapter/json_support.rb
204
+ - lib/persevere_adapter/json_support/core.rb
205
+ - lib/persevere_adapter/json_support/model.rb
206
+ - lib/persevere_adapter/json_support/model/properties.rb
207
+ - lib/persevere_adapter/json_support/property.rb
208
+ - lib/persevere_adapter/json_support/resource.rb
209
+ - lib/persevere_adapter/migrations.rb
210
+ - lib/persevere_adapter/query.rb
211
+ - lib/persevere_adapter/support/big_decimal.rb
212
+ - lib/persevere_client.rb
78
213
  - persevere/History.txt
79
214
  - persevere/LICENSE.txt
80
215
  - persevere/Manifest.txt
81
216
  - persevere/README.txt
82
217
  - spec/persevere_adapter_spec.rb
83
- - spec/persevere_spec.rb
218
+ - spec/persevere_client_spec.rb
84
219
  - spec/spec.opts
85
220
  - spec/spec_helper.rb
86
221
  - tasks/spec.rake
@@ -121,5 +256,5 @@ specification_version: 3
121
256
  summary: A DataMapper Adapter for persevere
122
257
  test_files:
123
258
  - spec/persevere_adapter_spec.rb
124
- - spec/persevere_spec.rb
259
+ - spec/persevere_client_spec.rb
125
260
  - spec/spec_helper.rb