Exception: Bundler::Dsl::DSLError

Inherits:
GemfileError show all
Defined in:
lib/bundler/dsl.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from BundlerError

all_errors, status_code

Constructor Details

#initialize(description, dsl_path, backtrace, contents = nil) ⇒ DSLError

Returns a new instance of DSLError.

Parameters:

  • backtrace (Exception)

    @see backtrace

  • dsl_path (String)

    @see dsl_path



561
562
563
564
565
566
567
568
# File 'lib/bundler/dsl.rb', line 561

def initialize(description, dsl_path, backtrace, contents = nil)
  @status_code = $!.respond_to?(:status_code) && $!.status_code

  @description = description
  @dsl_path    = dsl_path
  @backtrace   = backtrace
  @contents    = contents
end

Instance Attribute Details

#backtraceException (readonly)

Returns the backtrace of the exception raised by the evaluation of the dsl file.

Returns:

  • (Exception)

    the backtrace of the exception raised by the evaluation of the dsl file.



556
557
558
# File 'lib/bundler/dsl.rb', line 556

def backtrace
  @backtrace
end

#descriptionString (readonly)

Returns the description that should be presented to the user.

Returns:

  • (String)

    the description that should be presented to the user.



547
548
549
# File 'lib/bundler/dsl.rb', line 547

def description
  @description
end

#dsl_pathString (readonly)

Returns the path of the dsl file that raised the exception.

Returns:

  • (String)

    the path of the dsl file that raised the exception.



551
552
553
# File 'lib/bundler/dsl.rb', line 551

def dsl_path
  @dsl_path
end

Instance Method Details

#contentsString

Returns the contents of the DSL that cause the exception to be raised.

Returns:

  • (String)

    the contents of the DSL that cause the exception to be raised.



577
578
579
# File 'lib/bundler/dsl.rb', line 577

def contents
  @contents ||= dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
end

#status_codeObject



570
571
572
# File 'lib/bundler/dsl.rb', line 570

def status_code
  @status_code || super
end

#to_sString

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
    -------------------------------------------

Returns:

  • (String)

    the message of the exception.



599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
# File 'lib/bundler/dsl.rb', line 599

def to_s
  @to_s ||= begin
    trace_line, description = parse_line_number_from_description

    m = String.new("\n[!] ")
    m << description
    m << ". Bundler cannot continue.\n"

    return m unless backtrace && dsl_path && contents

    trace_line = backtrace.find {|l| l.include?(dsl_path) } || trace_line
    return m unless trace_line
    line_number = trace_line.split(":")[1].to_i - 1
    return m unless line_number

    lines      = contents.lines.to_a
    indent     = " #  "
    indicator  = indent.tr("#", ">")
    first_line = line_number.zero?
    last_line  = (line_number == (lines.count - 1))

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