google-cloud-bigtable 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +19 -0
  3. data/AUTHENTICATION.md +177 -0
  4. data/CHANGELOG.md +223 -0
  5. data/CODE_OF_CONDUCT.md +40 -0
  6. data/CONTRIBUTING.md +188 -0
  7. data/EMULATOR.md +30 -0
  8. data/LICENSE +201 -0
  9. data/LOGGING.md +32 -0
  10. data/OVERVIEW.md +400 -0
  11. data/TROUBLESHOOTING.md +31 -0
  12. data/lib/google-cloud-bigtable.rb +171 -0
  13. data/lib/google/bigtable/admin/v2/bigtable_instance_admin_pb.rb +145 -0
  14. data/lib/google/bigtable/admin/v2/bigtable_instance_admin_services_pb.rb +90 -0
  15. data/lib/google/bigtable/admin/v2/bigtable_table_admin_pb.rb +208 -0
  16. data/lib/google/bigtable/admin/v2/bigtable_table_admin_services_pb.rb +154 -0
  17. data/lib/google/bigtable/admin/v2/common_pb.rb +30 -0
  18. data/lib/google/bigtable/admin/v2/instance_pb.rb +74 -0
  19. data/lib/google/bigtable/admin/v2/table_pb.rb +127 -0
  20. data/lib/google/bigtable/v2/bigtable_pb.rb +113 -0
  21. data/lib/google/bigtable/v2/bigtable_services_pb.rb +68 -0
  22. data/lib/google/bigtable/v2/data_pb.rb +156 -0
  23. data/lib/google/cloud/bigtable.rb +184 -0
  24. data/lib/google/cloud/bigtable/admin.rb +202 -0
  25. data/lib/google/cloud/bigtable/admin/credentials.rb +27 -0
  26. data/lib/google/cloud/bigtable/admin/v2.rb +223 -0
  27. data/lib/google/cloud/bigtable/admin/v2/bigtable_instance_admin_client.rb +1451 -0
  28. data/lib/google/cloud/bigtable/admin/v2/bigtable_instance_admin_client_config.json +139 -0
  29. data/lib/google/cloud/bigtable/admin/v2/bigtable_table_admin_client.rb +1734 -0
  30. data/lib/google/cloud/bigtable/admin/v2/bigtable_table_admin_client_config.json +163 -0
  31. data/lib/google/cloud/bigtable/admin/v2/credentials.rb +51 -0
  32. data/lib/google/cloud/bigtable/admin/v2/doc/google/bigtable/admin/v2/bigtable_instance_admin.rb +297 -0
  33. data/lib/google/cloud/bigtable/admin/v2/doc/google/bigtable/admin/v2/bigtable_table_admin.rb +587 -0
  34. data/lib/google/cloud/bigtable/admin/v2/doc/google/bigtable/admin/v2/instance.rb +193 -0
  35. data/lib/google/cloud/bigtable/admin/v2/doc/google/bigtable/admin/v2/table.rb +303 -0
  36. data/lib/google/cloud/bigtable/admin/v2/doc/google/iam/v1/iam_policy.rb +64 -0
  37. data/lib/google/cloud/bigtable/admin/v2/doc/google/iam/v1/options.rb +33 -0
  38. data/lib/google/cloud/bigtable/admin/v2/doc/google/iam/v1/policy.rb +151 -0
  39. data/lib/google/cloud/bigtable/admin/v2/doc/google/longrunning/operations.rb +51 -0
  40. data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/any.rb +131 -0
  41. data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/duration.rb +91 -0
  42. data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/empty.rb +29 -0
  43. data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/field_mask.rb +222 -0
  44. data/lib/google/cloud/bigtable/admin/v2/doc/google/protobuf/timestamp.rb +113 -0
  45. data/lib/google/cloud/bigtable/admin/v2/doc/google/rpc/status.rb +39 -0
  46. data/lib/google/cloud/bigtable/admin/v2/doc/google/type/expr.rb +45 -0
  47. data/lib/google/cloud/bigtable/app_profile.rb +439 -0
  48. data/lib/google/cloud/bigtable/app_profile/job.rb +99 -0
  49. data/lib/google/cloud/bigtable/app_profile/list.rb +165 -0
  50. data/lib/google/cloud/bigtable/backup.rb +324 -0
  51. data/lib/google/cloud/bigtable/backup/job.rb +87 -0
  52. data/lib/google/cloud/bigtable/backup/list.rb +167 -0
  53. data/lib/google/cloud/bigtable/chunk_processor.rb +241 -0
  54. data/lib/google/cloud/bigtable/cluster.rb +390 -0
  55. data/lib/google/cloud/bigtable/cluster/job.rb +88 -0
  56. data/lib/google/cloud/bigtable/cluster/list.rb +171 -0
  57. data/lib/google/cloud/bigtable/column_family.rb +73 -0
  58. data/lib/google/cloud/bigtable/column_family_map.rb +426 -0
  59. data/lib/google/cloud/bigtable/column_range.rb +194 -0
  60. data/lib/google/cloud/bigtable/convert.rb +83 -0
  61. data/lib/google/cloud/bigtable/credentials.rb +25 -0
  62. data/lib/google/cloud/bigtable/errors.rb +38 -0
  63. data/lib/google/cloud/bigtable/gc_rule.rb +334 -0
  64. data/lib/google/cloud/bigtable/instance.rb +935 -0
  65. data/lib/google/cloud/bigtable/instance/cluster_map.rb +74 -0
  66. data/lib/google/cloud/bigtable/instance/job.rb +98 -0
  67. data/lib/google/cloud/bigtable/instance/list.rb +164 -0
  68. data/lib/google/cloud/bigtable/longrunning_job.rb +122 -0
  69. data/lib/google/cloud/bigtable/mutation_entry.rb +256 -0
  70. data/lib/google/cloud/bigtable/mutation_operations.rb +357 -0
  71. data/lib/google/cloud/bigtable/policy.rb +167 -0
  72. data/lib/google/cloud/bigtable/project.rb +471 -0
  73. data/lib/google/cloud/bigtable/read_modify_write_rule.rb +134 -0
  74. data/lib/google/cloud/bigtable/read_operations.rb +328 -0
  75. data/lib/google/cloud/bigtable/routing_policy.rb +172 -0
  76. data/lib/google/cloud/bigtable/row.rb +136 -0
  77. data/lib/google/cloud/bigtable/row_filter.rb +639 -0
  78. data/lib/google/cloud/bigtable/row_filter/chain_filter.rb +590 -0
  79. data/lib/google/cloud/bigtable/row_filter/condition_filter.rb +114 -0
  80. data/lib/google/cloud/bigtable/row_filter/interleave_filter.rb +621 -0
  81. data/lib/google/cloud/bigtable/row_filter/simple_filter.rb +287 -0
  82. data/lib/google/cloud/bigtable/row_range.rb +179 -0
  83. data/lib/google/cloud/bigtable/rows_mutator.rb +113 -0
  84. data/lib/google/cloud/bigtable/rows_reader.rb +200 -0
  85. data/lib/google/cloud/bigtable/sample_row_key.rb +85 -0
  86. data/lib/google/cloud/bigtable/service.rb +913 -0
  87. data/lib/google/cloud/bigtable/status.rb +76 -0
  88. data/lib/google/cloud/bigtable/table.rb +686 -0
  89. data/lib/google/cloud/bigtable/table/cluster_state.rb +125 -0
  90. data/lib/google/cloud/bigtable/table/list.rb +154 -0
  91. data/lib/google/cloud/bigtable/table/restore_job.rb +117 -0
  92. data/lib/google/cloud/bigtable/v2.rb +146 -0
  93. data/lib/google/cloud/bigtable/v2/bigtable_client.rb +591 -0
  94. data/lib/google/cloud/bigtable/v2/bigtable_client_config.json +83 -0
  95. data/lib/google/cloud/bigtable/v2/credentials.rb +46 -0
  96. data/lib/google/cloud/bigtable/v2/doc/google/bigtable/v2/bigtable.rb +290 -0
  97. data/lib/google/cloud/bigtable/v2/doc/google/bigtable/v2/data.rb +493 -0
  98. data/lib/google/cloud/bigtable/v2/doc/google/protobuf/any.rb +131 -0
  99. data/lib/google/cloud/bigtable/v2/doc/google/protobuf/wrappers.rb +34 -0
  100. data/lib/google/cloud/bigtable/v2/doc/google/rpc/status.rb +39 -0
  101. data/lib/google/cloud/bigtable/value_range.rb +181 -0
  102. data/lib/google/cloud/bigtable/version.rb +22 -0
  103. metadata +337 -0
