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



542
543
544
545
546
547
548
549
# File 'lib/bundler/dsl.rb', line 542

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)



537
538
539
# File 'lib/bundler/dsl.rb', line 537

def backtrace
  @backtrace
end

#descriptionString (readonly)



528
529
530
# File 'lib/bundler/dsl.rb', line 528

def description
  @description
end

#dsl_pathString (readonly)



532
533
534
# File 'lib/bundler/dsl.rb', line 532

def dsl_path
  @dsl_path
end

Instance Method Details

#contentsString



558
559
560
# File 'lib/bundler/dsl.rb', line 558

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

#status_codeObject



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

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


580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
# File 'lib/bundler/dsl.rb', line 580

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