stormpath-sdk 0.4.0 → 1.0.0.beta

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/.gitignore +6 -0
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +27 -0
  5. data/CHANGES.md +21 -1
  6. data/Gemfile +1 -2
  7. data/README.md +457 -11
  8. data/Rakefile +15 -1
  9. data/lib/stormpath-sdk.rb +52 -33
  10. data/lib/stormpath-sdk/{resource/group_list.rb → api_key.rb} +5 -9
  11. data/lib/stormpath-sdk/auth/authentication_result.rb +3 -13
  12. data/lib/stormpath-sdk/auth/basic_authenticator.rb +5 -11
  13. data/lib/stormpath-sdk/auth/basic_login_attempt.rb +6 -8
  14. data/lib/stormpath-sdk/auth/username_password_request.rb +2 -5
  15. data/lib/stormpath-sdk/cache/cache.rb +54 -0
  16. data/lib/stormpath-sdk/cache/cache_entry.rb +33 -0
  17. data/lib/stormpath-sdk/cache/cache_manager.rb +22 -0
  18. data/lib/stormpath-sdk/cache/cache_stats.rb +35 -0
  19. data/lib/stormpath-sdk/cache/memory_store.rb +29 -0
  20. data/lib/stormpath-sdk/cache/redis_store.rb +32 -0
  21. data/lib/stormpath-sdk/client.rb +111 -0
  22. data/lib/stormpath-sdk/data_store.rb +241 -0
  23. data/lib/stormpath-sdk/{client/api_key.rb → error.rb} +16 -10
  24. data/lib/stormpath-sdk/{util → ext}/hash.rb +1 -2
  25. data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +8 -4
  26. data/lib/stormpath-sdk/http/http_client_request_executor.rb +8 -7
  27. data/lib/stormpath-sdk/http/request.rb +4 -8
  28. data/lib/stormpath-sdk/{util/request_utils.rb → http/utils.rb} +17 -38
  29. data/lib/stormpath-sdk/resource/account.rb +12 -108
  30. data/lib/stormpath-sdk/resource/application.rb +35 -171
  31. data/lib/stormpath-sdk/resource/associations.rb +97 -0
  32. data/lib/stormpath-sdk/resource/base.rb +256 -0
  33. data/lib/stormpath-sdk/resource/collection.rb +94 -0
  34. data/lib/stormpath-sdk/resource/directory.rb +11 -68
  35. data/lib/stormpath-sdk/resource/email_verification_token.rb +3 -9
  36. data/lib/stormpath-sdk/resource/error.rb +4 -38
  37. data/lib/stormpath-sdk/resource/expansion.rb +28 -0
  38. data/lib/stormpath-sdk/resource/group.rb +8 -66
  39. data/lib/stormpath-sdk/resource/group_membership.rb +4 -55
  40. data/lib/stormpath-sdk/resource/{application_list.rb → instance.rb} +7 -13
  41. data/lib/stormpath-sdk/resource/password_reset_token.rb +5 -23
  42. data/lib/stormpath-sdk/resource/status.rb +22 -28
  43. data/lib/stormpath-sdk/resource/tenant.rb +5 -52
  44. data/lib/stormpath-sdk/resource/utils.rb +43 -13
  45. data/lib/stormpath-sdk/util/assert.rb +5 -15
  46. data/lib/stormpath-sdk/version.rb +3 -3
  47. data/spec/api_key_spec.rb +19 -0
  48. data/spec/auth/basic_authenticator_spec.rb +25 -0
  49. data/spec/auth/sauthc1_signer_spec.rb +42 -0
  50. data/spec/cache/cache_entry_spec.rb +157 -0
  51. data/spec/cache/cache_spec.rb +89 -0
  52. data/spec/cache/cache_stats_spec.rb +106 -0
  53. data/spec/client_spec.rb +538 -0
  54. data/spec/data_store_spec.rb +130 -0
  55. data/spec/resource/account_spec.rb +74 -0
  56. data/spec/resource/application_spec.rb +148 -0
  57. data/spec/resource/base_spec.rb +114 -0
  58. data/spec/resource/collection_spec.rb +169 -0
  59. data/spec/resource/directory_spec.rb +30 -0
  60. data/spec/resource/expansion_spec.rb +100 -0
  61. data/spec/resource/group_spec.rb +49 -0
  62. data/spec/spec_helper.rb +135 -0
  63. data/spec/support/resource_factory.rb +48 -0
  64. data/spec/support/resource_matchers.rb +27 -0
  65. data/spec/support/test_cache_stores.rb +9 -0
  66. data/spec/support/test_request_executor.rb +11 -0
  67. data/stormpath-sdk.gemspec +14 -4
  68. data/support/api.rb +55 -0
  69. metadata +214 -44
  70. data/lib/stormpath-sdk/client/client.rb +0 -38
  71. data/lib/stormpath-sdk/client/client_application.rb +0 -38
  72. data/lib/stormpath-sdk/client/client_application_builder.rb +0 -351
  73. data/lib/stormpath-sdk/client/client_builder.rb +0 -305
  74. data/lib/stormpath-sdk/ds/data_store.rb +0 -210
  75. data/lib/stormpath-sdk/ds/resource_factory.rb +0 -37
  76. data/lib/stormpath-sdk/resource/account_list.rb +0 -32
  77. data/lib/stormpath-sdk/resource/collection_resource.rb +0 -91
  78. data/lib/stormpath-sdk/resource/directory_list.rb +0 -30
  79. data/lib/stormpath-sdk/resource/group_membership_list.rb +0 -32
  80. data/lib/stormpath-sdk/resource/instance_resource.rb +0 -28
  81. data/lib/stormpath-sdk/resource/resource.rb +0 -327
  82. data/lib/stormpath-sdk/resource/resource_error.rb +0 -47
  83. data/test/client/client.yml +0 -16
  84. data/test/client/client_application_builder_spec.rb +0 -114
  85. data/test/client/client_builder_spec.rb +0 -176
  86. data/test/client/read_spec.rb +0 -254
  87. data/test/client/write_spec.rb +0 -420
  88. data/test/resource/resource_spec.rb +0 -41
  89. data/test/resource/test_resource.rb +0 -28
