File: debug.rb

package info (click to toggle)
ruby-hoe 3.22.1%2Bdfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 512 kB
  • sloc: ruby: 2,379; makefile: 5
file content (113 lines) | stat: -rw-r--r-- 2,499 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
##
# Debug plugin for hoe.
#
# === Tasks Provided:
#
# check_manifest::     Verify the manifest.
# config_hoe::         Create a fresh ~/.hoerc file.
# debug_gem::          Show information about the gem.

module Hoe::Debug

  include Rake::DSL if defined? ::Rake::DSL

  Hoe::DEFAULT_CONFIG["exclude"] = /tmp$|CVS|TAGS|\.(svn|git|DS_Store)/

  # :stopdoc:

  DIFF = if Hoe::WINDOZE
           "diff.exe"
         else
           if system("gdiff", __FILE__, __FILE__)
             "gdiff" # solaris and kin suck
           else
             "diff"
           end
         end unless defined? DIFF

  # :startdoc:

  ##
  # Define tasks for plugin.

  def define_debug_tasks
    desc "Create a fresh ~/.hoerc file."
    task :config_hoe do
      with_config do |config, path|
        File.open(path, "w") do |f|
          YAML.dump(Hoe::DEFAULT_CONFIG.merge(config), f)
        end

        editor = ENV["EDITOR"] || "vi"
        system "#{editor} #{path}" if ENV["SHOW_EDITOR"] != "no"
      end
    end

    desc "Verify the manifest."
    task :check_manifest => :clean do
      check_manifest
    end

    desc "Show information about the gem."
    task :debug_gem do
      puts spec.to_ruby
    end

    task :isolate # stub
    task :irb => :isolate do
      name = spec.name.gsub("-", "/")
      file = (spec.files.grep(/^lib\/#{name}\.rb$/).first ||
              spec.files.grep(/^lib\/[^\/]*\.rb$/).first)

      require = File.basename(file, ".rb") if file
      require &&= "-r#{require}"

      ruby "#{Hoe::RUBY_FLAGS} -S irb #{require}"
    end
  end

  ##
  # Verifies your Manifest.txt against the files in your project.

  def check_manifest
    f = "Manifest.tmp"
    require "find"
    files = []
    with_config do |config, _|
      exclusions = config["exclude"]

      Find.find "." do |path|
        next unless File.file? path
        next if path =~ exclusions
        files << path[2..-1]
      end

      files = files.sort.join "\n"

      File.open f, "w" do |fp| fp.puts files end

      verbose = { :verbose => Rake.application.options.trace || Rake.verbose }

      begin
        sh "#{DIFF} -du Manifest.txt #{f}", verbose
      ensure
        rm f, **verbose
      end
    end
  end
end

class Gem::Specification < Gem::BasicSpecification
  alias old_ruby_code ruby_code

  def ruby_code(obj)
    old_ruby_code obj
  rescue Gem::Exception => e
    case e.message
    when /OpenSSL/
      "nil"
    else
      raise
    end
  end
end unless Gem::VERSION >= "3.1.0"