google-cloud-storage 1.46.0 → 1.49.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9180138623d24136aba3789a2999158c8e1936ccc483be54e96d7ad5ce0270cd
4
- data.tar.gz: db71d2a866acb5b3c63a55d26393ef4d4b05dbdbdc529f51b4e8343d0674ec3d
3
+ metadata.gz: f8a2a526a042472efc68bca61aecd13daab3329949890543c73e499d19b1bf91
4
+ data.tar.gz: 152a633c29980d1c645e8d0c96100f60d245ea1d1844407bb12c8a689b231892
5
5
  SHA512:
6
- metadata.gz: 33f397b67897fb16738284a45998c6df621cf7cc7a26cf57582c092ec0ff40b3fa38c2cc7a74489ff46debcad240cb82a1e4293302dd0eb6214e261aa7972e4d
7
- data.tar.gz: d52e0f8e792f8dc9359d24c58cba4c1dbc7714114078be630c40ce8d652bef3e4b336785c3b7f440b6df41f61f2699fa69d3073113e1c985a504d69a24debf2c
6
+ metadata.gz: 8086edce323f96ad7826ab121e5b3fc12d94a4695838259e5c7f90f0607414c6f6516c63318888c2d8022a4b0440692d06d57e016081a35f06c27c6591a1269a
7
+ data.tar.gz: 286c58007dc3ef084ed5947e01a38aefa09aa01b7eb121f2a99eab34aef8d1577cd3c8c738d7b58d6ef51f5c1817a1618380b35c961bdb5ff5ac159c8d0f941e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Release History
2
2
 
