Module: Transpec::Util

Included in:
Syntax::Matcher, Syntax::MethodStub, Syntax::Should
Defined in:
lib/transpec/util.rb

Class Method Summary collapse

Class Method Details

.const_name(node) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/transpec/util.rb', line 22

def const_name(node)
  return nil if node.nil? || node.type != :const

  const_names = []
  const_node = node

  loop do
    namespace_node, name = *const_node
    const_names << name
    break unless namespace_node
    break if namespace_node.type == :cbase
    const_node = namespace_node
  end

  const_names.reverse.join('::')
end

.here_document?(node) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
42
# File 'lib/transpec/util.rb', line 39

def here_document?(node)
  return false unless [:str, :dstr].include?(node.type)
  node.loc.begin.source.start_with?('<<')
end

.in_parentheses?(node) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
47
48
# File 'lib/transpec/util.rb', line 44

def in_parentheses?(node)
  return false unless node.type == :begin
  source = node.loc.expression.source
  source[0] == '(' && source[-1] == ')'
end

.indentation_of_line(node) ⇒ Object



50
51
52
53
54
# File 'lib/transpec/util.rb', line 50

def indentation_of_line(node)
  line = node.loc.expression.source_line
  /^(?<indentation>\s*)\S/ =~ line
  indentation
end

.proc_literal?(node) ⇒ Boolean

Returns:

  • (Boolean)


7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/transpec/util.rb', line 7

def proc_literal?(node)
  return false unless node.type == :block

  send_node = node.children.first
  receiver_node, method_name, *_ = *send_node

  if receiver_node.nil? || const_name(receiver_node) == 'Kernel'
    [:lambda, :proc].include?(method_name)
  elsif const_name(receiver_node) == 'Proc'
    method_name == :new
  else
    false
  end
end