class Dhall::Coder
Constants
- JSON_LIKE
Public Class Methods
dump(obj)
click to toggle source
# File lib/dhall/coder.rb, line 42 def self.dump(obj) new.dump(obj) end
load(source, transform_keys: :to_s)
click to toggle source
# File lib/dhall/coder.rb, line 38 def self.load(source, transform_keys: :to_s) new.load(source, transform_keys: transform_keys) end
new(default: nil, safe: JSON_LIKE)
click to toggle source
# File lib/dhall/coder.rb, line 46 def initialize(default: nil, safe: JSON_LIKE) @default = default @verifier = Verifier.new(*Array(safe)) @verifier.verify(default, "default value") end
Public Instance Methods
decode(expr, op="decode", klass: nil, transform_keys: :to_s)
click to toggle source
# File lib/dhall/coder.rb, line 180 def decode(expr, op="decode", klass: nil, transform_keys: :to_s) return revive(klass, expr, op, transform_keys: transform_keys) if klass @verifier.verify( Util.transform_keys( expr.to_ruby { |dexpr, dklass| decode(dexpr, op, klass: dklass, transform_keys: transform_keys) }, &transform_keys ), op ) end
dump(obj)
click to toggle source
# File lib/dhall/coder.rb, line 193 def dump(obj) return if obj.nil? Dhall.dump(@verifier.verify(obj, "dump")) end
load(source, transform_keys: :to_s)
click to toggle source
# File lib/dhall/coder.rb, line 61 def load(source, transform_keys: :to_s) load_async(source, "load", transform_keys: transform_keys).sync end
load_async(source, op="load_async", transform_keys: :to_s)
click to toggle source
# File lib/dhall/coder.rb, line 52 def load_async(source, op="load_async", transform_keys: :to_s) return Promise.resolve(@default) if source.nil? return Promise.resolve(source) unless source.is_a?(String) Dhall.load(source).then do |expr| decode(expr, op, transform_keys: transform_keys) end end
revive(klass, expr, op="revive", transform_keys: :to_s)
click to toggle source
# File lib/dhall/coder.rb, line 168 def revive(klass, expr, op="revive", transform_keys: :to_s) @verifier.verify_class(klass, op) return klass.from_dhall(expr) if klass.respond_to?(:from_dhall) klass.allocate.tap do |o| o.init_with(Util.psych_coder_for( klass.name, decode(expr, op, transform_keys: transform_keys) )) end end