/spreetail-javascript

Spreetail Coding Challenge

Primary LanguageJavaScript

MultiValueDictionary

MultiValueDictionary is a command-line interface which allows a user to manage in-memory key-member(s) pairings. It allows the user to perform a variety of different commands with the multi-value dictionary such as the following:

  • Add new key-member pairs
  • Add members to an existing key
  • Remove members from a pair
  • Remove keys
  • List all keys, members, or key-member pairings
  • Clear the multi-value dictionary
  • Check if a key or member of a key exists

Getting-Started

In order to use the application, you must first clone the repository to your local machine or download the zip file.

Prerequisites

You will preferably need the latest version of a text editor.

VSCode is my go to: https://code.visualstudio.com/

Installation

In your terminal clone the repository to your local machine using git clone:

git clone https://github.com/dbc257/spreetail-javascript.git

Move to your newly cloned repository by entering the following in your terminal:

cd spreetail-javascript && npm install

To run the app, enter the following in your terminal while still in the project directory:

npm start

Interacting with the Command-Line Interface

As mentioned above, there are a variety of commands a user can input to interact with the multi-value dictionary.

KEYS

Returns all the keys in the dictionary. Order is not guaranteed.

Example

> ADD foo bar
) Added
> ADD baz bang
) Added
> KEYS
1) foo
2) baz

MEMBERS

Returns the collection of strings for the given key. Return order is not guaranteed. Returns an error if the key does not exists.

Example:

> ADD foo bar
> ADD foo baz
> MEMBERS foo
1) bar
2) baz

> MEMBERS bad
) ERROR, key does not exist.

ADD

Adds a member to a collection for a given key. Displays an error if the member already exists for the key.

> ADD foo bar
) Added
> ADD foo baz
) Added
> ADD foo bar
) ERROR, member already exists for key

REMOVE

Removes a member from a key. If the last member is removed from the key, the key is removed from the dictionary. If the key or member does not exist, displays an error.

Example:

> ADD foo bar
) Added
> ADD foo baz
) Added

> REMOVE foo bar
) Removed
> REMOVE foo bar
) ERROR, member does not exist

> KEYS
1) foo

> REMOVE foo baz
) Removed

> KEYS
) empty set

> REMOVE boom pow
) ERROR, key does not exist

REMOVEALL

Removes all members for a key and removes the key from the dictionary. Returns an error if the key does not exist.

Example:

> ADD foo bar
) Added
> ADD foo baz
) Added
> KEYS
1) foo

> REMOVEALL foo
) Removed

> KEYS
(empty set)

REMOVEALL foo
) ERROR, key does not exist

CLEAR

Removes all keys and all members from the dictionary.

Example:

> ADD foo bar
) Added
> ADD bang zip
) Added
> KEYS
1) foo
2) bang

> CLEAR
) Cleared

> KEYS
(empty set)

> CLEAR
) Cleared

> KEYS
(empty set)

KEYEXISTS

Returns whether a key exists or not.

Example:

> KEYEXISTS foo
) false
> ADD foo bar
) Added
> KEYEXISTS foo
) true

MEMBEREXISTS

Returns whether a member exists within a key. Returns false if the key does not exist.

Example:

> MEMBEREXISTS foo bar
) false
> ADD foo bar
) Added
> MEMBEREXISTS foo bar
) true
> MEMBEREXISTS foo baz
) false

ALLMEMBERS

Returns all the members in the dictionary. Returns nothing if there are none. Order is not guaranteed.

Example:

> ALLMEMBERS
(empty set)
> ADD foo bar
) Added
> ADD foo baz
) Added
> ALLMEMBERS
1) bar
2) baz
> ADD bang bar
) Added
> ADD bang baz
> ALLMEMBERS
1) bar
2) baz
3) bar
4) baz

ITEMS

Returns all keys in the dictionary and all of their members. Returns nothing if there are none. Order is not guaranteed.

Example:

> ITEMS
(empty set)
> ADD foo bar
) Added
> ADD foo baz
) Added
> ITEMS
1) foo: bar
2) foo: baz
> ADD bang bar
) Added
> ADD bang baz
> ITEMS
1) foo: bar
2) foo: baz
3) bang: bar
4) bang: baz

HELP

Displays a list of the available commands for the app.

ADD foo bar      KEYS                    MEMBERS foo
REMOVE foo bar   REMOVEALL foo           CLEAR
KEYEXISTS foo    MEMBEREXISTS foo bar    ALLMEMBERS
ITEMS            MAP                     HELP
EXIT

MAP

Displays the JavaScript Map used for the dictionary.

dictionary:  Map(1) { 'foo' => [ 'bar', 'baz' ] }

EXIT

Exits out of the command-line interface.