def call(schema = @schema, instance = @instance)
      schema.each do |schema_key, schema_value|
        if schema_value.is_a?(Hash)
          check_for_ar(schema, instance, schema_key, schema_value)
        else
          ValueAssigner.assign(Schema.new(schema_key, schema_value),
                               instance) { |coerced_value| schema[schema_key] = coerced_value }
        end
      end
    rescue NoMethodError => e
      Surrealist::ExceptionRaiser.raise_invalid_key!(e)
    end
def call(schema = @schema, instance = @instance)
      schema.each do |schema_key, schema_value|
        if schema_value.is_a?(Hash)
          check_for_ar(schema, instance, schema_key, schema_value)
        else
          ValueAssigner.assign(Schema.new(schema_key, schema_value),
                               instance) { |coerced_value| schema[schema_key] = coerced_value }
        end
      end
    rescue NoMethodError => e
      Surrealist::ExceptionRaiser.raise_invalid_key!(e)
    end
@param [Carrier] carrier instance of Surrealist::Carrier
 @param [Hash] schema the schema defined in the object's class.
 @param [Object] instance the instance of the object which methods from the schema are called on.
 A method that goes recursively through the schema hash, defines the values and type-checks them.

 @param [Hash] schema the schema defined in the object's class.
 @param [Object] instance the instance of the object which methods from the schema are called on.

 @raise +Surrealist::UndefinedMethodError+ if a key defined in the schema
   does not have a corresponding method on the object.

 @return [Hash] a hash that will be dumped into JSON.