gcloud 0.1.0 → 0.1.1

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 (67) hide show
  1. checksums.yaml +13 -5
  2. data/AUTHENTICATION.md +71 -0
  3. data/CHANGELOG.md +5 -0
  4. data/README.md +10 -15
  5. data/lib/gcloud.rb +30 -0
  6. data/lib/gcloud/backoff.rb +3 -0
  7. data/lib/gcloud/credentials.rb +47 -30
  8. data/lib/gcloud/datastore.rb +246 -15
  9. data/lib/gcloud/datastore/connection.rb +4 -2
  10. data/lib/gcloud/datastore/credentials.rb +3 -1
  11. data/lib/gcloud/datastore/dataset.rb +130 -25
  12. data/lib/gcloud/datastore/dataset/lookup_results.rb +1 -0
  13. data/lib/gcloud/datastore/dataset/query_results.rb +7 -5
  14. data/lib/gcloud/datastore/entity.rb +99 -17
  15. data/lib/gcloud/datastore/errors.rb +13 -2
  16. data/lib/gcloud/datastore/key.rb +133 -2
  17. data/lib/gcloud/datastore/properties.rb +6 -1
  18. data/lib/gcloud/datastore/proto.rb +2 -1
  19. data/lib/gcloud/datastore/query.rb +4 -4
  20. data/lib/gcloud/datastore/transaction.rb +3 -0
  21. data/lib/gcloud/storage.rb +280 -13
  22. data/lib/gcloud/storage/bucket.rb +248 -11
  23. data/lib/gcloud/storage/bucket/acl.rb +631 -4
  24. data/lib/gcloud/storage/bucket/list.rb +1 -0
  25. data/lib/gcloud/storage/connection.rb +1 -0
  26. data/lib/gcloud/storage/credentials.rb +3 -1
  27. data/lib/gcloud/storage/errors.rb +9 -1
  28. data/lib/gcloud/storage/file.rb +231 -6
  29. data/lib/gcloud/storage/file/acl.rb +365 -2
  30. data/lib/gcloud/storage/file/list.rb +1 -0
  31. data/lib/gcloud/storage/file/verifier.rb +1 -0
  32. data/lib/gcloud/storage/project.rb +119 -10
  33. data/lib/gcloud/version.rb +18 -3
  34. metadata +33 -80
  35. data/.gemtest +0 -0
  36. data/.rubocop.yml +0 -17
  37. data/Manifest.txt +0 -66
  38. data/Rakefile +0 -35
  39. data/gcloud.gemspec +0 -63
  40. data/rakelib/console.rake +0 -28
  41. data/rakelib/manifest.rake +0 -24
  42. data/rakelib/proto.rake +0 -17
  43. data/rakelib/rubocop.rake +0 -17
  44. data/rakelib/test.rake +0 -144
  45. data/test/gcloud/datastore/proto/test_cursor.rb +0 -36
  46. data/test/gcloud/datastore/proto/test_direction.rb +0 -60
  47. data/test/gcloud/datastore/proto/test_operator.rb +0 -76
  48. data/test/gcloud/datastore/proto/test_value.rb +0 -231
  49. data/test/gcloud/datastore/test_connection.rb +0 -93
  50. data/test/gcloud/datastore/test_credentials.rb +0 -38
  51. data/test/gcloud/datastore/test_dataset.rb +0 -413
  52. data/test/gcloud/datastore/test_entity.rb +0 -161
  53. data/test/gcloud/datastore/test_entity_exclude.rb +0 -225
  54. data/test/gcloud/datastore/test_key.rb +0 -189
  55. data/test/gcloud/datastore/test_query.rb +0 -271
  56. data/test/gcloud/datastore/test_transaction.rb +0 -121
  57. data/test/gcloud/storage/test_backoff.rb +0 -127
  58. data/test/gcloud/storage/test_bucket.rb +0 -270
  59. data/test/gcloud/storage/test_bucket_acl.rb +0 -253
  60. data/test/gcloud/storage/test_default_acl.rb +0 -256
  61. data/test/gcloud/storage/test_file.rb +0 -221
  62. data/test/gcloud/storage/test_file_acl.rb +0 -367
  63. data/test/gcloud/storage/test_project.rb +0 -180
  64. data/test/gcloud/storage/test_storage.rb +0 -29
  65. data/test/gcloud/storage/test_verifier.rb +0 -62
  66. data/test/gcloud/test_version.rb +0 -8
  67. data/test/helper.rb +0 -91
