Sha256: e705d8cbcc0f97e1051bd6d874fe5e75fb3a9c1e6700881ab0645b860c4b4315

Contents?: true

Size: 806 Bytes

Versions: 7

Compression:

Stored size: 806 Bytes

Contents

module Dry
  module Core
    # Class for generating more classes
    class ClassBuilder
      attr_reader :name
      attr_reader :parent

      def initialize(name:, parent: Object)
        @name = name
        @parent = parent
      end

      # Generate a class based on options
      #
      # @example
      #   builder = Dry::Core::ClassBuilder.new(name: 'MyClass')
      #
      #   klass = builder.call
      #   klass.name # => "MyClass"
      #
      # @return [Class]
      def call
        klass = Class.new(parent)
        name = self.name

        klass.singleton_class.class_eval do
          define_method(:name) { name }
          alias_method :inspect, :name
          alias_method :to_s, :name
        end

        yield(klass) if block_given?

        klass
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
dry-core-0.3.0 lib/dry/core/class_builder.rb
dry-core-0.2.4 lib/dry/core/class_builder.rb
dry-core-0.2.3 lib/dry/core/class_builder.rb
dry-core-0.2.2 lib/dry/core/class_builder.rb
dry-core-0.2.1 lib/dry/core/class_builder.rb
dry-core-0.2.0 lib/dry/core/class_builder.rb
dry-core-0.1.0 lib/dry/core/class_builder.rb