1Object::Pluggable::PipeUlsienre(C3o)ntributed Perl DocumOebnjteactti:o:nPluggable::Pipeline(3)
2
3
4
6 Object::Pluggable::Pipeline - The plugin pipeline for
7 Object::Pluggable.
8
10 use Object::Pluggable;
11 use Object::Pluggable::Pipeline;
12 use My::Plugin;
13
14 my $self = Object::Pluggable->new();
15
16 # the following operations are presented in pairs
17 # the first is the general procedure, the second is
18 # the specific way using the pipeline directly
19
20 # to install a plugin
21 $self->plugin_add(mine => My::Plugin->new);
22 $self->pipeline->push(mine => My::Plugin->new);
23
24 # to remove a plugin
25 $self->plugin_del('mine'); # or the object
26 $self->pipeline->remove('mine'); # or the object
27
28 # to get a plugin
29 my $plug = $self->plugin_get('mine');
30 my $plug = $self->pipeline->get('mine');
31
32 # there are other very specific operations that
33 # the pipeline offers, demonstrated here:
34
35 # to get the pipeline object itself
36 my $pipe = $self->pipeline;
37
38 # to install a plugin at the front of the pipeline
39 $pipe->unshift(mine => My::Plugin->new);
40
41 # to remove the plugin at the end of the pipeline
42 my $plug = $pipe->pop;
43
44 # to remove the plugin at the front of the pipeline
45 my $plug = $pipe->shift;
46
47 # to replace a plugin with another
48 $pipe->replace(mine => newmine => My::Plugin->new);
49
50 # to insert a plugin before another
51 $pipe->insert_before(mine => newmine => My::Plugin->new);
52
53 # to insert a plugin after another
54 $pipe->insert_after(mine => newmine => My::Plugin->new);
55
56 # to get the location in the pipeline of a plugin
57 my $index = $pipe->get_index('mine');
58
59 # to move a plugin closer to the front of the pipeline
60 $pipe->bump_up('mine');
61
62 # to move a plugin closer to the end of the pipeline
63 $pipe->bump_down('mine');
64
66 Object::Pluggable::Pipeline defines the Plugin pipeline system for
67 Object::Pluggable instances.
68
70 "new"
71 Takes one argument, the Object::Pluggable object to attach to.
72
73 "push"
74 Takes at least two arguments, an alias for a plugin and the plugin
75 object itself. Any extra arguments will be passed to the register
76 method of the plugin object. If a plugin with that alias already
77 exists, $@ will be set and "undef" will be returned. Otherwise, it adds
78 the plugin to the end of the pipeline and registers it. This will yield
79 a "plugin_add" event. If successful, it returns the size of the
80 pipeline.
81
82 my $new_size = $pipe->push($name, $plug, @register_args);
83
84 "unshift"
85 Takes at least two arguments, an alias for a plugin and the plugin
86 object itself. Any extra arguments will be passed to the register
87 method of the plugin object. If a plugin with that alias already
88 exists, $@ will be set and "undef" will be returned. Otherwise, it adds
89 the plugin to the beginning of the pipeline and registers it. This will
90 yield a "plugin_add" event. If successful, it returns the size of the
91 pipeline.
92
93 my $new_size = $pipe->push($name, $plug, @register_args);
94
95 "shift"
96 Takes any number of arguments. The first plugin in the pipeline is
97 removed. Any arguments will be passed to the unregister method of the
98 plugin object. This will yield a "plugin_del" event. In list context,
99 it returns the plugin and its alias; in scalar context, it returns only
100 the plugin. If there were no elements, an empty list or "undef" will be
101 returned.
102
103 my ($plug, $name) = $pipe->shift(@unregister_args);
104 my $plug = $pipe->shift(@unregister_args);
105
106 "pop"
107 Takes any number of arguments. The last plugin in the pipeline is
108 removed. Any arguments will be passed to the unregister method of the
109 plugin object. This will yield an "plugin_del" event. In list context,
110 it returns the plugin and its alias; in scalar context, it returns only
111 the plugin. If there were no elements, an empty list or "undef" will be
112 returned.
113
114 my ($plug, $name) = $pipe->pop(@unregister_args);
115 my $plug = $pipe->pop(@unregister_args);
116
117 "replace"
118 Takes at least three arguments, the old plugin or its alias, an alias
119 for the new plugin and the new plugin object itself. You can optionally
120 pass two array references of arguments which will be delivered to the
121 unregister method of the old plugin and the register method of the new
122 plugin, respectively. If you only want to pass the latter, you can put
123 "undef" in place of the former. If the old plugin doesn't exist, or if
124 there is already a plugin with the new alias (besides the old plugin),
125 $@ will be set and "undef" will be returned. Otherwise, it removes the
126 old plugin (yielding an "plugin_del" event) and replaces it with the
127 new plugin. This will yield an "plugin_add" event. If successful, it
128 returns 1.
129
130 my $success = $pipe->replace($name, $new_name, $new_plug, \@unregister_args, \@register_args);
131 my $success = $pipe->replace($plug, $new_name, $new_plug, \@unregister_args, \@register_args);
132
133 "insert_before"
134 Takes at least three arguments, the plugin that is relative to the
135 operation, an alias for the new plugin and the new plugin object
136 itself. Any extra arguments will be passed to the register method of
137 the new plugin object. If the first plugin doesn't exist, or if there
138 is already a plugin with the new alias, $@ will be set and "undef" will
139 be returned. Otherwise, the new plugin is placed just prior to the
140 other plugin in the pipeline. If successful, it returns 1.
141
142 my $success = $pipe->insert_before($name, $new_name, $new_plug, @register_args);
143 my $success = $pipe->insert_before($plug, $new_name, $new_plug, @register_args);
144
145 "insert_after"
146 Takes at least three arguments, the plugin that is relative to the
147 operation, an alias for the new plugin and the new plugin object
148 itself. any extra arguments will be passed to the register method of
149 the new plugin object. If the first plugin doesn't exist, or if there
150 is already a plugin with the new alias, $@ will be set and "undef" will
151 be returned. Otherwise, the new plugin is placed just after to the
152 other plugin in the pipeline. If successful, it returns 1.
153
154 my $success = $pipe->insert_after($name, $new_name, $new_plug, @register_args);
155 my $success = $pipe->insert_after($plug, $new_name, $new_plug, @register_args);
156
157 "bump_up"
158 Takes one or two arguments, the plugin or its alias, and the distance
159 to bump the plugin. The distance defaults to 1. If the plugin doesn't
160 exist, $@ will be set and -1 will be returned, not undef. Otherwise,
161 the plugin will be moved the given distance closer to the front of the
162 pipeline. A warning is issued alerting you if it would have been moved
163 past the beginning of the pipeline, and the plugin is placed at the
164 beginning. If successful, the new index of the plugin in the pipeline
165 is returned.
166
167 my $pos = $pipe->bump_up($name);
168 my $pos = $pipe->bump_up($plug);
169 my $pos = $pipe->bump_up($name, $delta);
170 my $pos = $pipe->bump_up($plug, $delta);
171
172 "bump_down"
173 Takes one or two arguments, the plugin or its alias, and the distance
174 to bump the plugin. The distance defaults to 1. If the plugin doesn't
175 exist, $@ will be set and -1 will be returned, not "undef". Otherwise,
176 the plugin will be moved the given distance closer to the end of the
177 pipeline. A warning is issued alerting you if it would have been moved
178 past the end of the pipeline, and the plugin is placed at the end. If
179 successful, the new index of the plugin in the pipeline is returned.
180
181 my $pos = $pipe->bump_down($name);
182 my $pos = $pipe->bump_down($plug);
183 my $pos = $pipe->bump_down($name, $delta);
184 my $pos = $pipe->bump_down($plug, $delta);
185
186 "remove"
187 Takes at least one argument, a plugin or its alias. Any arguments will
188 be passed to the unregister method of the plugin object. If the plugin
189 doesn't exist, $@ will be set and "undef" will be returned. Otherwise,
190 the plugin is removed from the pipeline. This will yield an
191 "plugin_del" event. In list context, it returns the plugin and its
192 alias; in scalar context, it returns only the plugin.
193
194 my ($plug, $name) = $pipe->remove($the_name, @unregister_args);
195 my ($plug, $name) = $pipe->remove($the_plug, @unregister_args);
196 my $plug = $pipe->remove($the_name, @unregister_args);
197 my $plug = $pipe->remove($the_plug, @unregister_args);
198
199 "get"
200 Takes one argument, a plugin or its alias. If no such plugin exists, $@
201 will be set and "undef" will be returned. In list context, it returns
202 the plugin and its alias; in scalar context, it returns only the
203 plugin.
204
205 my ($plug, $name) = $pipe->get($the_name);
206 my ($plug, $name) = $pipe->get($the_plug);
207 my $plug = $pipe->get($the_name);
208 my $plug = $pipe->get($the_plug);
209
210 "get_index"
211 Takes one argument, a plugin or its alias. If no such plugin exists, $@
212 will be set and -1 will be returned, not "undef". Otherwise, the index
213 in the pipeline is returned.
214
215 my $pos = $pipe->get_index($name);
216 my $pos = $pipe->get_index($plug);
217
219 None known so far.
220
222 Jeff "japhy" Pinyan, japhy@perlmonk.org.
223
225 Chris "BinGOs" Williams, chris@bingosnet.co.uk.
226
228 Object::Pluggable.
229
230 POE::Component::IRC,
231
232
233
234perl v5.38.0 2023-07-21 Object::Pluggable::Pipeline(3)