Class: Gherkin::GherkinLine

Inherits:
Object
  • Object
show all
Defined in:
lib/gherkin/gherkin_line.rb

Defined Under Namespace

Classes: Span

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(line_text, line_number) ⇒ GherkinLine

Returns a new instance of GherkinLine.



4
5
6
7
8
9
# File 'lib/gherkin/gherkin_line.rb', line 4

def initialize(line_text, line_number)
  @line_text = line_text
  @line_number = line_number
  @trimmed_line_text = @line_text.lstrip
  @indent = @line_text.length - @trimmed_line_text.length
end

Instance Attribute Details

#indentObject (readonly)

Returns the value of attribute indent.



3
4
5
# File 'lib/gherkin/gherkin_line.rb', line 3

def indent
  @indent
end

#trimmed_line_textObject (readonly)

Returns the value of attribute trimmed_line_text.



3
4
5
# File 'lib/gherkin/gherkin_line.rb', line 3

def trimmed_line_text
  @trimmed_line_text
end

Instance Method Details

#empty?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/gherkin/gherkin_line.rb', line 23

def empty?
  @trimmed_line_text.empty?
end

#get_line_text(indent_to_remove) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/gherkin/gherkin_line.rb', line 27

def get_line_text(indent_to_remove)
  indent_to_remove ||= 0
  if indent_to_remove < 0 || indent_to_remove > indent
    @trimmed_line_text
  else
    @line_text[indent_to_remove..-1]
  end
end

#get_rest_trimmed(length) ⇒ Object



19
20
21
# File 'lib/gherkin/gherkin_line.rb', line 19

def get_rest_trimmed(length)
  @trimmed_line_text[length..-1].strip
end

#split_table_cells(row) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/gherkin/gherkin_line.rb', line 50

def split_table_cells(row)
  col = 0
  start_col = col + 1
  cell = ''
  first_cell = true
  while col < row.length
    char = row[col]
    col += 1
    if char == '|'
      if first_cell
        # First cell (content before the first |) is skipped
        first_cell = false
      else
        yield cell, start_col
      end
      cell = ''
      start_col = col + 1
    elsif char == '\\'
      char = row[col]
      col += 1
      if char == 'n'
        cell += "\n"
      else
        cell += '\\' unless ['|', '\\'].include?(char)
        cell += char
      end
    else
      cell += char
    end
  end
  # Last cell (content after the last |) is skipped
end

#start_with?(prefix) ⇒ Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/gherkin/gherkin_line.rb', line 11

def start_with?(prefix)
  @trimmed_line_text.start_with?(prefix)
end

#start_with_title_keyword?(keyword) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/gherkin/gherkin_line.rb', line 15

def start_with_title_keyword?(keyword)
  start_with?(keyword+':') # The C# impl is more complicated. Find out why.
end

#table_cellsObject



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/gherkin/gherkin_line.rb', line 36

def table_cells
  cells = []

  self.split_table_cells(@trimmed_line_text) do |item, column|
    txt_trimmed_left = item.gsub(/^[ \t\n\v\f\r\u0085\u00A0]*/, '')
    txt_trimmed = txt_trimmed_left.gsub(/[ \t\n\v\f\r\u0085\u00A0]*$/, '')
    cell_indent = item.length - txt_trimmed_left.length
    span = Span.new(@indent + column + cell_indent, txt_trimmed)
    cells.push(span)
  end

  cells
end

#tagsObject



83
84
85
86
87
88
89
90
91
92
93
# File 'lib/gherkin/gherkin_line.rb', line 83

def tags
  column = @indent + 1;
  items = @trimmed_line_text.strip.split('@')
  items = items[1..-1] # ignore before the first @
  items.map do |item|
    length = item.length
    span = Span.new(column, '@' + item.strip)
    column += length + 1
    span
  end
end