You are here: Foswiki>Tasks Web>Item14263 (18 Feb 2017, GeorgeClark)Edit Attach

Item14263: Mistype in Foswiki::Configure::Item

pencil
Priority: Low
Current State: Closed
Released In: 2.1.3
Target Release: patch
Applies To: Engine
Component: Foswiki::Configure::Item
Branches: Release02x01 master
Reported By: VadimBelman
Waiting For:
Last Change By: GeorgeClark
File core/lib/Foswiki/Configure/Item.pm, line 193 in master branch of commit 8775df5:

            $this->{key} = $this->$fn( $val, $key );

must be:

            $this->{$key} = $this->$fn( $val, $key );

-- VadimBelman - 05 Jan 2017

It does seem to be a typo, but this causes all of the ConfigureQueryTests to fail. I can't check it into 2.1.3 beta

-- GeorgeClark - 12 Jan 2017

Crawford, do you have any ideas on this one?

-- GeorgeClark - 12 Jan 2017

Applying this change results in
Foswiki::Configure::Query::getspec errors: /var/www/foswiki/distro/core/lib/Foswiki.spec: 1804: Can't use string ("1") as an ARRAY ref while "strict refs" in use at /var/www/foswiki/distro/core/lib/Foswiki/Configure/Value.pm line 224, <$fh> line 1808.
at /var/www/foswiki/distro/core/lib/Foswiki/Configure/Value.pm line 224, <$fh> line 1808.
Foswiki::Configure::Value::_FEEDBACK(Foswiki::Configure::Value=HASH(0x40373b0), "icon='ui-icon-mail-closed';label='Send Test Email';wizard='Se"..., "FEEDBACK") called at /var/www/foswiki/distro/core/lib/Foswiki/Configure/Item.pm line 193
Foswiki::Configure::Item::_parseOptions(Foswiki::Configure::Value=HASH(0x40373b0), "30 LABEL=\"Webmaster Email\" FEEDBACK=\"icon='ui-icon-mail-open "...) called at /var/www/foswiki/distro/core/lib/Foswiki/Configure/Item.pm line 107
Foswiki::Configure::Item::set(Foswiki::Configure::Value=HASH(0x40373b0), "typename", "EMAILADDRESS", "keys", "", "opts", "30 LABEL=\"Webmaster Email\" FEEDBACK=\"icon='ui-icon-mail-open "..., "defined_at", ARRAY(0x4040fb0), ...) called at /var/www/foswiki/distro/core/lib/Foswiki/Configure/Item.pm line 50
Foswiki::Configure::Item::new("Foswiki::Configure::Value", "typename", "EMAILADDRESS", "keys", "", "opts", "30 LABEL=\"Webmaster Email\" FEEDBACK=\"icon='ui-icon-mail-open "..., "defined_at", ARRAY(0x4040fb0), ...) called at /var/www/foswiki/distro/core/lib/Foswiki/Configure/Value.pm line 133
Foswiki::Configure::Value::new("Foswiki::Configure::Value", "EMAILADDRESS", "opts", "30 LABEL=\"Webmaster Email\" FEEDBACK=\"icon='ui-icon-mail-open "..., 

-- GeorgeClark - 12 Jan 2017

This patch seems to work fine. Unit tests pass, and configure runs fine. I can't find anywhere else in the code that any hash is referenced with {key}.
diff --git a/core/lib/Foswiki/Configure/Item.pm b/core/lib/Foswiki/Configure/Item.pm
index 1b04bcf..17f8dbb 100644
--- a/core/lib/Foswiki/Configure/Item.pm
+++ b/core/lib/Foswiki/Configure/Item.pm
@@ -190,7 +190,7 @@ sub _parseOptions {
             && !$Foswiki::Configure::LoadSpec::RAW_VALS )
         {
             my $fn = $spec->{handler};
-            $this->{key} = $this->$fn( $val, $key );
+            $this->$fn( $val, $key );
         }
         else {
             $this->{$key} = $val;

-- GeorgeClark - 12 Jan 2017

I think CDot must approve it. The working patch looks pretty confusing.

-- VadimBelman - 12 Jan 2017

George's patch is correct. This is the handing for a delegated option. For example, FEEDBACK="icon='ui-icon-check'" where the value of the option is recursively parsed using a provided handler. The delegated parser is expected to populate the Configure::Item object directly. In the specific case of FEEDBACK, the delegated parser is Configure::Value::_FEEDBACK. The side effect of setting ->{key} is that an extra field is set in the Item object but it's just ignored. Here's a modified patch that enhances the doc as well.

diff --git a/core/lib/Foswiki/Configure/Value.pm b/core/lib/Foswiki/Configure/Value.pm
index 1fe5595..2451662 100755
--- a/core/lib/Foswiki/Configure/Value.pm
+++ b/core/lib/Foswiki/Configure/Value.pm
@@ -13,39 +13,34 @@ item. This object is the *model* only.
 
 ---++ Value Attributes
 Values may have attributes associated with them in the .spec file. These
-attributes are identified by UPPERCASE names and may be one of four types:
+attributes are identified by UPPERCASE names and may be either:
 
-   * boolean - a single name enables the option.
+   * boolean - a single name enables the option, for example EXPERT
    * string - a name followed by an equals sign, followed by a quoted string
-     (single or double quotes both supported)
-   * keyword - a name followed by a keyword
+     (single or double quotes both supported) for example LABEL="Wibble".
+    (see also &&& below)
 
 The special prefix 'NO' on any attribute name will clear the value of
 that attributes.
 
-In support of older .spec files, the following are also supported (though
+&&& In support of older .spec files, the following are also supported (though
 their usage is deprecated):
 
    * Single-character attribute H. This is synonymous with HIDDEN.
    * Single-character attribute M is ignored.
-   * Unquoted conditions - DISPLAY_IF and ENABLE_IF may be followed by a
+   * Unquoted attribute values - DISPLAY_IF and ENABLE_IF may be followed by a
      a space, and terminated by /DISPLAY_IF (or /ENABLE_IF) or the end of
      the string.
 
-Formally,
+Certain attributes define a 'delegate' that allows further parsing of the
+value of an attribute. A delegate is a ref to a function that performs
+this parsing. Delegates are responsible for directly modifying the item
+on which they are run.
 
-attrs ::= attr attrs ;
-attr ::= name '=' values | name ;
-values ::= value | values ';' fattr ;
-value ::= quoted-string | name ;
-name is made up of [-A-Z0-9]
-
-Certain attributes define a 'process' that allows further parsing of the
-value of an attribute. A process is a ref to a function that performs
-this parsing. Execution of processes may be supressed by setting
+Execution of delegates may be supressed by setting
 $Foswiki::Configure::LoadSpec::RAW_VALS to 1.
 
-Processes are used to parse 'FEEDBACK' and 'CHECK' values.
+Delegates are used to parse 'FEEDBACK' and 'CHECK' values.
 
 =cut

-- Main.CrawfordCurrie - 13 Jan 2017 - 09:36

 

ItemTemplate edit

Summary Mistype in Foswiki::Configure::Item
ReportedBy VadimBelman
Codebase 2.1.3 beta1, 2.1.2, 2.1.1, 2.1.0
SVN Range
AppliesTo Engine
Component Foswiki::Configure::Item
Priority Low
CurrentState Closed
WaitingFor
Checkins distro:7749e0862b34
TargetRelease patch
ReleasedIn 2.1.3
CheckinsOnBranches Release02x01 master
trunkCheckins
masterCheckins distro:7749e0862b34
ItemBranchCheckins
Release02x01Checkins distro:7749e0862b34
Release02x00Checkins
Release01x01Checkins
Topic revision: r7 - 18 Feb 2017, GeorgeClark - This page was cached on 23 Sep 2017 - 17:19.

The copyright of the content on this website is held by the contributing authors, except where stated elsewhere. See Copyright Statement. Creative Commons License