Class OpenWFE::Extras::AtomFeedParticipant
In: lib/openwfe/extras/participants/atomfeed_participants.rb
Parent: Object

Stores the incoming workitem into an ‘atom feed‘

An example :

    feed0 = AtomFeedParticipant.new(
        20,                          # no more than 20 entries are kept
        """
        <p>
            <h1>${f:colour}</h1>
        </p>
        """)                         # the template for each entry

The ‘template’ parameter may contain an instance of File instead of an instance of String.

    feed0 = AtomFeedParticipant.new(
        20, File.new("path/to/my/atom/template.txt")

The template can be passed as the second parameter (after the max entry count) or as a block :

    feed1 = AtomFeedParticipant.new(20) do |flow_expression, atom_participant, workitem|
        #
        # usually only the workitem parameter is used
        # but the other two allow for advanced tricks...

        atom_participant.content_type = "xml"
            # by default, it's "xhtml"

        s = "<task>"
        s << "<name>#{workitem.task_name}</name>"
        s << "<assignee>#{workitem.task_assignee}</assignee>"
        s << "<duedate>#{workitem.task_duedate}</duedate>"
        s << "</task>"

        # the block is supposed to 'return' a string which is the
        # effective template
    end

This participant uses "atom-tools" from code.necronomicorp.com/trac/atom-tools

Methods

consume   new   publish   render  

Included Modules

MonitorMixin LocalParticipant TemplateMixin

Attributes

content_type  [RW]  Made accessible so that blocks may set it.

Public Class methods

[Source]

     # File lib/openwfe/extras/participants/atomfeed_participants.rb, line 112
112:         def initialize (max_item_count, template=nil, &block)
113: 
114:             super() # very important as this class includes MonitorMixin
115: 
116:             @template = template
117:             @max_item_count = max_item_count
118:             @block_template = block
119: 
120:             @feed = Atom::Collection.new("http://localhost")
121:             @content_type = "xhtml"
122:         end

Public Instance methods

[Source]

     # File lib/openwfe/extras/participants/atomfeed_participants.rb, line 124
124:         def consume (workitem)
125: 
126:             e = Atom::Entry.new
127: 
128:             e.id = \
129:                 "#{workitem.fei.workflow_instance_id}--" +
130:                 "#{workitem.fei.expression_id}"
131: 
132:             e.title = workitem.atom_entry_title
133:             e.content = render(workitem)
134: 
135:             e.content["type"] = @content_type
136: 
137:             @feed << e
138: 
139:             @feed = @feed[0, @max_item_count] \
140:                 if @feed.length > @max_item_count
141: 
142:             publish workitem
143: 
144:             reply_to_engine workitem
145:         end

Protected Instance methods

For the moment, just dumps the feed into a file.

[Source]

     # File lib/openwfe/extras/participants/atomfeed_participants.rb, line 163
163:             def publish (workitem)
164:                 synchronize do
165:                     filename = "work/atom_#{workitem.participant_name}.xml"
166:                     f = File.open(filename, "w")
167:                     f << @feed.to_s
168:                     f.close()
169:                 end
170:             end

This base implementation simply calls the eval_template() method of the TemplateMixin. Feel free to override this render() method for custom representations.

[Source]

     # File lib/openwfe/extras/participants/atomfeed_participants.rb, line 155
155:             def render (workitem)
156: 
157:                 eval_template workitem
158:             end

[Validate]