@@ -0,0 +1,194 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+
18
+ module Google
19
+ module Cloud
20
+ module Bigtable
21
+ ##
22
+ # # ColumnRange
23
+ #
24
+ # Specifies a contiguous range of column qualifiers.
25
+ #
26
+ # * Start qualifier bound : The qualifier at which to start the range.
27
+ # If neither field is set, interpreted as the empty string, inclusive.
28
+ # * End qualifier bound: The qualifier at which to end the range.
29
+ # If neither field is set, interpreted as the infinite string qualifier, exclusive.
30
+ #
31
+ # @example
32
+ # require "google/cloud/bigtable"
33
+ #
34
+ # bigtable = Google::Cloud::Bigtable.new
35
+ # table = bigtable.table("my-instance", "my-table")
36
+ #
37
+ # # Range that includes all qualifiers including "user-001" up until "user-010"
38
+ # table.new_column_range("cf").from("user-001").to("user-010")
39
+ #
40
+ # # Range that includes all qualifiers including "user-001" up to and including "user-005"
41
+ # table.new_column_range("cf").from("user-001").to("user-005", inclusive: true)
42
+ #
43
+ # # Range that includes all qualifiers until end of the row key "user-001".
44
+ # table.new_column_range("cf").to("user-010") # exclusive
45
+ #
46
+ # # Range with unbounded start and the inclusive end "user-100"
47
+ # table.new_column_range("cf").to("user-100", inclusive: true)
48
+ #
49
+ # # Range that includes all qualifiers including "user-001" up to and including "user-100"
50
+ # table.new_column_range("cf").between("user-001", "user-100")
51
+ #
52
+ class ColumnRange
53
+ ##
54
+ # Create qualifier range instance.
55
+ #
56
+ # @param family [String] Column family name.
57
+ #
58
+ def initialize family
59
+ @grpc = Google::Bigtable::V2::ColumnRange.new family_name: family
60
+ end
61
+
62
+ ##
63
+ # Gets the column family name.
64
+ #
65
+ # @return [String]
66
+ #
67
+ def family
68
+ @grpc.family_name
69
+ end
70
+
71
+ ##
72
+ # Sets the column family name.
73
+ #
74
+ # @param name [String] Column family name
75
+ #
76
+ def family= name
77
+ @grpc.family_name = name
78
+ end
79
+
80
+ ##
81
+ # Sets the column range with the lower bound.
82
+ #
83
+ # @param qualifier [String] Column qualifier name. Required
84
+ # @param inclusive [String] Lower bound flag. Inclusive/Exclusive.
85
+ # Default is an inclusive lower bound.
86
+ # @return [Google::Cloud::Bigtable::ColumnRange]
87
+ #
88
+ # @example Inclusive lower bound.
89
+ # require "google/cloud/bigtable"
90
+ #
91
+ # bigtable = Google::Cloud::Bigtable.new
92
+ # table = bigtable.table("my-instance", "my-table")
93
+ #
94
+ # table.new_column_range("cf").from("qualifier-1")
95
+ #
96
+ # @example Exclusive lower bound.
97
+ # require "google/cloud/bigtable"
98
+ #
99
+ # bigtable = Google::Cloud::Bigtable.new
100
+ # table = bigtable.table("my-instance", "my-table")
101
+ #
102
+ # table.new_column_range("cf").from("qualifier-1", inclusive: false)
103
+ #
104
+ def from qualifier, inclusive: true
105
+ if inclusive
106
+ @grpc.start_qualifier_closed = qualifier
107
+ else
108
+ @grpc.start_qualifier_open = qualifier
109
+ end
110
+ self
111
+ end
112
+
113
+ ##
114
+ # Sets the column range with the upper bound.
115
+ #
116
+ # @param qualifier [String] Column qualifier name. Required.
117
+ # @param inclusive [String] Upper bound flag. Inclusive/Exclusive.
118
+ # Default is an inclusive upper bound.
119
+ # @return [Google::Cloud::Bigtable::ColumnRange]
120
+ #
121
+ # @example Inclusive upper bound.
122
+ # require "google/cloud/bigtable"
123
+ #
124
+ # bigtable = Google::Cloud::Bigtable.new
125
+ # table = bigtable.table("my-instance", "my-table")
126
+ #
127
+ # table.new_column_range("cf").to("qualifier-10", inclusive: true)
128
+ #
129
+ # @example Exclusive upper bound.
130
+ # require "google/cloud/bigtable"
131
+ #
132
+ # bigtable = Google::Cloud::Bigtable.new
133
+ # table = bigtable.table("my-instance", "my-table")
134
+ #
135
+ # table.new_column_range("cf").to("qualifier-10")
136
+ #
137
+ def to qualifier, inclusive: false
138
+ if inclusive
139
+ @grpc.end_qualifier_closed = qualifier
140
+ else
141
+ @grpc.end_qualifier_open = qualifier
142
+ end
143
+ self
144
+ end
145
+
146
+ ##
147
+ # Sets the column range with the inclusive upper and lower bound.
148
+ #
149
+ # @param from_qualifier [String] Inclusive from qualifier. Required.
150
+ # @param to_qualifier [String] Inclusive to qualifier. Required.
151
+ # @return [Google::Cloud::Bigtable::ColumnRange]
152
+ #
153
+ # @example
154
+ # require "google/cloud/bigtable"
155
+ #
156
+ # bigtable = Google::Cloud::Bigtable.new
157
+ # table = bigtable.table("my-instance", "my-table")
158
+ #
159
+ # table.new_column_range("cf").between("qualifier-1", "qualifier-10")
160
+ #
161
+ def between from_qualifier, to_qualifier
162
+ from(from_qualifier).to(to_qualifier, inclusive: true)
163
+ end
164
+
165
+ ##
166
+ # Sets the column range with the inclusive upper and the exclusive lower bound.
167
+ #
168
+ # @param from_qualifier [String] Inclusive from qualifier
169
+ # @param to_qualifier [String] Exclusive to qualifier
170
+ # @return [Google::Cloud::Bigtable::ColumnRange]
171
+ #
172
+ # @example
173
+ # require "google/cloud/bigtable"
174
+ #
175
+ # bigtable = Google::Cloud::Bigtable.new
176
+ # table = bigtable.table("my-instance", "my-table")
177
+ #
178
+ # table.new_column_range("cf").of("qualifier-1", "qualifier-10")
179
+ #
180
+ def of from_qualifier, to_qualifier
181
+ from(from_qualifier).to(to_qualifier)
182
+ end
183
+
184
+ # @private
185
+ #
186
+ # @return [Google::Bigtable::V2::ColumnRange]
187
+ #
188
+ def to_grpc
189
+ @grpc
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+
18
+ require "time"
19
+ require "date"
20
+
21
+ module Google
22
+ module Cloud
23
+ module Bigtable
24
+ # @private
25
+ # Helper module for converting Bigtable values.
26
+ module Convert
27
+ module_function
28
+
29
+ ##
30
+ # Convert number to protobuf duration.
31
+ #
32
+ # @param number [Float] Seconds with nano seconds
33
+ # @return [Google::Protobuf::Duration, nil]
34
+ #
35
+ def number_to_duration number
36
+ return unless number
37
+
38
+ Google::Protobuf::Duration.new(
39
+ seconds: number.to_i,
40
+ nanos: (number.remainder(1) * 1_000_000_000).round
41
+ )
42
+ end
43
+
44
+ ##
45
+ # Convert protobuf durations to float.
46
+ #
47
+ # @param duration [Google::Protobuf::Duration, nil]
48
+ # @return [Float, Integer, nil] Seconds with nano seconds
49
+ #
50
+ def duration_to_number duration
51
+ return unless duration
52
+ return duration.seconds if duration.nanos.zero?
53
+
54
+ duration.seconds + (duration.nanos / 1_000_000_000.0)
55
+ end
56
+
57
+ ##
58
+ # Convert protobuf timestamp to Time object.
59
+ #
60
+ # @param timestamp [Google::Protobuf::Timestamp]
61
+ # @return [Time, nil]
62
+ #
63
+ def timestamp_to_time timestamp
64
+ return unless timestamp
65
+
66
+ Time.at timestamp.seconds, timestamp.nanos / 1000.0
67
+ end
68
+
69
+ ##
70
+ # Convert time to timestamp protobuf object.
71
+ #
72
+ # @param time [Time]
73
+ # @return [Google::Protobuf::Timestamp, nil]
74
+ #
75
+ def time_to_timestamp time
76
+ return unless time
77
+
78
+ Google::Protobuf::Timestamp.new seconds: time.to_i, nanos: time.nsec
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,25 @@
1
+ # Copyright 2018 Google LLC
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
+ # https://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
+
16
+ require "google/cloud/bigtable/v2/credentials"
17
+
18
+ module Google
19
+ module Cloud
20
+ module Bigtable
21
+ class Credentials < Google::Cloud::Bigtable::V2::Credentials
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,38 @@
1
+ # Copyright 2018 Google LLC
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
+ # https://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
+
16
+ module Google
17
+ module Cloud
18
+ module Bigtable
19
+ ##
20
+ # Invalid read row state error
21
+ class InvalidRowStateError < Google::Cloud::Error
22
+ ##
23
+ # Invalid row chunk data
24
+ attr_reader :data
25
+
26
+ def initialize message, data = nil
27
+ super message
28
+ @data = data if data
29
+ end
30
+ end
31
+
32
+ ##
33
+ # Row filter error.
34
+ class RowFilterError < Google::Cloud::Error
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,334 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+
18
+ module Google
19
+ module Cloud
20
+ module Bigtable
21
+ ##
22
+ # # GcRule
23
+ #
24
+ # A rule or rules for determining which cells to delete during garbage
25
+ # collection.
26
+ #
27
+ # Garbage collection (GC) executes opportunistically in the background,
28
+ # so it is possible for reads to return a cell even if it matches the
29
+ # active GC expression for its column family.
30
+ #
31
+ # GC Rule types:
32
+ # * `max_num_versions` - A garbage-collection rule that explicitly
33
+ # states the maximum number of cells to keep for all columns in a
34
+ # column family.
35
+ # * `max_age` - A garbage-collection rule based on the timestamp for
36
+ # each cell. With this type of garbage-collection rule, you set the
37
+ # time to live (TTL) for data. Cloud Bigtable looks at each column
38
+ # family during garbage collection and removes any cells that have
39
+ # expired.
40
+ # * `union` - A union garbage-collection policy will remove all data
41
+ # matching *any* of a set of given rules.
42
+ # * `intersection` - An intersection garbage-collection policy will
43
+ # remove all data matching *all* of a set of given rules.
44
+ #
45
+ # @example Create a table with column families.
46
+ # require "google/cloud/bigtable"
47
+ #
48
+ # bigtable = Google::Cloud::Bigtable.new
49
+ #
50
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
51
+ # cfm.add("cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5))
52
+ # cfm.add("cf2", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600))
53
+ #
54
+ # gc_rule = Google::Cloud::Bigtable::GcRule.union(
55
+ # Google::Cloud::Bigtable::GcRule.max_age(1800),
56
+ # Google::Cloud::Bigtable::GcRule.max_versions(3)
57
+ # )
58
+ # cfm.add("cf3", gc_rule: gc_rule)
59
+ # end
60
+ #
61
+ # puts table.column_families["cf1"].gc_rule.max_versions
62
+ # puts table.column_families["cf2"].gc_rule.max_age
63
+ # puts table.column_families["cf3"].gc_rule.union
64
+ #
65
+ class GcRule
66
+ # @private
67
+ # Creates a new GC Rule instance.
68
+ #
69
+ # @param grpc [Google::Bigtable::Admin::V2::GcRule | nil]
70
+ #
71
+ def initialize grpc = nil
72
+ @grpc = grpc || Google::Bigtable::Admin::V2::GcRule.new
73
+ end
74
+
75
+ ##
76
+ # Sets a garbage-collection rule that explicitly states the maximum
77
+ # number of cells to keep for all columns in a column family.
78
+ #
79
+ # @param versions [Integer]
80
+ #
81
+ def max_versions= versions
82
+ @grpc.max_num_versions = versions
83
+ end
84
+
85
+ ##
86
+ # Gets the garbage-collection rule that explicitly states the maximum
87
+ # number of cells to keep for all columns in a column family.
88
+ #
89
+ # @return [Integer, nil]
90
+ #
91
+ # @example
92
+ # require "google/cloud/bigtable"
93
+ #
94
+ # bigtable = Google::Cloud::Bigtable.new
95
+ #
96
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
97
+ # cfm.add("cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5))
98
+ # end
99
+ #
100
+ # puts table.column_families["cf1"].gc_rule.max_versions
101
+ #
102
+ def max_versions
103
+ @grpc.max_num_versions
104
+ end
105
+
106
+ ##
107
+ # Sets a garbage-collection rule based on the timestamp for each cell.
108
+ # With this type of garbage-collection rule, you set the time to live
109
+ # (TTL) for data. Cloud Bigtable looks at each column family during
110
+ # garbage collection and removes any cells that have expired.
111
+ #
112
+ # @param age [Numeric] Max age in seconds. Values must be at least one
113
+ # millisecond, and will be truncated to microsecond granularity.
114
+ #
115
+ def max_age= age
116
+ @grpc.max_age = Convert.number_to_duration age
117
+ end
118
+
119
+ ##
120
+ # Gets the garbage-collection rule based on the timestamp for each cell.
121
+ # With this type of garbage-collection rule, you set the time to live
122
+ # (TTL) for data. Cloud Bigtable looks at each column family during
123
+ # garbage collection and removes any cells that have expired.
124
+ #
125
+ # @return [Numeric, nil] Max age in seconds.
126
+ #
127
+ # @example
128
+ # require "google/cloud/bigtable"
129
+ #
130
+ # bigtable = Google::Cloud::Bigtable.new
131
+ #
132
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
133
+ # cfm.add("cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600))
134
+ # end
135
+ #
136
+ # puts table.column_families["cf1"].gc_rule.max_age
137
+ #
138
+ def max_age
139
+ Convert.duration_to_number @grpc.max_age
140
+ end
141
+
142
+ ##
143
+ # Sets the intersection rules collection for this GcRule.
144
+ #
145
+ # @param rules [Array<Google::Cloud::Bigtable::GcRule>]
146
+ # List of GcRule with nested rules.
147
+ #
148
+ def intersection= rules
149
+ @grpc.intersection = Google::Bigtable::Admin::V2::GcRule::Intersection.new rules: rules.map(&:to_grpc)
150
+ end
151
+
152
+ ##
153
+ #
154
+ # Gets the intersection rules collection for this GcRule.
155
+ #
156
+ # @return [Array<Google::Cloud::Bigtable::GcRule>, nil]
157
+ #
158
+ # @example
159
+ # require "google/cloud/bigtable"
160
+ #
161
+ # bigtable = Google::Cloud::Bigtable.new
162
+ #
163
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
164
+ # gc_rule = Google::Cloud::Bigtable::GcRule.intersection(
165
+ # Google::Cloud::Bigtable::GcRule.max_age(1800),
166
+ # Google::Cloud::Bigtable::GcRule.max_versions(3)
167
+ # )
168
+ # cfm.add("cf1", gc_rule: gc_rule)
169
+ # end
170
+ #
171
+ # puts table.column_families["cf1"].gc_rule.intersection
172
+ #
173
+ def intersection
174
+ return nil unless @grpc.intersection
175
+ @grpc.intersection.rules.map do |gc_rule_grpc|
176
+ self.class.from_grpc gc_rule_grpc
177
+ end
178
+ end
179
+
180
+ ##
181
+ # Sets the union rules collection for this GcRule. A union
182
+ # garbage-collection policy will remove all data matching *any* of its
183
+ # set of given rules.
184
+ #
185
+ # @param rules [Array<Google::Cloud::Bigtable::GcRule>]
186
+ # List of GcRule with nested rules.
187
+ #
188
+ def union= rules
189
+ @grpc.union = Google::Bigtable::Admin::V2::GcRule::Union.new rules: rules.map(&:to_grpc)
190
+ end
191
+
192
+ ##
193
+ # Gets the union rules collection for this GcRule. A union
194
+ # garbage-collection policy will remove all data matching *any* of its
195
+ # set of given rules.
196
+ #
197
+ # @return [Array<Google::Cloud::Bigtable::GcRule>, nil]
198
+ #
199
+ # @example
200
+ # require "google/cloud/bigtable"
201
+ #
202
+ # bigtable = Google::Cloud::Bigtable.new
203
+ #
204
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
205
+ # gc_rule = Google::Cloud::Bigtable::GcRule.union(
206
+ # Google::Cloud::Bigtable::GcRule.max_age(1800),
207
+ # Google::Cloud::Bigtable::GcRule.max_versions(3)
208
+ # )
209
+ # cfm.add("cf1", gc_rule: gc_rule)
210
+ # end
211
+ #
212
+ # puts table.column_families["cf1"].gc_rule.union
213
+ #
214
+ def union
215
+ return nil unless @grpc.union
216
+ @grpc.union.rules.map do |gc_rule_grpc|
217
+ self.class.from_grpc gc_rule_grpc
218
+ end
219
+ end
220
+
221
+ ##
222
+ # Creates a GcRule instance with max number of versions.
223
+ #
224
+ # @param versions [Integer] Max number of versions
225
+ # @return [Google::Cloud::Bigtable::GcRule]
226
+ #
227
+ # @example
228
+ # require "google/cloud/bigtable"
229
+ #
230
+ # bigtable = Google::Cloud::Bigtable.new
231
+ #
232
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
233
+ # cfm.add("cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5))
234
+ # end
235
+ #
236
+ def self.max_versions versions
237
+ new.tap do |gc_rule|
238
+ gc_rule.max_versions = versions
239
+ end
240
+ end
241
+
242
+ ##
243
+ # Creates a GcRule instance with max age.
244
+ #
245
+ # @param age [Integer] Max age in seconds.
246
+ # @return [Google::Cloud::Bigtable::GcRule]
247
+ #
248
+ # @example
249
+ # require "google/cloud/bigtable"
250
+ #
251
+ # bigtable = Google::Cloud::Bigtable.new
252
+ #
253
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
254
+ # cfm.add("cf1", gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600))
255
+ # end
256
+ #
257
+ def self.max_age age
258
+ new.tap do |gc_rule|
259
+ gc_rule.max_age = age
260
+ end
261
+ end
262
+
263
+ ##
264
+ # Creates a union GcRule instance.
265
+ #
266
+ # @param rules [Google::Cloud::Bigtable::GcRule, Array<Google::Cloud::Bigtable::GcRule>]
267
+ # List of GcRule with nested rules.
268
+ # @return [Google::Cloud::Bigtable::GcRule]
269
+ #
270
+ # @example
271
+ # require "google/cloud/bigtable"
272
+ #
273
+ # bigtable = Google::Cloud::Bigtable.new
274
+ #
275
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
276
+ # gc_rule = Google::Cloud::Bigtable::GcRule.union(
277
+ # Google::Cloud::Bigtable::GcRule.max_age(1800),
278
+ # Google::Cloud::Bigtable::GcRule.max_versions(3)
279
+ # )
280
+ # cfm.add("cf1", gc_rule: gc_rule)
281
+ # end
282
+ #
283
+ def self.union *rules
284
+ new.tap do |gc_rule|
285
+ gc_rule.union = rules
286
+ end
287
+ end
288
+
289
+ ##
290
+ # Creates a intersection GCRule instance.
291
+ #
292
+ # @param rules [Google::Cloud::Bigtable::GcRule, Array<Google::Cloud::Bigtable::GcRule>]
293
+ # List of GcRule with nested rules.
294
+ # @return [Google::Cloud::Bigtable::GcRule]
295
+ #
296
+ # @example
297
+ # require "google/cloud/bigtable"
298
+ #
299
+ # bigtable = Google::Cloud::Bigtable.new
300
+ #
301
+ # table = bigtable.create_table("my-instance", "my-table") do |cfm|
302
+ # gc_rule = Google::Cloud::Bigtable::GcRule.intersection(
303
+ # Google::Cloud::Bigtable::GcRule.max_age(1800),
304
+ # Google::Cloud::Bigtable::GcRule.max_versions(3)
305
+ # )
306
+ # cfm.add("cf1", gc_rule: gc_rule)
307
+ # end
308
+ #
309
+ def self.intersection *rules
310
+ new.tap do |gc_rule|
311
+ gc_rule.intersection = rules
312
+ end
313
+ end
314
+
315
+ # @private
316
+ # Get gRPC instance of GC Rule
317
+ # @return [Google::Bigtable::Admin::V2::GcRule]
318
+ def to_grpc
319
+ @grpc
320
+ end
321
+
322
+ # @private
323
+ #
324
+ # Creates a new GcRule instance from a
325
+ # Google::Bigtable::Admin::V2::GcRule.
326
+ # @param grpc [Google::Bigtable::Admin::V2::GcRule]
327
+ # @return [Google::Cloud::Bigtable::GcRule]
328
+ def self.from_grpc grpc
329
+ new grpc
330
+ end
331
+ end
332
+ end
333
+ end
334
+ end