@@ -1,161 +0,0 @@
1
- # Copyright 2014 Google Inc. All rights reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require "helper"
16
- require "gcloud/datastore"
17
-
18
- describe Gcloud::Datastore::Entity do
19
-
20
- let(:entity) do
21
- Gcloud::Datastore::Entity.new.tap do |ent|
22
- ent.key = Gcloud::Datastore::Key.new "User", "username"
23
- ent["name"] = "User McUser"
24
- ent["email"] = "user@example.net"
25
- end
26
- end
27
-
28
- it "creates instances with .new" do
29
- # Calling entity here creates by calling new
30
- entity.wont_be :nil?
31
- entity.properties["name"].must_equal "User McUser"
32
- entity.properties["email"].must_equal "user@example.net"
33
- end
34
-
35
- it "returns a correct protocol buffer object" do
36
- proto = entity.to_proto
37
-
38
- # Key values
39
- proto.key.path_element.count.must_equal 1
40
- proto.key.path_element.last.kind.must_equal "User"
41
- proto.key.path_element.last.id.must_be :nil?
42
- proto.key.path_element.last.name.must_equal "username"
43
-
44
- # Property values
45
- proto.property.count.must_equal 2
46
- proto.property.find { |p| p.name == "name" }.value.string_value.must_equal entity["name"]
47
- proto.property.find { |p| p.name == "email" }.value.string_value.must_equal entity["email"]
48
- end
49
-
50
- it "can be created with a protocol buffer object" do
51
- proto = Gcloud::Datastore::Proto::Entity.new
52
- proto.key = Gcloud::Datastore::Proto::Key.new
53
- proto.key.path_element = [Gcloud::Datastore::Proto::Key::PathElement.new]
54
- proto.key.path_element.first.kind = "User"
55
- proto.key.path_element.first.id = 123456
56
- proto.property = [Gcloud::Datastore::Proto::Property.new,
57
- Gcloud::Datastore::Proto::Property.new]
58
- proto.property.first.name = "name"
59
- proto.property.first.value = Gcloud::Datastore::Proto.to_proto_value "User McNumber"
60
- proto.property.last.name = "email"
61
- proto.property.last.value = Gcloud::Datastore::Proto.to_proto_value "number@example.net"
62
-
63
- entity_from_proto = Gcloud::Datastore::Entity.from_proto proto
64
-
65
- entity_from_proto.key.kind.must_equal "User"
66
- entity_from_proto.key.id.must_equal 123456
67
- entity_from_proto.key.name.must_be :nil?
68
- entity_from_proto.properties["name"].must_equal "User McNumber"
69
- entity_from_proto.properties["email"].must_equal "number@example.net"
70
- end
71
-
72
- it "can store other entities as properties" do
73
- task1 = Gcloud::Datastore::Entity.new.tap do |t|
74
- t.key = Gcloud::Datastore::Key.new "Task", 1111
75
- t["description"] = "can persist entities"
76
- t["completed"] = true
77
- end
78
- task2 = Gcloud::Datastore::Entity.new.tap do |t|
79
- t.key = Gcloud::Datastore::Key.new "Task", 2222
80
- t["description"] = "can persist lists"
81
- t["completed"] = true
82
- end
83
- entity["tasks"] = [task1, task2]
84
-
85
- proto = entity.to_proto
86
-
87
- task_property = proto.property.last
88
- task_property.name.must_equal "tasks"
89
- task_property.value.list_value.wont_be :nil?
90
- task_property.value.list_value.count.must_equal 2
91
- proto_task_1 = task_property.value.list_value.first
92
- proto_task_2 = task_property.value.list_value.last
93
- proto_task_1.wont_be :nil?
94
- proto_task_2.wont_be :nil?
95
- proto_task_1.entity_value.wont_be :nil?
96
- proto_task_2.entity_value.wont_be :nil?
97
- proto_task_1.entity_value.property.find { |p| p.name == "description" }.value.string_value.must_equal "can persist entities"
98
- proto_task_2.entity_value.property.find { |p| p.name == "description" }.value.string_value.must_equal "can persist lists"
99
- end
100
-
101
- it "can store keys as properties" do
102
- list = Gcloud::Datastore::Entity.new.tap do |t|
103
- t.key = Gcloud::Datastore::Key.new "List", 1111
104
- t["description"] = "can persist keys"
105
- end
106
- key1 = Gcloud::Datastore::Key.new "Task", 1111
107
-
108
- list["head"] = key1
109
-
110
- # Do this multiple times to make sure the call to Key.from_proto
111
- # isn't modifying the original key stored in the entity's property.
112
- 5.times do
113
- assert_equal key1.path, list["head"].path
114
- end
115
-
116
- proto = list.to_proto
117
-
118
- key_property = proto.property.last
119
- key_property.name.must_equal "head"
120
-
121
- key_value = key_property.value.key_value
122
- key_value.wont_be :nil?
123
- key_value.path_element.first.kind.must_equal key1.kind
124
- key_value.path_element.first.name.must_equal key1.name
125
- key_value.path_element.first.id.must_equal key1.id
126
- end
127
-
128
- it "raises when setting an unsupported property type" do
129
- error = assert_raises Gcloud::Datastore::PropertyError do
130
- entity["thing"] = OpenStruct.new
131
- end
132
- error.message.must_equal "A property of type OpenStruct is not supported."
133
- end
134
-
135
- it "raises when setting a key when persisted" do
136
- proto = Gcloud::Datastore::Proto::Entity.new
137
- proto.key = Gcloud::Datastore::Proto::Key.new
138
- proto.key.path_element = [Gcloud::Datastore::Proto::Key::PathElement.new]
139
- proto.key.path_element.first.kind = "User"
140
- proto.key.path_element.first.id = 123456
141
- proto.property = [Gcloud::Datastore::Proto::Property.new,
142
- Gcloud::Datastore::Proto::Property.new]
143
- proto.property.first.name = "name"
144
- proto.property.first.value = Gcloud::Datastore::Proto.to_proto_value "User McNumber"
145
- proto.property.last.name = "email"
146
- proto.property.last.value = Gcloud::Datastore::Proto.to_proto_value "number@example.net"
147
-
148
- entity_from_proto = Gcloud::Datastore::Entity.from_proto proto
149
-
150
- entity_from_proto.must_be :persisted?
151
- entity_from_proto.key.must_be :frozen?
152
-
153
- assert_raises RuntimeError do
154
- entity_from_proto.key = Gcloud::Datastore::Key.new "User", 456789
155
- end
156
-
157
- assert_raises RuntimeError do
158
- entity_from_proto.key.id = 456789
159
- end
160
- end
161
- end
@@ -1,225 +0,0 @@
1
- # Copyright 2014 Google Inc. All rights reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require "helper"
16
- require "gcloud/datastore"
17
-
18
- describe Gcloud::Datastore::Entity, :exclude_from_indexes do
19
-
20
- let(:entity) do
21
- Gcloud::Datastore::Entity.new.tap do |ent|
22
- ent.key = Gcloud::Datastore::Key.new "User", "username"
23
- ent["name"] = "User McUser"
24
- ent["email"] = "user@example.net"
25
- end
26
- end
27
-
28
- it "doesn't exclude from indexes by default" do
29
- refute entity.exclude_from_indexes?("name")
30
- refute entity.exclude_from_indexes?("email")
31
-
32
- proto = entity.to_proto
33
-
34
- assert proto.property.find { |p| p.name == "name" }.value.indexed.must_equal true
35
- assert proto.property.find { |p| p.name == "email" }.value.indexed.must_equal true
36
- end
37
-
38
- it "excludes when setting a boolean" do
39
- entity["age"] = 21
40
- entity.exclude_from_indexes! "age", true
41
-
42
- entity.exclude_from_indexes?("age").must_equal true
43
-
44
- proto = entity.to_proto
45
-
46
- proto.property.find { |p| p.name == "age" }.value.indexed.must_equal false
47
- end
48
-
49
- it "excludes when setting a Proc" do
50
- entity["age"] = 21
51
- entity.exclude_from_indexes! "age" do |age|
52
- age > 18
53
- end
54
-
55
- entity.exclude_from_indexes?("age").must_equal true
56
-
57
- proto = entity.to_proto
58
-
59
- proto.property.find { |p| p.name == "age" }.value.indexed.must_equal false
60
-
61
- # And now the inverse, the Proc evaluates to false
62
-
63
- entity.exclude_from_indexes! "age" do |age|
64
- age < 18
65
- end
66
-
67
- entity.exclude_from_indexes?("age").must_equal false
68
-
69
- proto = entity.to_proto
70
-
71
- proto.property.find { |p| p.name == "age" }.value.indexed.must_equal true
72
- end
73
-
74
- it "excludes when setting an Array on a non array value" do
75
- entity["age"] = 21
76
- entity.exclude_from_indexes! "age", [true, false, true, false]
77
-
78
- entity.exclude_from_indexes?("age").must_equal true
79
-
80
- proto = entity.to_proto
81
-
82
- proto.property.find { |p| p.name == "age" }.value.indexed.must_equal false
83
-
84
- # And now the inverse, the first value is false
85
-
86
- entity.exclude_from_indexes! "age", [false, true, false, true]
87
-
88
- entity.exclude_from_indexes?("age").must_equal false
89
-
90
- proto = entity.to_proto
91
-
92
- proto.property.find { |p| p.name == "age" }.value.indexed.must_equal true
93
- end
94
-
95
- describe Array do
96
- it "doesn't exclude Array values from indexes by default" do
97
- entity["tags"] = ["ruby", "code"]
98
-
99
- entity.exclude_from_indexes?("tags").must_equal [false, false]
100
-
101
- proto = entity.to_proto
102
-
103
- tag_proto = proto.property.find { |p| p.name == "tags" }.value
104
- tag_proto.indexed.must_be :nil? # list values must always be unset
105
- tag_proto.list_value.map { |value| value.indexed }.must_equal [true, true]
106
- end
107
-
108
- it "excludes an Array when setting a boolean" do
109
- entity["tags"] = ["ruby", "code"]
110
- entity.exclude_from_indexes! "tags", true
111
-
112
- entity.exclude_from_indexes?("tags").must_equal [true, true]
113
-
114
- proto = entity.to_proto
115
-
116
- tag_proto = proto.property.find { |p| p.name == "tags" }.value
117
- tag_proto.indexed.must_be :nil? # list values must always be unset
118
- tag_proto.list_value.map { |value| value.indexed }.must_equal [false, false]
119
- end
120
-
121
- it "excludes an Array when setting a Proc" do
122
- entity["tags"] = ["ruby", "code"]
123
- entity.exclude_from_indexes! "tags" do |tag|
124
- tag =~ /r/
125
- end
126
-
127
- entity.exclude_from_indexes?("tags").must_equal [true, false]
128
-
129
- proto = entity.to_proto
130
-
131
- tag_proto = proto.property.find { |p| p.name == "tags" }.value
132
- tag_proto.indexed.must_be :nil? # list values must always be unset
133
- tag_proto.list_value.map { |value| value.indexed }.must_equal [false, true]
134
-
135
- # And now the inverse, the Proc evaluates to false
136
-
137
- entity["tags"] = ["ruby", "code"]
138
- entity.exclude_from_indexes! "tags" do |tag|
139
- tag =~ /c/
140
- end
141
-
142
- entity.exclude_from_indexes?("tags").must_equal [false, true]
143
-
144
- proto = entity.to_proto
145
-
146
- tag_proto = proto.property.find { |p| p.name == "tags" }.value
147
- tag_proto.indexed.must_be :nil? # list values must always be unset
148
- tag_proto.list_value.map { |value| value.indexed }.must_equal [true, false]
149
- end
150
-
151
- it "excludes an Array when setting an Array" do
152
- entity["tags"] = ["ruby", "code"]
153
- entity.exclude_from_indexes! "tags", [true, false]
154
-
155
- entity.exclude_from_indexes?("tags").must_equal [true, false]
156
-
157
- proto = entity.to_proto
158
-
159
- tag_proto = proto.property.find { |p| p.name == "tags" }.value
160
- tag_proto.indexed.must_be :nil? # list values must always be unset
161
- tag_proto.list_value.map { |value| value.indexed }.must_equal [false, true]
162
- end
163
-
164
- it "excludes an Array when setting an Array that is too small" do
165
- entity["tags"] = ["ruby", "code", "google", "cloud"]
166
- entity.exclude_from_indexes! "tags", [true, false]
167
-
168
- # the default is to not exclude when the array is too small
169
- entity.exclude_from_indexes?("tags").must_equal [true, false, false, false]
170
-
171
- proto = entity.to_proto
172
-
173
- tag_proto = proto.property.find { |p| p.name == "tags" }.value
174
- tag_proto.indexed.must_be :nil? # list values must always be unset
175
- tag_proto.list_value.map { |value| value.indexed }.must_equal [false, true, true, true]
176
- end
177
-
178
- it "excludes an Array when setting an Array that is too big" do
179
- entity["tags"] = ["ruby", "code"]
180
- entity.exclude_from_indexes! "tags", [true, false, true, false, true, false]
181
-
182
- entity.exclude_from_indexes?("tags").must_equal [true, false]
183
-
184
- proto = entity.to_proto
185
-
186
- tag_proto = proto.property.find { |p| p.name == "tags" }.value
187
- tag_proto.indexed.must_be :nil? # list values must always be unset
188
- tag_proto.list_value.map { |value| value.indexed }.must_equal [false, true]
189
-
190
- # Now add to the entity and get the previously stored exclude values
191
-
192
- entity["tags"] = ["ruby", "code", "google", "cloud"]
193
-
194
- entity.exclude_from_indexes?("tags").must_equal [true, false, true, false]
195
-
196
- proto = entity.to_proto
197
-
198
- tag_proto = proto.property.find { |p| p.name == "tags" }.value
199
- tag_proto.indexed.must_be :nil? # list values must always be unset
200
- tag_proto.list_value.map { |value| value.indexed }.must_equal [false, true, false, true]
201
- end
202
- end
203
-
204
- describe "Edge Cases" do
205
- it "recalculates when changing from a single value to an array" do
206
- entity["tags"] = "ruby"
207
-
208
- entity.exclude_from_indexes?("tags").must_equal false
209
-
210
- entity.exclude_from_indexes! "tags", true
211
-
212
- entity.exclude_from_indexes?("tags").must_equal true
213
-
214
- entity["tags"] = ["ruby", "code"]
215
-
216
- entity.exclude_from_indexes?("tags").must_equal [true, true]
217
-
218
- entity.exclude_from_indexes! "tags", [false, false]
219
-
220
- entity["tags"] = "ruby"
221
-
222
- entity.exclude_from_indexes?("tags").must_equal false
223
- end
224
- end
225
- end
@@ -1,189 +0,0 @@
1
- # Copyright 2014 Google Inc. All rights reserved.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require "helper"
16
- require "gcloud/datastore"
17
-
18
- describe Gcloud::Datastore::Key do
19
-
20
- it "behaves correctly when empty" do
21
- key = Gcloud::Datastore::Key.new
22
- key.kind.must_be :nil?
23
- key.id.must_be :nil?
24
- key.name.must_be :nil?
25
- key.dataset_id.must_be :nil?
26
- key.namespace.must_be :nil?
27
- end
28
-
29
- it "creates instances with .new" do
30
- key = Gcloud::Datastore::Key.new "ThisThing", 1234
31
- key.kind.must_equal "ThisThing"
32
- key.id.must_equal 1234
33
- key.name.must_be :nil?
34
-
35
- key = Gcloud::Datastore::Key.new "ThisThing", "charlie"
36
- key.kind.must_equal "ThisThing"
37
- key.id.must_be :nil?
38
- key.name.must_equal "charlie"
39
- end
40
-
41
- it "can set a parent" do
42
- key = Gcloud::Datastore::Key.new "ThisThing", 1234
43
- key.kind.must_equal "ThisThing"
44
- key.id.must_equal 1234
45
- key.name.must_be :nil?
46
-
47
- key.parent.must_be :nil?
48
- key.parent = Gcloud::Datastore::Key.new "ThatThing", 6789
49
- key.parent.wont_be :nil?
50
- key.parent.kind.must_equal "ThatThing"
51
- key.parent.id.must_equal 6789
52
- key.parent.name.must_be :nil?
53
- end
54
-
55
- it "can set a dataset_id" do
56
- key = Gcloud::Datastore::Key.new "ThisThing", 1234
57
- key.kind.must_equal "ThisThing"
58
- key.id.must_equal 1234
59
- key.name.must_be :nil?
60
-
61
- key.dataset_id.must_be :nil?
62
- key.dataset_id = "custom-ds"
63
- key.dataset_id.wont_be :nil?
64
- key.dataset_id.must_equal "custom-ds"
65
- end
66
-
67
- it "can set a namespace" do
68
- key = Gcloud::Datastore::Key.new "ThisThing", 1234
69
- key.kind.must_equal "ThisThing"
70
- key.id.must_equal 1234
71
- key.name.must_be :nil?
72
-
73
- key.namespace.must_be :nil?
74
- key.namespace = "custom-ns"
75
- key.namespace.wont_be :nil?
76
- key.namespace.must_equal "custom-ns"
77
- end
78
-
79
- describe "path" do
80
- it "returns kind and id" do
81
- key = Gcloud::Datastore::Key.new "Task", 123456
82
- key.path.must_equal [["Task", 123456]]
83
- end
84
- it "returns kind and name" do
85
- key = Gcloud::Datastore::Key.new "Task", "todos"
86
- key.path.must_equal [["Task", "todos"]]
87
- end
88
- it "returns parent when present" do
89
- key = Gcloud::Datastore::Key.new "Task", "todos"
90
- key.parent = Gcloud::Datastore::Key.new "User", "username"
91
- key.path.must_equal [["User", "username"], ["Task", "todos"]]
92
- end
93
- it "returns all parents when present" do
94
- key = Gcloud::Datastore::Key.new "Task", "todos"
95
- key.parent = Gcloud::Datastore::Key.new "User", "username"
96
- key.parent.parent = Gcloud::Datastore::Key.new "Org", "company"
97
- key.path.must_equal [["Org", "company"], ["User", "username"], ["Task", "todos"]]
98
- end
99
- end
100
-
101
- it "knows if it is complete or not" do
102
- key = Gcloud::Datastore::Key.new "Task"
103
- key.id.must_be :nil?
104
- key.name.must_be :nil?
105
- key.wont_be :complete?
106
- key.must_be :incomplete?
107
-
108
- key.id = 123455
109
- key.id.wont_be :nil?
110
- key.name.must_be :nil?
111
- key.must_be :complete?
112
- key.wont_be :incomplete?
113
-
114
- key.name = "description"
115
- key.id.must_be :nil?
116
- key.name.wont_be :nil?
117
- key.must_be :complete?
118
- key.wont_be :incomplete?
119
- end
120
-
121
- it "isn't complete is missing kind" do
122
- key = Gcloud::Datastore::Key.new "Task"
123
- key.kind = nil
124
- key.kind.must_be :nil?
125
- key.id.must_be :nil?
126
- key.name.must_be :nil?
127
- key.wont_be :complete?
128
- key.must_be :incomplete?
129
-
130
- key.id = 123455
131
- key.kind.must_be :nil?
132
- key.id.wont_be :nil?
133
- key.name.must_be :nil?
134
- key.wont_be :complete?
135
- key.must_be :incomplete?
136
-
137
- key.name = "description"
138
- key.kind.must_be :nil?
139
- key.id.must_be :nil?
140
- key.name.wont_be :nil?
141
- key.wont_be :complete?
142
- key.must_be :incomplete?
143
- end
144
-
145
- it "returns a correct protocol buffer object" do
146
- key = Gcloud::Datastore::Key.new "ThisThing", 1234
147
- proto = key.to_proto
148
- proto.path_element.count.must_equal 1
149
- proto.path_element.last.kind.must_equal "ThisThing"
150
- proto.path_element.last.id.must_equal 1234
151
- proto.path_element.last.name.must_be :nil?
152
- proto.partition_id.dataset_id.must_be :nil?
153
- proto.partition_id.namespace.must_be :nil?
154
-
155
- key = Gcloud::Datastore::Key.new "ThisThing", "charlie"
156
- key.parent = Gcloud::Datastore::Key.new "ThatThing", "henry"
157
- key.dataset_id = "custom-ds"
158
- key.namespace = "custom-ns"
159
- proto = key.to_proto
160
- proto.path_element.count.must_equal 2
161
- proto.path_element.first.kind.must_equal "ThatThing"
162
- proto.path_element.first.id.must_be :nil?
163
- proto.path_element.first.name.must_equal "henry"
164
- proto.path_element.last.kind.must_equal "ThisThing"
165
- proto.path_element.last.id.must_be :nil?
166
- proto.path_element.last.name.must_equal "charlie"
167
- proto.partition_id.dataset_id.must_equal "custom-ds"
168
- proto.partition_id.namespace.must_equal "custom-ns"
169
- end
170
-
171
- it "can be created with a protocol buffer object" do
172
- proto = Gcloud::Datastore::Proto::Key.new
173
- proto.path_element = [Gcloud::Datastore::Proto::Key::PathElement.new]
174
- proto.path_element.first.kind = "AnotherThing"
175
- proto.path_element.first.id = 56789
176
- proto.partition_id = Gcloud::Datastore::Proto::PartitionId.new
177
- proto.partition_id.dataset_id = "custom-ds"
178
- proto.partition_id.namespace = "custom-ns"
179
- key = Gcloud::Datastore::Key.from_proto proto
180
-
181
- key.wont_be :nil?
182
- key.kind.must_equal "AnotherThing"
183
- key.id.must_equal 56789
184
- key.name.must_be :nil?
185
- key.dataset_id.must_equal "custom-ds"
186
- key.namespace.must_equal "custom-ns"
187
- key.must_be :frozen?
188
- end
189
- end