piper-ruby 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +13 -0
- data/lib/piper/manager.rb +57 -0
- data/lib/piper/version.rb +4 -0
- data/lib/piper.rb +6 -0
- data/test/pipe_test.rb +58 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cfc1c00fe2695fa0f233af913096fedc63e00fe5
|
4
|
+
data.tar.gz: 0a218f8cc28a0019383d2aa7e7a8525bf20ed539
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 12aa9c159a8b4d6aef85db5b6c08124b5c8a073af68ba7ef3b960d1db0838ceae2ccd4553d1162faadccb0512696d313524b74378e85296b7dbf983a3862876a
|
7
|
+
data.tar.gz: 931b9df08582a5f6b3cdfc7259f12d7b46b170b36c9ae138b3cf9d33aafc876f44732f8ecd6c773078224731344de3086da6b07d3e78c1d2d9b1a49ef91068fb
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Peter Ohler
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
22
|
+
|
data/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# piper-push-ruby
|
2
|
+
A Ruby management client to push JSON to [Piper Push Cache](http://www.piperpushcache.com/index.html).
|
3
|
+
|
4
|
+
[Piper Push Cache](http://www.piperpushcache.com/index.html). is a websocket
|
5
|
+
based push cache. A JSON cache is maintained that can be updated via a REST HTTP
|
6
|
+
API or through alternative means. This cache is pushed through websockets to
|
7
|
+
browsers using a class and object based subscription protocol that mirrors the
|
8
|
+
objects in the REST API. Piper is also a simple web server.
|
9
|
+
|
10
|
+
Piper Push Ruby is a thin client that can be used to push JSON to
|
11
|
+
[Piper](http://www.piperpushcache.com/index.html). Raw JSON can be pushed to
|
12
|
+
Piper or Ruby Objects can be pushed and [Oj](http://www.ohler.com/oj) will be
|
13
|
+
used to convert those Objects into JSON using the compat mode.
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
require 'net/http'
|
3
|
+
require 'oj'
|
4
|
+
|
5
|
+
module Piper
|
6
|
+
|
7
|
+
# Piper::Manager is a simple class that is used to manage cached content in a
|
8
|
+
# Piper Push Cache server. It uses HTTP request in a REST pattern.
|
9
|
+
class Manager
|
10
|
+
|
11
|
+
attr_accessor :host
|
12
|
+
attr_accessor :port
|
13
|
+
|
14
|
+
def initialize(host, port)
|
15
|
+
@host = host
|
16
|
+
@port = port
|
17
|
+
end
|
18
|
+
|
19
|
+
# Pushes JSON to Piper and associates it with the provided record
|
20
|
+
# identifier.
|
21
|
+
# @param [String] rid record identifier
|
22
|
+
# @param [String] json JSON to store in Piper
|
23
|
+
# @return [Net::HTTP::Response] of the send request.
|
24
|
+
def push_json(rid, json)
|
25
|
+
h = Net::HTTP.new(@host, @port)
|
26
|
+
h.send_request('PUT', "/#{rid}", json, {'Content-Type' => 'text/plain; charset=utf-8'})
|
27
|
+
end
|
28
|
+
|
29
|
+
# Converts an object to JSON and then pushed that JSON to Piper and
|
30
|
+
# associates it with the provided record identifier.
|
31
|
+
# @param [String] rid record identifier
|
32
|
+
# @param [Object] object Object to convert to JSON before storing
|
33
|
+
# @return [Net::HTTP::Response] of the send request.
|
34
|
+
def push(rid, obj)
|
35
|
+
push_json(rid, Oj::dump(obj, mode: :compat))
|
36
|
+
end
|
37
|
+
|
38
|
+
# Deletes a record from the Piper cache.
|
39
|
+
# @param [String] rid record identifier of the record to delete
|
40
|
+
# @return [Net::HTTP::Response] of the send request.
|
41
|
+
def delete(rid)
|
42
|
+
h = Net::HTTP.new(@host, @port)
|
43
|
+
h.send_request('DELETE', "/#{rid}")
|
44
|
+
end
|
45
|
+
|
46
|
+
# Gets a record from the Piper cache. The JSON will be in the body of the
|
47
|
+
# response if successful.
|
48
|
+
# @param [String] rid record identifier of the record to get
|
49
|
+
# @return [Net::HTTP::Response] of the send request.
|
50
|
+
def get(rid)
|
51
|
+
h = Net::HTTP.new(@host, @port)
|
52
|
+
h.send_request('GET', "/#{rid}")
|
53
|
+
end
|
54
|
+
|
55
|
+
end # Manager
|
56
|
+
|
57
|
+
end # Piper
|
data/lib/piper.rb
ADDED
data/test/pipe_test.rb
ADDED
@@ -0,0 +1,58 @@
|
|
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 'minitest'
|
9
|
+
require 'minitest/autorun'
|
10
|
+
require 'piper'
|
11
|
+
|
12
|
+
$verbose = true
|
13
|
+
|
14
|
+
class PipeTest < Minitest::Test
|
15
|
+
|
16
|
+
# Steps need to be done in order since they modify and then inspect the remote
|
17
|
+
# piper cache.
|
18
|
+
#
|
19
|
+
# Before running the tests, start the connection_count sample in Piper Push
|
20
|
+
# Cache. Piper Push Cache can be downloaded from piperpushcache.com. Follow
|
21
|
+
# the instructions there to start the sample.
|
22
|
+
def test_all
|
23
|
+
man = Piper::Manager.new('localhost', 7661)
|
24
|
+
iron = {
|
25
|
+
'class' => 'Pipe',
|
26
|
+
'id' => 'pipe-iron',
|
27
|
+
'color' => 'gray',
|
28
|
+
'hot-ok' => true
|
29
|
+
}
|
30
|
+
resp = man.push(iron['id'], iron);
|
31
|
+
puts " PUT /#{iron['id']} response: #{resp.code} - #{resp.body}" if $verbose
|
32
|
+
assert_equal(202, resp.code.to_i, 'expected a 202 when pushing iron')
|
33
|
+
|
34
|
+
black = {
|
35
|
+
'class' => 'Pipe',
|
36
|
+
'id' => 'pipe-black',
|
37
|
+
'color' => 'black',
|
38
|
+
'hot-ok' => true
|
39
|
+
}
|
40
|
+
resp = man.push(black['id'], black);
|
41
|
+
puts " PUT /#{black['id']} response: #{resp.code} - #{resp.body}" if $verbose
|
42
|
+
assert_equal(202, resp.code.to_i, 'expected a 202 when pushing black')
|
43
|
+
|
44
|
+
resp = man.get(iron['id']);
|
45
|
+
puts " GET /#{iron['id']} response: #{resp.code} - #{resp.body}" if $verbose
|
46
|
+
assert_equal(202, resp.code.to_i, 'expected a 202 when getting iron')
|
47
|
+
|
48
|
+
resp = man.delete(iron['id']);
|
49
|
+
puts " DELETE /#{iron['id']} response: #{resp.code} - #{resp.body}" if $verbose
|
50
|
+
assert_equal(202, resp.code.to_i, 'expected a 202 when deleting iron')
|
51
|
+
|
52
|
+
resp = man.get(iron['id']);
|
53
|
+
puts " GET /#{iron['id']} response: #{resp.code} - #{resp.body}" if $verbose
|
54
|
+
assert_equal(404, resp.code.to_i, 'expected a 404 when getting iron after delete')
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: piper-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Peter Ohler
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-08 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A Ruby management client to push JSON to Piper Push Cache.
|
14
|
+
email: peter@ohler.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files:
|
18
|
+
- README.md
|
19
|
+
files:
|
20
|
+
- LICENSE
|
21
|
+
- README.md
|
22
|
+
- lib/piper.rb
|
23
|
+
- lib/piper/manager.rb
|
24
|
+
- lib/piper/version.rb
|
25
|
+
- test/pipe_test.rb
|
26
|
+
homepage: http://www.piperpushcache.com
|
27
|
+
licenses:
|
28
|
+
- MIT
|
29
|
+
metadata: {}
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options:
|
32
|
+
- "--main"
|
33
|
+
- README.md
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project: piper-ruby
|
48
|
+
rubygems_version: 2.4.5
|
49
|
+
signing_key:
|
50
|
+
specification_version: 4
|
51
|
+
summary: Management client for Piper Push Cache.
|
52
|
+
test_files: []
|
53
|
+
has_rdoc: true
|