hoe 3.13.0 → 3.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/hoe/debug.rb CHANGED
@@ -16,12 +16,12 @@ module Hoe::Debug
16
16
  # :stopdoc:
17
17
 
18
18
  DIFF = if Hoe::WINDOZE
19
- 'diff.exe'
19
+ "diff.exe"
20
20
  else
21
21
  if system("gdiff", __FILE__, __FILE__)
22
- 'gdiff' # solaris and kin suck
22
+ "gdiff" # solaris and kin suck
23
23
  else
24
- 'diff'
24
+ "diff"
25
25
  end
26
26
  end unless defined? DIFF
27
27
 
@@ -31,31 +31,31 @@ module Hoe::Debug
31
31
  # Define tasks for plugin.
32
32
 
33
33
  def define_debug_tasks
34
- desc 'Create a fresh ~/.hoerc file.'
34
+ desc "Create a fresh ~/.hoerc file."
35
35
  task :config_hoe do
36
36
  with_config do |config, path|
37
37
  File.open(path, "w") do |f|
38
38
  YAML.dump(Hoe::DEFAULT_CONFIG.merge(config), f)
39
39
  end
40
40
 
41
- editor = ENV['EDITOR'] || 'vi'
42
- system "#{editor} #{path}" if ENV['SHOW_EDITOR'] != 'no'
41
+ editor = ENV["EDITOR"] || "vi"
42
+ system "#{editor} #{path}" if ENV["SHOW_EDITOR"] != "no"
43
43
  end
44
44
  end
45
45
 
46
- desc 'Verify the manifest.'
46
+ desc "Verify the manifest."
47
47
  task :check_manifest => :clean do
48
48
  check_manifest
49
49
  end
50
50
 
51
- desc 'Show information about the gem.'
51
+ desc "Show information about the gem."
52
52
  task :debug_gem do
53
53
  puts spec.to_ruby
54
54
  end
55
55
 
56
56
  task :isolate # stub
57
57
  task :irb => :isolate do
