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 ADDED
@@ -0,0 +1,2 @@
1
+ v0.1. Proof of concept
2
+
data/Manifest ADDED
@@ -0,0 +1,7 @@
1
+ CHANGELOG
2
+ README
3
+ Rakefile
4
+ lib/roozer_client.rb
5
+ test/test_all.rb
6
+ test/test_helper.rb
7
+ Manifest
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
@@ -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