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 )::SubscriberCreates a Subscriber.
Example
julia> using RbO
julia> mickey = createSubscriber( "Micky Mouse" );createSubscriber( name::String, email::String )::SubscriberCreates 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 )::SubscriberCreates 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 )::SubscriberUpdate 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 )::PublisherCreates 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 )::PublisherReturns 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 )::PublisherUpdate 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 )::PublisherAdds 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 )::PublisherRemoves 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})::MessageCreate 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]