3
+ ### 1.49.0 (2024-02-21)
4
+
5
+ #### Features
6
+
7
+ * Support of Managed Folders ([#24809](https://github.com/googleapis/google-cloud-ruby/issues/24809))
8
+
9
+ ### 1.48.1 (2024-01-26)
10
+
11
+ #### Bug Fixes
12
+
13
+ * Raise an error on mismatching universe domain ([#24486](https://github.com/googleapis/google-cloud-ruby/issues/24486))
14
+
15
+ ### 1.48.0 (2024-01-25)
16
+
17
+ #### Features
18
+
19
+ * Support for universe_domain ([#24449](https://github.com/googleapis/google-cloud-ruby/issues/24449))
20
+
21
+ ### 1.47.0 (2024-01-09)
22
+
23
+ #### Features
24
+
25
+ * support for object lock / retention ([#23732](https://github.com/googleapis/google-cloud-ruby/issues/23732))
26
+
3
27
  ### 1.46.0 (2024-01-08)
4
28
 
5
29
  #### Features
@@ -118,6 +118,15 @@ module Google
118
118
  @gapi.autoclass
119
119
  end
120
120
 
121
+ ##
122
+ # The object retention configuration of the bucket
123
+ #
124
+ # @return [Google::Apis::StorageV1::Bucket::ObjectRetention]
125
+ #
126
+ def object_retention
127
+ @gapi.object_retention
128
+ end
129
+
121
130
  ##
122
131
  # The name of the bucket.
123
132
  #
@@ -1310,6 +1319,9 @@ module Google
1310
1319
  # as distinct results. The default is `false`. For more information,
1311
1320
  # see [Object Versioning
1312
1321
  # ](https://cloud.google.com/storage/docs/object-versioning).
1322
+ # @param [Boolean] include_folders_as_prefixes If `true`, will also include
1323
+ # folders and managed folders, besides objects, in the returned prefixes.
1324
+ # Only applicable if delimiter is set to '/'.
1313
1325
  #
1314
1326
  # @return [Array<Google::Cloud::Storage::File>] (See
1315
1327
  # {Google::Cloud::Storage::File::List})
@@ -1337,17 +1349,19 @@ module Google
1337
1349
  # end
1338
1350
  #
1339
1351
  def files prefix: nil, delimiter: nil, token: nil, max: nil,
1340
- versions: nil, match_glob: nil
1352
+ versions: nil, match_glob: nil, include_folders_as_prefixes: nil
1341
1353
  ensure_service!
1342
1354
  gapi = service.list_files name, prefix: prefix, delimiter: delimiter,
1343
1355
  token: token, max: max,
1344
1356
  versions: versions,
1345
1357
  user_project: user_project,
1346
- match_glob: match_glob
1358
+ match_glob: match_glob,
1359
+ include_folders_as_prefixes: include_folders_as_prefixes
1347
1360
  File::List.from_gapi gapi, service, name, prefix, delimiter, max,
1348
1361
  versions,
1349
1362
  user_project: user_project,
1350
- match_glob: match_glob
1363
+ match_glob: match_glob,
1364
+ include_folders_as_prefixes: include_folders_as_prefixes
1351
1365
  end
1352
1366
  alias find_files files
1353
1367
 
@@ -165,8 +165,8 @@ module Google
165
165
  # Google::Apis::StorageV1::Objects object.
166
166
  def self.from_gapi gapi_list, service, bucket = nil, prefix = nil,
167
167
  delimiter = nil, max = nil, versions = nil,
168
- user_project: nil,
169
- match_glob: nil
168
+ user_project: nil, match_glob: nil,
169
+ include_folders_as_prefixes: nil
170
170
  files = new(Array(gapi_list.items).map do |gapi_object|
171
171
  File.from_gapi gapi_object, service, user_project: user_project
172
172
  end)
@@ -180,6 +180,7 @@ module Google
180
180
  files.instance_variable_set :@versions, versions
181
181
  files.instance_variable_set :@user_project, user_project
182
182
  files.instance_variable_set :@match_glob, match_glob
183
+ files.instance_variable_set :@include_folders_as_prefixes, include_folders_as_prefixes
183
184
  files
184
185
  end
185
186
 
@@ -825,6 +825,9 @@ module Google
825
825
  # @param [Integer] if_metageneration_not_match Makes the operation
826
826
  # conditional on whether the file's current metageneration does not
827
827
  # match the given value.
828
+ # @param [Boolean] override_unlocked_retention
829
+ # Must be true to remove the retention configuration, reduce its unlocked
830
+ # retention period, or change its mode from unlocked to locked.
828
831
  #
829
832
  # @yield [file] a block yielding a delegate object for updating the file
830
833
  #
@@ -865,7 +868,8 @@ module Google
865
868
  if_generation_match: nil,
866
869
  if_generation_not_match: nil,
867
870
  if_metageneration_match: nil,
868
- if_metageneration_not_match: nil
871
+ if_metageneration_not_match: nil,
872
+ override_unlocked_retention: nil
869
873
  updater = Updater.new gapi
870
874
  yield updater
871
875
  updater.check_for_changed_metadata!
@@ -875,7 +879,8 @@ module Google
875
879
  if_generation_match: if_generation_match,
876
880
  if_generation_not_match: if_generation_not_match,
877
881
  if_metageneration_match: if_metageneration_match,
878
- if_metageneration_not_match: if_metageneration_not_match
882
+ if_metageneration_not_match: if_metageneration_not_match,
883
+ override_unlocked_retention: override_unlocked_retention
879
884
  end
880
885
 
881
886
  ##
@@ -1560,6 +1565,64 @@ module Google
1560
1565
  true
1561
1566
  end
1562
1567
 
1568
+ # Mode of object level retention configuration.
1569
+ # Valid values are 'Locked' or 'Unlocked'
1570
+ #
1571
+ # @return [String]
1572
+ def retention_mode
1573
+ @gapi.retention&.mode
1574
+ end
1575
+
1576
+ # The earliest time in RFC 3339 UTC "Zulu" format that the object can
1577
+ # be deleted or replaced.
1578
+ #
1579
+ # @return [DateTime]
1580
+ def retention_retain_until_time
1581
+ @gapi.retention&.retain_until_time
1582
+ end
1583
+
1584
+ # A collection of object level retention parameters.
1585
+ # The full list of available options are outlined at the [JSON API docs]
1586
+ # (https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body).
1587
+ #
1588
+ # @return [Google::Apis::StorageV1::Object::Retention]
1589
+ def retention
1590
+ @gapi.retention
1591
+ end
1592
+
1593
+ ##
1594
+ # Update method to update retention parameter of an object / file
1595
+ # It accepts params as a Hash of attributes in the following format:
1596
+ #
1597
+ # { mode: 'Locked|Unlocked', retain_until_time: '2023-12-19T03:22:23+00:00' }
1598
+ #
1599
+ # @param [Hash(String => String)] new_retention_attributes
1600
+ #
1601
+ # @example Update retention parameters for the File / Object
1602
+ # require "google/cloud/storage"
1603
+ # storage = Google::Cloud::Storage.new
1604
+ # bucket = storage.bucket "my-bucket"
1605
+ # file = bucket.file "avatars/heidi/400x400.png"
1606
+ # retention_params = { mode: 'Unlocked', retain_until_time: '2023-12-19T03:22:23+00:00'.to_datetime }
1607
+ # file.retention = retention_params
1608
+ #
1609
+ # @example Update retention parameters for the File / Object with override enabled
1610
+ # require "google/cloud/storage"
1611
+ # storage = Google::Cloud::Storage.new
1612
+ # bucket = storage.bucket "my-bucket"
1613
+ # file = bucket.file "avatars/heidi/400x400.png"
1614
+ # retention_params = { mode: 'Unlocked',
1615
+ # retain_until_time: '2023-12-19T03:22:23+00:00'.to_datetime,
1616
+ # override_unlocked_retention: true }
1617
+ # file.retention = retention_params
1618
+ #
1619
+ def retention= new_retention_attributes
1620
+ @gapi.retention ||= Google::Apis::StorageV1::Object::Retention.new
1621
+ @gapi.retention.mode = new_retention_attributes[:mode]
1622
+ @gapi.retention.retain_until_time = new_retention_attributes[:retain_until_time]
1623
+ update_gapi! :retention, override_unlocked_retention: new_retention_attributes[:override_unlocked_retention]
1624
+ end
1625
+
1563
1626
  ##
1564
1627
  # Public URL to access the file. If the file is not public, requests to
1565
1628
  # the URL will return an error. (See {File::Acl#public!} and
@@ -2015,7 +2078,8 @@ module Google
2015
2078
  if_generation_match: nil,
2016
2079
  if_generation_not_match: nil,
2017
2080
  if_metageneration_match: nil,
2018
- if_metageneration_not_match: nil
2081
+ if_metageneration_not_match: nil,
2082
+ override_unlocked_retention: nil
2019
2083
  attributes = Array(attributes)
2020
2084
  attributes.flatten!
2021
2085
  return if attributes.empty?
@@ -2044,7 +2108,8 @@ module Google
2044
2108
  if_generation_not_match: if_generation_not_match,
2045
2109
  if_metageneration_match: if_metageneration_match,
2046
2110
  if_metageneration_not_match: if_metageneration_not_match,
2047
- user_project: user_project
2111
+ user_project: user_project,
2112
+ override_unlocked_retention: override_unlocked_retention
2048
2113
  end
2049
2114
  end
2050
2115
 
@@ -62,6 +62,15 @@ module Google
62
62
  @service = service
63
63
  end
64
64
 
65
+ ##
66
+ # The universe domain the client is connected to
67
+ #
68
+ # @return [String]
69
+ #
70
+ def universe_domain
71
+ service.universe_domain
72
+ end
73
+
65
74
  ##
66
75
  # The Storage project connected to.
67
76
  #
@@ -372,6 +381,8 @@ module Google
372
381
  # bucket instance and its files.
373
382
  #
374
383
  # See also {Bucket#requester_pays=} and {Bucket#requester_pays}.
384
+ # @param [Boolean] enable_object_retention
385
+ # When set to true, object retention is enabled for this bucket.
375
386
  #
376
387
  # @yield [bucket] a block for configuring the bucket before it is
377
388
  # created
@@ -386,6 +397,13 @@ module Google
386
397
  #
387
398
  # bucket = storage.create_bucket "my-bucket"
388
399
  #
400
+ # @example
401
+ # require "google/cloud/storage"
402
+ #
403
+ # storage = Google::Cloud::Storage.new
404
+ #
405
+ # bucket = storage.create_bucket "my-bucket", enable_object_retention: true
406
+ #
389
407
  # @example Configure the bucket in a block:
390
408
  # require "google/cloud/storage"
391
409
  #
@@ -416,7 +434,8 @@ module Google
416
434
  versioning: nil,
417
435
  requester_pays: nil,
418
436
  user_project: nil,
419
- autoclass_enabled: false
437
+ autoclass_enabled: false,
438
+ enable_object_retention: nil
420
439
  params = {
421
440
  name: bucket_name,
422
441
  location: location,
@@ -440,7 +459,8 @@ module Google
440
459
  updater.check_for_mutable_lifecycle!
441
460
  gapi = service.insert_bucket \
442
461
  new_bucket, acl: acl_rule(acl), default_acl: acl_rule(default_acl),
443
- user_project: user_project
462
+ user_project: user_project,
463
+ enable_object_retention: enable_object_retention
444
464
  Bucket.from_gapi gapi, service, user_project: user_project
445
465
  end
446
466
 
@@ -36,6 +36,11 @@ module Google
36
36
  # @private
37
37
  attr_accessor :credentials
38
38
 
39
+ # @private
40
+ def universe_domain
41
+ service.universe_domain
42
+ end
43
+
39
44
  ##
40
45
  # Creates a new Service instance.
41
46
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
@@ -43,7 +48,7 @@ module Google
43
48
  timeout: nil, open_timeout: nil, read_timeout: nil,
44
49
  send_timeout: nil, host: nil, quota_project: nil,
45
50
  max_elapsed_time: nil, base_interval: nil, max_interval: nil,
46
- multiplier: nil, upload_chunk_size: nil
51
+ multiplier: nil, upload_chunk_size: nil, universe_domain: nil
47
52
  @project = project
48
53
  @credentials = credentials
49
54
  @service = API::StorageService.new
@@ -68,6 +73,13 @@ module Google
68
73
  @service.request_options.upload_chunk_size = upload_chunk_size if upload_chunk_size
69
74
  @service.authorization = @credentials.client if @credentials
70
75
  @service.root_url = host if host
76
+ @service.universe_domain = universe_domain
77
+ begin
78
+ @service.verify_universe_domain!
79
+ rescue Google::Apis::UniverseDomainError => e
80
+ # TODO: Create a Google::Cloud::Error subclass for this.
81
+ raise Google::Cloud::Error, e.message
82
+ end
71
83
  end
72
84
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
73
85
 
@@ -112,14 +124,16 @@ module Google
112
124
  # Creates a new bucket.
113
125
  # Returns Google::Apis::StorageV1::Bucket.
114
126
  def insert_bucket bucket_gapi, acl: nil, default_acl: nil,
115
- user_project: nil, options: {}
127
+ user_project: nil, enable_object_retention: nil,
128
+ options: {}
116
129
  execute do
117
130
  service.insert_bucket \
118
131
  @project, bucket_gapi,
119
132
  predefined_acl: acl,
120
133
  predefined_default_object_acl: default_acl,
121
134
  user_project: user_project(user_project),
122
- options: options
135
+ options: options,
136
+ enable_object_retention: enable_object_retention
123
137
  end
124
138
  end
125
139
 
@@ -349,7 +363,7 @@ module Google
349
363
  # Retrieves a list of files matching the criteria.
350
364
  def list_files bucket_name, delimiter: nil, max: nil, token: nil,
351
365
  prefix: nil, versions: nil, user_project: nil,
352
- match_glob: nil,
366
+ match_glob: nil, include_folders_as_prefixes: nil,
353
367
  options: {}
354
368
  execute do
355
369
  service.list_objects \
@@ -358,6 +372,7 @@ module Google
358
372
  versions: versions,
359
373
  user_project: user_project(user_project),
360
374
  match_glob: match_glob,
375
+ include_folders_as_prefixes: include_folders_as_prefixes,
361
376
  options: options
362
377
  end
363
378
  end
@@ -582,6 +597,7 @@ module Google
582
597
  if_metageneration_not_match: nil,
583
598
  predefined_acl: nil,
584
599
  user_project: nil,
600
+ override_unlocked_retention: nil,
585
601
  options: {}
586
602
  file_gapi ||= Google::Apis::StorageV1::Object.new
587
603
 
@@ -601,6 +617,7 @@ module Google
601
617
  if_metageneration_not_match: if_metageneration_not_match,
602
618
  predefined_acl: predefined_acl,
603
619
  user_project: user_project(user_project),
620
+ override_unlocked_retention: override_unlocked_retention,
604
621
  options: options
605
622
  end
606
623
  end
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Storage
19
- VERSION = "1.46.0".freeze
19
+ VERSION = "1.49.0".freeze
20
20
  end
21
21
  end
22
22
  end
@@ -67,6 +67,8 @@ module Google
67
67
  # @param [Integer] send_timeout How long, in seconds, before receiving response from server times out. Optional.
68
68
  # @param [String] endpoint Override of the endpoint host name. Optional.
69
69
  # If the param is nil, uses the default endpoint.
70
+ # @param universe_domain [String] Override of the universe domain. Optional.
71
+ # If unset or nil, uses the default unvierse domain
70
72
  # @param [Integer] upload_chunk_size The chunk size of storage upload, in bytes.
71
73
  # The default value is 100 MB, i.e. 104_857_600 bytes. To disable chunking and upload
72
74
  # the complete file regardless of size, pass 0 as the chunk size.
@@ -92,7 +94,7 @@ module Google
92
94
  timeout: nil, open_timeout: nil, read_timeout: nil,
93
95
  send_timeout: nil, endpoint: nil, project: nil, keyfile: nil,
94
96
  max_elapsed_time: nil, base_interval: nil, max_interval: nil,
95
- multiplier: nil, upload_chunk_size: nil
97
+ multiplier: nil, upload_chunk_size: nil, universe_domain: nil
96
98
  scope ||= configure.scope
97
99
  retries ||= configure.retries
98
100
  timeout ||= configure.timeout
@@ -106,6 +108,7 @@ module Google
106
108
  max_interval ||= configure.max_interval
107
109
  multiplier ||= configure.multiplier
108
110
  upload_chunk_size ||= configure.upload_chunk_size
111
+ universe_domain ||= configure.universe_domain
109
112
 
110
113
  unless credentials.is_a? Google::Auth::Credentials
111
114
  credentials = Storage::Credentials.new credentials, scope: scope
@@ -121,7 +124,8 @@ module Google
121
124
  read_timeout: read_timeout, send_timeout: send_timeout,
122
125
  host: endpoint, quota_project: configure.quota_project,
123
126
  max_elapsed_time: max_elapsed_time, base_interval: base_interval,
124
- max_interval: max_interval, multiplier: multiplier, upload_chunk_size: upload_chunk_size
127
+ max_interval: max_interval, multiplier: multiplier, upload_chunk_size: upload_chunk_size,
128
+ universe_domain: universe_domain
125
129
  )
126
130
  )
127
131
  end
@@ -145,6 +149,8 @@ module Google
145
149
  # @param [Integer] send_timeout How long, in seconds, before receiving response from server times out. Optional.
146
150
  # @param [String] endpoint Override of the endpoint host name. Optional.
147
151
  # If the param is nil, uses the default endpoint.
152
+ # @param universe_domain [String] Override of the universe domain. Optional.
153
+ # If unset or nil, uses the default unvierse domain
148
154
  # @param [Integer] upload_chunk_size The chunk size of storage upload, in bytes.
149
155
  # The default value is 100 MB, i.e. 104_857_600 bytes. To disable chunking and upload
150
156
  # the complete file regardless of size, pass 0 as the chunk size.
@@ -166,7 +172,7 @@ module Google
166
172
  def self.anonymous retries: nil, timeout: nil, open_timeout: nil,
167
173
  read_timeout: nil, send_timeout: nil, endpoint: nil,
168
174
  max_elapsed_time: nil, base_interval: nil, max_interval: nil,
169
- multiplier: nil, upload_chunk_size: nil
175
+ multiplier: nil, upload_chunk_size: nil, universe_domain: nil
170
176
  open_timeout ||= timeout
171
177
  read_timeout ||= timeout
172
178
  send_timeout ||= timeout
@@ -175,7 +181,8 @@ module Google
175
181
  nil, nil, retries: retries, timeout: timeout, open_timeout: open_timeout,
176
182
  read_timeout: read_timeout, send_timeout: send_timeout, host: endpoint,
177
183
  max_elapsed_time: max_elapsed_time, base_interval: base_interval,
178
- max_interval: max_interval, multiplier: multiplier, upload_chunk_size: upload_chunk_size
184
+ max_interval: max_interval, multiplier: multiplier, upload_chunk_size: upload_chunk_size,
185
+ universe_domain: universe_domain
179
186
  )
180
187
  )
181
188
  end
@@ -192,7 +192,7 @@ Google::Cloud.configure.add_config! :storage do |config|
192
192
  config.add_field! :read_timeout, nil, match: Integer
193
193
  config.add_field! :send_timeout, nil, match: Integer
194
194
  config.add_field! :upload_chunk_size, nil, match: Integer
195
- # TODO: Remove once discovery document is updated.
196
- config.add_field! :endpoint, "https://storage.googleapis.com/", match: String
195
+ config.add_field! :endpoint, nil, match: String, allow_nil: true
196
+ config.add_field! :universe_domain, nil, match: String, allow_nil: true
197
197
  end
198
198
  # rubocop:enable Metrics/BlockLength
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.46.0
4
+ version: 1.49.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-01-08 00:00:00.000000000 Z
12
+ date: 2024-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core
@@ -25,54 +25,62 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.6'
28
+ - !ruby/object:Gem::Dependency
29
+ name: google-apis-core
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '0.13'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.13'
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: google-apis-iamcredentials_v1
30
44
  requirement: !ruby/object:Gem::Requirement
31
45
  requirements:
32
46
  - - "~>"
33
47
  - !ruby/object:Gem::Version
34
- version: '0.1'
48
+ version: '0.18'
35
49
  type: :runtime
36
50
  prerelease: false
37
51
  version_requirements: !ruby/object:Gem::Requirement
38
52
  requirements:
39
53
  - - "~>"
40
54
  - !ruby/object:Gem::Version
41
- version: '0.1'
55
+ version: '0.18'
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: google-apis-storage_v1
44
58
  requirement: !ruby/object:Gem::Requirement
45
59
  requirements:
46
60
  - - "~>"
47
61
  - !ruby/object:Gem::Version
48
- version: 0.29.0
62
+ version: '0.33'
49
63
  type: :runtime
50
64
  prerelease: false
51
65
  version_requirements: !ruby/object:Gem::Requirement
52
66
  requirements:
53
67
  - - "~>"
54
68
  - !ruby/object:Gem::Version
55
- version: 0.29.0
69
+ version: '0.33'
56
70
  - !ruby/object:Gem::Dependency
57
71
  name: googleauth
58
72
  requirement: !ruby/object:Gem::Requirement
59
73
  requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 0.16.2
63
- - - "<"
74
+ - - "~>"
64
75
  - !ruby/object:Gem::Version
65
- version: 2.a
76
+ version: '1.9'
66
77
  type: :runtime
67
78
  prerelease: false
68
79
  version_requirements: !ruby/object:Gem::Requirement
69
80
  requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 0.16.2
73
- - - "<"
81
+ - - "~>"
74
82
  - !ruby/object:Gem::Version
75
- version: 2.a
83
+ version: '1.9'
76
84
  - !ruby/object:Gem::Dependency
77
85
  name: digest-crc
78
86
  requirement: !ruby/object:Gem::Requirement