Defect #12744
closedUnable to call a macro with a name that contains uppercase letters
0%
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
Updated by Daniel Felix almost 12 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
Updated by Ling Li almost 12 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.)
Updated by Ling Li almost 12 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
Updated by Jean-Philippe Lang almost 12 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?
Updated by Jean-Philippe Lang almost 12 years ago
- Status changed from Closed to Resolved
Updated by Ling Li almost 12 years ago
I can confirm that r11126 fixes the problem. Thanks.
Updated by Takeshi Yaegashi almost 12 years ago
- File 0001-Preserve-case-of-macro-names-shown-by-macro_list.patch 0001-Preserve-case-of-macro-names-shown-by-macro_list.patch added
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.
Updated by Jean-Philippe Lang almost 12 years ago
- Status changed from Resolved to Closed
Merged.
Btw, I like
to show macro names with case preserved. Please consider a fix like an attached patch.
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 Fooinclude
Includes a wiki page. Examples: {{include(Foo)}} {{include(projectname:Foo)}} -- to include a page of a specific project wikicollapse
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 sizeissue
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 #123sample_macro
Sample macro
Will be fixed as a separate issue.