Привет, я использую HAML для рендеринга моих статей в блогах, и я решил перейти на новую версию Ruby, новую версию Rails и новую версию HAML. Проблема в том, что, похоже, что-то изменилось, и я не могу определить, что не так с моим кодом.Как перенести хелпер HAML на HAML 4?
Может ли кто-нибудь объяснить мне, что нужно изменить, чтобы работать с новой версией?
UPDATE: Реализовано это может быть связано с Redcarpet и не HAML, но не уверен: 3
Как вы увидите, я использую этот пользовательский визуализатор для автоматического отображения твитов или Spotify песни из их связей. То же самое для кодовых блоков, окрашенных CodeRay.
module Haml::Filters
require "net/https"
require "uri"
include Haml::Filters::Base
class MarkdownRenderer < Redcarpet::Render::HTML
def block_code(code, language)
CodeRay.highlight(code, language, {:line_number_anchors => false, :css => :class})
end
def autolink(link, link_type)
twitterReg = /https?:\/\/twitter\.com\/[a-zA-Z]+\/status(es)?\/([0-9]+)/
spotifyReg = /(https?:\/\/open.spotify.com\/(track|user|artist|album)\/[a-zA-Z0-9]+(\/playlist\/[a-zA-Z0-9]+|)|spotify:(track|user|artist|album):[a-zA-Z0-9]+(:playlist:[a-zA-Z0-9]+|))/
if link_type == :url
if link =~ twitterReg
tweet = twitterReg.match(link)
urlTweet = tweet[0]
idTweet = tweet[2]
begin
uri = URI.parse("https://api.twitter.com/1/statuses/oembed.json?id=#{idTweet}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
jsonTweet = ActiveSupport::JSON.decode(response.body)
jsonTweet["html"]
rescue Exception => e
"<a href='#{link}'><span data-title='#{link}'>#{link}</span></a>"
end
elsif link =~ spotifyReg
spotify = $1
htmlSpotify = "<iframe style=\"width: 80%; height: 80px;\" src=\"https://embed.spotify.com/?uri=#{spotify}\" frameborder=\"0\" allowtransparency=\"true\"></iframe>"
htmlSpotify
else
"<a href='#{link}'><span data-title='#{link}'>#{link}</span></a>"
end
end
end
def link(link, title, content)
"<a href='#{link}'><span data-title='#{content}'>#{content}</span></a>"
end
def postprocess(full_document)
full_document.gsub!(/<p><img/, "<p class='images'><img")
full_document.gsub!(/<p><iframe/, "<p class='iframes'><iframe")
full_document
end
end
def render(text)
Redcarpet::Markdown.new(MarkdownRenderer.new(:hard_wrap => true), :tables => true, :fenced_code_blocks => true, :autolink => true, :strikethrough => true).render(text)
end
end
Спасибо за помощь;)!
Если вы получили сообщение об ошибке, отправьте его вместе со своим вопросом. – toro2k
Нет ошибки, она просто не работает (единственная часть, которая работает, - это метод постпроцесса). (ссылка, autolink и block_code не работают). – Fantattitude
В вашем коде вы добавляете непосредственно к модулю 'Haml :: Filters'. Это опечатка - есть ли у вас модуль «Markdown»? – matt