API methods
I have taken the Observer Pattern as the goal to implement the project. The main objects are Publisher and Subscriber. The Publisher delivers a message to the Subscribers. The information consists of temperatures that were measured.
Exports
API methods
- createSubscriber, createPublisher, createMessage, sendMessage
Domain objects
- Subscriber, Publisher, Message
SubscriberType values
- MEAN_CALCULATOR, STD_CALCULATOR, PLOTTER
PublisherType values
- NEWSPAPER, MAGAZINE, SOCIAL_MEDIA
createSubscriber
RbO.createSubscriber
— Function.createSubscriber( name::String )::Subscriber
Creates a Subscriber.
Example
julia> using RbO
julia> mickey = createSubscriber( "Micky Mouse" );
createSubscriber( name::String, email::String )::Subscriber
Creates a Subscriber with an e-mail address.
Example
julia> using RbO
julia> createSubscriber( "Daisy Mouse", "daisy@duckcity.com" )
Subscriber("12318486163220258938", "Daisy Mouse", "daisy@duckcity.com", MEAN_CALCULATOR::SubscriberType = 0)
createSubscriber( name::String, email::String, subscribertype::SubscriberType )::Subscriber
Creates a Subscriber with a name, an e-mail address, and SubscriberType.
Example
julia> using RbO
julia> scrooge = createSubscriber( "Scrooge McDuck", "scrooge@duckcity.com", PLOTTER );
updateSubscriber
RbO.updateSubscriber
— Function.updateSubscriber( subscriber::Subscriber, name::String, email::String, subscribertype::SubscriberType )::Subscriber
Update a Subscriber. Empty strings ("") don't modify the data. subscribertype should always be specified.
Example
julia> using RbO
julia> daisy = createSubscriber( "Daisy" )
Subscriber("16587901847852633888", "Daisy", "", MEAN_CALCULATOR::SubscriberType = 0)
julia> daisy = updateSubscriber(daisy, "Daisy Mouse", "daisy@duckcity.com", daisy.subscribertype )
Subscriber("16587901847852633888", "Daisy Mouse", "daisy@duckcity.com", MEAN_CALCULATOR::SubscriberType = 0)
createPublisher
RbO.createPublisher
— Function.createPublisher( name::String )::Publisher
Creates a Publisher.
Examples
julia> using RbO
julia> nyt = createPublisher("")::Publisher
ERROR: MissingException: Publisher name is mandatory
julia> nyt = createPublisher( "The New York Times" );
createPublisher( name::String, publishertype::PublisherType )::Publisher
Returns a Publisher object.
Example
julia> using RbO
julia> chronicals = createPublisher( "the Duck Chronicals", MAGAZINE );
updatePublisher
RbO.updatePublisher
— Function.updatePublisher( publisher::Publisher, name::String, publishertype::PublisherType )::Publisher
Update a Publisher. Empty strings ("") don't modify the data. '''publishertype''' should always be specified.
Example
julia> using RbO
julia> nyt = createPublisher( "New York times" )
Publisher("9842848910504957757", "New York times", NEWSPAPER::PublisherType = 0, Subscriber[])
julia> nyt = updatePublisher( nyt, "The New York Times", nyt.publishertype )
Publisher("9842848910504957757", "The New York Times", NEWSPAPER::PublisherType = 0, Subscriber[])
subscribe
RbO.subscribe
— Function.subscribe( p::Publisher, s::Subscriber )::Publisher
Adds a subscriber to the list with subscribers of a Publisher.
Example
julia> using RbO
julia> daisy = createSubscriber( "Daisy Mouse", "daisy@duckcity.com" )
Subscriber("12635951225266630417", "Daisy Mouse", "daisy@duckcity.com", MEAN_CALCULATOR::SubscriberType = 0)
julia> scrooge = createSubscriber( "Scrooge McDuck", "scrooge@duckcity.com", PLOTTER )
Subscriber("10413109711473660059", "Scrooge McDuck", "scrooge@duckcity.com", PLOTTER::SubscriberType = 2)
julia> chronicals = createPublisher( "the Duck Chronicals", MAGAZINE )
Publisher("3837529886997444322", "the Duck Chronicals", MAGAZINE::PublisherType = 1, Subscriber[])
julia> subscribe( chronicals, daisy )
Publisher("1914673065319653327", "the Duck Chronicals", MAGAZINE::PublisherType = 1, Subscriber[Subscriber("12635951225266630417", "Daisy Mouse", "daisy@duckcity.com", MEAN_CALCULATOR)])
julia> subscribe( chronicals, scrooge )
Publisher("13462719397894381475", "the Duck Chronicals", MAGAZINE::PublisherType = 1, Subscriber[Subscriber("12635951225266630417", "Daisy Mouse", "daisy@duckcity.com", MEAN_CALCULATOR), Subscriber("10413109711473660059", "Scrooge McDuck", "scrooge@duckcity.com", PLOTTER)])
unsubscribe
RbO.unsubscribe
— Function.unsubscribe( p::Publisher, s::Subscriber )::Publisher
Removes a subscriber from the list of subscribers of a Publisher,
Example
julia> using RbO
julia> mickey = createSubscriber( "Micky Mouse" )
Subscriber("3423088500793114972", "Micky Mouse", "", MEAN_CALCULATOR::SubscriberType = 0)
julia> chronicals = createPublisher( "the Duck Chronicals", MAGAZINE )
Publisher("17516499932697635194", "the Duck Chronicals", MAGAZINE::PublisherType = 1, Subscriber[])
julia> subscribe( chronicals, mickey )
Publisher("5230641724437552158", "the Duck Chronicals", MAGAZINE::PublisherType = 1, Subscriber[Subscriber("3423088500793114972", "Micky Mouse", "", MEAN_CALCULATOR)])
julia> chronicals = unsubscribe( chronicals, mickey )
Publisher("8395917352308977462", "the Duck Chronicals", MAGAZINE::PublisherType = 1, Subscriber[])
Publisher is an immutable object. 'unscubscribe' creates a new Publisher object, and is reassigned to the variable 'chronicals'.
createMessage
RbO.createMessage
— Function.createMessage(header::String, subject::String, body::Array{Float64, 1})::Message
Create a Message for the subscribers of a publisher.
Example
julia> using RbO
julia> message = createMessage( "Weather station", "Temperatures", [10.9, 12, 10.5, 12.7, 10.2] );
updateMessage
RbO.updateMessage
— Function.updateMessage( message::Message, header::String, subject::String, body::Array{Float64, 1})::Message
Update a Message. Empty strings ("") don't modify the data. '''body''' should always be specified.
#Example
julia> using RbO
julia> message = createMessage( "Wether station", "Temperatures", [10.9, 12, 10.5, 12.7, 10.2] )
Message("1941280172945521746", "Wether station", "Temperatures", [10.9, 12.0, 10.5, 12.7, 10.2])
julia> message = updateMessage( message, "Weather Station XYZ", "", message.body )
Message("1941280172945521746", "Weather Station XYZ", "Temperatures", [10.9, 12.0, 10.5, 12.7, 10.2])
sendMessage
RbO.sendMessage
— Function.sendMessage( n::Publisher, m::Message, f::Function )
Notifies subscribers of a Publisher.
Example
julia> using RbO, Statistics
julia> daisy = createSubscriber( "Daisy Mouse", "daisy@duckcity.com" );
julia> scrooge = createSubscriber( "Scrooge McDuck", "scrooge@duckcity.com", PLOTTER );
julia> chronicals = createPublisher( "the Duck Chronicals", MAGAZINE );
julia> subscribe( chronicals, daisy );
julia> subscribe( chronicals, scrooge );
julia> message = createMessage( "Weather station", "Temperatures", [10.9, 12, 10.5, 12.7, 10.2] );
julia> result = []
0-element Array{Any,1}
julia> processMessage( s::Subscriber, n::Publisher, m::Message ) = begin
if s.subscribertype == STD_CALCULATOR
println( s.name * ": the standard deviation of the last five temperatures is: " * string( round( std(m.body); digits=2) ) * " °C" )
elseif s.subscribertype == MEAN_CALCULATOR
println( s.name * ": the average of the last five temperatures is: " * string( mean( m.body ) ) * " °C" )
elseif s.subscribertype == PLOTTER
println( s.name * ": the dataset with the last five temperatures is: " * string( m.body ) )
global result = m.body
end
end
processMessage (generic function with 1 method)
julia> sendMessage( chronicals, message, processMessage )
Daisy Mouse: the average of the last five temperatures is: 11.26 °C
Scrooge McDuck: the dataset with the last five temperatures is: [10.9, 12.0, 10.5, 12.7, 10.2]