Class: RubyToBlock::Context

Inherits:
Object
  • Object
show all
Defined in:
app/models/concerns/ruby_to_block/context.rb

Overview

ソースコード解析の状態を表現するクラス

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lines) ⇒ Context

Returns a new instance of Context.



16
17
18
19
20
21
22
23
24
25
# File 'app/models/concerns/ruby_to_block/context.rb', line 16

def initialize(lines)
  @lines = lines
  @characters = {}
  @character_stack = []
  @receiver_stack = []
  @statement_stack = []
  @value_name_stack = []
  @blocks = []
  @current_block = nil
end

Instance Attribute Details

#blocksObject

Returns the value of attribute blocks.



13
14
15
# File 'app/models/concerns/ruby_to_block/context.rb', line 13

def blocks
  @blocks
end

#character_stackObject

Returns the value of attribute character_stack.



9
10
11
# File 'app/models/concerns/ruby_to_block/context.rb', line 9

def character_stack
  @character_stack
end

#charactersObject

Returns the value of attribute characters.



8
9
10
# File 'app/models/concerns/ruby_to_block/context.rb', line 8

def characters
  @characters
end

#current_blockObject

Returns the value of attribute current_block.



14
15
16
# File 'app/models/concerns/ruby_to_block/context.rb', line 14

def current_block
  @current_block
end

#current_lineObject

Returns the value of attribute current_line.



6
7
8
# File 'app/models/concerns/ruby_to_block/context.rb', line 6

def current_line
  @current_line
end

#linesObject

Returns the value of attribute lines.



7
8
9
# File 'app/models/concerns/ruby_to_block/context.rb', line 7

def lines
  @lines
end

#receiver_stackObject

Returns the value of attribute receiver_stack.



10
11
12
# File 'app/models/concerns/ruby_to_block/context.rb', line 10

def receiver_stack
  @receiver_stack
end

#statement_stackObject

Returns the value of attribute statement_stack.



11
12
13
# File 'app/models/concerns/ruby_to_block/context.rb', line 11

def statement_stack
  @statement_stack
end

#value_name_stackObject

Returns the value of attribute value_name_stack.



12
13
14
# File 'app/models/concerns/ruby_to_block/context.rb', line 12

def value_name_stack
  @value_name_stack
end

Instance Method Details

#[](symbol) ⇒ Object



65
66
67
# File 'app/models/concerns/ruby_to_block/context.rb', line 65

def [](symbol)
  send(symbol)
end

#[]=(symbol, val) ⇒ Object



69
70
71
# File 'app/models/concerns/ruby_to_block/context.rb', line 69

def []=(symbol, val)
  send("#{symbol}=", val)
end

#add_block(block) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'app/models/concerns/ruby_to_block/context.rb', line 41

def add_block(block)
  if current_block
    # HACK: コメントは下の行に関係することが多いため対象外としている
    if current_block.type == 'character_new' &&
        block.type != 'character_new' && block.type != 'ruby_comment'
      current_block.add_statement(:DO, block)
      block = current_block
    else
      current_block.sibling = block
    end
  else
    blocks.push(block)
  end
  self.current_block = block
  self
end

#add_value(block) ⇒ Object



58
59
60
61
62
63
# File 'app/models/concerns/ruby_to_block/context.rb', line 58

def add_value(block)
  fail unless current_block || value_name

  current_block.add_value(value_name, block)
  self
end

#characterObject



77
78
79
# File 'app/models/concerns/ruby_to_block/context.rb', line 77

def character
  @character_stack.last
end

#look_next_lineString

次の行を参照する

Returns:

  • (String)

    次の行の文字列



37
38
39
# File 'app/models/concerns/ruby_to_block/context.rb', line 37

def look_next_line
  lines.first
end

#next_lineString

次の行に移動して、改行を含むその行の文字列を返す

Returns:

  • (String)

    改行を含む次の行の文字列



30
31
32
# File 'app/models/concerns/ruby_to_block/context.rb', line 30

def next_line
  self.current_line = lines.shift
end

#receiverObject



73
74
75
# File 'app/models/concerns/ruby_to_block/context.rb', line 73

def receiver
  @receiver_stack.last
end

#statementObject



81
82
83
# File 'app/models/concerns/ruby_to_block/context.rb', line 81

def statement
  @statement_stack.last
end

#statement_blockObject



89
90
91
# File 'app/models/concerns/ruby_to_block/context.rb', line 89

def statement_block
  statement[1]
end

#statement_typeObject



85
86
87
# File 'app/models/concerns/ruby_to_block/context.rb', line 85

def statement_type
  statement.first
end

#value_nameObject



93
94
95
# File 'app/models/concerns/ruby_to_block/context.rb', line 93

def value_name
  @value_name_stack.last
end