treequel 1.0.1 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. data/ChangeLog +176 -14
  2. data/LICENSE +1 -1
  3. data/Rakefile +61 -45
  4. data/Rakefile.local +20 -0
  5. data/bin/treequel +502 -269
  6. data/examples/ldap-rack-auth.rb +2 -0
  7. data/lib/treequel.rb +221 -18
  8. data/lib/treequel/branch.rb +410 -201
  9. data/lib/treequel/branchcollection.rb +25 -13
  10. data/lib/treequel/branchset.rb +42 -40
  11. data/lib/treequel/constants.rb +233 -3
  12. data/lib/treequel/control.rb +95 -0
  13. data/lib/treequel/controls/contentsync.rb +138 -0
  14. data/lib/treequel/controls/pagedresults.rb +162 -0
  15. data/lib/treequel/controls/sortedresults.rb +216 -0
  16. data/lib/treequel/directory.rb +212 -65
  17. data/lib/treequel/exceptions.rb +11 -12
  18. data/lib/treequel/filter.rb +1 -12
  19. data/lib/treequel/mixins.rb +83 -47
  20. data/lib/treequel/monkeypatches.rb +29 -0
  21. data/lib/treequel/schema.rb +23 -19
  22. data/lib/treequel/schema/attributetype.rb +33 -3
  23. data/lib/treequel/schema/ldapsyntax.rb +0 -11
  24. data/lib/treequel/schema/matchingrule.rb +0 -11
  25. data/lib/treequel/schema/matchingruleuse.rb +0 -11
  26. data/lib/treequel/schema/objectclass.rb +36 -10
  27. data/lib/treequel/schema/table.rb +159 -0
  28. data/lib/treequel/sequel_integration.rb +7 -7
  29. data/lib/treequel/utils.rb +4 -66
  30. data/rake/documentation.rb +89 -0
  31. data/rake/helpers.rb +375 -307
  32. data/rake/hg.rb +16 -2
  33. data/rake/manual.rb +11 -6
  34. data/rake/packaging.rb +20 -35
  35. data/rake/publishing.rb +22 -62
  36. data/spec/lib/constants.rb +20 -0
  37. data/spec/lib/control_behavior.rb +44 -0
  38. data/spec/lib/matchers.rb +51 -0
  39. data/spec/treequel/branch_spec.rb +88 -29
  40. data/spec/treequel/branchcollection_spec.rb +24 -1
  41. data/spec/treequel/branchset_spec.rb +123 -51
  42. data/spec/treequel/control_spec.rb +48 -0
  43. data/spec/treequel/controls/contentsync_spec.rb +38 -0
  44. data/spec/treequel/controls/pagedresults_spec.rb +138 -0
  45. data/spec/treequel/controls/sortedresults_spec.rb +171 -0
  46. data/spec/treequel/directory_spec.rb +186 -16
  47. data/spec/treequel/mixins_spec.rb +42 -3
  48. data/spec/treequel/schema/attributetype_spec.rb +22 -20
  49. data/spec/treequel/schema/objectclass_spec.rb +67 -46
  50. data/spec/treequel/schema/table_spec.rb +134 -0
  51. data/spec/treequel_spec.rb +277 -15
  52. metadata +89 -108
  53. data/bin/treequel.orig +0 -963
  54. data/examples/ldap-monitor.rb +0 -143
  55. data/examples/ldap-monitor/public/css/master.css +0 -328
  56. data/examples/ldap-monitor/public/images/card_small.png +0 -0
  57. data/examples/ldap-monitor/public/images/chain_small.png +0 -0
  58. data/examples/ldap-monitor/public/images/globe_small.png +0 -0
  59. data/examples/ldap-monitor/public/images/globe_small_green.png +0 -0
  60. data/examples/ldap-monitor/public/images/plug.png +0 -0
  61. data/examples/ldap-monitor/public/images/shadows/large-30-down.png +0 -0
  62. data/examples/ldap-monitor/public/images/tick.png +0 -0
  63. data/examples/ldap-monitor/public/images/tick_circle.png +0 -0
  64. data/examples/ldap-monitor/public/images/treequel-favicon.png +0 -0
  65. data/examples/ldap-monitor/views/backends.erb +0 -41
  66. data/examples/ldap-monitor/views/connections.erb +0 -74
  67. data/examples/ldap-monitor/views/databases.erb +0 -39
  68. data/examples/ldap-monitor/views/dump_subsystem.erb +0 -14
  69. data/examples/ldap-monitor/views/index.erb +0 -14
  70. data/examples/ldap-monitor/views/layout.erb +0 -35
  71. data/examples/ldap-monitor/views/listeners.erb +0 -30
  72. data/rake/rdoc.rb +0 -30
  73. data/rake/win32.rb +0 -190