58
- name = spec.name.gsub("-", '/')
58
+ name = spec.name.gsub("-", "/")
59
59
  file = (spec.files.grep(/^lib\/#{name}\.rb$/).first ||
60
60
  spec.files.grep(/^lib\/[^\/]*\.rb$/).first)
61
61
 
@@ -71,12 +71,12 @@ module Hoe::Debug
71
71
 
72
72
  def check_manifest
73
73
  f = "Manifest.tmp"
74
- require 'find'
74
+ require "find"
75
75
  files = []
76
76
  with_config do |config, _|
77
77
  exclusions = config["exclude"]
78
78
 
79
- Find.find '.' do |path|
79
+ Find.find "." do |path|
80
80
  next unless File.file? path
81
81
  next if path =~ exclusions
82
82
  files << path[2..-1]
@@ -84,7 +84,7 @@ module Hoe::Debug
84
84
 
85
85
  files = files.sort.join "\n"
86
86
 
87
- File.open f, 'w' do |fp| fp.puts files end
87
+ File.open f, "w" do |fp| fp.puts files end
88
88
 
89
89
  verbose = { :verbose => Rake.application.options.verbose }
90
90
 
data/lib/hoe/deps.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'rubygems/remote_fetcher'
2
- require 'uri'
1
+ require "rubygems/remote_fetcher"
2
+ require "uri"
3
3
 
4
4
  ##
5
5
  # Deps plugin for hoe.
@@ -15,7 +15,7 @@ module Hoe::Deps
15
15
  ##
16
16
  # The main rubygems repository.
17
17
 
18
- GEMURL = URI.parse 'http://rubygems.org'
18
+ GEMURL = URI.parse "http://rubygems.org"
19
19
 
20
20
  ##
21
21
  # Define tasks for plugin.
@@ -38,12 +38,12 @@ module Hoe::Deps
38
38
  end
39
39
  end
40
40
 
41
- desc 'Install missing dependencies.'
41
+ desc "Install missing dependencies."
42
42
  task :check_extra_deps do
43
43
  check_extra_deps_task
44
44
  end
45
45
 
46
- desc 'Install missing plugins.'
46
+ desc "Install missing plugins."
47
47
  task :install_plugins do
48
48
  install_missing_plugins
49
49
  end
@@ -72,8 +72,8 @@ module Hoe::Deps
72
72
 
73
73
  puts " dependents:"
74
74
  unless deps.empty? then
75
- deps.sort_by { |spec| spec.full_name }.each do |spec|
76
- vers = spec.dependencies.find {|s| s.name == name}.requirements_list
75
+ deps.sort_by(&:full_name).each do |spec|
76
+ vers = spec.dependencies.find { |s| s.name == name }.requirements_list
77
77
  puts " %-*s - %s" % [max, spec.full_name, vers.join(", ")]
78
78
  end
79
79
  else
@@ -88,11 +88,11 @@ module Hoe::Deps
88
88
  abort "Couldn't find gem: #{self.name}" unless gem
89
89
 
90
90
  deps = self.dependent_upon self.name
91
- email = deps.map { |s| s.email }.compact.flatten.sort.uniq
91
+ email = deps.map(&:email).compact.flatten.sort.uniq
92
92
  email = email.map { |s| s.split(/,\s*/) }.flatten.sort.uniq
93
93
 
94
94
  email.map! { |s| # don't you people realize how easy this is?
95
- s.gsub(/ at | _at_ |\s*(atmark|@nospam@|-at?-|@at?@|<at?>|\[at?\]|\(at?\))\s*/i, '@').gsub(/\s*(dot|\[d(ot)?\]|\.dot\.)\s*/i, '.').gsub(/\s+com$/, '.com')
95
+ s.gsub(/ at | _at_ |\s*(atmark|@nospam@|-at?-|@at?@|<at?>|\[at?\]|\(at?\))\s*/i, "@").gsub(/\s*(dot|\[d(ot)?\]|\.dot\.)\s*/i, ".").gsub(/\s+com$/, ".com")
96
96
  }
97
97
 
98
98
  bad, good = email.partition { |e| e !~ /^[\w.+-]+\@[\w.+-]+$/ }
@@ -111,7 +111,7 @@ module Hoe::Deps
111
111
  mkdir "deps" unless File.directory? "deps"
112
112
  Dir.chdir "deps" do
113
113
  begin
114
- deps.sort_by { |spec| spec.full_name }.each do |spec|
114
+ deps.sort_by(&:full_name).each do |spec|
115
115
  full_name = spec.full_name
116
116
  tgz_name = "#{full_name}.tgz"
117
117
  gem_name = "#{full_name}.gem"
@@ -122,7 +122,7 @@ module Hoe::Deps
122
122
  begin
123
123
  warn "downloading #{full_name}"
124
124
  Gem::RemoteFetcher.fetcher.download(spec, GEMURL, Dir.pwd)
125
- FileUtils.mv "cache/#{gem_name}", '.'
125
+ FileUtils.mv "cache/#{gem_name}", "."
126
126
  rescue Gem::RemoteFetcher::FetchError
127
127
  warn " failed"
128
128
  next
@@ -149,7 +149,7 @@ module Hoe::Deps
149
149
 
150
150
  return @@index if @@index
151
151
 
152
- dump = unless File.exist? '.source_index' then
152
+ dump = unless File.exist? ".source_index" then
153
153
  warn "Fetching full index and caching. This can take a while."
154
154
  url = GEMURL + "Marshal.#{Gem.marshal_version}.Z"
155
155
  dump = Gem::RemoteFetcher.fetcher.fetch_path url
@@ -160,15 +160,15 @@ module Hoe::Deps
160
160
 
161
161
  h = {}
162
162
  Hash[ary].values.sort.each { |spec| h[spec.name] = spec }
163
- ary = h.map { |k,v| [v.full_name, v] }
163
+ ary = h.map { |_, v| [v.full_name, v] }
164
164
 
165
165
  dump = Marshal.dump ary
166
166
 
167
- open '.source_index', 'wb' do |io| io.write dump end
167
+ open ".source_index", "wb" do |io| io.write dump end
168
168
 
169
169
  dump
170
170
  else
171
- open '.source_index', 'rb' do |io| io.read end
171
+ open ".source_index", "rb" do |io| io.read end
172
172
  end
173
173
 
174
174
  @@index = Marshal.load dump
@@ -194,10 +194,10 @@ module Hoe::Deps
194
194
  # Installs plugins that aren't currently installed
195
195
 
196
196
  def install_missing_plugins plugins = Hoe.bad_plugins
197
- version = '>= 0'
197
+ version = ">= 0"
198
198
 
199
199
  plugins.each do |name|
200
- dash_name = name.to_s.gsub '_', '-'
200
+ dash_name = name.to_s.gsub "_", "-"
201
201
 
202
202
  next if have_gem?("hoe-#{name}") or
203
203
  have_gem?(name) or
data/lib/hoe/flay.rb CHANGED
@@ -22,11 +22,9 @@ module Hoe::Flay
22
22
  # Define tasks for plugin.
23
23
 
24
24
  def define_flay_tasks
25
- begin
26
- require 'flay_task'
27
- FlayTask.new :flay, self.flay_threshold
28
- rescue Exception
29
- # skip
30
- end
25
+ require "flay_task"
26
+ FlayTask.new :flay, self.flay_threshold
27
+ rescue Exception
28
+ # skip
31
29
  end
32
30
  end
data/lib/hoe/flog.rb CHANGED
@@ -28,11 +28,9 @@ module Hoe::Flog
28
28
  # Define tasks for plugin.
29
29
 
30
30
  def define_flog_tasks
31
- begin
32
- require 'flog_task'
33
- FlogTask.new :flog, self.flog_threshold, nil, self.flog_method
34
- rescue LoadError
35
- # skip
36
- end
31
+ require "flog_task"
32
+ FlogTask.new :flog, self.flog_threshold, nil, self.flog_method
33
+ rescue LoadError
34
+ # skip
37
35
  end
38
36
  end
data/lib/hoe/gemcutter.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'rake'
1
+ require "rake"
2
2
 
3
3
  module Hoe::Gemcutter
4
4
  include Rake::DSL if defined?(Rake::DSL)
data/lib/hoe/inline.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'rbconfig'
1
+ require "rbconfig"
2
2
 
3
3
  ##
4
4
  # Hoe allows bundling of pre-compiled extensions in the +package+ task.
@@ -35,36 +35,36 @@ module Hoe::Inline
35
35
  def define_inline_tasks
36
36
  task :test => :clean
37
37
 
38
- if ENV['INLINE'] then
39
- s.platform = ENV['FORCE_PLATFORM'] || Gem::Platform::CURRENT
38
+ return unless ENV["INLINE"]
40
39
 
41
- # Try collecting Inline extensions for +name+
42
- if defined?(Inline) then
43
- directory 'lib/inline'
40
+ s.platform = ENV["FORCE_PLATFORM"] || Gem::Platform::CURRENT
44
41
 
45
- dlext = RbConfig::CONFIG['DLEXT']
42
+ return unless defined? Inline
46
43
 
47
- Inline.registered_inline_classes.each do |cls|
48
- name = cls.name.gsub(/::/, '')
49
- # name of the extension is CamelCase
50
- alternate_name = if name =~ /[A-Z]/ then
51
- name.gsub(/([A-Z])/, '_\1').downcase.sub(/^_/, '')
52
- elsif name =~ /_/ then
53
- name.capitalize.gsub(/_([a-z])/) { $1.upcase }
54
- end
55
- extensions = Dir.chdir(Inline::directory) {
56
- Dir["Inline_{#{name},#{alternate_name}}_*.#{dlext}"]
57
- }
44
+ # Try collecting Inline extensions for +name+
45
+ directory "lib/inline"
58
46
 
59
- extensions.each do |ext|
60
- # add the inlined extension to the spec files
61
- s.files += ["lib/inline/#{ext}"]
47
+ dlext = RbConfig::CONFIG["DLEXT"]
62
48
 
63
- # include the file in the tasks
64
- file "lib/inline/#{ext}" => ["lib/inline"] do
65
- cp File.join(Inline::directory, ext), "lib/inline"
66
- end
67
- end
49
+ Inline.registered_inline_classes.each do |cls|
50
+ name = cls.name.gsub(/::/, "")
51
+ # name of the extension is CamelCase
52
+ alternate_name = if name =~ /[A-Z]/ then
53
+ name.gsub(/([A-Z])/, '_\1').downcase.sub(/^_/, "")
54
+ elsif name =~ /_/ then
55
+ name.capitalize.gsub(/_([a-z])/) { $1.upcase }
56
+ end
57
+ extensions = Dir.chdir(Inline.directory) {
58
+ Dir["Inline_{#{name},#{alternate_name}}_*.#{dlext}"]
59
+ }
60
+
61
+ extensions.each do |ext|
62
+ # add the inlined extension to the spec files
63
+ s.files += ["lib/inline/#{ext}"]
64
+
65
+ # include the file in the tasks
66
+ file "lib/inline/#{ext}" => ["lib/inline"] do
67
+ cp File.join(Inline.directory, ext), "lib/inline"
68
68
  end
69
69
  end
70
70
  end
data/lib/hoe/newb.rb CHANGED
@@ -9,7 +9,7 @@ module Hoe::Newb
9
9
  # define tasks for the newb plugin
10
10
  def define_newb_tasks
11
11
  desc "Install deps, generate docs, run tests/specs."
12
- task :newb => %w(check_extra_deps install_plugins docs default) do
12
+ task :newb => %w[check_extra_deps install_plugins docs default] do
13
13
  puts <<-END
14
14
 
15
15
  GOOD TO GO! Tests are passing, docs are generated,
data/lib/hoe/package.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  begin
2
- require 'rubygems/package_task'
2
+ require "rubygems/package_task"
3
3
  rescue LoadError
4
4
  # rake/gempackagetask will go away some day
5
- require 'rake/gempackagetask'
5
+ require "rake/gempackagetask"
6
6
  Gem::PackageTask = Rake::GemPackageTask
7
7
  end
8
8
 
@@ -46,12 +46,12 @@ module Hoe::Package
46
46
  pkg.need_zip = @need_zip
47
47
  end
48
48
 
49
- desc 'Install the package as a gem. (opt. NOSUDO=1)'
49
+ desc "Install the package as a gem. (opt. NOSUDO=1)"
50
50
  task :install_gem => [:clean, :package, :check_extra_deps] do
51
- install_gem Dir['pkg/*.gem'].first
51
+ install_gem Dir["pkg/*.gem"].first
52
52
  end
53
53
 
54
- desc 'Package and upload; Requires VERSION=x.y.z (optional PRE=a.1)'
54
+ desc "Package and upload; Requires VERSION=x.y.z (optional PRE=a.1)"
55
55
  task :release => [:prerelease, :release_to, :postrelease]
56
56
 
57
57
  # no doco, invisible hook
@@ -69,7 +69,7 @@ module Hoe::Package
69
69
  task :release_sanity do
70
70
  v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
71
71
 
72
- pre = ENV['PRERELEASE'] || ENV['PRE']
72
+ pre = ENV["PRERELEASE"] || ENV["PRE"]
73
73
  v += ".#{pre}" if pre
74
74
 
75
75
  abort "Versions don't match #{v} vs #{version}" if v != version
@@ -87,13 +87,13 @@ module Hoe::Package
87
87
  ##
88
88
  # Install the named gem.
89
89
 
90
- def install_gem name, version = nil, rdoc=true
90
+ def install_gem name, version = nil, rdoc = true
91
91
  should_not_sudo = Hoe::WINDOZE || ENV["NOSUDO"] || File.writable?(Gem.dir)
92
- null_dev = Hoe::WINDOZE ? '> NUL 2>&1' : '> /dev/null 2>&1'
92
+ null_dev = Hoe::WINDOZE ? "> NUL 2>&1" : "> /dev/null 2>&1"
93
93
 
94
- gem_cmd = Gem.default_exec_format % 'gem'
95
- sudo = 'sudo ' unless should_not_sudo
96
- local = '--local' unless version
94
+ gem_cmd = Gem.default_exec_format % "gem"
95
+ sudo = "sudo " unless should_not_sudo
96
+ local = "--local" unless version
97
97
  version = "--version '#{version}'" if version
98
98
 
99
99
  cmd = "#{sudo}#{gem_cmd} install #{local} #{name} #{version}"
@@ -105,13 +105,14 @@ module Hoe::Package
105
105
  end
106
106
 
107
107
  def prerelease_version # :nodoc:
108
- pre = ENV['PRERELEASE'] || ENV['PRE']
109
- if pre then
110
- spec.version.version << "." << pre if pre
108
+ pre = ENV["PRERELEASE"] || ENV["PRE"]
111
109
 
112
- abort "ERROR: You should format PRE like pre or alpha.1 or something" if
113
- (Gem::VERSION < "1.4" and pre !~ /^[a-z]+(\.\d+)?$/) or
114
- (Gem::VERSION >= "1.4" and pre !~ /^[a-z]+(\.?\d+)?$/)
115
- end
110
+ return unless pre
111
+
112
+ spec.version.version << "." << pre if pre
113
+
114
+ abort "ERROR: You should format PRE like pre or alpha.1 or something" if
115
+ (Gem::VERSION < "1.4" and pre !~ /^[a-z]+(\.\d+)?$/) or
116
+ (Gem::VERSION >= "1.4" and pre !~ /^[a-z]+(\.?\d+)?$/)
116
117
  end
117
118
  end
data/lib/hoe/publish.rb CHANGED
@@ -79,9 +79,9 @@ module Hoe::Publish
79
79
  "url" => "url",
80
80
  "blog_id" => "blog_id",
81
81
  "extra_headers" => {
82
- "mt_convert_breaks" => "markdown"
82
+ "mt_convert_breaks" => "markdown",
83
83
  },
84
- }
84
+ },
85
85
  ]
