Sha256: 36b3d97118a236fd3b8ff64c4ac03e24a6bb9b26871bc6471a56316a97eed9f8

Contents?: true

Size: 1.35 KB

Versions: 3

Compression:

Stored size: 1.35 KB

Contents

class BlocklyInterpreter::CoreBlocks::ProceduresIfReturnBlock < BlocklyInterpreter::Block
  include BlocklyInterpreter::DSLGenerator

  self.block_type = :procedures_ifreturn

  def execute_statement(execution_context)
    if values['CONDITION'].value(execution_context).present?
      return_value = values['VALUE'].value(execution_context) if values['VALUE']
      execution_context.early_return!(return_value)
    end
  end

  def to_dsl
    block_contents = [method_call_with_possible_block("condition", "", values['CONDITION'])]
    block_contents << method_call_with_block_or_nothing("return_value", "", values['VALUE'])

    method_call_with_possible_block("procedures_ifreturn", "", block_contents.compact)
  end

  module DSLMethods
    class ProceduresIfReturnBlockBuilder < BlocklyInterpreter::DSL::BlockBuilder
      def initialize(block_type)
        super
        mutation_attr :value, 0
      end

      def condition(&proc)
        value :CONDITION, &proc
      end

      def return_value(&proc)
        mutation_attr :value, 1
        value :VALUE, &proc
      end
    end

    def procedures_ifreturn(&proc)
      builder = BlocklyInterpreter::CoreBlocks::ProceduresIfReturnBlock::DSLMethods::ProceduresIfReturnBlockBuilder.new("procedures_ifreturn")

      @blocks << builder.tap do |builder|
        builder.instance_exec(&proc) if proc
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
blockly_interpreter-0.3.0 lib/blockly_interpreter/core_blocks/procedures_if_return_block.rb
blockly_interpreter-0.2.1 lib/blockly_interpreter/core_blocks/procedures_if_return_block.rb
blockly_interpreter-0.2.0 lib/blockly_interpreter/core_blocks/procedures_if_return_block.rb