piper-ruby 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -0
- data/lib/piper.rb +1 -0
- data/lib/piper/actor.rb +40 -0
- data/lib/piper/version.rb +1 -1
- data/test/simple_actor.rb +30 -0
- metadata +15 -12
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -20,8 +20,16 @@ This Piper client support publishing on [NATS](http://nats.io) as a means of
|
|
20
20
|
delivery if the NATS gem is installed. A flag is also provided to control which
|
21
21
|
method is used to deliver log messages to Piper.
|
22
22
|
|
23
|
+
The Piper::Actor module provides methods for receiving and responding to
|
24
|
+
JSON messages from tasks in the Piper process flows. The test/simple_actor.rb provides
|
25
|
+
an example of how to use the Piper::Actor module functions.
|
26
|
+
|
23
27
|
## Release Notes
|
24
28
|
|
29
|
+
### Release 1.2.0 - March 20, 2016
|
30
|
+
|
31
|
+
- Added the Piper::Actor module to support the Piper Push Cache process flows.
|
32
|
+
|
25
33
|
### Release 1.1.2 - December 9, 2015
|
26
34
|
|
27
35
|
- Removed an extranious 'z' character in the where field.
|
data/lib/piper.rb
CHANGED
data/lib/piper/actor.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
require 'oj'
|
3
|
+
|
4
|
+
module Piper
|
5
|
+
|
6
|
+
# Piper::Actor module provides a shell for a spawned Piper Push Cache task
|
7
|
+
# actor. Piper Push Cache supports process flows where the individual tasks in
|
8
|
+
# a flow can be implemented as a separate application that is spawned when it
|
9
|
+
# is needed. The spawned application is expected to continue to run and accept
|
10
|
+
# input on stdin. Output is over stdout. Both the input and output are JSON
|
11
|
+
# strings. This module takes care of the parsing and serialization.
|
12
|
+
#
|
13
|
+
# The JSON format for input is a JSON object with an 'id' field and a 'rec'
|
14
|
+
# field. The output expected is an 'id' field, 'rec' field, and a 'link' field
|
15
|
+
# that identifies the link to follow.
|
16
|
+
module Actor
|
17
|
+
|
18
|
+
# Starts a JSON processing loop that reads from $stdin. The proc provided
|
19
|
+
# with the call should call ship() to continue on with the processing.
|
20
|
+
def self.process()
|
21
|
+
Oj::load($stdin, :mode => :strict) { |json|
|
22
|
+
begin
|
23
|
+
id = json['id']
|
24
|
+
rec = json['rec']
|
25
|
+
yield(id, rec)
|
26
|
+
rescue Exception => e
|
27
|
+
ship(id, { 'kind' => 'Error', 'message' => e.message, 'class' => e.class.to_s }, 'error')
|
28
|
+
end
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
# Ships or sends a response to the calling task in the Piper Flow.
|
33
|
+
def self.ship(id, rec, link)
|
34
|
+
$stdout.puts Oj::dump({ 'id' => id, 'rec' => rec, 'link' => link }, :mode => :strict )
|
35
|
+
$stdout.flush()
|
36
|
+
end
|
37
|
+
|
38
|
+
end # Actor
|
39
|
+
end # Piper
|
40
|
+
|
data/lib/piper/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
$VERBOSE = true
|
5
|
+
|
6
|
+
$: << File.join(File.dirname(File.dirname(File.expand_path(__FILE__))), 'lib')
|
7
|
+
|
8
|
+
require 'piper'
|
9
|
+
require 'oj'
|
10
|
+
|
11
|
+
# Try executing this file and then typing in the string to the console
|
12
|
+
#
|
13
|
+
# {"id":"abc","rec":{"kind":"Test", "num":3}}
|
14
|
+
#
|
15
|
+
# The following should appear on stderr which is used for debugging.
|
16
|
+
#
|
17
|
+
# received - id: {id} rec: {"kind"=>"Test", "num"=>3, "link"=>"foo"}
|
18
|
+
#
|
19
|
+
# The response JSON should appear on stdout as:
|
20
|
+
#
|
21
|
+
# {"id":"abc","rec":{"kind":"Test","num":3,"link":"foo","wall":["I was here."]},"link":"foo"}
|
22
|
+
#
|
23
|
+
Piper::Actor::process() { |id,rec|
|
24
|
+
$stderr.puts "received - id: {id} rec: #{rec}"
|
25
|
+
|
26
|
+
rec['wall'] = [] if rec['wall'].nil?
|
27
|
+
rec['wall'] << "I was here."
|
28
|
+
|
29
|
+
Piper::Actor::ship(id, rec, rec['link'])
|
30
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: piper-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Peter Ohler
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2016-03-20 00:00:00.000000000 Z
|
12
13
|
dependencies: []
|
13
14
|
description: A Ruby management client to push JSON to Piper Push Cache.
|
14
15
|
email: peter@ohler.com
|
@@ -17,38 +18,40 @@ extensions: []
|
|
17
18
|
extra_rdoc_files:
|
18
19
|
- README.md
|
19
20
|
files:
|
20
|
-
-
|
21
|
-
- README.md
|
22
|
-
- lib/piper.rb
|
21
|
+
- lib/piper/actor.rb
|
23
22
|
- lib/piper/logrec.rb
|
24
23
|
- lib/piper/manager.rb
|
25
24
|
- lib/piper/version.rb
|
25
|
+
- lib/piper.rb
|
26
26
|
- test/pipe_test.rb
|
27
|
+
- test/simple_actor.rb
|
28
|
+
- LICENSE
|
29
|
+
- README.md
|
27
30
|
homepage: http://www.piperpushcache.com
|
28
31
|
licenses:
|
29
32
|
- MIT
|
30
|
-
metadata: {}
|
31
33
|
post_install_message:
|
32
34
|
rdoc_options:
|
33
|
-
-
|
35
|
+
- --main
|
34
36
|
- README.md
|
35
37
|
require_paths:
|
36
38
|
- lib
|
37
39
|
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
38
41
|
requirements:
|
39
|
-
- -
|
42
|
+
- - ! '>='
|
40
43
|
- !ruby/object:Gem::Version
|
41
44
|
version: '0'
|
42
45
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
43
47
|
requirements:
|
44
|
-
- -
|
48
|
+
- - ! '>='
|
45
49
|
- !ruby/object:Gem::Version
|
46
50
|
version: '0'
|
47
51
|
requirements: []
|
48
52
|
rubyforge_project: piper-ruby
|
49
|
-
rubygems_version:
|
53
|
+
rubygems_version: 1.8.23.2
|
50
54
|
signing_key:
|
51
|
-
specification_version:
|
55
|
+
specification_version: 3
|
52
56
|
summary: Management client for Piper Push Cache.
|
53
57
|
test_files: []
|
54
|
-
has_rdoc: true
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 157dbe77d354d635b57c0de330bf66b95a05824e
|
4
|
-
data.tar.gz: a9a6eba3c8fa827971e4e0822abef32e0267f21b
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: c19e72eaa0ec4eb3f8802910406b0b43a8f9f3a3353e43a73611635b6cb223c4085de1b4797edbff7319ab7d69ea94ff71840db83393edd26b313fb875724843
|
7
|
-
data.tar.gz: 77fa60d4c01db4ec8bc5858edd211deace1499d1ac27cf91608a0293c435f67c9ecefa4c224b786859e4cec27ba9d7a98bdacc65d3b3869ca33e7fb18dd58d10
|