Module: SurrealDB::CBOR::Encoder
- Defined in:
- lib/surrealdb/cbor/encoder.rb
Class Method Summary collapse
-
.encode(obj) ⇒ String
Encodes a Ruby object to CBOR bytes with SurrealDB custom tags.
-
.prepare(obj) ⇒ Object
Recursively converts SurrealDB types to CBOR::Tagged before encoding.
Class Method Details
.encode(obj) ⇒ String
Encodes a Ruby object to CBOR bytes with SurrealDB custom tags.
15 16 17 |
# File 'lib/surrealdb/cbor/encoder.rb', line 15 def encode(obj) ::CBOR.encode(prepare(obj)) end |
.prepare(obj) ⇒ Object
Recursively converts SurrealDB types to CBOR::Tagged before encoding.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/surrealdb/cbor/encoder.rb', line 22 def prepare(obj) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity case obj when SurrealDB::None ::CBOR::Tagged.new(Tags::NONE, nil) when SurrealDB::Table ::CBOR::Tagged.new(Tags::TABLE, obj.name) when SurrealDB::RecordID ::CBOR::Tagged.new(Tags::RECORD_ID, [obj.table, prepare(obj.id)]) when SurrealDB::Duration ::CBOR::Tagged.new(Tags::DURATION_COMPACT, [obj.secs, obj.nanos]) when SurrealDB::Range ::CBOR::Tagged.new(Tags::RANGE, [prepare_bound(obj.begin_bound), prepare_bound(obj.end_bound)]) when SurrealDB::BoundIncluded ::CBOR::Tagged.new(Tags::BOUND_INCLUDED, prepare(obj.value)) when SurrealDB::BoundExcluded ::CBOR::Tagged.new(Tags::BOUND_EXCLUDED, prepare(obj.value)) when SurrealDB::GeometryPoint ::CBOR::Tagged.new(Tags::GEOMETRY_POINT, [obj.longitude, obj.latitude]) when SurrealDB::GeometryLine ::CBOR::Tagged.new(Tags::GEOMETRY_LINE, encode_line_coords(obj)) when SurrealDB::GeometryPolygon ::CBOR::Tagged.new(Tags::GEOMETRY_POLYGON, encode_polygon(obj)) when SurrealDB::GeometryMultiPoint ::CBOR::Tagged.new(Tags::GEOMETRY_MULTIPOINT, obj.points.map { |p| [p.longitude, p.latitude] }) when SurrealDB::GeometryMultiLine ::CBOR::Tagged.new(Tags::GEOMETRY_MULTILINE, obj.lines.map { |l| encode_line_coords(l) }) when SurrealDB::GeometryMultiPolygon ::CBOR::Tagged.new(Tags::GEOMETRY_MULTIPOLYGON, obj.polygons.map { |p| encode_polygon(p) }) when SurrealDB::GeometryCollection ::CBOR::Tagged.new(Tags::GEOMETRY_COLLECTION, obj.geometries.map { |g| prepare(g) }) when Time ::CBOR::Tagged.new(Tags::DATETIME_COMPACT, [obj.to_i, obj.nsec]) when BigDecimal ::CBOR::Tagged.new(Tags::DECIMAL_STRING, obj.to_s('F')) when Hash obj.transform_values { |v| prepare(v) } when Array obj.map { |v| prepare(v) } else obj end end |