86
86
 
87
87
  ##
@@ -89,11 +89,11 @@ module Hoe::Publish
89
89
 
90
90
  def initialize_publish
91
91
  self.blog_categories ||= [self.name]
92
- self.local_rdoc_dir ||= 'doc'
92
+ self.local_rdoc_dir ||= "doc"
93
93
  self.need_rdoc ||= true
94
94
  self.rdoc_locations ||= []
95
95
  self.remote_rdoc_dir ||= self.name
96
- self.rsync_args ||= '-av -O --delete'
96
+ self.rsync_args ||= "-av -O --delete"
97
97
  end
98
98
 
99
99
  ##
@@ -117,7 +117,7 @@ module Hoe::Publish
117
117
 
118
118
  desc "Generate rdoc coverage report"
119
119
  task :dcov => :isolate do
120
- sh(*make_rdoc_cmd('-C'))
120
+ sh(*make_rdoc_cmd("-C"))
121
121
  end
122
122
 
123
123
  desc "Remove RDoc files"
@@ -127,9 +127,9 @@ module Hoe::Publish
127
127
 
128
128
  task :clobber => :clobber_docs
129
129
 
130
- desc 'Generate ri locally for testing.'
130
+ desc "Generate ri locally for testing."
131
131
  task :ridocs => [:clean, :isolate] do
