Exception: Pod::DSLError

Inherits:
StandardError show all
Defined in:
lib/cocoapods-core/standard_error.rb

Overview

Wraps an exception raised by a DSL file in order to show to the user the contents of the line that raised the exception.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(description, dsl_path, backtrace) ⇒ DSLError



30
31
32
33
34
# File 'lib/cocoapods-core/standard_error.rb', line 30

def initialize(description, dsl_path, backtrace)
  @description = description
  @dsl_path    = dsl_path
  @backtrace   = backtrace
end

Instance Attribute Details

#backtraceException (readonly)



25
26
27
# File 'lib/cocoapods-core/standard_error.rb', line 25

def backtrace
  @backtrace
end

#descriptionString (readonly)



16
17
18
# File 'lib/cocoapods-core/standard_error.rb', line 16

def description
  @description
end

#dsl_pathString (readonly)



20
21
22
# File 'lib/cocoapods-core/standard_error.rb', line 20

def dsl_path
  @dsl_path
end

Instance Method Details

#messageString

The message of the exception reports the content of podspec for the line that generated the original exception.

Examples:

Output


Invalid podspec at `RestKit.podspec` - undefined method
`exclude_header_search_paths=' for #<Pod::Specification for
`RestKit/Network (0.9.3)`>

    from spec-repos/master/RestKit/0.9.3/RestKit.podspec:36
    -------------------------------------------
        # because it would break: #import <CoreData/CoreData.h>
 >      ns.exclude_header_search_paths = 'Code/RestKit.h'
      end
    -------------------------------------------


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
82
# File 'lib/cocoapods-core/standard_error.rb', line 54

def message
  unless @message
    m = description.dup

    return m unless backtrace && dsl_path && File.exist?(dsl_path)

    trace_line = backtrace.find { |l| l =~ /#{dsl_path}/ }
    return m unless trace_line
    line_numer = trace_line.split(':')[1].to_i - 1
    return m unless line_numer
    lines      = File.readlines(dsl_path.to_s)
    indent     = " #  "
    indicator  = indent.dup.gsub("#", ">")
    first_line = ( line_numer.zero? )
    last_line  = ( line_numer == (lines.count - 1) )

    m << "\n #\n"
    m << "#{indent}from #{trace_line.gsub(/:in.*$/,'')}\n"
    m << "#{indent}-------------------------------------------\n"
    m << "#{indent}#{    lines[line_numer - 1] }" unless first_line
    m << "#{indicator}#{ lines[line_numer] }"
    m << "#{indent}#{    lines[line_numer + 1] }" unless last_line
    m << "\n" unless m.end_with?("\n")
    m << "#{indent}-------------------------------------------\n"
    m << " #"
    @message = m
  end
  @message
end