mmonad 0.0.0.pre → 0.0.1.p2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +94 -0
- data/lib/m_monad.rb +1 -3
- data/lib/version.rb +3 -3
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb11907403ea9a8b1c443a69142b5aebe3439b5f
|
4
|
+
data.tar.gz: 625206acc0e8a2286e74b825e0d8b637ed549e94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f9eb8e439dd2f927c5add0b869c9386008b8e493b422df218e9bcf172339e98ff86d72196d068dc57c08d4f9937362c7351cf919e2a53102900a6c44363f4ec
|
7
|
+
data.tar.gz: cb385b6e5914a84954e67d634637bdaee863e368a773db838e0db0018fc2f7409885d49bb442fac5ed0a7281fa14c1b0d6a3c5fab8d2e47561aa69df69ff8669
|
data/README.md
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
[](https://badge.fury.io/rb/mmonad)
|
2
|
+
[](https://circleci.com/gh/Jared-Prime/mmonad)
|
3
|
+
|
4
|
+
# MMonad
|
5
|
+
|
6
|
+
Messaging Monad, backed by 0MQ
|
7
|
+
|
8
|
+
## Purpose
|
9
|
+
|
10
|
+
`MMonad` provides a DSL for sending and receiving messages through 0MQ sockets.
|
11
|
+
|
12
|
+
## Installation Requirements
|
13
|
+
|
14
|
+
1. 0MQ
|
15
|
+
- `libzmq` ZeroMQ core engine in C++, implements ZMTP/3.0 https://github.com/zeromq/libzmq
|
16
|
+
- `czmq` High-level C binding for ØMQ https://github.com/zeromq/czmq
|
17
|
+
2. Ruby
|
18
|
+
- `2.4.2` minimum supported. [`rbenv` is the recommended Ruby install tool](https://github.com/rbenv/rbenv#installation)
|
19
|
+
3. Docker https://store.docker.com/search?offering=community&type=edition (optional, but highly recommended)
|
20
|
+
|
21
|
+
Users with a Docker installation will find the first two requirements met by using the published image layer at https://hub.docker.com/r/jprime/mmonad
|
22
|
+
|
23
|
+
## Contributions & Licensing
|
24
|
+
|
25
|
+
User contributions are welcome and subject to the [CONTRIBUTING](https://github.com/Jared-Prime/mmonad/blob/master/CONTRIBUTING) guide. All code made available under [AGPL-3.0](https://github.com/Jared-Prime/mmonad/blob/master/LICENSE).
|
26
|
+
|
27
|
+
## Project Specifications
|
28
|
+
|
29
|
+
`MMonad` makes two interfaces available to Ruby programmers: (1) the `MMonad::Agent` and (2) the `MMonad::Client`. These interfaces are provided as modules. Users `extend` a class with the chosen interface, supplying specific behaviors via the DSL.
|
30
|
+
|
31
|
+
DSL for _data-processing_ nodes:
|
32
|
+
|
33
|
+
- `MMonad::Agent`
|
34
|
+
- `.socket` specifies underlying socket or address for networking
|
35
|
+
- `.pattern` specifies the 0MQ socket pattern for message delivery
|
36
|
+
- `.process` specifies the programmer's steps for message ingestion and/or transformation
|
37
|
+
- `.exceptions` specifies the programmer's custom error handling behavior
|
38
|
+
- `.run` initiates the data-processing loop with the above DSL specifications, blocking on the thread
|
39
|
+
|
40
|
+
DSL for _data-passing_ nodes:
|
41
|
+
|
42
|
+
- `MMonad::Client`
|
43
|
+
- `.endpoint` specifies the underlying socket or address for networking
|
44
|
+
- `.pattern` specifies the 0MQ socket pattern for message passing
|
45
|
+
- `.response` specifies the programmer's steps for response parsing
|
46
|
+
- `.timeout` specifies how long to wait on a socket for a response
|
47
|
+
- `.message` accepts a Hash to pass along the 0MQ socket as data
|
48
|
+
|
49
|
+
The structure of the `Mmonad` DSL has been designed such that projects using the `gem` need only focus on their specific business logic, leaving all the generic 0MQ pattern implementation to this project. The examples below demonstrate how projects using `mmonad` focus on their own business logic.
|
50
|
+
|
51
|
+
## Examples
|
52
|
+
|
53
|
+
Each example below has a corresponding feature test. See the feature test directory for basic testing strategies. See the `MMonad::Pattern::LIBRARY` for currently supported patterns.
|
54
|
+
|
55
|
+
### Synchronous Request / Reply
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
class MyAgent
|
59
|
+
extend MMonad::Agent
|
60
|
+
|
61
|
+
socket 'tcp://0.0.0.0:5678'
|
62
|
+
pattern :reply
|
63
|
+
|
64
|
+
process do |message|
|
65
|
+
puts "got a message: #{message}"
|
66
|
+
|
67
|
+
{ business_reply: "Business is great!" }
|
68
|
+
end
|
69
|
+
|
70
|
+
exceptions do |exception|
|
71
|
+
{ business_reply: "This is not good for business: #{exception}" }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class MyClient
|
76
|
+
extend MMonad::Client
|
77
|
+
|
78
|
+
endpoint 'tcp://localhost:5678'
|
79
|
+
pattern :request
|
80
|
+
|
81
|
+
timeout 5 # seconds
|
82
|
+
|
83
|
+
response do |message|
|
84
|
+
puts "got a response: #{message}"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
Thread.new { MyAgent.run }
|
89
|
+
|
90
|
+
MyClient << { customer_message: "How is business?" }
|
91
|
+
|
92
|
+
#=> got a message: { "customer_message" => "How is business?" }
|
93
|
+
#=> got a response: { "business_reply" => "Business is great!" }
|
94
|
+
```
|
data/lib/m_monad.rb
CHANGED
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mmonad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1.p2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler-audit
|
@@ -129,6 +129,7 @@ extensions: []
|
|
129
129
|
extra_rdoc_files: []
|
130
130
|
files:
|
131
131
|
- LICENSE
|
132
|
+
- README.md
|
132
133
|
- lib/m_monad.rb
|
133
134
|
- lib/m_monad/agent.rb
|
134
135
|
- lib/m_monad/client.rb
|
@@ -142,6 +143,7 @@ post_install_message:
|
|
142
143
|
rdoc_options: []
|
143
144
|
require_paths:
|
144
145
|
- lib
|
146
|
+
- lib/m_monad
|
145
147
|
required_ruby_version: !ruby/object:Gem::Requirement
|
146
148
|
requirements:
|
147
149
|
- - ">="
|