132
- ruby(*make_rdoc_cmd('--ri', '-o', 'ri'))
132
+ ruby(*make_rdoc_cmd("--ri", "-o", "ri"))
133
133
  end
134
134
  end
135
135
 
@@ -143,7 +143,7 @@ module Hoe::Publish
143
143
  publish_on_announce_task
144
144
  end
145
145
 
146
- desc 'Generate email announcement file.'
146
+ desc "Generate email announcement file."
147
147
  task :debug_email do
148
148
  puts generate_email
149
149
  end
@@ -153,47 +153,47 @@ module Hoe::Publish
153
153
  post_blog_task
154
154
  end
155
155
 
156
- desc 'Announce your release.'
156
+ desc "Announce your release."
157
157
  task :announce => [:post_blog, :publish_on_announce ]
158
158
  end
159
159
 
160
160
  def publish_docs_task # :nodoc:
161
161
  warn "no rdoc_location values" if rdoc_locations.empty?
162
162
  self.rdoc_locations.each do |dest|
163
- sh %{rsync #{rsync_args} #{local_rdoc_dir}/ #{dest}}
163
+ sh %(rsync #{rsync_args} #{local_rdoc_dir}/ #{dest})
164
164
  end
165
165
  end
166
166
 
167
167
  def publish_on_announce_task # :nodoc:
168
168
  with_config do |config, _|
169
- Rake::Task['publish_docs'].invoke if config["publish_on_announce"]
169
+ Rake::Task["publish_docs"].invoke if config["publish_on_announce"]
170
170
  end
171
171
  end
172
172
 
173
173
  def post_blog_task # :nodoc:
174
- with_config do |config, path|
175
- break unless config['blogs']
174
+ with_config do |config, _path|
175
+ break unless config["blogs"]
176
176
 
177
- config['blogs'].each do |site|
178
- if site['path'] then
179
- msg = "post_blog_#{site['type']}"
177
+ config["blogs"].each do |site|
178
+ if site["path"] then
179
+ msg = "post_blog_#{site["type"]}"
180
180
  send msg, site
181
181
  system site["cmd"] if site["cmd"]
182
182
  else
183
- require 'xmlrpc/client'
183
+ require "xmlrpc/client"
184
184
 
185
185
  _, title, body, urls = announcement
186
186
  body += "\n\n#{urls}"
187
187
 
188
- server = XMLRPC::Client.new2(site['url'])
189
- content = site['extra_headers'].merge(:title => title,
188
+ server = XMLRPC::Client.new2(site["url"])
189
+ content = site["extra_headers"].merge(:title => title,
190
190
  :description => body,
191
191
  :categories => blog_categories)
192
192
 
193
- server.call('metaWeblog.newPost',
194
- site['blog_id'],
195
- site['user'],
196
- site['password'],
193
+ server.call("metaWeblog.newPost",
194
+ site["blog_id"],
195
+ site["user"],
196
+ site["password"],
197
197
  content,
198
198
  true)
199
199
  end
@@ -225,7 +225,7 @@ module Hoe::Publish
225
225
  Dir.chdir File.expand_path dir do
226
226
  time = Time.at Time.now.to_i # nukes fractions
227
227
  path = [time.strftime("%Y-%m-%d-"),
228
- title.sub(/\W+$/, '').gsub(/\W+/, '-'),
228
+ title.sub(/\W+$/, "").gsub(/\W+/, "-"),
229
229
  ".html.md"].join
230
230
 
231
231
  header = {
@@ -235,7 +235,7 @@ module Hoe::Publish
235
235
  }
236
236
 
237
237
  File.open path, "w" do |f|
238
- f.puts header.to_yaml.gsub(/\s$/, '')
238
+ f.puts header.to_yaml.gsub(/\s$/, "")
239
239
  f.puts "..."
240
240
  f.puts
241
241
  f.puts body
@@ -244,7 +244,7 @@ module Hoe::Publish
244
244
  end
245
245
 
246
246
  def generate_email full = nil # :nodoc:
247
- require 'time'
247
+ require "time"
248
248
 
249
249
  abort "No email 'to' entry. Run `rake config_hoe` to fix." unless
250
250
  !full || email_to
@@ -257,9 +257,12 @@ module Hoe::Publish
257
257
  full && "To: #{email_to.join(", ")}",
258
258
  full && "Date: #{Time.now.rfc2822}",
259
259
  "Subject: [ANN] #{subject}",
260
- "", title,
261
- "", urls,
262
- "", body,
260
+ "",
261
+ title,
262
+ "",
263
+ urls,
264
+ "",
265
+ body,
263
266
  ].compact.join("\n")
264
267
  end
265
268
 
@@ -272,14 +275,13 @@ module Hoe::Publish
272
275
  urls =
273
276
  case self.urls
274
277
  when Hash then
275
- self.urls.map { |k,v| "* #{k}: <#{v.strip.rdoc_to_markdown}>" }
278
+ self.urls.map { |k, v| "* #{k}: <#{v.strip.rdoc_to_markdown}>" }
276
279
  when Array then
277
280
  self.urls.map { |s| "* <#{s.strip.rdoc_to_markdown}>" }
278
281
  else
279
282
  raise "unknown urls format: #{urls.inspect}"
280
283
  end
281
284
 
282
-
283
285
  return subject, title, body, urls.join("\n")
284
286
  end
285
287
  end
@@ -293,6 +295,6 @@ class String
293
295
  # Very basic munge from rdoc to markdown format.
294
296
 
295
297
  def rdoc_to_markdown
296
- self.gsub(/^mailto:/, '').gsub(/^(=+)/) { "#" * $1.size }
298
+ self.gsub(/^mailto:/, "").gsub(/^(=+)/) { "#" * $1.size }
297
299
  end
298
300
  end