Class: ShowCode::Code

Inherits:
Object
  • Object
show all
Defined in:
lib/show_code/code.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(location) ⇒ Code

Returns a new instance of Code.



6
7
8
9
10
11
12
13
14
# File 'lib/show_code/code.rb', line 6

def initialize(location)
  @file         = location.file
  file_lines    = File.readlines(@file) if @file

  related_lines = file_lines[(location.line - 1)..-1] || []
  codes         = extract_method_code related_lines
  @lines        = codes.count
  @content      = codes.join
end

Instance Attribute Details

#contentObject (readonly)

Returns the value of attribute content.



4
5
6
# File 'lib/show_code/code.rb', line 4

def content
  @content
end

#fileObject (readonly)

Returns the value of attribute file.



4
5
6
# File 'lib/show_code/code.rb', line 4

def file
  @file
end

#linesObject (readonly)

Returns the value of attribute lines.



4
5
6
# File 'lib/show_code/code.rb', line 4

def lines
  @lines
end

#ownerObject (readonly)

Returns the value of attribute owner.



4
5
6
# File 'lib/show_code/code.rb', line 4

def owner
  @owner
end

Instance Method Details

#expression_end?(codes) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/show_code/code.rb', line 26

def expression_end?(codes)
  str = codes.join

  catch(:valid) do
    eval("BEGIN{throw :valid}; #{str}")
  end

  # skip , or \
  str !~ /[,\\]\s*\z/
rescue SyntaxException
  false
end

#extract_method_code(related_lines) ⇒ Object

Raises:

  • (SyntaxError)


16
17
18
19
20
21
22
23
# File 'lib/show_code/code.rb', line 16

def extract_method_code(related_lines)
  codes = []
  related_lines.each do |value|
    codes << value
    return codes if expression_end?(codes)
  end
  raise SyntaxError, "unexpected $end"
end

#greetObject

Example: ShowCode ‘ShowCode::Code.new.greet’



40
41
42
# File 'lib/show_code/code.rb', line 40

def greet
  puts 'Hello ShowCode!'
end