treequel 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,8 +1,95 @@
1
+ 2011-11-09 Michael Granger <ged@FaerieMUD.org>
2
+
3
+ * .hgtags:
4
+ Added tag v1.7.0 for changeset 367d9982ea67
5
+ [74e7687d2837] [tip]
6
+
7
+ * .hgsigs:
8
+ Added signature for changeset c5b83ddad969
9
+ [367d9982ea67] [v1.7.0]
10
+
11
+ * README.rdoc, bin/treequel, bin/treewhat, experiments/mixohm.rb,
12
+ experiments/modfault.rb, lib/treequel.rb, lib/treequel/branch.rb,
13
+ lib/treequel/branchcollection.rb, lib/treequel/branchset.rb,
14
+ lib/treequel/control.rb, lib/treequel/controls/contentsync.rb,
15
+ lib/treequel/controls/pagedresults.rb, lib/treequel/directory.rb,
16
+ lib/treequel/exceptions.rb, lib/treequel/filter.rb,
17
+ lib/treequel/mixins.rb, lib/treequel/model.rb,
18
+ lib/treequel/model/errors.rb, lib/treequel/model/objectclass.rb,
19
+ lib/treequel/monkeypatches.rb, lib/treequel/schema.rb,
20
+ lib/treequel/schema/attributetype.rb,
21
+ lib/treequel/schema/objectclass.rb, lib/treequel/utils.rb:
22
+ De-Yarded
23
+ [c5b83ddad969] [github/master]
24
+
25
+ * Rakefile:
26
+ Require 'rake/clean' for the CLOBBER FileList
27
+ [8e6a436a4056]
28
+
29
+ * spec/treequel/monkeypatches_spec.rb:
30
+ Fixing generalized time tests for FreeBSD
31
+ [9913f6cb927f]
32
+
33
+ * History.rdoc, lib/treequel.rb:
34
+ Bump minor version for API changes, update History.
35
+ [d9c5807f1bd5]
36
+
37
+ * lib/treequel/model.rb:
38
+ Treat Treequel::Model#[]= with a nil value on a SINGLE-VALUE
39
+ attribute as a delete.
40
+ [06a018adffb8]
41
+
42
+ * lib/treequel/branchset.rb:
43
+ Splat the filterspec used in Branchset#not to avoid unnecessary
44
+ filter clauses.
45
+ [ed42352c1ed4]
46
+
47
+ * lib/treequel/branch.rb:
48
+ Efficiency fix for Treequel::Branch#must_attribute_types
49
+ [797738d823b4]
50
+
51
+ * lib/treequel/branch.rb, lib/treequel/model.rb:
52
+ Removed some of the more-redundant/verbose debugging.
53
+ [58390743bd93]
54
+
55
+ 2011-11-08 Michael Granger <ged@FaerieMUD.org>
56
+
57
+ * Rakefile, lib/treequel/branchset.rb,
58
+ spec/treequel/branchset_spec.rb:
59
+ Added Branchset#first with an argument, and a #not mutator.
60
+ [12a92b33f049]
61
+
62
+ * Rakefile:
63
+ Build tgz and zip packages, too
64
+ [c74c3a992b6f]
65
+
66
+ * .pryrc:
67
+ Adding a .pryrc
68
+ [35bea171d90d]
69
+
70
+ 2011-10-26 Michael Granger <ged@FaerieMUD.org>
71
+
72
+ * .hgtags:
73
+ Added tag v1.6.0 for changeset c3abddcd7532
74
+ [e16351a6b919]
75
+
76
+ * .hgsigs:
77
+ Added signature for changeset ef0ce1481247
78
+ [c3abddcd7532] [v1.6.0]
79
+
80
+ * .hgtags:
81
+ Added tag semver for changeset 3ceba5117883
82
+ [ef0ce1481247]
83
+
84
+ * Manifest.txt, Rakefile:
85
+ Include test datafiles, update Rakefile.
86
+ [92151182984d]
87
+
1
88
  2011-10-20 Michael Granger <ged@FaerieMUD.org>
2
89
 
3
90
  * bin/treewhat:
4
91
  Make the treewhat tool executable
5
- [6d8a6dc8e9dc] [tip]
92
+ [6d8a6dc8e9dc]
6
93
 
