Sha256: 0d68b2d5fb4c0b3900a27cc138f02254a30e1169dbf354a661aa7ec03803a0bc

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

module RailsEdgeTest::Dsl
  Action = Struct.new(:name, :controller) do
    def initialize(*args)
      super
      @edges = {}
      @let_handler = LetHandler.new
    end

    delegate :controller_class, to: :controller

    def edge(description, &block)
      edge = Edge.new(description, self)
      @edges[edge] = block
    end

    def let(title, &block)
      @let_handler.add_definition(title, &block)
    end

    def generate(title, &block)
      @let_handler.add_definition("generate_#{title}", &block)
    end

    def __edges
      @edges
    end

    def __let_handler
      @let_handler
    end

    # support calling methods defined in controller
    def method_missing(method_name, *arguments, &block)
      if controller.respond_to?(method_name)
        controller.public_send(method_name, *arguments, &block)
      else
        super
      end
    end

    # always define respond_to_missing? when defining method_missing:
    # https://thoughtbot.com/blog/always-define-respond-to-missing-when-overriding
    def respond_to_missing?(method_name, include_private = false)
      controller.respond_to?(method_name) || super
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails_edge_test-1.2.0 lib/rails_edge_test/dsl/action.rb