Reduced complexity of growstuff_markdown

This commit is contained in:
Brenda Wallace
2017-10-17 22:20:17 +13:00
parent 8d681dd90a
commit 1279dd63bc
2 changed files with 41 additions and 33 deletions

View File

@@ -226,11 +226,6 @@ Style/PercentLiteralDelimiters:
- 'spec/features/signin_spec.rb'
- 'spec/features/signout_spec.rb'
# Cop supports --auto-correct.
Style/PerlBackrefs:
Exclude:
- 'lib/haml/filters/growstuff_markdown.rb'
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
# SupportedStyles: slashes, percent_r, mixed

View File

@@ -2,55 +2,68 @@ require 'bluecloth'
module Haml::Filters
module GrowstuffMarkdown
include Haml::Filters::Base
def render(text)
@expanded = text
expand_crops
expand_members
BlueCloth.new(@expanded).to_html
end
private
CROP_REGEX = /(?<!\\)\[([^\[\]]+?)\]\(crop\)/
MEMBER_REGEX = /(?<!\\)\[([^\[\]]+?)\]\(member\)/
MEMBER_AT_REGEX = /(?<!\\)(\@\w+)/
MEMBER_ESCAPE_AT_REGEX = /(?<!\\)\\(?=\@\w+)/
include Haml::Filters::Base
def render(text)
def expand_crops
# turn [tomato](crop) into [tomato](http://growstuff.org/crops/tomato)
expanded = text.gsub(CROP_REGEX) do |m|
crop_str = $1
@expanded = @expanded.gsub(CROP_REGEX) do |m|
crop_str = Regexp.last_match(1)
# find crop case-insensitively
crop = Crop.where('lower(name) = ?', crop_str.downcase).first
if crop
url = Rails.application.routes.url_helpers.crop_url(crop, host: Growstuff::Application.config.host)
"[#{crop_str}](#{url})"
else
crop_str
end
crop_link crop, crop_str
end
end
def expand_members
# turn [jane](member) into [jane](http://growstuff.org/members/jane)
expanded = expanded.gsub(MEMBER_REGEX) do |m|
member_str = $1
@expanded = @expanded.gsub(MEMBER_REGEX) do |m|
member_str = Regexp.last_match(1)
# find member case-insensitively
member = Member.case_insensitive_login_name(member_str).first
if member
url = Rails.application.routes.url_helpers.member_url(member, only_path: true)
"[#{member_str}](#{url})"
else
member_str
end
member_link(member, member_str)
end
# turn @jane into [@jane](http://growstuff.org/members/jane)
expanded = expanded.gsub(MEMBER_AT_REGEX) do |m|
member_str = $1
@expanded = @expanded.gsub(MEMBER_AT_REGEX) do |m|
member_str = Regexp.last_match(1)
# find member case-insensitively
member = Member.case_insensitive_login_name(member_str[1..-1]).first
if member
url = Rails.application.routes.url_helpers.member_url(member, only_path: true)
"[#{member_str}](#{url})"
else
member_str
end
member_link(member, member_str)
end
expanded = expanded.gsub(MEMBER_ESCAPE_AT_REGEX, "")
@expanded = @expanded.gsub(MEMBER_ESCAPE_AT_REGEX, "")
end
BlueCloth.new(expanded).to_html
def member_link(member, link_text)
if member
url = Rails.application.routes.url_helpers.member_url(member, only_path: true)
"[#{link_text}](#{url})"
else
member_str
end
end
def crop_link(crop, _link_text)
if crop
url = Rails.application.routes.url_helpers.crop_url(crop, host: Growstuff::Application.config.host)
"[#{crop_str}](#{url})"
else
crop_str
end
end
end