roozer_client 0.1
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.
- data/CHANGELOG +2 -0
- data/Manifest +7 -0
- data/README +14 -0
- data/Rakefile +9 -0
- data/lib/roozer_client.rb +65 -0
- data/roozer_client.gemspec +36 -0
- data/test/test_all.rb +19 -0
- data/test/test_helper.rb +37 -0
- metadata +94 -0
data/CHANGELOG
ADDED
data/Manifest
ADDED
data/README
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
require 'roozer_client'
|
|
3
|
+
|
|
4
|
+
rc = RoozerClient.new(url: 'http://orch1:2988;http://orch1:2987', path: 'rootpath')
|
|
5
|
+
rc['subpath'] = { data: "abc" }
|
|
6
|
+
|
|
7
|
+
rc.list
|
|
8
|
+
=> ['subpath']
|
|
9
|
+
|
|
10
|
+
rc['subpath']
|
|
11
|
+
=> { "data" => "abc" }
|
|
12
|
+
|
|
13
|
+
rc.request(:delete, 'subpath/data')
|
|
14
|
+
|
data/Rakefile
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require 'echoe'
|
|
2
|
+
|
|
3
|
+
Echoe.new("roozer_client") do |p|
|
|
4
|
+
p.author = "Andrew Snow"
|
|
5
|
+
p.email = 'andrew@modulus.org'
|
|
6
|
+
p.summary = "Ruby client for Roozer server"
|
|
7
|
+
p.url = "https://github.com/andys/roozer-client"
|
|
8
|
+
p.runtime_dependencies = ['rest-client', 'json']
|
|
9
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'rest_client'
|
|
2
|
+
require 'json'
|
|
3
|
+
|
|
4
|
+
class RoozerClient
|
|
5
|
+
attr_accessor :urls, :timeout
|
|
6
|
+
def initialize(options={})
|
|
7
|
+
opts = options.dup
|
|
8
|
+
@urls = (opts.delete(:url) || ENV['ROOZER_URL'] || 'http://127.0.0.1:2987/').split(/;/).map(&:strip)
|
|
9
|
+
@path = "#{opts.delete(:path) || ''}/"
|
|
10
|
+
@timeout = opts.delete(:timeout) || 10
|
|
11
|
+
@opts = {timeout: @timeout, open_timeout: @timeout}.merge(opts)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get(path)
|
|
16
|
+
begin
|
|
17
|
+
res = request(:get, path)
|
|
18
|
+
res['path'] && res['path']['type'] == 'file' ? res['path']['value'] : nil
|
|
19
|
+
rescue RestClient::Exception => e
|
|
20
|
+
raise unless e.http_code == 404
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
alias :[] :get
|
|
24
|
+
|
|
25
|
+
def list(path='')
|
|
26
|
+
begin
|
|
27
|
+
res = request(:get, path)
|
|
28
|
+
res['path'] && res['path']['type'] == 'dir' ? res['path']['value'] : nil
|
|
29
|
+
rescue RestClient::Exception => e
|
|
30
|
+
raise unless e.http_code == 404
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def put(path, data)
|
|
35
|
+
request(:put, path, data)
|
|
36
|
+
end
|
|
37
|
+
alias :[]= :put
|
|
38
|
+
|
|
39
|
+
def request(method, path, data=nil)
|
|
40
|
+
|
|
41
|
+
begin
|
|
42
|
+
url = @urls.first
|
|
43
|
+
resource = RestClient::Resource.new(url, @opts)
|
|
44
|
+
response = resource["#{@path}#{path}"].send(method, *[({value: data}.to_json if data), {content_type: :json, accept: :json}].compact)
|
|
45
|
+
JSON.parse(response) rescue {}
|
|
46
|
+
rescue Errno::ECONNREFUSED, RestClient::RequestTimeout
|
|
47
|
+
@urls.rotate!
|
|
48
|
+
sleep 5
|
|
49
|
+
retry
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
=begin
|
|
57
|
+
|
|
58
|
+
rc = RoozerClient.new(url: 'http://orch1:2988;http://orch1:2987', path: 'bigcloud')
|
|
59
|
+
rc.list
|
|
60
|
+
rc['x'] = { a: 'b' }
|
|
61
|
+
rc['x']
|
|
62
|
+
rc.request(:delete, 'x')
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
=end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.name = "roozer_client"
|
|
5
|
+
s.version = "0.1"
|
|
6
|
+
|
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
|
8
|
+
s.authors = ["Andrew Snow"]
|
|
9
|
+
s.date = "2012-12-20"
|
|
10
|
+
s.description = "Ruby client for Roozer server"
|
|
11
|
+
s.email = "andrew@modulus.org"
|
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "README", "lib/roozer_client.rb"]
|
|
13
|
+
s.files = ["CHANGELOG", "README", "Rakefile", "lib/roozer_client.rb", "test/test_all.rb", "test/test_helper.rb", "Manifest", "roozer_client.gemspec"]
|
|
14
|
+
s.homepage = "https://github.com/andys/roozer-client"
|
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Roozer_client", "--main", "README"]
|
|
16
|
+
s.require_paths = ["lib"]
|
|
17
|
+
s.rubyforge_project = "roozer_client"
|
|
18
|
+
s.rubygems_version = "1.8.24"
|
|
19
|
+
s.summary = "Ruby client for Roozer server"
|
|
20
|
+
s.test_files = ["test/test_all.rb"]
|
|
21
|
+
|
|
22
|
+
if s.respond_to? :specification_version then
|
|
23
|
+
s.specification_version = 3
|
|
24
|
+
|
|
25
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
26
|
+
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
|
27
|
+
s.add_runtime_dependency(%q<json>, [">= 0"])
|
|
28
|
+
else
|
|
29
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
|
30
|
+
s.add_dependency(%q<json>, [">= 0"])
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
|
34
|
+
s.add_dependency(%q<json>, [">= 0"])
|
|
35
|
+
end
|
|
36
|
+
end
|
data/test/test_all.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../lib/restinator"
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
require "#{File.dirname(__FILE__)}/test_helper"
|
|
4
|
+
|
|
5
|
+
class TestRoozerClient < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
setup_webserver
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_get
|
|
12
|
+
resp = accept_request(200, 'test') do
|
|
13
|
+
`( echo GET /test/123 HTTP/1.0 ; echo ) | nc 127.0.0.1 7999`
|
|
14
|
+
end
|
|
15
|
+
assert_equal 'GET', resp.request_method
|
|
16
|
+
assert_equal '/test/123', resp.path
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'webrick'
|
|
2
|
+
|
|
3
|
+
class NewRequestException < Exception
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class TestServlet < WEBrick::HTTPServlet::AbstractServlet
|
|
7
|
+
class << self
|
|
8
|
+
attr_accessor :request, :response, :wakeupthread
|
|
9
|
+
end
|
|
10
|
+
def service(request, response)
|
|
11
|
+
self.class.request = request.dup
|
|
12
|
+
response.status = self.class.response.first
|
|
13
|
+
response.body = self.class.response.last
|
|
14
|
+
TestServlet.wakeupthread.raise NewRequestException.new
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def accept_request(*response)
|
|
19
|
+
TestServlet.request = nil
|
|
20
|
+
TestServlet.response = response
|
|
21
|
+
begin
|
|
22
|
+
TestServlet.wakeupthread = Thread.current
|
|
23
|
+
yield
|
|
24
|
+
$webserver_timeout.times { sleep 1 }
|
|
25
|
+
rescue NewRequestException
|
|
26
|
+
end
|
|
27
|
+
TestServlet.request
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def setup_webserver(timeout=3)
|
|
31
|
+
$webserver_timeout = timeout
|
|
32
|
+
$webserverthread ||= Thread.new do
|
|
33
|
+
$webserver ||= WEBrick::HTTPServer.new :BindAddress => '127.0.0.1', :Port => 7999, :DocumentRoot => File.dirname(__FILE__), :Logger => WEBrick::Log.new("/dev/null"), :AccessLog => [nil, nil]
|
|
34
|
+
$webserver.mount '/test', TestServlet
|
|
35
|
+
$webserver.start
|
|
36
|
+
end
|
|
37
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: roozer_client
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
prerelease:
|
|
5
|
+
version: '0.1'
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Andrew Snow
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-12-20 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ! '>='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
none: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ! '>='
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
none: false
|
|
27
|
+
name: rest-client
|
|
28
|
+
prerelease: false
|
|
29
|
+
type: :runtime
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
|
32
|
+
requirements:
|
|
33
|
+
- - ! '>='
|
|
34
|
+
- !ruby/object:Gem::Version
|
|
35
|
+
version: '0'
|
|
36
|
+
none: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - ! '>='
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '0'
|
|
42
|
+
none: false
|
|
43
|
+
name: json
|
|
44
|
+
prerelease: false
|
|
45
|
+
type: :runtime
|
|
46
|
+
description: Ruby client for Roozer server
|
|
47
|
+
email: andrew@modulus.org
|
|
48
|
+
executables: []
|
|
49
|
+
extensions: []
|
|
50
|
+
extra_rdoc_files:
|
|
51
|
+
- CHANGELOG
|
|
52
|
+
- README
|
|
53
|
+
- lib/roozer_client.rb
|
|
54
|
+
files:
|
|
55
|
+
- CHANGELOG
|
|
56
|
+
- README
|
|
57
|
+
- Rakefile
|
|
58
|
+
- lib/roozer_client.rb
|
|
59
|
+
- test/test_all.rb
|
|
60
|
+
- test/test_helper.rb
|
|
61
|
+
- Manifest
|
|
62
|
+
- roozer_client.gemspec
|
|
63
|
+
homepage: https://github.com/andys/roozer-client
|
|
64
|
+
licenses: []
|
|
65
|
+
post_install_message:
|
|
66
|
+
rdoc_options:
|
|
67
|
+
- --line-numbers
|
|
68
|
+
- --inline-source
|
|
69
|
+
- --title
|
|
70
|
+
- Roozer_client
|
|
71
|
+
- --main
|
|
72
|
+
- README
|
|
73
|
+
require_paths:
|
|
74
|
+
- lib
|
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
|
+
requirements:
|
|
77
|
+
- - ! '>='
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: '0'
|
|
80
|
+
none: false
|
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
|
+
requirements:
|
|
83
|
+
- - ! '>='
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: '1.2'
|
|
86
|
+
none: false
|
|
87
|
+
requirements: []
|
|
88
|
+
rubyforge_project: roozer_client
|
|
89
|
+
rubygems_version: 1.8.24
|
|
90
|
+
signing_key:
|
|
91
|
+
specification_version: 3
|
|
92
|
+
summary: Ruby client for Roozer server
|
|
93
|
+
test_files:
|
|
94
|
+
- test/test_all.rb
|