parse-ruby-client 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/.travis.yml +3 -2
  2. data/Gemfile +12 -12
  3. data/Gemfile.lock +26 -12
  4. data/OLD_README.md +255 -0
  5. data/README.md +1038 -144
  6. data/Rakefile +2 -10
  7. data/VERSION +1 -1
  8. data/features.md +11 -11
  9. data/fixtures/vcr_cassettes/test_acls_arent_objects.yml +180 -0
  10. data/fixtures/vcr_cassettes/test_array_add.yml +20 -20
  11. data/fixtures/vcr_cassettes/test_array_add_pointerizing.yml +239 -0
  12. data/fixtures/vcr_cassettes/test_array_add_unique.yml +180 -0
  13. data/fixtures/vcr_cassettes/test_batch_create_object.yml +53 -80
  14. data/fixtures/vcr_cassettes/test_batch_delete_object.yml +303 -428
  15. data/fixtures/vcr_cassettes/test_batch_run.yml +53 -74
  16. data/fixtures/vcr_cassettes/test_batch_update_object.yml +303 -432
  17. data/fixtures/vcr_cassettes/test_circular_save.yml +121 -0
  18. data/fixtures/vcr_cassettes/test_created_at.yml +53 -74
  19. data/fixtures/vcr_cassettes/test_decrement.yml +121 -0
  20. data/fixtures/vcr_cassettes/test_deep_parse.yml +154 -218
  21. data/fixtures/vcr_cassettes/test_destroy.yml +104 -144
  22. data/fixtures/vcr_cassettes/test_eq_pointerize.yml +239 -0
  23. data/fixtures/vcr_cassettes/test_equality.yml +180 -0
  24. data/fixtures/vcr_cassettes/test_get.yml +104 -146
  25. data/fixtures/vcr_cassettes/test_get_missing.yml +60 -0
  26. data/fixtures/vcr_cassettes/test_include.yml +27 -27
  27. data/fixtures/vcr_cassettes/test_new_model.yml +53 -146
  28. data/fixtures/vcr_cassettes/test_new_object.yml +53 -74
  29. data/fixtures/vcr_cassettes/test_nils_delete_keys.yml +155 -216
  30. data/fixtures/vcr_cassettes/test_parse_delete.yml +204 -284
  31. data/fixtures/vcr_cassettes/test_pointer.yml +53 -74
  32. data/fixtures/vcr_cassettes/test_save_with_sub_objects.yml +298 -0
  33. data/fixtures/vcr_cassettes/test_saving_boolean_values.yml +121 -0
  34. data/fixtures/vcr_cassettes/test_server_update.yml +257 -358
  35. data/fixtures/vcr_cassettes/test_simple_save.yml +53 -74
  36. data/fixtures/vcr_cassettes/test_text_file_save.yml +53 -161
  37. data/fixtures/vcr_cassettes/test_update.yml +104 -144
  38. data/fixtures/vcr_cassettes/test_updated_at.yml +104 -144
  39. data/fixtures/vcr_cassettes/test_user_save.yml +10 -10
  40. data/lib/parse/client.rb +43 -6
  41. data/lib/parse/datatypes.rb +14 -35
  42. data/lib/parse/error.rb +8 -0
  43. data/lib/parse/object.rb +25 -20
  44. data/lib/parse/protocol.rb +3 -4
  45. data/lib/parse/query.rb +10 -9
  46. data/lib/parse/util.rb +36 -2
  47. data/parse-ruby-client.gemspec +22 -18
  48. data/test/helper.rb +33 -5
  49. data/test/test_batch.rb +1 -4
  50. data/test/test_client.rb +59 -7
  51. data/test/test_cloud.rb +3 -7
  52. data/test/test_datatypes.rb +6 -7
  53. data/test/test_file.rb +9 -10
  54. data/test/test_model.rb +1 -4
  55. data/test/test_object.rb +148 -6
  56. data/test/test_push.rb +1 -5
  57. data/test/test_query.rb +13 -3
  58. data/test/test_throttle.rb +1 -3
  59. data/test/test_user.rb +1 -5
  60. metadata +23 -19
  61. data/fixtures/vcr_cassettes/test_array_add_relation.yml +0 -321
  62. data/fixtures/vcr_cassettes/test_cloud_function.yml +0 -81
  63. data/fixtures/vcr_cassettes/test_file_save.yml +0 -87
  64. data/fixtures/vcr_cassettes/test_image_file_associate_with_object.yml +0 -2034
  65. data/fixtures/vcr_cassettes/test_image_file_save.yml +0 -1957
  66. data/fixtures/vcr_cassettes/test_object_id.yml +0 -83
  67. data/fixtures/vcr_cassettes/test_request_batch.yml +0 -62