7
94
  * Rakefile:
8
95
  Made checkin check the manifest, too
@@ -31,7 +118,7 @@
31
118
 
32
119
  * Rakefile:
33
120
  Fix dev dependency version spec.
34
- [d395c6dc9c1f] [github/master]
121
+ [d395c6dc9c1f]
35
122
 
36
123
  2011-08-09 Michael Granger <ged@FaerieMUD.org>
37
124
 
@@ -69,6 +156,14 @@
69
156
  * Merged with fcb89939ba84
70
157
  [da4761033bea]
71
158
 
159
+ 2011-06-14 Michael Granger <ged@FaerieMUD.org>
160
+
161
+ * lib/treequel/model.rb:
162
+ Adding debug logging to Treequel::Model#save
163
+ [fcb89939ba84]
164
+
165
+ 2011-06-28 Michael Granger <ged@FaerieMUD.org>
166
+
72
167
  * Rakefile, spec/treequel/monkeypatches_spec.rb:
73
168
  Some fixes for JRuby + jruby-ldap
74
169
  - Use a modern timezone for the Time tests
@@ -82,12 +177,6 @@
82
177
  objects sharing the same connection
83
178
  [1a1383549960]
84
179
 
85
- 2011-06-14 Michael Granger <ged@FaerieMUD.org>
86
-
87
- * lib/treequel/model.rb:
88
- Adding debug logging to Treequel::Model#save
89
- [fcb89939ba84]
90
-
91
180
  2011-05-25 Michael Granger <ged@FaerieMUD.org>
92
181
 
93
182
  * lib/treequel/constants.rb, lib/treequel/schema.rb,
@@ -148,13 +237,6 @@
148
237
  Adding schema artifacts to the treewhat command
149
238
  [58261aeb1c82]
150
239
 
151
- 2011-03-28 Michael Granger <ged@FaerieMUD.org>
152
-
153
- * bin/treewhat:
154
- Updated the 'treewhat' schema tool.
155
- * Show additional details for some schema objects.
156
- [28576726289e]
157
-
158
240
  2011-03-21 Michael Granger <ged@FaerieMUD.org>
159
241
 
160
242
  * bin/treequel:
@@ -176,6 +258,13 @@
176
258
  Manual CSS fixes for HTML5 elements under FF3.6
177
259
  [72d3e439772f]
178
260
 
261
+ 2011-03-28 Michael Granger <ged@FaerieMUD.org>
262
+
263
+ * bin/treewhat:
264
+ Updated the 'treewhat' schema tool.
265
+ * Show additional details for some schema objects.
266
+ [28576726289e]
267
+
179
268
  2011-03-17 Michael Granger <ged@FaerieMUD.org>
180
269
 
181
270
  * .hgtags:
@@ -460,6 +549,12 @@
460
549
  Merged with 411:ddbb3c3bdd00
461
550
  [ba7895d4e64b]
462
551
 
552
+ 2011-01-17 Michael Granger <ged@FaerieMUD.org>
553
+
554
+ * History.md:
555
+ Updated History
556
+ [9c4db65b40d7]
557
+
463
558
  2011-01-18 Michael Granger <ged@FaerieMUD.org>
464
559
 
465
560
  * manual/layouts/default.erb, manual/resources/css/manual.css,
@@ -524,10 +619,6 @@
524
619
 
525
620
  2011-01-17 Michael Granger <ged@FaerieMUD.org>
526
621
 
527
- * History.md:
528
- Updated History
529
- [9c4db65b40d7]
530
-
531
622
  * .hgtags:
532
623
  Added tag v1.3.1 for changeset a6ea030fc88f
533
624
  [4caac8976d00]
@@ -636,14 +727,14 @@
636
727
  Automated merge with ssh://deveiate/Treequel
637
728
  [62e7348050eb]
638
729
 
639
- * bin/treequel:
640
- More logging constant fixes for the treequel shell.
641
- [6e159f32ed07]
642
-
643
730
  * bin/treequel, lib/treequel/model/objectclass.rb:
644
731
  Aesthetic cleanup
645
732
  [78e65cb8f30a]
646
733
 
