Sha256: f2ab80f7bc6e5563c5e1bb21b0c7091ddccb8cd9d7cd5940d159bf598aa22778

Contents?: true

Size: 897 Bytes

Versions: 23

Compression:

Stored size: 897 Bytes

Contents

require 'forwardable'

require_relative 'schema_type'
require_relative 'schema_creation'

module Jimmy
  module SchemaTypes

    @types = {}
    @dsls = {}
    @nested_handlers = {}
    @compilers = {}

    class << self
      extend Forwardable

      delegate %i[each keys values key?] => :@types

      attr_reader :dsls, :nested_handlers, :compilers

      def [](type_name)
        @types[type_name]
      end

      def register(type_class)
        type_name = type_class.name[/\w+$/].downcase.to_sym
        dsl_class = Class.new(type_class.superclass::DSL)
        type_class.const_set :DSL, dsl_class
        @dsls[type_name] = dsl_class
        @types[type_name] = type_class
      end

    end

    Dir[ROOT + 'lib/jimmy/schema_types/*.rb'].each do |path|
      require path
    end

    nested_handlers.each { |klass, handler| SchemaCreation.apply_to klass::DSL, &handler }

  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
jimmy-0.5.5 lib/jimmy/schema_types.rb
jimmy-0.5.4 lib/jimmy/schema_types.rb
jimmy-0.5.3 lib/jimmy/schema_types.rb
jimmy-0.5.2 lib/jimmy/schema_types.rb
jimmy-0.5.1 lib/jimmy/schema_types.rb
jimmy-0.5.0 lib/jimmy/schema_types.rb
jimmy-0.4.8 lib/jimmy/schema_types.rb
jimmy-0.4.7 lib/jimmy/schema_types.rb
jimmy-0.4.6 lib/jimmy/schema_types.rb
jimmy-0.4.5 lib/jimmy/schema_types.rb
jimmy-0.4.4 lib/jimmy/schema_types.rb
jimmy-0.4.3 lib/jimmy/schema_types.rb
jimmy-0.4.2 lib/jimmy/schema_types.rb
jimmy-0.4.1 lib/jimmy/schema_types.rb
jimmy-0.4 lib/jimmy/schema_types.rb
jimmy-0.3.4 lib/jimmy/schema_types.rb
jimmy-0.3.3 lib/jimmy/schema_types.rb
jimmy-0.3.2 lib/jimmy/schema_types.rb
jimmy-0.3.1 lib/jimmy/schema_types.rb
jimmy-0.3 lib/jimmy/schema_types.rb