Class OpenWFE::Extras::ActivityFeedService
In: lib/openwfe/extras/misc/activityfeed.rb
Parent: Object

This feed registers as an observer to the ParticipantMap. Each time a workitem is delivered to a participant or comes back from/for it, an AtomEntry is generated. The get_feed() method produces an atom feed of participant activity.

Methods

Included Modules

OpenWFE::ServiceMixin OpenWFE::OwfeServiceLocator

Attributes

max_item_count  [RW] 

Public Class methods

This service is generally tied to an engine by doing :

    engine.init_service 'activityFeed', ActivityFeedService

The init_service() will take care of calling the constructor implemented here.

[Source]

     # File lib/openwfe/extras/misc/activityfeed.rb, line 110
110:         def initialize (service_name, application_context)
111: 
112:             super()
113: 
114:             service_init service_name, application_context
115: 
116:             @entries = []
117:             @max_item_count = 100
118: 
119:             get_participant_map.add_observer ".*", self
120:         end

Public Instance methods

This is the method call by the expression pool each time a workitem reaches a participant.

[Source]

     # File lib/openwfe/extras/misc/activityfeed.rb, line 126
126:         def call (channel, *args)
127: 
128:             ldebug "call() c '#{channel}' entries count : #{@entries.size}"
129: 
130:             e = Entry.new
131: 
132:             e.participant_name = channel
133:             e.upon = args[0]
134:             e.workitem = args[1].dup
135: 
136:             e.id = \
137:                 "#{e.workitem.participant_name} - #{e.upon} " +
138:                 "#{e.workitem.fei.workflow_instance_id}--" +
139:                 "#{e.workitem.fei.expression_id}"
140: 
141:             @entries << e
142: 
143:             @entries = @entries[0, @max_item_count] \
144:                 if @entries.length > @max_item_count
145:         end

Returns an Atom feed of all the workitem activity for the participants whose name matches the given regular expression.

Options :

:upon
can be set to either nil, :apply, :reply. :apply states that the returned feed should only contain entries about participant getting applied, :reply only about participant replying.
:feed_uri
the URI for the feed. Defaults to ‘localhost/feed
:feed_title
the title for the feed. Defaults to ‘OpenWFEru engine activity feed‘
:format
yaml|text|json

[Source]

     # File lib/openwfe/extras/misc/activityfeed.rb, line 164
164:         def get_feed (participant_regex, options={})
165: 
166:             participant_regex = Regexp.compile(participant_regex) \
167:                 if participant_regex.is_a?(String)
168: 
169:             upon = options[:upon]
170:             feed_uri = options[:feed_uri] || "http://localhost/feed"
171:             title = options[:feed_title] || "OpenWFEru engine activity feed"
172: 
173:             feed = Atom::Collection.new feed_uri
174:             feed.title = title
175: 
176:             format = options[:format]
177:             format = validate_format(format)
178: 
179:             @entries.each do |e|
180: 
181:                 next unless participant_regex.match(e.participant_name)
182:                 next if upon and upon != e.upon
183: 
184:                 feed.updated = e.updated \
185:                     if feed.updated == nil or e.updated > feed.updated
186: 
187:                 feed << as_atom_entry(format, e)
188:             end
189: 
190:             feed
191:         end

Protected Instance methods

[Source]

     # File lib/openwfe/extras/misc/activityfeed.rb, line 206
206:             def as_atom_entry (render, entry)
207: 
208:                 send(
209:                     render, 
210:                     entry.as_atom_entry, 
211:                     entry.participant_name, 
212:                     entry.upon, 
213:                     entry.workitem)
214:             end

Renders the workitem as a JSON string.

[Source]

     # File lib/openwfe/extras/misc/activityfeed.rb, line 250
250:             def as_json (atom_entry, participant_name, upon, workitem)
251: 
252:                 atom_entry.title = "#{participant_name} - #{upon}"
253: 
254:                 atom_entry.content = workitem.to_json
255:                 atom_entry.content['type'] = "text/plain"
256: 
257:                 atom_entry
258:             end

A basic rendition of a workitem as text.

[Source]

     # File lib/openwfe/extras/misc/activityfeed.rb, line 237
237:             def as_text (atom_entry, participant_name, upon, workitem)
238: 
239:                 atom_entry.title = "#{participant_name} - #{upon}"
240: 
241:                 atom_entry.content = workitem.to_s
242:                 atom_entry.content['type'] = "text/plain"
243: 
244:                 atom_entry
245:             end

A basic rendition of a workitem as a YAML string

[Source]

     # File lib/openwfe/extras/misc/activityfeed.rb, line 219
219:             def as_yaml (atom_entry, participant_name, upon, workitem)
220: 
221:                 atom_entry.title = "#{participant_name} - #{upon}"
222:                 atom_entry.content = workitem.to_yaml
223:                 atom_entry.content['type'] = "text/plain"
224: 
225:                 atom_entry
226:             end

Makes sure the required ‘render’ is valid. Returns it as a Symbol.

[Source]

     # File lib/openwfe/extras/misc/activityfeed.rb, line 199
199:             def validate_format (f)
200: 
201:                 f = "as_#{f}"
202:                 return :as_yaml unless methods.include?(f)
203:                 f.to_sym
204:             end

[Validate]