aboutsummaryrefslogtreecommitdiffstats
path: root/guides/rails_guides/markdown
diff options
context:
space:
mode:
Diffstat (limited to 'guides/rails_guides/markdown')
-rw-r--r--guides/rails_guides/markdown/renderer.rb40
1 files changed, 18 insertions, 22 deletions
diff --git a/guides/rails_guides/markdown/renderer.rb b/guides/rails_guides/markdown/renderer.rb
index 8723ee0b4e..20cbd568c9 100644
--- a/guides/rails_guides/markdown/renderer.rb
+++ b/guides/rails_guides/markdown/renderer.rb
@@ -1,9 +1,7 @@
module RailsGuides
class Markdown
class Renderer < Redcarpet::Render::HTML
- def initialize(options = {})
- super
- end
+ cattr_accessor :edge, :version
def block_code(code, language)
<<-HTML
@@ -93,32 +91,30 @@ HTML
end
def github_file_url(file_path)
- root, rest = file_path.split("/", 2)
+ tree = version || edge
- case root
- when "abstract_controller", "action_controller", "action_dispatch"
- path = ["actionpack", "lib", root, rest].join("/")
- when "active_support", "active_record", "active_model", "action_view",
- "action_cable", "action_mailer", "action_pack", "active_job"
- path = [root.sub("_", ""), "lib", root, rest].join("/")
- else
- path = file_path
- end
+ root = file_path[%r{(.+)/}, 1]
+ path = case root
+ when "abstract_controller", "action_controller", "action_dispatch"
+ "actionpack/lib/#{file_path}"
+ when /\A(action|active)_/
+ "#{root.sub("_", "")}/lib/#{file_path}"
+ else
+ file_path
+ end
- ["https://github.com/rails/rails/tree", version || "master", path].join("/")
- end
- def version
- ENV["RAILS_VERSION"]
+ "https://github.com/rails/rails/tree/#{tree}/#{path}"
end
def api_link(url)
- if version && !url.match(/v\d\.\d\.\d/)
- url.insert(url.index(".org") + 4, "/#{version}")
- url.sub("http://edgeapi", "http://api") if url.include?("edgeapi")
+ if url =~ %r{http://api\.rubyonrails\.org/v\d+\.}
+ url
+ elsif edge
+ url.sub("api", "edgeapi")
+ else
+ url.sub(/(?<=\.org)/, "/#{version}")
end
-
- url
end
end
end