Sha256: 8c227a0bfcc72f9ef4516e443a6743921edcf34f0aabc41096a1e9f2f3aa1483

Contents?: true

Size: 1.17 KB

Versions: 12

Compression:

Stored size: 1.17 KB

Contents

require 'bigdecimal'
require 'date'

module Datacaster
  class DefinitionDSL
    include Datacaster::Predefined

    # Translates hashes like {a: <IntegerChecker>} to <HashSchema {a: <IntegerChecker>}>
    #   and arrays like [<IntegerChecker>] to <ArraySchema <IntegerChecker>>
    def self.expand(definition)
      case definition
      when Datacaster::Base
        definition
      when Array
        if definition.length != 1
          raise ArgumentError.new("Datacaster: DSL array definitions must have exactly 1 element in the array, e.g. [integer]")
        end
        ArraySchema.new(expand(definition.first))
      when Hash
        HashSchema.new(definition.transform_values { |x| expand(x) })
      else
        return definition if definition.respond_to?(:call)
        raise ArgumentError.new("Datacaster: Unknown definition #{definition.inspect}, which doesn't respond to #call")
      end
    end

    def self.eval(&block)
      new.instance_eval(&block)
    end

    def method_missing(m, *args)
      arg_string = args.empty? ? "" : "(#{args.map(&:inspect).join(', ')})"
      raise RuntimeError, "Datacaster: unknown definition '#{m}#{arg_string}'", caller
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
datacaster-4.1.0 lib/datacaster/definition_dsl.rb
datacaster-4.0.1 lib/datacaster/definition_dsl.rb
datacaster-3.3.1 lib/datacaster/definition_dsl.rb
datacaster-3.3.0 lib/datacaster/definition_dsl.rb
datacaster-3.2.7 lib/datacaster/definition_dsl.rb
datacaster-3.2.6 lib/datacaster/definition_dsl.rb
datacaster-3.2.5 lib/datacaster/definition_dsl.rb
datacaster-3.2.4 lib/datacaster/definition_dsl.rb
datacaster-3.2.3 lib/datacaster/definition_dsl.rb
datacaster-3.2.2 lib/datacaster/definition_dsl.rb
datacaster-3.2.1 lib/datacaster/definition_dsl.rb
datacaster-3.2.0 lib/datacaster/definition_dsl.rb