parse-ruby-client 0.1.14 → 0.1.15

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. 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: