raise "Attachment #{filename} not found"
end
end
+
+ desc "Displays an issue link including additional information. Examples:\n\n" +
+ "{{issue(123)}} -- Issue #123: Enhance macro capabilities\n" +
+ "{{issue(123, project=true)}} -- Andromeda - Issue #123: Enhance macro capabilities\n" +
+ "{{issue(123, tracker=false)}} -- #123: Enhance macro capabilities\n" +
+ "{{issue(123, subject=false, project=true)}} -- Andromeda - Issue #123\n"
+ macro :issue do |obj, args|
+ args, options = extract_macro_options(args, :project, :subject, :tracker)
+ id = args.first
+ issue = Issue.visible.find_by(id: id)
+
+ if issue
+ # remove invalid options
+ options.delete_if { |k,v| v != 'true' && v != 'false' }
+
+ # turn string values into boolean
+ options.each do |k, v|
+ options[k] = v == 'true'
+ end
+
+ link_to_issue(issue, options)
+ else
+ # Fall back to regular issue link format to indicate, that there
+ # should have been something.
+ "##{id}"
+ end
+ end
end
end
end
text = "*{{hello_world}}*"
assert_match %r|\A<p><strong>Hello world!.*</strong></p>\z|, textilizable(text)
end
+
+ def test_issue_macro_should_not_render_link_if_not_visible
+ assert_equal "<p>#123</p>", textilizable('{{issue(123)}}')
+ end
+
+ def test_issue_macro_should_render_link_to_issue
+ issue = Issue.find 1
+ assert_equal %{<p><a class="issue tracker-1 status-1 priority-4 priority-lowest" href="/issues/1">Bug #1</a>: #{issue.subject}</p>}, textilizable("{{issue(1)}}")
+ assert_equal %{<p>eCookbook - <a class="issue tracker-1 status-1 priority-4 priority-lowest" href="/issues/1">Bug #1</a>: #{issue.subject}</p>}, textilizable("{{issue(1, project=true)}}")
+ end
end