Defect #12744
Unable to call a macro with a name that contains uppercase letters
Status: | Closed | Start date: | ||
---|---|---|---|---|
Priority: | Normal | Due date: | ||
Assignee: | % Done: | 0% | ||
Category: | Plugin API | |||
Target version: | 2.2.1 | |||
Resolution: | Fixed | Affected version: | 2.2.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...
History
#1
Updated by Daniel Felix over 9 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
#2
Updated by Ling Li over 9 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.)
#3
Updated by Ling Li over 9 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
#4
Updated by Jean-Philippe Lang over 9 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?
#5
Updated by Jean-Philippe Lang over 9 years ago
- Status changed from Closed to Resolved
#6
Updated by Ling Li over 9 years ago
I can confirm that r11126 fixes the problem. Thanks.
#7
Updated by Takeshi Yaegashi over 9 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.
#8
Updated by Jean-Philippe Lang over 9 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
include
Include a wiki page. Example:
!{{include(Foo)}}
or to include a page of a specific project wiki:
!{{include(projectname:Foo)}}
collapse
Inserts of collapsed block of text. Example:
{{collapse(View details...) This is a block of text that is collapsed by default. It can be expanded by clicking a link. }}
thumbnail
Displays a clickable thumbnail of an attached image. Examples:
{{thumbnail(image.png)}} {{thumbnail(image.png, size=300, title=Thumbnail)}}sample_macro
Sample macro
Will be fixed as a separate issue.