Project

General

Profile

Actions

Defect #12744

closed

Unable to call a macro with a name that contains uppercase letters

Added by Ling Li about 11 years ago. Updated about 11 years ago.

Status:
Closed
Priority:
Normal
Category:
Plugin API
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:
Resolution:
Fixed
Affected version:

Description

I recently upgraded from 2.0 to 2.2 and found that some macros stopped working. Those macros have upper-case letters in their name (e.g., EnableLaTeXMath), and it seems to me that Redmine 2.2 only triggers macro names in lower cases.

hypothesis: when looking up macros, Redmine 2.2 converts the macro name to lower case; but when registering the macro, Redmine 2.2 forgets to lower-case the names. So if a macro has upper case letters in the name during registration, it will never be found when it is called...


Files

Actions #1

Updated by Daniel Felix about 11 years ago

Hi there,

well on the first sight, this seems to be ok.

Save a new macro:
source:trunk/lib/redmine/wiki_formatting/macros.rb#L153
There is a downcase in line 153

Find the macro:
source:trunk/app/helpers/application_helper.rb#L864
There is a $4.downcase in line 864

Actions #2

Updated by Ling Li about 11 years ago

I don't know Ruby but this line seems suspicious where name is added to available_macros before downcase: source:trunk/lib/redmine/wiki_formatting/macros.rb#L151

available_macros[name] = {:desc => @@desc || ''}.merge(options)

(well, it's possible that available_macros is not used during macro look-up. I'll try to figure out why my plugin works only after I rename it to lower-case.)

Actions #3

Updated by Ling Li about 11 years ago

I think that was the culprit. An ugly line (before that L151) fixes the problem, and confirms that the problem was due to not lower-casing the names during macro registration:

          name = "#{name}".downcase       # <-- this is the ugly fix
          name = name.to_sym if name.is_a?(String)
          available_macros[name] = {:desc => @@desc || ''}.merge(options)
          @@desc = nil
          Definitions.send :define_method, "macro_#{name}", &block  # <-- downcase was already done
Actions #4

Updated by Jean-Philippe Lang about 11 years ago

  • Subject changed from Macro name has to be lower-cased? to Unable to call a macro with a name that contains uppercase letters
  • Status changed from New to Closed
  • Assignee set to Jean-Philippe Lang
  • Target version set to 2.2.1
  • Resolution set to Fixed

Fix committed with test in r11126, thanks for pointing this out.
Maybe we should even make macro name case-sensitive?

Actions #5

Updated by Jean-Philippe Lang about 11 years ago

  • Status changed from Closed to Resolved
Actions #6

Updated by Ling Li about 11 years ago

I can confirm that r11126 fixes the problem. Thanks.

Actions #7

Updated by Takeshi Yaegashi about 11 years ago

Jean-Philippe Lang wrote:

Fix committed with test in r11126, thanks for pointing this out.
Maybe we should even make macro name case-sensitive?

I've just been stuck by this bug with my own macros too. There have already been many macro uses with case-confused names, so I hope they would remain case-insensitive.

Btw, I like {{macro_list}} to show macro names with case preserved. Please consider a fix like an attached patch.

Actions #8

Updated by Jean-Philippe Lang about 11 years ago

  • Status changed from Resolved to Closed

Merged.

Btw, I like

hello_world
Sample macro.
macro_list
Displays a list of all available macros, including description if available.
child_pages
Displays a list of child pages. With no argument, it displays the child pages of the current wiki page. Examples:

{{child_pages}} -- can be used from a wiki page only
{{child_pages(depth=2)}} -- display 2 levels nesting only
{{child_pages(Foo)}} -- lists all children of page Foo
{{child_pages(Foo, parent=1)}} -- same as above with a link to page Foo
include
Includes a wiki page. Examples:

{{include(Foo)}}
{{include(projectname:Foo)}} -- to include a page of a specific project wiki
collapse
Inserts of collapsed block of text. Examples:

{{collapse
This is a block of text that is collapsed by default.
It can be expanded by clicking a link.
}}

{{collapse(View details...)
With custom link text.
}}
thumbnail
Displays a clickable thumbnail of an attached image.
Default size is 200 pixels. Examples:

{{thumbnail(image.png)}}
{{thumbnail(image.png, size=300, title=Thumbnail)}} -- with custom title and size
issue
Displays an issue link including additional information. Examples:

{{issue(123)}}                              -- Issue #123: Enhance macro capabilities
{{issue(123, project=true)}}                -- Andromeda - Issue #123: Enhance macro capabilities
{{issue(123, tracker=false)}}               -- #123: Enhance macro capabilities
{{issue(123, subject=false, project=true)}} -- Andromeda - Issue #123
sample_macro
Sample macro
to show macro names with case preserved. Please consider a fix like an attached patch.

Will be fixed as a separate issue.

Actions

Also available in: Atom PDF