ixtlan-remote 0.1.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.
Files changed (89) hide show
  1. data/Gemfile +2 -0
  2. data/README.md +64 -0
  3. data/agpl-3.0.txt +661 -0
  4. data/lib/ixtlan-remote.rb +23 -0
  5. data/lib/ixtlan/passwords.rb +52 -0
  6. data/lib/ixtlan/passwords.rb~ +47 -0
  7. data/lib/ixtlan/railtie.rb~ +17 -0
  8. data/lib/ixtlan/remote.rb +23 -0
  9. data/lib/ixtlan/remote/access_controller.rb +62 -0
  10. data/lib/ixtlan/remote/access_controller.rb~ +25 -0
  11. data/lib/ixtlan/remote/constant_time_compare.rb +39 -0
  12. data/lib/ixtlan/remote/constant_time_compare.rb~ +19 -0
  13. data/lib/ixtlan/remote/heartbeat.rb~ +80 -0
  14. data/lib/ixtlan/remote/model_conversion.rb~ +245 -0
  15. data/lib/ixtlan/remote/model_helpers.rb +73 -0
  16. data/lib/ixtlan/remote/model_helpers.rb~ +53 -0
  17. data/lib/ixtlan/remote/permission.rb +40 -0
  18. data/lib/ixtlan/remote/permission.rb~ +19 -0
  19. data/lib/ixtlan/remote/railtie.rb +30 -0
  20. data/lib/ixtlan/remote/railtie.rb~ +9 -0
  21. data/lib/ixtlan/remote/remote_access_controller.rb~ +25 -0
  22. data/lib/ixtlan/remote/remote_permisson.rb~ +9 -0
  23. data/lib/ixtlan/remote/resource.rb +145 -0
  24. data/lib/ixtlan/remote/resource.rb-~ +165 -0
  25. data/lib/ixtlan/remote/resource.rb~ +152 -0
  26. data/lib/ixtlan/remote/rest.rb +108 -0
  27. data/lib/ixtlan/remote/rest.rb~ +83 -0
  28. data/lib/ixtlan/remote/rest_resource.rb~ +140 -0
  29. data/lib/ixtlan/remote/rest_resource_config.rb~ +63 -0
  30. data/lib/ixtlan/remote/rest_resource_factory.rb~ +259 -0
  31. data/lib/ixtlan/remote/rest_resource_old.rb-~ +259 -0
  32. data/lib/ixtlan/remote/server.rb +119 -0
  33. data/lib/ixtlan/remote/server.rb~ +82 -0
  34. data/lib/ixtlan/remote/summary.rb +46 -0
  35. data/lib/ixtlan/remote/summary.rb~ +23 -0
  36. data/lib/ixtlan/remote/sync.rb +104 -0
  37. data/lib/ixtlan/remote/sync.rb~ +78 -0
  38. data/lib/ixtlan/remote/sync_summary.rb~ +23 -0
  39. data/lib/ixtlan/remote/tranlation_key.rb~ +7 -0
  40. data/lib/ixtlan/remote/translation.rake~ +194 -0
  41. data/lib/ixtlan/remote/translation_models.rb~ +11 -0
  42. data/lib/ixtlan/remote/updater.rb~ +71 -0
  43. data/lib/ixtlan/user_management/application_model.rb +30 -0
  44. data/lib/ixtlan/user_management/application_model.rb~ +21 -0
  45. data/lib/ixtlan/user_management/application_resource.rb +48 -0
  46. data/lib/ixtlan/user_management/application_resource.rb~ +21 -0
  47. data/lib/ixtlan/user_management/authentcator.rb~ +31 -0
  48. data/lib/ixtlan/user_management/authentication_model.rb +31 -0
  49. data/lib/ixtlan/user_management/authentication_model.rb~ +21 -0
  50. data/lib/ixtlan/user_management/authenticator.rb +55 -0
  51. data/lib/ixtlan/user_management/authenticator.rb~ +20 -0
  52. data/lib/ixtlan/user_management/domain_resource.rb +48 -0
  53. data/lib/ixtlan/user_management/domain_resource.rb~ +21 -0
  54. data/lib/ixtlan/user_management/dummy_authentication.rb +50 -0
  55. data/lib/ixtlan/user_management/dummy_authentication.rb~ +49 -0
  56. data/lib/ixtlan/user_management/group.rb~ +39 -0
  57. data/lib/ixtlan/user_management/group_model.rb +31 -0
  58. data/lib/ixtlan/user_management/group_model.rb~ +21 -0
  59. data/lib/ixtlan/user_management/models.rb~ +39 -0
  60. data/lib/ixtlan/user_management/session-serializer.rb~ +18 -0
  61. data/lib/ixtlan/user_management/session_cuba.rb +47 -0
  62. data/lib/ixtlan/user_management/session_cuba.rb~ +44 -0
  63. data/lib/ixtlan/user_management/session_manager.rb +38 -0
  64. data/lib/ixtlan/user_management/session_model.rb +36 -0
  65. data/lib/ixtlan/user_management/session_model.rb~ +10 -0
  66. data/lib/ixtlan/user_management/session_plugin.rb +32 -0
  67. data/lib/ixtlan/user_management/session_serializer.rb +21 -0
  68. data/lib/ixtlan/user_management/session_serializer.rb~ +21 -0
  69. data/lib/ixtlan/user_management/user.rb~ +16 -0
  70. data/lib/ixtlan/user_management/user_model.rb +36 -0
  71. data/lib/ixtlan/user_management/user_model.rb~ +33 -0
  72. data/lib/ixtlan/user_management/user_resource.rb +55 -0
  73. data/lib/ixtlan/user_management/user_resource.rb~ +24 -0
  74. data/lib/ixtlan/user_management/user_serializer.rb +15 -0
  75. data/lib/ixtlan/user_management/user_serializer.rb~ +23 -0
  76. data/spec/access_controller_spec.rb +65 -0
  77. data/spec/access_controller_spec.rb~ +65 -0
  78. data/spec/model_helpers_spec.rb +40 -0
  79. data/spec/model_helpers_spec.rb~ +36 -0
  80. data/spec/remote_access_controller_spec.rb~ +36 -0
  81. data/spec/resource_spec.rb +181 -0
  82. data/spec/resource_spec.rb~ +173 -0
  83. data/spec/rest_resource_spec.rb~ +173 -0
  84. data/spec/rest_spec.rb +94 -0
  85. data/spec/rest_spec.rb~ +99 -0
  86. data/spec/rest_with_attribute_name_like_model_name_spec.rb +82 -0
  87. data/spec/sync_spec.rb +83 -0
  88. data/spec/sync_spec.rb~ +81 -0
  89. metadata +313 -0
