Sha256: 791ddca9f53dfa30acb4aa70df2485b9fbf9efa5000745095bdf3ba941fa126e

Contents?: true

Size: 887 Bytes

Versions: 3

Compression:

Stored size: 887 Bytes

Contents

class BlocklyInterpreter::CoreBlocks::RepeatTimesBlock < BlocklyInterpreter::Block
  self.block_type = :controls_repeat_ext

  def execute_statement(execution_context)
    n = values['TIMES'].value(execution_context).to_i
    n.times { execution_context.execute(statements['DO']) }
  end

  module DSLMethods
    class RepeatBlockBuilder < BlocklyInterpreter::DSL::BlockBuilder
      def times(&proc)
        value "TIMES", &proc
      end

      def action(&proc)
        statement "DO", &proc
      end
    end

    def controls_repeat_ext(&proc)
      @blocks << BlocklyInterpreter::CoreBlocks::RepeatTimesBlock::DSLMethods::RepeatBlockBuilder.new("controls_repeat_ext").tap do |builder|
        builder.instance_exec(&proc)
      end
    end

    def repeat_times(n, &proc)
      controls_repeat_ext do
        times { math_number n }
        action &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/repeat_times_block.rb
blockly_interpreter-0.2.1 lib/blockly_interpreter/core_blocks/repeat_times_block.rb
blockly_interpreter-0.2.0 lib/blockly_interpreter/core_blocks/repeat_times_block.rb