734
+ * bin/treequel:
735
+ More logging constant fixes for the treequel shell.
736
+ [6e159f32ed07]
737
+
647
738
  2011-01-04 Michael Granger <ged@FaerieMUD.org>
648
739
 
649
740
  * bin/treequel:
@@ -1018,7 +1109,7 @@
1018
1109
 
1019
1110
  * .hgsigs:
1020
1111
  Added signature for changeset c6166a5cbc23
1021
- [3ceba5117883] [v1.2.0]
1112
+ [3ceba5117883] [semver, v1.2.0]
1022
1113
 
1023
1114
  * .hgsubstate, Rakefile:
1024
1115
  Updated build system.
@@ -1770,6 +1861,12 @@
1770
1861
  * Re-sorted the OID constants to be in OID order
1771
1862
  [8b2fb7415412]
1772
1863
 
1864
+ 2010-01-13 Michael Granger <ged@FaerieMUD.org>
1865
+
1866
+ * bin/treequel:
1867
+ Make treequel shell's 'cat' command error for non-existant entries
1868
+ [84087b01d473]
1869
+
1773
1870
  2010-01-24 Michael Granger <ged@FaerieMUD.org>
1774
1871
 
1775
1872
  * bin/treequel:
@@ -1778,10 +1875,6 @@
1778
1875
 
1779
1876
  2010-01-13 Michael Granger <ged@FaerieMUD.org>
1780
1877
 
1781
- * bin/treequel:
1782
- Make treequel shell's 'cat' command error for non-existant entries
1783
- [84087b01d473]
1784
-
1785
1878
  * bin/treequel:
1786
1879
  Fix the 'grep' command in the Treequel shell.
1787
1880
  [669a09149f48]
@@ -1812,19 +1905,6 @@
1812
1905
  Updated build system
1813
1906
  [00ac1bc4e917]
1814
1907
 
1815
- 2009-12-22 Michael Granger <ged@FaerieMUD.org>
1816
-
1817
- * bin/treequel:
1818
- Reworked LDIF display colors in the shell to be more visible.
1819
- [d77a0bf26034]
1820
-
1821
- * bin/treequel:
1822
- Make the treequel shell fall back to plain connect (with a warning)
1823
- if TLS fails.
1824
- [9aeccec1ee84]
1825
-
1826
- 2010-01-07 Michael Granger <ged@FaerieMUD.org>
1827
-
1828
1908
  * bin/treequel, lib/treequel/branch.rb, lib/treequel/constants.rb,
1829
1909
  lib/treequel/utils.rb:
1830
1910
  Improvements to the treequel shell, fixes for 1.9.1.
@@ -1846,6 +1926,15 @@
1846
1926
 
1847
1927
  2009-12-22 Michael Granger <ged@FaerieMUD.org>
1848
1928
 
1929
+ * bin/treequel:
1930
+ Reworked LDIF display colors in the shell to be more visible.
1931
+ [d77a0bf26034]
1932
+
1933
+ * bin/treequel:
1934
+ Make the treequel shell fall back to plain connect (with a warning)
1935
+ if TLS fails.
1936
+ [9aeccec1ee84]
1937
+
1849
1938
  * examples/ldap-monitor.rb, examples/ldap-
1850
1939
  monitor/public/css/master.css, examples/ldap-
1851
1940
  monitor/public/images/card_small.png, examples/ldap-
@@ -1866,27 +1955,6 @@
1866
1955
  Automated merge with ssh://hg@deveiate/Treequel
1867
1956
  [3bdd645530fe]
1868
1957
 
1869
- 2009-12-18 Michael Granger <ged@FaerieMUD.org>
1870
-
1871
- * Merged with 5fd4033e1556
1872
- [9571c9d8e4dd]
1873
-
1874
- 2009-12-17 Michael Granger <ged@FaerieMUD.org>
1875
-
1876
- * docs/openldap-oids.txt, lib/treequel/constants.rb,
1877
- lib/treequel/controls/contentsync.rb,
1878
- lib/treequel/controls/persistentsearch.rb,
1879
- lib/treequel/directory.rb:
1880
- More controls work, started several more control modules.
1881
- * Adding a breakdown of all the controls the OpenLDAP server I have
1882
- has, so I know which controls I can test against.
1883
- * Added some control constants.
1884
- * Added the ContentSyncControl and the PersistentSearchControl.
1885
- * Added a Directory#supported_controls method.
1886
- [ffc2ebacdfd0]
1887
-
1888
- 2009-12-22 Michael Granger <ged@FaerieMUD.org>
1889
-
1890
1958
  * bin/treequel, examples/ldap-monitor.rb, examples/ldap-
