Sha256: 77c32d9c61e148216998a04ffe918e4a815ba971757667af90ce576a2f6d347e

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

require 'zeitwerk'
loader = Zeitwerk::Loader.for_gem
loader.inflector.inflect('definition_dsl' => 'DefinitionDSL')
loader.setup

require_relative 'datacaster/result'

module Datacaster
  extend self

  def schema(i18n_scope: nil, &block)
    ContextNodes::StructureCleaner.new(build_schema(i18n_scope: i18n_scope, &block), :fail)
  end

  def choosy_schema(i18n_scope: nil, &block)
    ContextNodes::StructureCleaner.new(build_schema(i18n_scope: i18n_scope, &block), :remove)
  end

  def partial_schema(i18n_scope: nil, &block)
    ContextNodes::StructureCleaner.new(build_schema(i18n_scope: i18n_scope, &block), :pass)
  end

  def absent
    Datacaster::Absent.instance
  end

  private

  def build_schema(i18n_scope: nil, &block)
    raise "Expected block" unless block

    datacaster = DefinitionDSL.eval(&block)

    unless datacaster.is_a?(Base)
      raise "Datacaster instance should be returned from a block (e.g. result of 'hash_schema(...)' call)"
    end

    datacaster = datacaster.i18n_scope(i18n_scope) if i18n_scope

    datacaster
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
datacaster-3.1.1 lib/datacaster.rb
datacaster-3.1.0 lib/datacaster.rb
datacaster-3.0.0 lib/datacaster.rb