API methods

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

Domain objects

SubscriberType values

PublisherType values

createSubscriber

RbO.createSubscriberFunction.
createSubscriber( name::String )::Subscriber

Creates a Subscriber.

Example

julia> using RbO

julia> mickey = createSubscriber( "Micky Mouse" );
source
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)
source
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 );
source

updateSubscriber

RbO.updateSubscriberFunction.
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)
source

createPublisher

RbO.createPublisherFunction.
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" );
source
createPublisher( name::String, publishertype::PublisherType )::Publisher

Returns a Publisher object.

Example

julia> using RbO

julia> chronicals = createPublisher( "the Duck Chronicals", MAGAZINE );
source

updatePublisher

RbO.updatePublisherFunction.
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[])
source

subscribe

RbO.subscribeFunction.
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)])
source

unsubscribe

RbO.unsubscribeFunction.
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[])
source
Note

Publisher is an immutable object. 'unscubscribe' creates a new Publisher object, and is reassigned to the variable 'chronicals'.

createMessage

RbO.createMessageFunction.
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] );
source

updateMessage

RbO.updateMessageFunction.
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])
source

sendMessage

RbO.sendMessageFunction.
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]
source