1891
1959
  monitor/public/css/master.css, examples/ldap-
1892
1960
  monitor/public/images/card_small.png, examples/ldap-
@@ -1915,6 +1983,25 @@
1915
1983
  * Bumped the version to 1.0.2.
1916
1984
  [31c326800cc6]
1917
1985
 
1986
+ 2009-12-18 Michael Granger <ged@FaerieMUD.org>
1987
+
1988
+ * Merged with 5fd4033e1556
1989
+ [9571c9d8e4dd]
1990
+
1991
+ 2009-12-17 Michael Granger <ged@FaerieMUD.org>
1992
+
1993
+ * docs/openldap-oids.txt, lib/treequel/constants.rb,
1994
+ lib/treequel/controls/contentsync.rb,
1995
+ lib/treequel/controls/persistentsearch.rb,
1996
+ lib/treequel/directory.rb:
1997
+ More controls work, started several more control modules.
1998
+ * Adding a breakdown of all the controls the OpenLDAP server I have
1999
+ has, so I know which controls I can test against.
2000
+ * Added some control constants.
2001
+ * Added the ContentSyncControl and the PersistentSearchControl.
2002
+ * Added a Directory#supported_controls method.
2003
+ [ffc2ebacdfd0]
2004
+
1918
2005
  2009-12-16 Michael Granger <ged@FaerieMUD.org>
1919
2006
 
1920
2007
  * Rakefile, lib/treequel/mixins.rb, project.yml:
@@ -3009,16 +3096,6 @@
3009
3096
  Merged. Someday I'll get the hang of this.
3010
3097
  [a5e715f5f877]
3011
3098
 
3012
- 2009-07-28 Michael Granger <ged@FaerieMUD.org>
3013
-
3014
- * .hgignore, Rakefile:
3015
- Merged with 34cc97817266
3016
- [395b7bf6f248]
3017
-
3018
- * .hgignore, Rakefile, docs/manual/src/index.page:
3019
- Manual rewording, .hgignore updates
3020
- [89f74035c67d]
3021
-
3022
3099
  2009-07-29 Michael Granger <ged@FaerieMUD.org>
3023
3100
 
3024
3101
  * .hgignore, Rakefile, docs/manual/src/index.page,
@@ -3029,6 +3106,16 @@
3029
3106
  * Made Treequel::Branch#filter treat a Hash like an array of tuples.
3030
3107
  [46e6dce0c011]
3031
3108
 
3109
+ 2009-07-28 Michael Granger <ged@FaerieMUD.org>
3110
+
3111
+ * .hgignore, Rakefile:
3112
+ Merged with 34cc97817266
3113
+ [395b7bf6f248]
3114
+
3115
+ * .hgignore, Rakefile, docs/manual/src/index.page:
3116
+ Manual rewording, .hgignore updates
3117
+ [89f74035c67d]
3118
+
3032
3119
  2009-07-27 Michael Granger <ged@FaerieMUD.org>
3033
3120
 
3034
3121
  * .hgignore, Rakefile:
@@ -3040,6 +3127,10 @@
3040
3127
 
3041
3128
  2009-07-24 Michael Granger <ged@FaerieMUD.org>
3042
3129
 
3130
+ * .hgsub, .hgsubstate:
3131
+ Unlinking the subrepo, as it doesn't behave well enough quite yet.
3132
+ [fc3c3bac2c22]
3133
+
3043
3134
  * .hgsub, .hgsubstate:
3044
3135
  Merging build system fixes
3045
3136
  [b7a919b2ad5d]
@@ -3052,10 +3143,6 @@
3052
3143
  Removing subrepo, as it doesn't work quite the way I'd hoped.
3053
3144
  [f631900a9ad8] <build-system-fixes>
3054
3145
 
3055
- * .hgsub, .hgsubstate:
3056
- Unlinking the subrepo, as it doesn't behave well enough quite yet.
3057
- [fc3c3bac2c22]
3058
-
3059
3146
  * .hgignore, .hgsubstate, Rakefile, Rakefile.local, project.yml:
3060
3147
  Initial commit of Mercurial-based tasks
3061
3148
  [65236b2101e5] <build-system-fixes>
data/History.rdoc CHANGED
@@ -1,3 +1,14 @@
1
+ == v1.7.0 [2011-11-09] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ - Treat Treequel::Model#[]= with a nil value on a SINGLE-VALUE
4
+ attribute as a delete.
5
+ - Splat the filterspec used in Branchset#not to avoid unnecessary
6
+ filter clauses.
7
+ - Efficiency fix for Treequel::Branch#must_attribute_types
8
+ - Removed some of the more-redundant/verbose debugging.
9
+ - Added Branchset#first with an argument, and a #not mutator.
10
+
11
+
1
12
  == v1.6.0 [2011-10-06] Michael Granger <ged@FaerieMUD.org>
2
13
 
3
14
  - Adding workaround for vendored "sysexits" library under MacOX X 10.7
data/README.rdoc CHANGED
@@ -1,8 +1,8 @@
1
- # Treequel - an honest LDAP library
1
+ = Treequel - an honest LDAP library
2
2
 
3
3
  * http://deveiate.org/projects/Treequel
4
4
 
5
- ## Description
5
+ == Description
6
6
 
7
7
  Treequel is an LDAP toolkit for Ruby. It is intended to allow quick, easy
8
8
  access to LDAP directories in a manner consistent with LDAP's hierarchical,
@@ -12,7 +12,7 @@ It's inspired by and modeled after [Sequel](http://sequel.rubyforge.org/), a
12
12
  kick-ass database library.
13
13
 
14
14
 
15
- ## Examples
15
+ == Examples
16
16
 
17
17
  Here are a few short examples to whet your appetite:
18
18
 
@@ -33,19 +33,22 @@ Here are a few short examples to whet your appetite:
33
33
  dir.ou( :people ).filter( :mail ).to_hash( :mail, :cn )
34
34
 
35
35
  More elaborate examples of real-world usage can be found