@@ -0,0 +1,173 @@
1
+ require 'ixtlan/remote/resource'
2
+ require 'ixtlan/remote/server'
3
+ require 'json'
4
+ class RestClientMock
5
+
6
+ def [](path)
7
+ @path = path
8
+ self
9
+ end
10
+
11
+ attr_reader :path
12
+ attr_accessor :response_payload
13
+
14
+ def response_payload( *args )
15
+ @response_payload
16
+ end
17
+
18
+ alias :post :response_payload
19
+ alias :put :response_payload
20
+ alias :delete :response_payload
21
+
22
+ end
23
+ class User
24
+
25
+ def initialize( args = {} )
26
+ @id = (args || {})['id'].to_i
27
+ @name = (args || {})['name']
28
+ end
29
+
30
+ attr_reader :id, :name
31
+
32
+ def attributes
33
+ {'id' => @id, 'name' => @name }
34
+ end
35
+ end
36
+ ClientUser = User
37
+
38
+ describe Ixtlan::Remote::RestResource do
39
+
40
+ subject do
41
+ Ixtlan::Remote::RestResource.new( rest_client,
42
+ { User => Ixtlan::Remote::Server::Meta.new( nil, User.method(:new) ),
43
+ ClientUser => Ixtlan::Remote::Server::Meta.new( :users, ClientUser.method(:new) ) } )
44
+ end
45
+
46
+ let( :rest_client ) { ::RestClientMock.new }
47
+
48
+ describe 'create' do
49
+ [ User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
50
+ it 'user without root' do
51
+
52
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
53
+
54
+ u = subject.create( *user, :name => 'bla' ).send_it
55
+ u.id.must_equal 1
56
+ u.name.must_equal 'bla'
57
+
58
+ subject.model.must_equal User
59
+ rest_client.path.must_match /(.*\/)?users$/
60
+ end
61
+
62
+ it 'user with root' do
63
+
64
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
65
+
66
+ u = subject.create( *user, :name => 'bla' ).send_it
67
+ u.id.must_equal 1
68
+ u.name.must_equal 'bla'
69
+
70
+ subject.model.must_equal User
71
+ rest_client.path.must_match /(.*\/)?users$/
72
+ end
73
+ end
74
+ end
75
+
76
+ describe 'retrieve' do
77
+ [ User.new('id' => 1), User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
78
+ it 'user without root' do
79
+
80
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
81
+
82
+ u = subject.create( *user, 1 ).send_it
83
+ u.id.must_equal 1
84
+ u.name.must_equal 'bla'
85
+
86
+ subject.model.must_equal User
87
+ rest_client.path.must_match /(.*\/)?users\/1$/
88
+ end
89
+
90
+ it 'users without root' do
91
+
92
+ rest_client.response_payload = '[ { "id": 1, "name": "bla" }, { "id": 2, "name": "blabla" } ]'
93
+
94
+ u = subject.create( *user ).send_it
95
+ u.size.must_equal 2
96
+ u[0].id.must_equal 1
97
+ u[0].name.must_equal 'bla'
98
+ u[1].id.must_equal 2
99
+ u[1].name.must_equal 'blabla'
100
+
101
+ subject.model.must_equal User
102
+ rest_client.path.must_match /(.*\/)?users$/
103
+ end
104
+
105
+ it 'user with root' do
106
+
107
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
108
+
109
+ u = subject.create( *user, 1 ).send_it
110
+ u.id.must_equal 1
111
+ u.name.must_equal 'bla'
112
+
113
+ subject.model.must_equal User
114
+ rest_client.path.must_match /(.*\/)?users\/1$/
115
+ end
116
+
117
+ it 'users with root' do
118
+
119
+ rest_client.response_payload = '[ { "user": { "id": 1, "name": "bla" } }, { "user": { "id": 2, "name": "blabla" } } ]'
120
+
121
+ u = subject.create( *user ).send_it
122
+ u.size.must_equal 2
123
+ u[0].id.must_equal 1
124
+ u[0].name.must_equal 'bla'
125
+ u[1].id.must_equal 2
126
+ u[1].name.must_equal 'blabla'
127
+
128
+ subject.model.must_equal User
129
+ rest_client.path.must_match /(.*\/)?users$/
130
+ end
131
+ end
132
+ end
133
+
134
+ describe 'update' do
135
+ [ User.new('id' => 1), User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
136
+ it 'user without root' do
137
+
138
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
139
+
140
+ u = subject.update( *user, 1, :name => 'buh' ).send_it
141
+ u.id.must_equal 1
142
+ u.name.must_equal 'bla'
143
+
144
+ subject.model.must_equal User
145
+ rest_client.path.must_match /(.*\/)?users\/1$/
146
+ end
147
+
148
+ it 'user with root' do
149
+
150
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
151
+
152
+ u = subject.create( *user, 1, :name => 'buh' ).send_it
153
+ u.id.must_equal 1
154
+ u.name.must_equal 'bla'
155
+
156
+ subject.model.must_equal User
157
+ rest_client.path.must_match /(.*\/)?users\/1$/
158
+ end
159
+ end
160
+ end
161
+
162
+ describe 'delete' do
163
+ [ User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
164
+ it 'user' do
165
+
166
+ subject.delete( *user, 1 ).send_it.must_be_nil
167
+
168
+ subject.model.must_equal User
169
+ rest_client.path.must_match /(.*\/)?users\/1$/
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,173 @@
1
+ require 'ixtlan/remote/rest_resource'
2
+ require 'ixtlan/remote/server'
3
+ require 'json'
4
+ class RestClientMock
5
+
6
+ def [](path)
7
+ @path = path
8
+ self
9
+ end
10
+
11
+ attr_reader :path
12
+ attr_accessor :response_payload
13
+
14
+ def response_payload( *args )
15
+ @response_payload
16
+ end
17
+
18
+ alias :post :response_payload
19
+ alias :put :response_payload
20
+ alias :delete :response_payload
21
+
22
+ end
23
+ class User
24
+
25
+ def initialize( args = {} )
26
+ @id = (args || {})['id'].to_i
27
+ @name = (args || {})['name']
28
+ end
29
+
30
+ attr_reader :id, :name
31
+
32
+ def attributes
33
+ {'id' => @id, 'name' => @name }
34
+ end
35
+ end
36
+ ClientUser = User
37
+
38
+ describe Ixtlan::Remote::RestResource do
39
+
40
+ subject do
41
+ Ixtlan::Remote::RestResource.new( rest_client,
42
+ { User => Ixtlan::Remote::Server::Meta.new( nil, User.method(:new) ),
43
+ ClientUser => Ixtlan::Remote::Server::Meta.new( :users, ClientUser.method(:new) ) } )
44
+ end
45
+
46
+ let( :rest_client ) { ::RestClientMock.new }
47
+
48
+ describe 'create' do
49
+ [ User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
50
+ it 'user without root' do
51
+
52
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
53
+
54
+ u = subject.create( *user, :name => 'bla' ).send_it
55
+ u.id.must_equal 1
56
+ u.name.must_equal 'bla'
57
+
58
+ subject.model.must_equal User
59
+ rest_client.path.must_match /(.*\/)?users$/
60
+ end
61
+
62
+ it 'user with root' do
63
+
64
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
65
+
66
+ u = subject.create( *user, :name => 'bla' ).send_it
67
+ u.id.must_equal 1
68
+ u.name.must_equal 'bla'
69
+
70
+ subject.model.must_equal User
71
+ rest_client.path.must_match /(.*\/)?users$/
72
+ end
73
+ end
74
+ end
75
+
76
+ describe 'retrieve' do
77
+ [ User.new('id' => 1), User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
78
+ it 'user without root' do
79
+
80
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
81
+
82
+ u = subject.create( *user, 1 ).send_it
83
+ u.id.must_equal 1
84
+ u.name.must_equal 'bla'
85
+
86
+ subject.model.must_equal User
87
+ rest_client.path.must_match /(.*\/)?users\/1$/
88
+ end
89
+
90
+ it 'users without root' do
91
+
92
+ rest_client.response_payload = '[ { "id": 1, "name": "bla" }, { "id": 2, "name": "blabla" } ]'
93
+
94
+ u = subject.create( *user ).send_it
95
+ u.size.must_equal 2
96
+ u[0].id.must_equal 1
97
+ u[0].name.must_equal 'bla'
98
+ u[1].id.must_equal 2
99
+ u[1].name.must_equal 'blabla'
100
+
101
+ subject.model.must_equal User
102
+ rest_client.path.must_match /(.*\/)?users$/
103
+ end
104
+
105
+ it 'user with root' do
106
+
107
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
108
+
109
+ u = subject.create( *user, 1 ).send_it
110
+ u.id.must_equal 1
111
+ u.name.must_equal 'bla'
112
+
113
+ subject.model.must_equal User
114
+ rest_client.path.must_match /(.*\/)?users\/1$/
115
+ end
116
+
117
+ it 'users with root' do
118
+
119
+ rest_client.response_payload = '[ { "user": { "id": 1, "name": "bla" } }, { "user": { "id": 2, "name": "blabla" } } ]'
120
+
121
+ u = subject.create( *user ).send_it
122
+ u.size.must_equal 2
123
+ u[0].id.must_equal 1
124
+ u[0].name.must_equal 'bla'
125
+ u[1].id.must_equal 2
126
+ u[1].name.must_equal 'blabla'
127
+
128
+ subject.model.must_equal User
129
+ rest_client.path.must_match /(.*\/)?users$/
130
+ end
131
+ end
132
+ end
133
+
134
+ describe 'update' do
135
+ [ User.new('id' => 1), User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
136
+ it 'user without root' do
137
+
138
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
139
+
140
+ u = subject.update( *user, 1, :name => 'buh' ).send_it
141
+ u.id.must_equal 1
142
+ u.name.must_equal 'bla'
143
+
144
+ subject.model.must_equal User
145
+ rest_client.path.must_match /(.*\/)?users\/1$/
146
+ end
147
+
148
+ it 'user with root' do
149
+
150
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
151
+
152
+ u = subject.create( *user, 1, :name => 'buh' ).send_it
153
+ u.id.must_equal 1
154
+ u.name.must_equal 'bla'
155
+
156
+ subject.model.must_equal User
157
+ rest_client.path.must_match /(.*\/)?users\/1$/
158
+ end
159
+ end
160
+ end
161
+
162
+ describe 'delete' do
163
+ [ User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
164
+ it 'user' do
165
+
166
+ subject.delete( *user, 1 ).send_it.must_be_nil
167
+
168
+ subject.model.must_equal User
169
+ rest_client.path.must_match /(.*\/)?users\/1$/
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,94 @@
1
+ require 'ixtlan/remote/sync'
2
+ require 'ixtlan/remote/rest'
3
+ require 'dm-migrations'
4
+ require 'dm-sqlite-adapter'
5
+ require 'webmock/minitest'
6
+
7
+ class Admin
8
+ include DataMapper::Resource
9
+
10
+ property :id, Serial
11
+ property :name, String
12
+ end
13
+ DataMapper.setup(:default, "sqlite::memory:")
14
+ Admin.auto_migrate!
15
+
16
+ describe Ixtlan::Remote::Rest do
17
+ subject do
18
+ factory = Ixtlan::Remote::Rest.new
19
+ factory.server( :users ) do |s|
20
+ s.url = baseurl
21
+ s.add_model( Admin )
22
+ end
23
+ factory
24
+ end
25
+
26
+ let( :baseurl ) { 'http://www.example.com' }
27
+ let( :headers ) { { 'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'Content-Type'=>'application/json' }}#, 'User-Agent'=>'Ruby' } }
28
+ let( :url ) { baseurl + "/admins/" }
29
+ let( :stub_get ) { stub_request(:get, url ).with(:headers => headers ) }
30
+ let( :stub_get432 ) { stub_request(:get, url + "432" ).with(:headers => headers ) }
31
+ let( :stub_post ) { stub_request(:post, url ) }
32
+ let( :stub_put ) { stub_request(:put, url + "1" ) }
33
+ let( :stub_delete ) { stub_request(:delete, url + "1" ) }
34
+
35
+ [ Admin, :admins, 'admins' ].each do |admin|
36
+ it 'retrieve collection' do
37
+ stub_get.to_return(:status => 200, :body => '[ {"id": 123, "name": "bla" } ]', :headers => {})
38
+
39
+ a = subject.retrieve( admin ).first
40
+
41
+ a.new?.must_equal true
42
+ a.id.must_equal 123
43
+ a.name.must_equal 'bla'
44
+ end
45
+ end
46
+
47
+ [ [ Admin, 432 ], [ :admins, 432 ], [ 'admins', 432 ] ].each do |admin|
48
+ it 'retrieve entity' do
49
+ stub_get432.to_return(:status => 200, :body => '[ {"id": 123, "name": "bla" } ]', :headers => {})
50
+
51
+ a = subject.retrieve( *admin ).first
52
+
53
+ a.new?.must_equal true
54
+ a.id.must_equal 123
55
+ a.name.must_equal 'bla'
56
+ end
57
+ end
58
+
59
+ [ Admin.new( :name => 'something' ), [ Admin, { :name => 'something' } ], [ :admins, { :name => 'something' } ], [ 'admins', { :name => 'something' } ] ].each do |admin|
60
+ it 'create' do
61
+ stub_post.with( :body => "{\"name\":\"something\"}", :headers => headers ).to_return( :status => 200, :body => '{"id": 111, "name": "bla" }' )
62
+
63
+ a = subject.create( *admin )
64
+
65
+ a.new?.must_equal true
66
+ a.id.must_equal 111
67
+ a.name.must_equal 'bla'
68
+ end
69
+ end
70
+
71
+ DATA = { :id => 1, :name => 'something' }
72
+ [ Admin.new( :id => 1, :name => 'something' ), [ Admin, 1, DATA ], [ :admins, 1, DATA], [ 'admins', 1, DATA ] ].each do |admin|
73
+ it 'update' do
74
+ stub_put.with( :body => DATA.to_json, :headers => headers.merge({'Content-Length'=>'27'}) ).to_return( :status => 200, :body => '{"id": 111, "name": "bla" }' )
75
+
76
+ a = subject.update( *admin )
77
+
78
+ a.new?.must_equal true
79
+ a.id.must_equal 111
80
+ a.name.must_equal 'bla'
81
+ end
82
+ end
83
+
84
+ [ Admin.new( :id => 1, :name => 'something' ), [ Admin, 1, { :id => 1, :name => 'something' } ], [ :admins, 1, { :id => 1, :name => 'something' } ], [ 'admins', 1, { :id => 1, :name => 'something' } ] ].each do |admin|
85
+ it 'delete' do
86
+ stub_delete.with( :headers => headers ).to_return( :status => 200 )
87
+
88
+ a = subject.delete( *admin )
89
+
90
+ a.must_be_nil
91
+ end
92
+ end
93
+
94
+ end
@@ -0,0 +1,99 @@
1
+ require 'ixtlan/remote/sync'
2
+ require 'ixtlan/remote/rest'
3
+ require 'dm-migrations'
4
+ require 'dm-sqlite-adapter'
5
+ require 'webmock/minitest'
6
+
7
+ class Admin
8
+ include DataMapper::Resource
9
+
10
+ property :id, Serial
11
+ property :name, String
12
+ end
13
+ DataMapper.setup(:default, "sqlite::memory:")
14
+ Admin.auto_migrate!
15
+
16
+ describe Ixtlan::Remote::Rest do
17
+ subject do
18
+ factory = Ixtlan::Remote::Rest.new
19
+ factory.server( :users ) do |s|
20
+ s.url = baseurl
21
+ s.add_model( Admin )
22
+ end
23
+ factory
24
+ end
25
+
26
+ let( :baseurl ) { 'http://www.example.com' }
27
+ let( :headers ) { { 'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby' } }
28
+ let( :url ) { p baseurl; baseurl + "/admins" }
29
+ let( :stub_get ) { stub_request(:get, url ).with(:headers => headers ) }
30
+ let( :stub_get432 ) { stub_request(:get, url + "/432" ).with(:headers => headers ) }
31
+ let( :stub_post ) { stub_request(:post, url ) }
32
+ let( :stub_put ) { stub_request(:put, url + "/1" ) }
33
+ let( :stub_delete ) { stub_request(:put, url + "/1" ) }
34
+
35
+ [ Admin, :admins, 'admins' ].each do |admin|
36
+ it 'retrieve collection' do
37
+ stub_get.to_return(:status => 200, :body => '[ {"id": 123, "name": "bla" } ]', :headers => {})
38
+
39
+ a = subject.retrieve( admin ).first
40
+
41
+ a.new?.must_equal true
42
+ a.id.must_equal 123
43
+ a.name.must_equal 'bla'
44
+ end
45
+ end
46
+
47
+ [ [ Admin, 432 ], [ :admins, 432 ], [ 'admins', 432 ] ].each do |admin|
48
+ it 'retrieve entity' do
49
+ stub_get432.to_return(:status => 200, :body => '[ {"id": 123, "name": "bla" } ]', :headers => {})
50
+
51
+ a = subject.retrieve( *admin ).first
52
+
53
+ a.new?.must_equal true
54
+ a.id.must_equal 123
55
+ a.name.must_equal 'bla'
56
+ end
57
+ end
58
+
59
+ [ Admin.new( :name => 'something' ), [ Admin, { :name => 'something' } ], [ :admins, { :name => 'something' } ], [ 'admins', { :name => 'something' } ] ].each do |admin|
60
+ it 'create' do
61
+ stub_post
62
+ .with( :body => "{\"name\":\"something\"}", :headers => headers )
63
+ .to_return( :status => 200, :body => '{"id": 111, "name": "bla" }' )
64
+
65
+ a = subject.create( *admin )
66
+
67
+ a.new?.must_equal true
68
+ a.id.must_equal 111
69
+ a.name.must_equal 'bla'
70
+ end
71
+ end
72
+
73
+ [ Admin.new( :id => 1, :name => 'something' ), [ Admin, 1, { :id => 1, :name => 'something' } ], [ :admins, 1, { :id => 1, :name => 'something' } ], [ 'admins', 1, { :id => 1, :name => 'something' } ] ].each do |admin|
74
+ it 'update' do
75
+ stub_put
76
+ .with( :body => "{\"id\":1,\"name\":\"something\"}", :headers => headers )
77
+ .to_return( :status => 200, :body => '{"id": 111, "name": "bla" }' )
78
+
79
+ a = subject.update( *admin )
80
+
81
+ a.new?.must_equal true
82
+ a.id.must_equal 111
83
+ a.name.must_equal 'bla'
84
+ end
85
+ end
86
+
87
+ [ Admin.new( :id => 1, :name => 'something' ), [ Admin, 1, { :id => 1, :name => 'something' } ], [ :admins, 1, { :id => 1, :name => 'something' } ], [ 'admins', 1, { :id => 1, :name => 'something' } ] ].each do |admin|
88
+ it 'delete' do
89
+ stub_delete
90
+ .with( :body => "{\"id\":1,\"name\":\"something\"}", :headers => headers )
91
+ .to_return( :status => 200 )
92
+
93
+ a = subject.update( *admin )
94
+
95
+ a.must_be_nil
96
+ end
97
+ end
98
+
99
+ end