@@ -1,210 +0,0 @@
1
- #
2
- # Copyright 2012 Stormpath, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- #
16
- module Stormpath
17
-
18
- module DataStore
19
-
20
- class DataStore
21
-
22
- include Stormpath::Http
23
- include Stormpath::Resource
24
- include Stormpath::Resource::Utils
25
- include Stormpath::Util::Assert
26
-
27
- DEFAULT_SERVER_HOST = "api.stormpath.com"
28
-
29
- DEFAULT_API_VERSION = 1
30
-
31
- def initialize(request_executor, *base_url)
32
-
33
- assert_not_nil request_executor, "RequestExecutor cannot be null."
34
- @base_url = get_base_url *base_url
35
- @request_executor = request_executor
36
- @resource_factory = ResourceFactory.new(self)
37
- end
38
-
39
- def instantiate(clazz, properties = {})
40
-
41
- @resource_factory.instantiate(clazz, properties)
42
- end
43
-
44
- def get_resource(href, clazz)
45
-
46
- q_href = href
47
-
48
- if needs_to_be_fully_qualified q_href
49
- q_href = qualify q_href
50
- end
51
-
52
- data = execute_request('get', q_href, nil)
53
- @resource_factory.instantiate(clazz, data.to_hash)
54
-
55
- end
56
-
57
- def create parent_href, resource, return_type
58
-
59
- returned_resource = save_resource parent_href, resource, return_type
60
-
61
- if resource.kind_of? return_type
62
-
63
- resource.set_properties to_hash(returned_resource)
64
-
65
- end
66
-
67
- returned_resource
68
-
69
- end
70
-
71
- def save resource, *clazz
72
- assert_not_nil resource, "resource argument cannot be null."
73
- assert_kind_of Stormpath::Resource::Resource, resource, "resource argument must be instance of Stormpath::Resource::Resource"
74
-
75
- href = resource.get_href
76
- assert_true href.length > 0, "save may only be called on objects that have already been persisted (i.e. they have an existing href)."
77
-
78
- if needs_to_be_fully_qualified(href)
79
- href = qualify(href)
80
- end
81
-
82
- clazz = (clazz.nil? or clazz.length == 0) ? to_class_from_instance(resource) : clazz[0]
83
-
84
- return_value = save_resource href, resource, clazz
85
-
86
- #ensure the caller's argument is updated with what is returned from the server:
87
- resource.set_properties to_hash(return_value)
88
-
89
- return_value
90
-
91
- end
92
-
93
- def delete resource
94
-
95
- assert_not_nil resource, "resource argument cannot be null."
96
- assert_kind_of Stormpath::Resource::Resource, resource, "resource argument must be instance of Stormpath::Resource::Resource"
97
-
98
- execute_request('delete', resource.get_href, nil)
99
-
100
- end
101
-
102
- protected
103
-
104
- def needs_to_be_fully_qualified href
105
- !href.downcase.start_with? 'http'
106
- end
107
-
108
- def qualify href
109
-
110
- slash_added = ''
111
-
112
- if !href.start_with? '/'
113
- slash_added = '/'
114
- end
115
-
116
- @base_url + slash_added + href
117
- end
118
-
119
- private
120
-
121
- def execute_request(http_method, href, body)
122
-
123
- request = Request.new(http_method, href, nil, Hash.new, body)
124
- apply_default_request_headers request
125
- response = @request_executor.execute_request request
126
-
127
- result = response.body.length > 0 ? MultiJson.load(response.body) : ''
128
-
129
- if response.error?
130
- error = Error.new result
131
- raise ResourceError.new error
132
- end
133
-
134
- result
135
- end
136
-
137
- def apply_default_request_headers request
138
-
139
- request.http_headers.store 'Accept', 'application/json'
140
- request.http_headers.store 'User-Agent', 'Stormpath-RubySDK/' + Stormpath::VERSION
141
-
142
- if !request.body.nil? and request.body.length > 0
143
- request.http_headers.store 'Content-Type', 'application/json'
144
- end
145
- end
146
-
147
- def save_resource href, resource, return_type
148
-
149
- assert_not_nil resource, "resource argument cannot be null."
150
- assert_not_nil return_type, "returnType class cannot be null."
151
- assert_kind_of Stormpath::Resource::Resource, resource, "resource argument must be instance of Stormpath::Resource::Resource"
152
-
153
- q_href = href
154
-
155
- if needs_to_be_fully_qualified q_href
156
- q_href = qualify q_href
157
- end
158
-
159
- response = execute_request('post', q_href, MultiJson.dump(to_hash(resource)))
160
- @resource_factory.instantiate(return_type, response.to_hash)
161
-
162
- end
163
-
164
- def get_base_url *base_url
165
- (!base_url.empty? and !base_url[0].nil?) ?
166
- base_url[0] :
167
- "https://" + DEFAULT_SERVER_HOST + "/v" + DEFAULT_API_VERSION.to_s
168
- end
169
-
170
- def to_hash resource
171
-
172
- property_names = resource.get_property_names
173
- properties = Hash.new
174
-
175
- property_names.each do |name|
176
-
177
- property = resource.get_property name
178
-
179
- if property.kind_of? Hash
180
-
181
- property = to_simple_reference name, property
182
-
183
- end
184
-
185
- properties.store name, property
186
-
187
- end
188
-
189
- properties
190
-
191
- end
192
-
193
- def to_simple_reference property_name, hash
194
-
195
- href_prop_name = Resource::Resource::HREF_PROP_NAME
196
- assert_true (hash.kind_of? Hash and !hash.empty? and hash.has_key? href_prop_name), "Nested resource " +
197
- "'#{property_name}' must have an 'href' property."
198
-
199
- href = hash[href_prop_name]
200
-
201
- {href_prop_name => href}
202
-
203
- end
204
-
205
- end
206
-
207
- end
208
-
209
- end
210
-
@@ -1,37 +0,0 @@
1
- #
2
- # Copyright 2012 Stormpath, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- #
16
- module Stormpath
17
-
18
- module DataStore
19
-
20
- class ResourceFactory
21
-
22
- def initialize(data_store)
23
-
24
- @data_store = data_store
25
- end
26
-
27
- def instantiate(clazz, constructor_args = {})
28
-
29
- clazz.new @data_store, constructor_args
30
- end
31
-
32
- end
33
-
34
- end
35
-
36
- end
37
-
@@ -1,32 +0,0 @@
1
- #
2
- # Copyright 2012 Stormpath, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- #
16
- module Stormpath
17
-
18
- module Resource
19
-
20
- class AccountList < CollectionResource
21
-
22
- def get_item_type
23
-
24
- Account
25
-
26
- end
27
- end
28
-
29
- end
30
-
31
- end
32
-
@@ -1,91 +0,0 @@
1
- #
2
- # Copyright 2012 Stormpath, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- #
16
- module Stormpath
17
-
18
- module Resource
19
-
20
- class CollectionResource < Resource
21
-
22
- OFFSET = "offset"
23
- LIMIT = "limit"
24
- ITEMS = "items"
25
-
26
- def each(&block)
27
- get_current_page.items.each(&block)
28
- end
29
-
30
- protected
31
-
32
- def get_offset
33
- get_property OFFSET
34
- end
35
-
36
- def get_limit
37
- get_property LIMIT
38
- end
39
-
40
- def get_current_page
41
-
42
- value = get_property ITEMS
43
- items = to_resource_array value
44
-
45
- Page.new get_offset, get_limit, items
46
- end
47
-
48
- def to_resource clazz, properties
49
- self.data_store.instantiate clazz, properties
50
- end
51
-
52
- private
53
-
54
- def to_resource_array vals
55
-
56
- clazz = get_item_type
57
- items = Array.new
58
-
59
- if vals.is_a? Array
60
-
61
- i = 0
62
- vals.each { |val|
63
- resource = to_resource clazz, val
64
- items[i] = resource
65
- i = i + 1
66
- }
67
-
68
- end
69
-
70
- items
71
-
72
- end
73
-
74
- end
75
-
76
-
77
- class Page
78
-
79
- attr_reader :offset, :limit, :items
80
-
81
- def initialize offset, limit, items
82
- @offset = offset
83
- @limit = limit
84
- @items = items
85
- end
86
-
87
- end
88
-
89
- end
90
- end
91
-
@@ -1,30 +0,0 @@
1
- #
2
- # Copyright 2012 Stormpath, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- #
16
- module Stormpath
17
-
18
- module Resource
19
-
20
- class DirectoryList < CollectionResource
21
-
22
- def get_item_type
23
- Directory
24
- end
25
-
26
- end
27
-
28
- end
29
- end
30
-
@@ -1,32 +0,0 @@
1
- #
2
- # Copyright 2012 Stormpath, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- #
16
- module Stormpath
17
-
18
- module Resource
19
-
20
- class GroupMembershipList < CollectionResource
21
-
22
- def get_item_type
23
-
24
- GroupMembership
25
-
26
- end
27
-
28
- end
29
-
30
- end
31
-
32
- end
@@ -1,28 +0,0 @@
1
- #
2
- # Copyright 2012 Stormpath, Inc.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- #
16
- module Stormpath
17
-
18
- module Resource
19
-
20
- class InstanceResource < Resource
21
-
22
- def save
23
- data_store.save self
24
- end
25
- end
26
- end
27
-
28
- end