36
- [in the examples/ directory][examples] in the distribution.
36
+ {in the examples/ directory}[http://deveiate.org/projects/Treequel/browser/examples]
37
+ in the distribution.
37
38
 
38
39
 
39
- ## Contributing
40
+ == Contributing
40
41
 
41
- You can check out the current development source [with Mercurial][hgrepo], or
42
- if you prefer Git, via the project's [Github mirror][gitmirror].
42
+ You can check out the current development source
43
+ {with Mercurial}[http://repo.deveiate.org/Treequel], or
44
+ if you prefer Git, via the project's
45
+ {Github mirror}[https://github.com/ged/treequel].
43
46
 
44
47
  You can submit bug reports, suggestions, and read more about future plans at
45
- [the project page][projectpage].
48
+ {the project page}[http://deveiate.org/projects/Treequel].
46
49
 
47
50
 
48
- ## License
51
+ == License
49
52
 
50
53
  Copyright (c) 2008-2011, Michael Granger and Mahlon E. Smith
51
54
  All rights reserved.
@@ -99,13 +102,13 @@ the following license terms:
99
102
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
100
103
 
101
104
 
102
- ## Authors
105
+ == Authors
103
106
 
104
107
  * Michael Granger <ged@FaerieMUD.org>
105
108
  * Mahlon E. Smith <mahlon@martini.nu>
106
109
 
107
110
 
108
- ## Contributors
111
+ == Contributors
109
112
 
110
113
  A special thanks to Ben Bleything, who was part of the initial brainstorm that
111
114
  led to the creation of this library.
@@ -115,8 +118,3 @@ ideas for the Model side of Treequel; it's vastly better for his
115
118
  suggestions.
116
119
 
117
120
 
118
- [examples]:http://deveiate.org/projects/Treequel/browser/examples
119
- [hgrepo]:http://repo.deveiate.org/Treequel
120
- [gitmirror]:https://github.com/ged/treequel
121
- [projectpage]:http://deveiate.org/projects/Treequel
122
-
data/Rakefile CHANGED
@@ -6,6 +6,8 @@ rescue LoadError
6
6
  abort "This Rakefile requires hoe (gem install hoe)"
7
7
  end
8
8
 
9
+ require 'rake/clean'
10
+
9
11
  Hoe.plugin :mercurial
10
12
  Hoe.plugin :signing
11
13
  Hoe.plugin :manualgen
@@ -17,6 +19,9 @@ hoespec = Hoe.spec 'treequel' do
17
19
  self.history_file = 'History.rdoc'
18
20
  self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
19
21
 
22
+ self.need_tar = true
23
+ self.need_zip = true
24
+
20
25
  self.developer 'Michael Granger', 'ged@FaerieMUD.org'
21
26
  self.developer 'Mahlon E. Smith', 'mahlon@martini.nu'
22
27
 
@@ -26,7 +31,7 @@ hoespec = Hoe.spec 'treequel' do
26
31
  self.dependency 'ruby-ldap', '~> 0.9'
27
32
  end
28
33
  self.dependency 'diff-lcs', '~> 1.1'
29
- self.dependency 'rspec', '~> 2.6.0', :developer
34
+ self.dependency 'rspec', '~> 2.7', :developer
30
35
  self.dependency 'ruby-termios', '~> 0.9', :developer
31
36
  self.dependency 'ruby-terminfo', '~> 0.1', :developer
32
37
  self.dependency 'columnize', '~> 0.3', :developer
data/bin/treequel CHANGED
@@ -194,8 +194,7 @@ class Treequel::Shell
194
194
  ### I N S T A N C E M E T H O D S
195
195
  #################################################################
196
196
 
197
- ### Create a new shell for the specified +directory+.
198
- ### @param [Treequel::Directory] directory the LDAP directory to navigate
197
+ ### Create a new shell for the specified +directory+ (a Treequel::Directory).
199
198
  def initialize( directory )
200
199
  @dir = directory
201
200
  @uri = directory.uri
@@ -224,9 +223,8 @@ class Treequel::Shell
224
223
  attr_accessor :quit
225
224
 
226
225
 
227
- ### The command loop: run the shell until the user wants to quit
228
- ### @param [String] bind_as The DN of the user to bind as. If none is
229
- ### specified, the shell will bind anonymously.
226
+ ### The command loop: run the shell until the user wants to quit, binding as +bind_as+ if
227
+ ### given.
230
228
  def run( bind_as=nil )
231
229
  @original_tty_settings = IO.read( '|-' ) or exec 'stty', '-g'
232
230
  message "Connected to %s" % [ @uri ]
@@ -911,11 +909,7 @@ class Treequel::Shell
911
909
 
912
910
 
913
911
  ### Return the description of the specified +branch+ suitable for displaying in
914
- ### the directory listing.
915
- ### @param [Treequel::Branch] branch the branch to be described
916
- ### @param [Fixnum] oclen the length of the largest objectclass that
917
- ### will be displayed; used to calculate the
918
- ### width of the objectclass column.
912
+ ### the directory listing. The +oclen+ is the width of the objectclass column.
919
913
  def format_description( branch, oclen=40 )
920
914
  rdn = format_rdn( branch.rdn )
921
915
  metadatalen = oclen + 16 + 6 # oc + timestamp + whitespace
data/bin/treewhat CHANGED
@@ -58,8 +58,7 @@ class Treequel::What
58
58
  end
59
59
 
60
60
 
61
- ### Create and configure a command-line option parser for the command.
62
- ### @return [Trollop::Parser] the option parser
61
+ ### Create and configure a command-line option parser (a Trollop::Parser) for the command.
63
62
  def self::make_option_parser
64
63
  progname = File.basename( $0 )
65
64
  default_directory = Treequel.directory_from_config
@@ -343,8 +342,7 @@ class Treequel::What
343
342
  end
344
343
 
345
344
 
346
- ### Display additional details for the specified +attrtype+.
347
- ### @param [Treequel::Schema::AttributeType] attrtype the attribute type object to display
345
+ ### Display additional details for the specified +attrtype+ (a Treequel::Schema::AttributeType).
348
346
  def display_attrtype_details( attrtype )
349
347
  ocs = self.directory.schema.object_classes.values.find_all do |oc|
350
348
  ( oc.must_oids | oc.may_oids ).include?( attrtype.name.to_sym )