Sha256: aeb683a149c646b86c9e616cbfe8a85624c1e134672bb3ce1a74a95f5b8b2456

Contents?: true

Size: 596 Bytes

Versions: 2

Compression:

Stored size: 596 Bytes

Contents

class Sinclair::MethodDefinition
  attr_reader :name, :code, :block

  def initialize(name, code = nil, &block)
    @name = name
    @code = code
    @block = block
  end

  def build(clazz)
    if code.is_a?(String)
      build_code_method(clazz)
    else
      build_block_method(clazz)
    end
  end

  private

  def build_block_method(clazz)
    clazz.send(:define_method, name, block)
  end

  def build_code_method(clazz)
    clazz.module_eval(code_definition, __FILE__, __LINE__ + 1)
  end

  def code_definition
    <<-CODE
      def #{name}
        #{code}
      end
    CODE
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sinclair-1.1.0 lib/sinclair/method_definition.rb
sinclair-1.0.0 lib/sinclair/method_definition.rb