@@ -1,8 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- Parse.init
4
-
5
- class TestCloud < Test::Unit::TestCase
3
+ class TestCloud < ParseTestCase
6
4
  # functions stored in test/cloud_functions/MyCloudCode
7
5
  # see https://parse.com/docs/cloud_code_guide to learn how to use Parse Cloud Code
8
6
  #
@@ -10,15 +8,13 @@ class TestCloud < Test::Unit::TestCase
10
8
  # response.success(request.params);
11
9
  # });
12
10
 
13
- def setup
14
- Parse.init
15
- end
16
-
17
11
  def test_cloud_function_initialize
18
12
  assert_not_equal nil, Parse::Cloud::Function.new("trivial")
19
13
  end
20
14
 
21
15
  def test_cloud_function
16
+ omit("this should automate the parse deploy command by committing that binary to the repo")
17
+
22
18
  VCR.use_cassette('test_cloud_function', :record => :new_episodes) do
23
19
  function = Parse::Cloud::Function.new("trivial")
24
20
  params = {"foo" => "bar"}
@@ -11,6 +11,12 @@ class TestDatatypes < Test::Unit::TestCase
11
11
  assert_equal p.to_json, "{\"__type\":\"Pointer\",\"#{Parse::Protocol::KEY_CLASS_NAME}\":\"DatatypeTestClass\",\"#{Parse::Protocol::KEY_OBJECT_ID}\":\"12345abcd\"}"
12
12
  end
13
13
 
14
+ def test_pointer_make
15
+ p = Parse::Pointer.make("SomeClass", "someId")
16
+ assert_equal "SomeClass", p.class_name
17
+ assert_equal "someId", p.id
18
+ end
19
+
14
20
  def test_date
15
21
  date_time = DateTime.now
16
22
  data = date_time
@@ -49,13 +55,6 @@ class TestDatatypes < Test::Unit::TestCase
49
55
  assert_equal increment.to_json, "{\"__op\":\"Increment\",\"amount\":#{amount}}"
50
56
  end
51
57
 
52
- def test_decrement
53
- amount = 5
54
- increment = Parse::Decrement.new amount
55
-
56
- assert_equal increment.to_json, "{\"__op\":\"Decrement\",\"amount\":#{amount}}"
57
- end
58
-
59
58
  def test_geopoint
60
59
  # '{"location": {"__type":"GeoPoint", "latitude":40.0, "longitude":-30.0}}'