@@ -1,143 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- BEGIN {
4
- require 'pathname'
5
- basedir = Pathname( __FILE__ ).dirname.parent
6
- libdir = basedir + 'lib'
7
-
8
- $LOAD_PATH.unshift( libdir.to_s )
9
- }
10
-
11
- require 'rubygems'
12
- require 'sinatra'
13
- require 'treequel'
14
- require 'erb'
15
-
16
- include ERB::Util
17
-
18
- # The real data is all in operational attributes, so fetch them by default
19
- Treequel::Branch.include_operational_attrs = true
20
-
21
- configure do
22
- set :root, Pathname( __FILE__ ).dirname + 'ldap-monitor'
23
- end
24
-
25
- before do
26
- @monitor ||= Treequel.directory( 'ldap://localhost/cn=Monitor',
27
- :bind_dn => 'cn=admin,cn=Monitor', :pass => 'monitor' )
28
- end
29
-
30
- helpers do
31
-
32
- ### Return a string describing the amount of time in the given number of
33
- ### seconds in terms a human can understand easily.
34
- def time_delta_string( start_time )
35
- start = Time.parse( start_time ) or return "some time"
36
- seconds = Time.now - start
37
-
38
- return 'less than a minute' if seconds < 60
39
-
40
- if seconds < 50 * 60
41
- return "%d minute%s" % [seconds / 60, seconds/60 == 1 ? '' : 's']
42
- end
43
-
44
- return 'about an hour' if seconds < 90 * MINUTES
45
- return "%d hours" % [seconds / HOURS] if seconds < 18 * HOURS
46
- return 'one day' if seconds < 1 * DAYS
47
- return 'about a day' if seconds < 2 * DAYS
48
- return "%d days" % [seconds / DAYS] if seconds < 1 * WEEKS
49
- return 'about a week' if seconds < 2 * WEEKS
50
- return "%d weeks" % [seconds / WEEKS] if seconds < 3 * MONTHS
51
- return "%d months" % [seconds / MONTHS] if seconds < 2 * YEARS
52
- return "%d years" % [seconds / YEARS]
53
- end
54
-
55
- end
56
-
57
- ### GET /
58
- get '/' do
59
- erb :index,
60
- :locals => {
61
- :server_info => @monitor.base['monitoredInfo'],
62
- :datapoints => @monitor.children,
63
- }
64
- end
65
-
66
-
67
- #
68
- # Subsystems
69
- #
70
-
71
- get '/backends' do
72
- subsystem = @monitor.cn( :backends )
73
- backends = subsystem.
74
- filter( :objectClass => :monitoredObject ).
75
- select( :+, :* )
76
-
77
- erb :backends,
78
- :locals => {
79
- :subsystem => subsystem,
80
- :backends => backends,
81
- }
82
- end
83
-
84
-
85
- get '/connections' do
86
- subsystem = @monitor.cn( :connections )
87
- connections = subsystem.
88
- filter( :objectClass => :monitorConnection ).
89
- select( :+, :* )
90
-
91
- erb :connections,
92
- :locals => {
93
- :subsystem => subsystem,
94
- :total => subsystem.cn( :total ),
95
- :current => subsystem.cn( :current ),
96
- :connections => connections.all,
97
- }
98
- end
99
-
100
-
101
- get '/databases' do
102
- subsystem = @monitor.cn( :databases )
103
- databases = subsystem.
104
- filter( :objectClass => :monitoredObject ).
105
- select( :+, :* )
106
-
107
- erb :databases,
108
- :locals => {
109
- :subsystem => subsystem,
110
- :databases => databases,
111
- }
112
- end
113
-
114
-
115
- get '/listeners' do
116
- subsystem = @monitor.cn( :listeners )
117
- listeners = subsystem.
118
- filter( :objectClass => :monitoredObject ).
119
- select( :+, :* )
120
-
121
- erb :listeners,
122
- :locals => {
123
- :subsystem => subsystem,
124
- :listeners => listeners,
125
- }
126
- end
127
-
128
-
129
- ### Fallback handler for subsystems
130
- get '/:subsystem' do
131
- subsystem = @monitor.cn( params[:subsystem] )
132
- contents = subsystem.
133
- filter( :objectClass => :monitoredObject ).
134
- select( :+, :* )
135
-
136
- erb :dump_subsystem,
137
- :locals => {
138
- :subsystem => subsystem,
139
- :contents => contents,
140
- }
141
- end
142
-
143
-
@@ -1,328 +0,0 @@
1
- /* @override http://gont.ljc.laika.com:9191/css/master.css */
2
-
3
- /*
4
- * LDAP Web Monitor Stylesheet
5
- *
6
- * Authors:
7
- * * Michael Granger <mgranger@laika.com>
8
- *
9
- */
10
-
11
- /* @group Entity styles */
12
- html {
13
- font: 14px/1.4em "Helvetica Neue", Verdana, sans-serif;
14
- margin: 0;
15
- padding: 0;
16
- text-align: left;
17
- line-height: 1.5em;
18
- border-left: 2px solid #908558;
19
- min-height: 100%;
20
- background-color: #a8a8a9;
21
- }
22
-
23
- body {
24
- background: #f0f0f2;
25
- margin: 0;
26
- min-width: 620px;
27
- }
28
-
29
- h1,h2,h3,h4,h5,h6 {
30
- margin-top: 1em;
31
- margin-bottom: 0;
32
- color: #333;
33
- font-weight: bold;
34
- }
35
-
36
- h1 {
37
- font-family: "Helvetica Neue UltraLight", sans-serif;
38
- font-size: 340%;
39
- text-shadow: 1px 1px 2px #666;
40
- padding-bottom: 0.25em;
41
- border-bottom: 1px solid #3f6217;
42
- margin-top: 0;
43
- }
44
-
45
- h2 {
46
- font-family: "Helvetica Neue Condensed Bold", Verdana, sans-serif;
47
- font-size: 180%;
48
- }
49
-
50
- h3 {
51
- font-size: 120%;
52
- border-left: 1em solid;
53
- padding-left: 0.5em;
54
- }
55
-
56
- h4 {
57
- font-size: 110%;
58
- }
59
-
60
- h5 {
61
- font-variant: small-caps;
62
- }
63
-
64
- h6 {
65
- font-style: italic;
66
- }
67
-
68
- input, textarea, button, select {
69
- font: 12px/1.2em "Helvetica Neue Condensed Bold", Verdana, sans-serif;
70
- padding: 1px;
71
- border: 1px solid #CDCABD;
72
- background: #E5E1D2;
73
- color: #3a3a2b;
74
- }
75
- textarea {
76
- width: 100%;
77
- }
78
- textarea.code {
79
- font: 12px/1.2em "Vera Sans Mono", monospace;
80
- }
81
-
82
- input:focus, textarea:focus, select:focus, button:focus {
83
- background: #AED5E3;
84
- border: 1px solid #6894B4;
85
- }
86
-
87
- input[type=submit], input[type=reset], button {
88
- cursor: pointer;
89
- }
90
-
91
- input[type=submit]:hover, input[type=reset]:hover, button:hover {
92
-
93
- }
94
-
95
- button {
96
- font-size: 1.1em;
97
- padding: 0.2em 1em;
98
- -webkit-border-radius: 5px;
99
- -moz-border-radius: 5px;
100
- border-color: #918474;
101
- -webkit-box-shadow: 1px 1px 2px rgba(35,35,35,0.4);
102
- box-shadow: 1px 1px 2px #333;
103
- }
104
-
105
- form {
106
- margin: 0 auto;
107
- background: #FAF8F1;
108
- border: none;
109
- padding: 0.4em 1em;
110
- -webkit-border-radius: 5px;
111
- -moz-border-radius: 5px;
112
- -webkit-box-shadow: 1px 1px 5px rgba(55,55,55,0.4);
113
- -moz-box-shadow: 1px 1px 5px 2px #999;
114
- }
115
-
116
- fieldset {
117
- margin: 0.2em auto;
118
- border: none;
119
- }
120
-
121
- legend {
122
- font-weight: bold;
123
- color: #616253;
124
- font-size: 140%;
125
- }
126
-
127
- fieldset.nodisplay {
128
- border: 0;
129
- margin: 0;
130
- background: inherit;
131
- -webkit-box-shadow: none;
132
- }
133
-
134
- fieldset.nodisplay legend {
135
- display: none;
136
- }
137
-
138
- a {
139
- color: #3f6217;
140
- font-weight: bold;
141
- text-decoration: none;
142
- border-bottom: 1px dotted;
143
- }
144
-
145
- th a {
146
- color: inherit;
147
- }
148
-
149
- a:visited {
150
- color: #3a3a2b;
151
- }
152
-
153
- a:hover {
154
- border-bottom: 1px solid;
155
- }
156
-
157
- a:hover img {
158
- border: 0;
159
- }
160
-
161
- ul {
162
- padding-left: 25px;
163
- }
164
-
165
- ul li {
166
- padding-left: 0;
167
- margin-left: 0;
168
- }
169
-
170
- img {
171
- border: 0;
172
- }
173
-
174
- table caption {
175
- margin: 15px 5px 0;
176
- font-size: 10px;
177
- padding: 5px 0 2px;
178
- }
179
-
180
- table {
181
- border-collapse: collapse;
182
- margin: 1em 0;
183
- -webkit-box-shadow: 1px 1px 5px rgba(25,25,25,0.7);
184
- box-shadow: 1px 1px 5px #333;
185
- }
186
- table thead,
187
- table tbody {
188
- border: 1px solid #c1c1c1;
189
- }
190
- table th {
191
- vertical-align: bottom;
192
- text-align: center;
193
- }
194
- table.horizontal tbody th {
195
- vertical-align: top;
196
- text-align: right;
197
- }
198
- table td {
199
- padding: 2px 0.5em;
200
- vertical-align: top;
201
- }
202
- table td.numeric {
203
- text-align: right;
204
- }
205
- table td.icon {
206
- vertical-align: top;
207
- text-align: center;
208
- }
209
- table td.icon img {
210
- margin: 0 auto;
211
- }
212
-
213
- table th {
214
- padding: 1px 0.5em;
215
- }
216
- table th.odd {
217
- background-color: #f6f6f6;
218
- }
219
- table th.even {
220
- background-color: #e5e5e5;
221
- }
222
-
223
- table tr.odd {
224
- background-color: #f6ecbf;
225
- }
226
- table tr.odd td.even {
227
- background-color: #e6ddb2;
228
- }
229
- table tr.even {
230
- background-color: #decda8;
231
- }
232
- table tr.even td.even {
233
- background-color: #c8b897;
234
- }
235
-
236
- dl {
237
-
238
- }
239
-
240
- dt {
241
- font-weight: bold;
242
- border-bottom: 1px solid #999;
243
- color: #3f6217;
244
- }
245
-
246
- dt a {
247
- border: none;
248
- color: inherit;
249
- }
250
-
251
- dd {
252
- margin: 0;
253
- }
254
-
255
- dd + dt {
256
- margin-top: 1em;
257
- }
258
-
259
- p code, li code, dd code {
260
- color: #333;
261
- background-color: #e4e0d2;
262
- border: 1px dotted #acaa92;
263
- }
264
-
265
- pre code {
266
- color: inherit;
267
- background-color: transparent;
268
- border: none;
269
- }
270
-
271
- /* @end */
272
-
273
- /* @group IDed page elements */
274
-
275
- #content {
276
- position: relative;
277
- z-index: 0;
278
- padding: 4em;
279
- }
280
-
281
- #homelink {
282
- position: absolute;
283
- top: 4em;
284
- right: 4em;
285
- }
286
-
287
- #footer {
288
- font-size: 0.8em;
289
- background: url(../images/shadows/large-30-down.png) repeat-x 0 bottom;
290
- margin: 0;
291
- padding: 3em 2em 1em;
292
- }
293
-
294
- #footer p {
295
- margin: 0;
296
- }
297
-
298
- table#connection-list {
299
- font-size: 0.9em;
300
- }
301
-
302
- /* @end */
303
-
304
-
305
- /* @group classed page elements */
306
-
307
- .dn, .oid, .uri, .socket {
308
- padding-left: 18px;
309
- padding-right: 0.2em;
310
- background-color: #e8d9b7;
311
- border: 1px solid #a38e2b;
312
- -webkit-border-radius: 5px;
313
- }
314
- .dn {
315
- background: url(../images/chain_small.png) no-repeat 2px;
316
- }
317
- .oid {
318
- background: url(../images/card_small.png) no-repeat 2px;
319
- }
320
- .uri {
321
- background: url(../images/globe_small_green.png) no-repeat 2px;
322
- }
323
- .socket {
324
- padding-left: 22px;
325
- background: url(../images/plug.png) no-repeat 4px;
326
- }
327
-
328
- /* @end */