Module: RubyToBlock::Block::CharacterOperation::ClassMethods

Defined in:
app/models/concerns/ruby_to_block/block/character_operation.rb

Instance Method Summary collapse

Instance Method Details

#add_child_or_create_character_new_block(context, name, block) ⇒ Array<ブロック, ブロック>

必要であればcharacter_newブロックを作成してから指定したブロックをcharacter_newブロックの子供として追加する

Parameters:

  • context (RubyToBlock::Context)

    コンテキスト

  • name (String)

    キャラクターの名前

  • block (ブロック)

    ブロックのインスタンス

Returns:

  • (Array<ブロック, ブロック>)

    最初の要素がcharacter_newブロック、次の要素がカレントブロックの配列



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/models/concerns/ruby_to_block/block/character_operation.rb', line 38

def add_child_or_create_character_new_block(context, name, block)
  character = get_character(context, name)

  block.character = character

  cb = context.current_block
  if cb && cb.type == 'character_new' && cb.character == character
    cb.add_statement(:DO, block)
    [cb, cb]
  elsif character == context.receiver
    cb.sibling = block
    [cb.parent, block]
  else
    character_new =
      create_character_new_block(context, character, block)
    [character_new, character_new]
  end
end

#create_character_new_block(context, character, block) ⇒ RubyToBlock::Block::CharacterNew

character_newブロックを生成する

Parameters:

Returns:



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'app/models/concerns/ruby_to_block/block/character_operation.rb', line 63

def create_character_new_block(context, character, block)
  character_new_block = Block.new('character_new',
                                  fields: { NAME: character.name },
                                  statements: { DO: block })
  character_new_block.character = character

  cb = context.current_block
  if cb && cb.type != 'character_new'
    cb.sibling = character_new_block
  else
    context.blocks.push(character_new_block)
  end

  character_new_block
end

#get_character(context, name) ⇒ Character

コンテキストからキャラクターを取得する

キャラクターの名前がnil、または‘self’の場合はコンテキストのレシーバの名前を利用する。

コンテキストからキャラクターが取得できない場合は例外が発生する。

Parameters:

  • context (RubyToBlock::Context)

    コンテキスト

  • name (String)

    キャラクターの名前

Returns:



24
25
26
27
28
# File 'app/models/concerns/ruby_to_block/block/character_operation.rb', line 24

def get_character(context, name)
  name = context.receiver.try(:name) if !name || name == 'self'
  fail unless context.characters.key?(name)
  context.characters[name]
end