61
60
  data = {
@@ -1,15 +1,12 @@
1
1
  require 'helper'
2
2
 
3
- class TestFile < Test::Unit::TestCase
4
- def setup
5
- Parse.init
6
- end
3
+ class TestFile < ParseTestCase
7
4
 
8
5
  def test_file_save
9
6
  VCR.use_cassette('test_text_file_save', :record => :new_episodes) do
10
7
  tf = Parse::File.new({
11
- :body => "Hello World!",
12
- :local_filename => "hello.txt",
8
+ :body => "Hello World!",
9
+ :local_filename => "hello.txt",
13
10
  :content_type => "text/plain"
14
11
  })
15
12
  tf.save
@@ -26,8 +23,8 @@ class TestFile < Test::Unit::TestCase
26
23
  def test_image_save
27
24
  #VCR.use_cassette('test_image_file_save', :record => :new_episodes) do
28
25
  tf = Parse::File.new({
29
- :body => IO.read("test/parsers.jpg"),
30
- :local_filename => "parsers.jpg",
26
+ :body => IO.read("test/parsers.jpg"),
27
+ :local_filename => "parsers.jpg",
31
28
  :content_type => "image/jpeg"
32
29
  })
33
30
  tf.save
@@ -43,8 +40,8 @@ class TestFile < Test::Unit::TestCase
43
40
  def test_associate_with_object
44
41
  #VCR.use_cassette('test_image_file_associate_with_object', :record => :new_episodes) do
45
42
  tf = Parse::File.new({
46
- :body => IO.read("test/parsers.jpg"),
47
- :local_filename => "parsers.jpg",
43
+ :body => IO.read("test/parsers.jpg"),
44
+ :local_filename => "parsers.jpg",
48
45
  :content_type => "image/jpeg"
49
46
  })
50
47
  tf.save
@@ -61,6 +58,8 @@ class TestFile < Test::Unit::TestCase
61
58
 
62
59
  assert object["photo"]
63
60
  assert object["objectId"]
61
+
62
+ object.refresh.save
64
63
  #end
65
64
  end
66
65
 
@@ -3,10 +3,7 @@ require 'helper'
3
3
  class TestModelObject < Parse::Model
4
4
  end
5
5
 
6
- class TestModel < Test::Unit::TestCase
7
- def setup
8
- Parse.init
9
- end
6
+ class TestModel < ParseTestCase
10
7
 
11
8
  def test_new
12
9
  VCR.use_cassette('test_new_model', :record => :new_episodes) do
@@ -1,9 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class TestObject < Test::Unit::TestCase
4
- def setup
5
- Parse.init
6
- end
3
+ class TestObject < ParseTestCase
7
4
 
8
5
  def test_new?
9
6
  VCR.use_cassette('test_new_object', :record => :new_episodes) do
@@ -36,6 +33,32 @@ class TestObject < Test::Unit::TestCase
36
33
  end
37
34
  end
38
35
 
36
+ def test_equality
37
+ VCR.use_cassette('test_equality', :record => :new_episodes) do
38
+ foo_1 = Parse::Object.new("Foo")
39
+ foo_2 = Parse::Object.new("Foo")
40
+
41
+ assert foo_1 != foo_2
42
+ assert foo_1 == foo_1
43
+
44
+ foo_1.save
45
+ assert foo_1 != foo_2
46
+ assert foo_2 != foo_1
47
+ assert foo_1.pointer != foo_2
48
+ assert foo_2 != foo_1.pointer
49
+ foo_2.save
50
+
51
+ assert foo_1 == foo_1
52
+ assert foo_1 != foo_2
53
+
54
+ assert foo_1 == foo_1.pointer
55
+ assert foo_1.pointer == foo_1
56
+
57
+ other_foo_1 = Parse.get("Foo", foo_1.id)
58
+ assert foo_1 == other_foo_1
59
+ end
60
+ end
61
+
39
62
  def test_created_at
40
63
  VCR.use_cassette('test_created_at', :record => :new_episodes) do
41
64
  post = Parse::Object.new "Post"
@@ -89,6 +112,18 @@ class TestObject < Test::Unit::TestCase
89
112
  end
90
113
  end
91
114
 
115
+ def test_acls_arent_objects
116
+ VCR.use_cassette('test_acls_arent_objects', :record => :new_episodes) do
117
+ post = Parse::Object.new("Post", "ACL" => {"*" => {"read"=>true}})
118
+ assert_equal Hash, post['ACL'].class
119
+ post.save
120
+ assert_equal Hash, post.refresh['ACL'].class
121
+
122
+ post = Parse.get("Post", post.id)
123
+ assert_equal Hash, post['ACL'].class
124
+ end
125
+ end
126
+
92
127
  def test_deep_as_json
93
128
  VCR.use_cassette('test_deep_as_json', :record => :new_episodes) do
94
129
  other = Parse::Object.new "Post"
@@ -108,6 +143,28 @@ class TestObject < Test::Unit::TestCase
108
143
  end
109
144
  end
110
145
 
146
+ def test_boolean_values_as_json
147
+ post = Parse::Object.new "Post"
148
+ post["read"] = false
149
+ post["published"] = true
150
+ safe_json_hash = JSON.parse post.safe_json
151
+ assert_equal false, safe_json_hash["read"]
152
+ assert_equal true, safe_json_hash["published"]
153
+ end
154
+
155
+ def test_saving_boolean_values
156
+ VCR.use_cassette('test_saving_boolean_values', :record => :new_episodes) do
157
+ post = Parse::Object.new "Post"
158
+ post["read"] = false
159
+ post["published"] = true
160
+ post.save
161
+ retrieved_post = Parse::Query.new("Post")
162
+ .eq("objectId", post["objectId"]).get.first
163
+ assert_equal false, retrieved_post["read"]
164
+ assert_equal true, retrieved_post["published"]
165
+ end
166
+ end
167
+
111
168
  def test_array_add
112
169
  VCR.use_cassette('test_array_add', :record => :new_episodes) do
113
170
  post = Parse::Object.new "Post"
@@ -123,7 +180,53 @@ class TestObject < Test::Unit::TestCase
123
180
  end
124
181
  end
125
182
 
183
+ def test_array_add_pointerizing
184
+ VCR.use_cassette('test_array_add_pointerizing', :record => :new_episodes) do
185
+ post = Parse::Object.new "Post"
186
+
187
+ comment = Parse::Object.new("Comment", "text" => "great post!")
188
+ comment.save
189
+ post.array_add("comments", comment)
190
+ assert_equal "great post!", post['comments'][0]['text']
191
+ post.save
192
+ assert_equal "great post!", post['comments'][0]['text']
193
+
194
+ post = Parse::Query.new("Post").eq("objectId", post.id).tap { |q| q.include = 'comments' }.get.first
195
+ assert_equal "great post!", post['comments'][0]['text']
196
+ post.save
197
+ assert_equal "great post!", post['comments'][0]['text']
198
+ end
199
+ end
200
+
201
+ def test_array_add_unique
202
+ VCR.use_cassette('test_array_add_unique', :record => :new_episodes) do
203
+ post = Parse::Object.new "Post"
204
+ post.save
205
+
206
+ comment = Parse::Object.new("Comment", "text" => "great post!")
207
+ comment.save
208
+
209
+ post.array_add_unique("comments", comment)
210
+ assert_equal "great post!", post['comments'][0]['text']
211
+ post.save
212
+ assert_equal comment, post['comments'][0]
213
+ assert post['comments'][0].instance_of?(Parse::Pointer) # save returns array pointerized
214
+ end
215
+ end
216
+
217
+ def test_decrement
218
+ VCR.use_cassette('test_decrement', :record => :new_episodes) do
219
+ post = Parse::Object.new "Post", 'count' => 1
220
+ post.save
221
+
222
+ post.decrement('count')
223
+ assert_equal 0, post['count']
224
+ end
225
+ end
226
+
126
227
  def test_array_add_relation
228
+ omit("broken test, saving Post results in ParseProtocolError: 111: can't add a relation to an non-relation field")
229
+
127
230
  VCR.use_cassette('test_array_add_relation', :record => :new_episodes) do
128
231
  post = Parse::Object.new "Post"
129
232
  post.save
@@ -133,11 +236,50 @@ class TestObject < Test::Unit::TestCase
133
236
 
134
237
  post.array_add_relation("comments", comment.pointer)
135
238
  post.save
136
-
239
+
137
240
  q = Parse::Query.new("Comment")
138
241
  q.related_to("comments", post.pointer)
139
242
  comments = q.get
140
- assert_equal comments.first["objectId"], comment["objectId"]
243
+ assert_equal comments.first["objectId"], comment["objectId"]
244
+ end
245
+ end
246
+
247
+ def test_save_with_sub_objects
248
+ VCR.use_cassette('test_save_with_sub_objects', :record => :new_episodes) do
249
+ bar = Parse::Object.new("Bar", "foobar" => "foobar")
250
+ bar.save
251
+
252
+ foo = Parse::Object.new("Foo", "bar" => bar, "bars" => [bar])
253
+ foo.save
254
+
255
+ assert_equal "foobar", foo['bar']['foobar']
256
+ assert_equal "foobar", foo['bars'][0]['foobar']
257
+
258
+ foo = Parse::Query.new("Foo").eq("objectId", foo.id).tap { |q| q.include = 'bar,bars' }.get.first
259
+
260
+ foo.save
261
+
262
+ assert_equal "foobar", foo['bar']['foobar']
263
+ assert_equal "foobar", foo['bars'][0]['foobar']
264
+
265
+ bar = foo['bar']
266
+ bar['baz'] = 'baz'
267
+ bar.save
268
+
269
+ assert_equal 'baz', bar['baz']
270
+ end
271
+ end
272
+
273
+ def test_circular_save
274
+ VCR.use_cassette('test_circular_save', :record => :new_episodes) do
275
+ bar = Parse::Object.new("CircularBar", "text" => "bar")
276
+ bar_2 = Parse::Object.new("CircularBar", "bar" => bar, "text" => "bar_2")
277
+ bar_2.save
278
+ bar['bar'] = bar_2
279
+ assert bar.save
280
+
281
+ assert_equal "bar_2", bar["bar"]["text"]
282
+ assert_equal "bar", bar["bar"]["bar"]["text"]
141
283
  end
142
284
  end
143
285
  end
@@ -1,10 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class TestPush < Test::Unit::TestCase
4
-
5
- def setup
6
- Parse.init
7
- end
3
+ class TestPush < ParseTestCase
8
4
 
9
5
  def test_save_without_where
10
6
  data = {:foo => 'bar',
@@ -1,8 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- Parse.init
4
-
5
- class TestQuery < Test::Unit::TestCase
3
+ class TestQuery < ParseTestCase
6
4
 
7
5
  def test_get
8
6
  VCR.use_cassette('test_get', :record => :new_episodes) do
@@ -48,6 +46,18 @@ class TestQuery < Test::Unit::TestCase
48
46
  assert_equal q.where, {"points" => 5, "player" => "michael@jordan.com"}
49
47
  end
50
48
 
49
+ def test_eq_pointerize
50
+ VCR.use_cassette('test_eq_pointerize', :record => :new_episodes) do
51
+ foo = Parse::Object.new("Foo")
52
+ foo.save
53
+ bar = Parse::Object.new("Bar", "foo" => foo.pointer, "bar" => "bar")
54
+ bar.save
55
+
56
+ assert_equal "bar", Parse::Query.new("Bar").eq("foo", foo.pointer).get.first["bar"]
57
+ assert_equal "bar", Parse::Query.new("Bar").eq("foo", foo).get.first["bar"]
58
+ end
59
+ end
60
+
51
61
  def test_limit_skip
52
62
  VCR.use_cassette('test_limit_skip', :record => :new_episodes) do
53
63
  q = Parse::Query.new "TestQuery"
@@ -1,7 +1,5 @@
1
1
  require 'helper'
2
2
 
3
- Parse.init
3
+ class TestQuery < ParseTestCase
4
4
 
5
- class TestQuery < Test::Unit::TestCase
6
-
7
5
  end
@@ -1,10 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class TestUser < Test::Unit::TestCase
4
-
5
- def setup
6
- Parse.init
7
- end
3
+ class TestUser < ParseTestCase
8
4
 
9
5
  def test_user_save
10
6
  VCR.use_cassette('test_user_save', :record => :new_episodes) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parse-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-02-27 00:00:00.000000000 Z
13
+ date: 2013-05-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: patron
@@ -49,17 +49,17 @@ dependencies:
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
- - - ~>
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
- version: 1.1.5
54
+ version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  none: false
59
59
  requirements:
60
- - - ~>
60
+ - - ! '>='
61
61
  - !ruby/object:Gem::Version
62
- version: 1.1.5
62
+ version: '0'
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: shoulda
65
65
  requirement: !ruby/object:Gem::Requirement
@@ -113,19 +113,19 @@ dependencies:
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  none: false
115
115
  requirements:
116
- - - ~>
116
+ - - ! '>='
117
117
  - !ruby/object:Gem::Version
118
- version: 1.6.4
118
+ version: '0'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  none: false
123
123
  requirements:
124
- - - ~>
124
+ - - ! '>='
125
125
  - !ruby/object:Gem::Version
126
- version: 1.6.4
126
+ version: '0'
127
127
  - !ruby/object:Gem::Dependency
128
- name: rcov
128
+ name: simplecov
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
@@ -184,33 +184,37 @@ files:
184
184
  - Gemfile
185
185
  - Gemfile.lock
186
186
  - LICENSE.txt
187
+ - OLD_README.md
187
188
  - README.md
188
189
  - Rakefile
189
190
  - VERSION
190
191
  - example.rb
191
192
  - features.md
193
+ - fixtures/vcr_cassettes/test_acls_arent_objects.yml
192
194
  - fixtures/vcr_cassettes/test_array_add.yml
193
- - fixtures/vcr_cassettes/test_array_add_relation.yml
195
+ - fixtures/vcr_cassettes/test_array_add_pointerizing.yml
196
+ - fixtures/vcr_cassettes/test_array_add_unique.yml
194
197
  - fixtures/vcr_cassettes/test_batch_create_object.yml
195
198
  - fixtures/vcr_cassettes/test_batch_delete_object.yml
196
199
  - fixtures/vcr_cassettes/test_batch_run.yml
197
200
  - fixtures/vcr_cassettes/test_batch_update_object.yml
198
- - fixtures/vcr_cassettes/test_cloud_function.yml
201
+ - fixtures/vcr_cassettes/test_circular_save.yml
199
202
  - fixtures/vcr_cassettes/test_created_at.yml
203
+ - fixtures/vcr_cassettes/test_decrement.yml
200
204
  - fixtures/vcr_cassettes/test_deep_parse.yml
201
205
  - fixtures/vcr_cassettes/test_destroy.yml
202
- - fixtures/vcr_cassettes/test_file_save.yml
206
+ - fixtures/vcr_cassettes/test_eq_pointerize.yml
207
+ - fixtures/vcr_cassettes/test_equality.yml
203
208
  - fixtures/vcr_cassettes/test_get.yml
204
- - fixtures/vcr_cassettes/test_image_file_associate_with_object.yml
205
- - fixtures/vcr_cassettes/test_image_file_save.yml
209
+ - fixtures/vcr_cassettes/test_get_missing.yml
206
210
  - fixtures/vcr_cassettes/test_include.yml
207
211
  - fixtures/vcr_cassettes/test_new_model.yml
208
212
  - fixtures/vcr_cassettes/test_new_object.yml
209
213
  - fixtures/vcr_cassettes/test_nils_delete_keys.yml
210
- - fixtures/vcr_cassettes/test_object_id.yml
211
214
  - fixtures/vcr_cassettes/test_parse_delete.yml
212
215
  - fixtures/vcr_cassettes/test_pointer.yml
213
- - fixtures/vcr_cassettes/test_request_batch.yml
216
+ - fixtures/vcr_cassettes/test_save_with_sub_objects.yml
217
+ - fixtures/vcr_cassettes/test_saving_boolean_values.yml
214
218
  - fixtures/vcr_cassettes/test_server_update.yml
215
219
  - fixtures/vcr_cassettes/test_simple_save.yml
216
220
  - fixtures/vcr_cassettes/test_text_file_save.yml
@@ -263,7 +267,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
263
267
  version: '0'
264
268
  segments:
265
269
  - 0
266
- hash: 3900307414852475106
270
+ hash: 4203389409759710267
267
271
  required_rubygems_version: !ruby/object:Gem::Requirement
268
272
  none: false
269
273
  requirements: