ruby-rego 0.1.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 +7 -0
- data/.reek.yml +80 -0
- data/.vscode/extensions.json +19 -0
- data/.vscode/launch.json +35 -0
- data/.vscode/settings.json +25 -0
- data/.vscode/tasks.json +117 -0
- data/.yardopts +12 -0
- data/ARCHITECTURE.md +39 -0
- data/CHANGELOG.md +25 -0
- data/CODE_OF_CONDUCT.md +10 -0
- data/LICENSE.txt +21 -0
- data/README.md +183 -0
- data/RELEASING.md +37 -0
- data/Rakefile +38 -0
- data/SECURITY.md +26 -0
- data/Steepfile +10 -0
- data/TODO.md +35 -0
- data/benchmark/builtin_calls.rb +29 -0
- data/benchmark/complex_policy.rb +19 -0
- data/benchmark/comprehensions.rb +19 -0
- data/benchmark/simple_rules.rb +20 -0
- data/examples/README.md +27 -0
- data/examples/sample_config.yaml +2 -0
- data/examples/simple_policy.rego +7 -0
- data/examples/validation_policy.rego +11 -0
- data/exe/rego-validate +6 -0
- data/lib/ruby/rego/ast/base.rb +95 -0
- data/lib/ruby/rego/ast/binary_op.rb +64 -0
- data/lib/ruby/rego/ast/call.rb +27 -0
- data/lib/ruby/rego/ast/composite.rb +48 -0
- data/lib/ruby/rego/ast/comprehension.rb +63 -0
- data/lib/ruby/rego/ast/every.rb +37 -0
- data/lib/ruby/rego/ast/import.rb +32 -0
- data/lib/ruby/rego/ast/literal.rb +70 -0
- data/lib/ruby/rego/ast/module.rb +32 -0
- data/lib/ruby/rego/ast/package.rb +22 -0
- data/lib/ruby/rego/ast/query.rb +63 -0
- data/lib/ruby/rego/ast/reference.rb +58 -0
- data/lib/ruby/rego/ast/rule.rb +114 -0
- data/lib/ruby/rego/ast/unary_op.rb +42 -0
- data/lib/ruby/rego/ast/variable.rb +22 -0
- data/lib/ruby/rego/ast.rb +17 -0
- data/lib/ruby/rego/builtins/aggregates.rb +124 -0
- data/lib/ruby/rego/builtins/base.rb +95 -0
- data/lib/ruby/rego/builtins/collections/array_ops.rb +103 -0
- data/lib/ruby/rego/builtins/collections/object_ops.rb +120 -0
- data/lib/ruby/rego/builtins/collections/set_ops.rb +51 -0
- data/lib/ruby/rego/builtins/collections.rb +137 -0
- data/lib/ruby/rego/builtins/comparisons/casts.rb +139 -0
- data/lib/ruby/rego/builtins/comparisons.rb +84 -0
- data/lib/ruby/rego/builtins/numeric_helpers.rb +56 -0
- data/lib/ruby/rego/builtins/registry.rb +199 -0
- data/lib/ruby/rego/builtins/registry_helpers.rb +27 -0
- data/lib/ruby/rego/builtins/strings/case_ops.rb +22 -0
- data/lib/ruby/rego/builtins/strings/concat.rb +19 -0
- data/lib/ruby/rego/builtins/strings/formatting.rb +35 -0
- data/lib/ruby/rego/builtins/strings/helpers.rb +62 -0
- data/lib/ruby/rego/builtins/strings/number_helpers.rb +48 -0
- data/lib/ruby/rego/builtins/strings/search.rb +63 -0
- data/lib/ruby/rego/builtins/strings/split.rb +19 -0
- data/lib/ruby/rego/builtins/strings/substring.rb +22 -0
- data/lib/ruby/rego/builtins/strings/trim.rb +42 -0
- data/lib/ruby/rego/builtins/strings/trim_helpers.rb +62 -0
- data/lib/ruby/rego/builtins/strings.rb +58 -0
- data/lib/ruby/rego/builtins/types.rb +89 -0
- data/lib/ruby/rego/call_name.rb +55 -0
- data/lib/ruby/rego/cli.rb +1122 -0
- data/lib/ruby/rego/compiled_module.rb +114 -0
- data/lib/ruby/rego/compiler.rb +1097 -0
- data/lib/ruby/rego/environment/overrides.rb +33 -0
- data/lib/ruby/rego/environment/reference_resolution.rb +86 -0
- data/lib/ruby/rego/environment.rb +230 -0
- data/lib/ruby/rego/environment_pool.rb +71 -0
- data/lib/ruby/rego/error_handling.rb +58 -0
- data/lib/ruby/rego/error_payload.rb +34 -0
- data/lib/ruby/rego/errors.rb +196 -0
- data/lib/ruby/rego/evaluator/assignment_support.rb +126 -0
- data/lib/ruby/rego/evaluator/binding_helpers.rb +60 -0
- data/lib/ruby/rego/evaluator/comprehension_evaluator.rb +182 -0
- data/lib/ruby/rego/evaluator/expression_dispatch.rb +45 -0
- data/lib/ruby/rego/evaluator/expression_evaluator.rb +492 -0
- data/lib/ruby/rego/evaluator/object_literal_evaluator.rb +52 -0
- data/lib/ruby/rego/evaluator/operator_evaluator.rb +163 -0
- data/lib/ruby/rego/evaluator/query_node_builder.rb +38 -0
- data/lib/ruby/rego/evaluator/reference_key_resolver.rb +50 -0
- data/lib/ruby/rego/evaluator/reference_resolver.rb +352 -0
- data/lib/ruby/rego/evaluator/rule_evaluator/bindings.rb +70 -0
- data/lib/ruby/rego/evaluator/rule_evaluator.rb +550 -0
- data/lib/ruby/rego/evaluator/rule_value_provider.rb +56 -0
- data/lib/ruby/rego/evaluator/variable_collector.rb +221 -0
- data/lib/ruby/rego/evaluator.rb +174 -0
- data/lib/ruby/rego/lexer/number_reader.rb +68 -0
- data/lib/ruby/rego/lexer/stream.rb +137 -0
- data/lib/ruby/rego/lexer/string_reader.rb +90 -0
- data/lib/ruby/rego/lexer/template_string_reader.rb +62 -0
- data/lib/ruby/rego/lexer.rb +206 -0
- data/lib/ruby/rego/location.rb +73 -0
- data/lib/ruby/rego/memoization.rb +67 -0
- data/lib/ruby/rego/parser/collections.rb +173 -0
- data/lib/ruby/rego/parser/expressions.rb +216 -0
- data/lib/ruby/rego/parser/precedence.rb +42 -0
- data/lib/ruby/rego/parser/query.rb +139 -0
- data/lib/ruby/rego/parser/references.rb +115 -0
- data/lib/ruby/rego/parser/rules.rb +310 -0
- data/lib/ruby/rego/parser.rb +210 -0
- data/lib/ruby/rego/policy.rb +50 -0
- data/lib/ruby/rego/result.rb +91 -0
- data/lib/ruby/rego/token.rb +206 -0
- data/lib/ruby/rego/unifier.rb +451 -0
- data/lib/ruby/rego/value.rb +379 -0
- data/lib/ruby/rego/version.rb +7 -0
- data/lib/ruby/rego/with_modifiers/with_modifier.rb +37 -0
- data/lib/ruby/rego/with_modifiers/with_modifier_applier.rb +48 -0
- data/lib/ruby/rego/with_modifiers/with_modifier_builtin_override.rb +128 -0
- data/lib/ruby/rego/with_modifiers/with_modifier_context.rb +120 -0
- data/lib/ruby/rego/with_modifiers/with_modifier_path_key_resolver.rb +42 -0
- data/lib/ruby/rego/with_modifiers/with_modifier_path_override.rb +99 -0
- data/lib/ruby/rego/with_modifiers/with_modifier_root_scope.rb +58 -0
- data/lib/ruby/rego.rb +72 -0
- data/sig/objspace.rbs +4 -0
- data/sig/psych.rbs +7 -0
- data/sig/rego_validate.rbs +382 -0
- data/sig/ruby/rego.rbs +2150 -0
- metadata +172 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
module RegoValidate
|
|
2
|
+
class Options
|
|
3
|
+
attr_accessor policy: String?
|
|
4
|
+
attr_accessor config: String?
|
|
5
|
+
attr_accessor query: String?
|
|
6
|
+
attr_accessor format: String
|
|
7
|
+
attr_accessor help: bool
|
|
8
|
+
attr_accessor yaml_aliases: bool
|
|
9
|
+
attr_accessor profile: bool
|
|
10
|
+
|
|
11
|
+
def initialize: (?policy: String?, ?config: String?, ?query: String?, ?format: String, ?help: bool, ?yaml_aliases: bool, ?profile: bool) -> void
|
|
12
|
+
def help?: () -> bool
|
|
13
|
+
def profile?: () -> bool
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class ParseResult
|
|
17
|
+
attr_reader options: Options
|
|
18
|
+
attr_reader parser: untyped
|
|
19
|
+
attr_reader error: OptionParser::ParseError?
|
|
20
|
+
|
|
21
|
+
def initialize: (options: Options, parser: untyped, ?error: OptionParser::ParseError?) -> void
|
|
22
|
+
def success?: () -> bool
|
|
23
|
+
|
|
24
|
+
def report_error: (stdout: IO, stderr: IO) -> void
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def error_message: () -> String
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class ConfigLoadResult
|
|
32
|
+
attr_reader value: untyped
|
|
33
|
+
attr_reader success: bool
|
|
34
|
+
|
|
35
|
+
def initialize: (?value: untyped, success: bool) -> void
|
|
36
|
+
def success?: () -> bool
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class EvaluationResult
|
|
40
|
+
attr_reader outcome: Outcome?
|
|
41
|
+
attr_reader error_message: String?
|
|
42
|
+
|
|
43
|
+
def initialize: (?outcome: Outcome?, ?error_message: String?) -> void
|
|
44
|
+
def success?: () -> bool
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
class Outcome
|
|
48
|
+
attr_reader success: bool
|
|
49
|
+
attr_reader value: untyped
|
|
50
|
+
attr_reader errors: Array[String]
|
|
51
|
+
|
|
52
|
+
def initialize: (success: bool, value: untyped, errors: Array[String]) -> void
|
|
53
|
+
def success?: () -> bool
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
class CLI
|
|
57
|
+
def initialize: (Array[String] argv, ?stdout: IO, ?stderr: IO) -> void
|
|
58
|
+
def run: () -> Integer
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
attr_reader argv: Array[String]
|
|
63
|
+
attr_reader options: Options
|
|
64
|
+
attr_reader stdout: IO
|
|
65
|
+
attr_reader stderr: IO
|
|
66
|
+
def perform_run: () -> Integer
|
|
67
|
+
def apply_parse_result: (ParseResult parse_result) -> Integer
|
|
68
|
+
def handle_evaluation: (untyped parser) -> Integer
|
|
69
|
+
def emit_outcome: (Outcome outcome) -> Integer
|
|
70
|
+
def handle_parse_error: (ParseResult parse_result) -> Integer
|
|
71
|
+
def required_options_present?: (untyped parser) -> bool
|
|
72
|
+
def evaluate_policy: (untyped parser, ?profiler: Profiler?) -> EvaluationResult
|
|
73
|
+
def report_evaluation_error: (EvaluationResult evaluation, untyped parser) -> void
|
|
74
|
+
def handle_help: (untyped parser) -> Integer
|
|
75
|
+
def handle_rego_error: (Ruby::Rego::Error error) -> Integer
|
|
76
|
+
def handle_unexpected_error: (StandardError error) -> Integer
|
|
77
|
+
def reporter: () -> ErrorReporter
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
class OptionsParser
|
|
81
|
+
VALID_FORMATS: Array[String]
|
|
82
|
+
|
|
83
|
+
def initialize: (Array[String] argv) -> void
|
|
84
|
+
def parse: () -> ParseResult
|
|
85
|
+
|
|
86
|
+
class ParseResultBuilder
|
|
87
|
+
def initialize: (Array[String] argv) -> void
|
|
88
|
+
def call: () -> ParseResult
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
attr_reader argv: Array[String]
|
|
93
|
+
def parse_with: (Options options) -> ParseResult
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
class OptionDefinitions
|
|
97
|
+
OPTION_BUILDERS: Array[Symbol]
|
|
98
|
+
|
|
99
|
+
def initialize: (Options options) -> void
|
|
100
|
+
def build: () -> OptionParser
|
|
101
|
+
|
|
102
|
+
private
|
|
103
|
+
|
|
104
|
+
attr_reader options: Options
|
|
105
|
+
def apply_options: (OptionParser opts) -> void
|
|
106
|
+
def add_policy_option: (OptionParser opts) -> void
|
|
107
|
+
def add_config_option: (OptionParser opts) -> void
|
|
108
|
+
def add_query_option: (OptionParser opts) -> void
|
|
109
|
+
def add_format_option: (OptionParser opts) -> void
|
|
110
|
+
def add_profile_option: (OptionParser opts) -> void
|
|
111
|
+
def add_yaml_aliases_option: (OptionParser opts) -> void
|
|
112
|
+
def add_help_option: (OptionParser opts) -> void
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
private
|
|
116
|
+
|
|
117
|
+
attr_reader argv: Array[String]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
class OptionsValidator
|
|
121
|
+
def initialize: (Options options) -> void
|
|
122
|
+
def missing_required: () -> Array[String]
|
|
123
|
+
|
|
124
|
+
private
|
|
125
|
+
|
|
126
|
+
attr_reader options: Options
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
class ConfigLoader
|
|
130
|
+
JSON_EXTENSIONS: Array[String]
|
|
131
|
+
|
|
132
|
+
def initialize: (reporter: ErrorReporter, parser: untyped, yaml_aliases: bool) -> void
|
|
133
|
+
def read_policy: (String path) -> String?
|
|
134
|
+
def read_config: (String path) -> ConfigLoadResult
|
|
135
|
+
|
|
136
|
+
private
|
|
137
|
+
|
|
138
|
+
attr_reader reporter: ErrorReporter
|
|
139
|
+
attr_reader parser: untyped
|
|
140
|
+
attr_reader json_extensions: Array[String]
|
|
141
|
+
attr_reader yaml_aliases: bool
|
|
142
|
+
def read_file: (String path, String label) -> String?
|
|
143
|
+
def parse_config: (String content, String path) -> ConfigLoadResult
|
|
144
|
+
def parse_config_value: (String content, String path) -> untyped
|
|
145
|
+
def report_file_error: (String label, String reason, String path) -> void
|
|
146
|
+
def json_config?: (String path) -> bool
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
class SourceLoader
|
|
150
|
+
def initialize: (options: Options, reporter: ErrorReporter, parser: untyped) -> void
|
|
151
|
+
def load: () -> [String?, ConfigLoadResult]
|
|
152
|
+
|
|
153
|
+
private
|
|
154
|
+
|
|
155
|
+
attr_reader options: Options
|
|
156
|
+
attr_reader loader: ConfigLoader
|
|
157
|
+
def load_policy_source: () -> String?
|
|
158
|
+
def load_config: () -> ConfigLoadResult
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
class DefaultQueryResolver
|
|
162
|
+
DEFAULT_RULE_NAMES: Array[String]
|
|
163
|
+
FALLBACK_RULE_NAMES: Array[String]
|
|
164
|
+
|
|
165
|
+
def initialize: (Ruby::Rego::CompiledModule compiled_module) -> void
|
|
166
|
+
def resolve: () -> String?
|
|
167
|
+
|
|
168
|
+
private
|
|
169
|
+
|
|
170
|
+
attr_reader compiled_module: Ruby::Rego::CompiledModule
|
|
171
|
+
attr_reader rule_names: Array[String]
|
|
172
|
+
def rule_available?: (String name) -> bool
|
|
173
|
+
def package_path: () -> Array[String]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
class PolicyEvaluator
|
|
177
|
+
def initialize: (String policy_source, untyped input, String? query, ?profiler: Profiler?) -> void
|
|
178
|
+
def evaluate: () -> EvaluationResult
|
|
179
|
+
|
|
180
|
+
private
|
|
181
|
+
|
|
182
|
+
attr_reader policy_source: String
|
|
183
|
+
attr_reader input: untyped
|
|
184
|
+
attr_reader query: String?
|
|
185
|
+
attr_reader profiler: Profiler?
|
|
186
|
+
def resolve_query: (Ruby::Rego::CompiledModule compiled_module) -> String?
|
|
187
|
+
def build_evaluation: (Ruby::Rego::CompiledModule compiled_module, String query_path) -> EvaluationResult
|
|
188
|
+
def evaluate_compiled: (Ruby::Rego::CompiledModule compiled_module, String query_path) -> Ruby::Rego::Result
|
|
189
|
+
def measure: (String label) { () -> untyped } -> untyped
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
class Profiler
|
|
193
|
+
class Sample
|
|
194
|
+
attr_reader label: String
|
|
195
|
+
attr_reader duration_ms: Float
|
|
196
|
+
attr_reader allocations: Integer
|
|
197
|
+
attr_reader memory_bytes: Integer
|
|
198
|
+
attr_reader top_objects: Array[String]
|
|
199
|
+
|
|
200
|
+
def initialize: (label: String, duration_ms: Float, allocations: Integer, memory_bytes: Integer, top_objects: Array[String]) -> void
|
|
201
|
+
def report_line: () -> String
|
|
202
|
+
def top_objects_line: () -> String?
|
|
203
|
+
|
|
204
|
+
private
|
|
205
|
+
|
|
206
|
+
def format_duration: () -> String
|
|
207
|
+
def format_bytes: () -> String
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
class ByteFormatter
|
|
211
|
+
def initialize: (Integer bytes) -> void
|
|
212
|
+
def render: () -> String
|
|
213
|
+
|
|
214
|
+
private
|
|
215
|
+
|
|
216
|
+
attr_reader sign: String
|
|
217
|
+
attr_reader size: Integer
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
class Snapshot
|
|
221
|
+
def self.capture: () -> Snapshot
|
|
222
|
+
def self.capture_before: () -> Snapshot
|
|
223
|
+
def self.capture_after: () -> Snapshot
|
|
224
|
+
def initialize: (allocated: Integer, memsize: Integer, objects: Hash[Symbol, Integer]) -> void
|
|
225
|
+
def delta: (Snapshot other) -> Delta
|
|
226
|
+
attr_reader allocated: Integer
|
|
227
|
+
attr_reader memsize: Integer
|
|
228
|
+
attr_reader objects: Hash[Symbol, Integer]
|
|
229
|
+
|
|
230
|
+
private
|
|
231
|
+
|
|
232
|
+
def self.build_snapshot: (memsize: Integer, objects: Hash[Symbol, Integer]) -> Snapshot
|
|
233
|
+
def self.empty_object_counts: () -> Hash[Symbol, Integer]
|
|
234
|
+
|
|
235
|
+
def object_delta_map: (Hash[Symbol, Integer] after_objects) -> Hash[Symbol, Integer]
|
|
236
|
+
def add_delta: (Hash[Symbol, Integer] deltas, Symbol key, Integer count) -> void
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
class Delta
|
|
240
|
+
SKIP_KEYS: Array[Symbol]
|
|
241
|
+
|
|
242
|
+
def self.skip_key?: (Symbol key) -> bool
|
|
243
|
+
def initialize: (allocations: Integer, memory_bytes: Integer, object_deltas: Hash[Symbol, Integer]) -> void
|
|
244
|
+
def top_objects: (?limit: Integer) -> Array[String]
|
|
245
|
+
|
|
246
|
+
attr_reader allocations: Integer
|
|
247
|
+
attr_reader memory_bytes: Integer
|
|
248
|
+
attr_reader object_deltas: Hash[Symbol, Integer]
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
class Measurement
|
|
252
|
+
def initialize: (label: String, before: Snapshot, start: Float) -> void
|
|
253
|
+
def finish: (after: Snapshot, finish: Float) -> Sample
|
|
254
|
+
|
|
255
|
+
private
|
|
256
|
+
|
|
257
|
+
attr_reader before: Snapshot
|
|
258
|
+
attr_reader label: String
|
|
259
|
+
attr_reader start: Float
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def initialize: (?stderr: IO) -> void
|
|
263
|
+
def measure: (String label) { () -> untyped } -> untyped
|
|
264
|
+
def report: () -> void
|
|
265
|
+
|
|
266
|
+
private
|
|
267
|
+
|
|
268
|
+
attr_reader clock: untyped
|
|
269
|
+
attr_reader samples: Array[Profiler::Sample]
|
|
270
|
+
attr_reader stderr: IO
|
|
271
|
+
def report_samples: () -> void
|
|
272
|
+
def report_hotspot: () -> void
|
|
273
|
+
def start_measurement: (String label) -> Measurement
|
|
274
|
+
def finish_measurement: (Measurement measurement) -> void
|
|
275
|
+
def clock_time: () -> Float
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
class OutcomeBuilder
|
|
279
|
+
def initialize: (Ruby::Rego::Result result, String query) -> void
|
|
280
|
+
def build: () -> Outcome
|
|
281
|
+
|
|
282
|
+
private
|
|
283
|
+
|
|
284
|
+
attr_reader result: Ruby::Rego::Result
|
|
285
|
+
attr_reader query: String
|
|
286
|
+
def build_defined_outcome: () -> Outcome
|
|
287
|
+
def errors_for: (untyped value) -> Array[String]
|
|
288
|
+
def undefined_outcome: () -> Outcome
|
|
289
|
+
def errors_from_value: (untyped value) -> Array[String]
|
|
290
|
+
def errors_for_non_true: (untyped value) -> Array[String]
|
|
291
|
+
def scalar_error: (untyped value) -> Array[String]
|
|
292
|
+
def collection_errors: (untyped value) -> Array[String]
|
|
293
|
+
def hash_errors: (untyped value) -> Array[String]
|
|
294
|
+
def format_rule_error: (untyped value) -> String
|
|
295
|
+
def rule_name: () -> String
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
class OutcomeEmitter
|
|
299
|
+
def initialize: (IO stdout, ?format: String) -> void
|
|
300
|
+
def emit: (Outcome outcome) -> void
|
|
301
|
+
|
|
302
|
+
class JsonFormatter
|
|
303
|
+
def initialize: (IO stdout) -> void
|
|
304
|
+
def emit: (Outcome outcome) -> void
|
|
305
|
+
|
|
306
|
+
private
|
|
307
|
+
|
|
308
|
+
attr_reader stdout: IO
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
class TextFormatter
|
|
312
|
+
def initialize: (IO stdout) -> void
|
|
313
|
+
def emit: (Outcome outcome) -> void
|
|
314
|
+
|
|
315
|
+
private
|
|
316
|
+
|
|
317
|
+
attr_reader stdout: IO
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
class OutcomePayload
|
|
321
|
+
def initialize: (Outcome outcome) -> void
|
|
322
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
323
|
+
|
|
324
|
+
private
|
|
325
|
+
|
|
326
|
+
attr_reader outcome: Outcome
|
|
327
|
+
def normalize_json: (untyped value) -> untyped
|
|
328
|
+
def normalize_array: (Array[untyped] values) -> Array[untyped]
|
|
329
|
+
def normalize_hash: (Hash[untyped, untyped] values) -> Hash[untyped, untyped]
|
|
330
|
+
def normalize_set: (Set[untyped] values) -> Array[untyped]
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
FORMATTERS: Hash[String, untyped]
|
|
334
|
+
|
|
335
|
+
private
|
|
336
|
+
|
|
337
|
+
attr_reader formatter: untyped
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
class ErrorReporter
|
|
341
|
+
def initialize: (stdout: IO, stderr: IO, ?format: String) -> void
|
|
342
|
+
def error: (String message, ?untyped parser) -> void
|
|
343
|
+
def rego_error: (Ruby::Rego::Error error) -> void
|
|
344
|
+
|
|
345
|
+
class ErrorPayload
|
|
346
|
+
def self.from_cli_error: (String message) -> ErrorPayload
|
|
347
|
+
def self.from_rego_error: (Ruby::Rego::Error error) -> ErrorPayload
|
|
348
|
+
def initialize: (message: String, type: String, ?location: Ruby::Rego::Location?) -> void
|
|
349
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
350
|
+
|
|
351
|
+
private
|
|
352
|
+
|
|
353
|
+
attr_reader message: String
|
|
354
|
+
attr_reader type: String
|
|
355
|
+
attr_reader location: Ruby::Rego::Location?
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
class JsonFormatter
|
|
359
|
+
def initialize: (stdout: IO, stderr: IO) -> void
|
|
360
|
+
def error: (String message, ?untyped parser) -> void
|
|
361
|
+
def rego_error: (Ruby::Rego::Error error) -> void
|
|
362
|
+
|
|
363
|
+
private
|
|
364
|
+
|
|
365
|
+
attr_reader stdout: IO
|
|
366
|
+
attr_reader stderr: IO
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
class TextFormatter
|
|
370
|
+
def initialize: (stdout: IO, stderr: IO) -> void
|
|
371
|
+
def error: (String message, ?untyped parser) -> void
|
|
372
|
+
def rego_error: (Ruby::Rego::Error error) -> void
|
|
373
|
+
|
|
374
|
+
private
|
|
375
|
+
|
|
376
|
+
attr_reader stdout: IO
|
|
377
|
+
attr_reader stderr: IO
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
FORMATTERS: Hash[String, untyped]
|
|
381
|
+
end
|
|
382
|
+
end
|