server-registry-client 0.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/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in server-registry-client.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Michael James
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Server::Registry::Client
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'server-registry-client'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install server-registry-client
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:test) do |t|
6
+ t.rspec_opts = "--color --format nested --backtrace"
7
+ end
8
+
9
+ # desc "Run all tests"
10
+ # task :test do |t|
11
+ # sh %{ ruby -S rspec --color --format nested --backtrace }
12
+ # end
data/bin/srctool ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "../lib")
4
+
5
+ require 'server-registry-client'
6
+ require 'server-registry-client/cli'
7
+
8
+ ServerRegistryClient::CLI.start(ARGV)
@@ -0,0 +1,94 @@
1
+ require 'thor'
2
+ require 'active_support/core_ext/object/blank'
3
+
4
+ module ServerRegistryClient
5
+ class CLI < ::Thor
6
+ class_option :server, :type => :string, :banner => "URL of the server registry"
7
+
8
+ option :hostname, :banner => "server hostname"
9
+ option :ip_address, :banner => "server IP address"
10
+ option :port, :type => :numeric, :banner => "server port"
11
+ option :categories, :required => true, :banner => "comma-separated string of category names"
12
+ desc "add_server", "add server to registry server"
13
+ def add_server
14
+ require_server_option
15
+ require_server_hostname_or_ip_address
16
+
17
+ server = construct_server_from_options
18
+
19
+ categories = parse_csv(options[:categories])
20
+
21
+ client = construct_client
22
+ client.add_server_to_categories(server, categories)
23
+ end
24
+
25
+ option :hostname, :banner => "server hostname"
26
+ option :ip_address, :banner => "server IP address"
27
+ option :port, :type => :numeric, :banner => "server port"
28
+ option :categories, :required => true, :banner => "comma-separated string of category names"
29
+ desc "remove_server_from_category", "remove server from categories on registry server"
30
+ def remove_server_from_category
31
+ require_server_option
32
+ require_server_hostname_or_ip_address
33
+
34
+ server = construct_server_from_options
35
+
36
+ categories = parse_csv(options[:categories])
37
+
38
+ client = construct_client
39
+ categories.each do |category_name|
40
+ client.remove_server_from_category(server, category_name)
41
+ end
42
+ end
43
+
44
+ option :hostname, :banner => "server hostname"
45
+ option :ip_address, :banner => "server IP address"
46
+ option :port, :type => :numeric, :banner => "server port"
47
+ desc "remove_server", "remove all entries with the specified server attributes"
48
+ def remove_server
49
+ require_server_option
50
+ require_server_hostname_or_ip_address
51
+
52
+ server = construct_server_from_options
53
+
54
+ client = construct_client
55
+ client.remove_servers_like(server)
56
+ end
57
+
58
+ private
59
+
60
+ def construct_client
61
+ return ServerRegistryClient::Client.new(options[:server])
62
+ end
63
+
64
+ def construct_server_from_options
65
+ server = ServerRegistryClient::Server.new
66
+ server.hostname = options[:hostname]
67
+ server.ip_address = options[:ip_address]
68
+ server.port = (options[:port].to_i > 0 ? options[:port].to_i : nil)
69
+
70
+ return server
71
+ end
72
+
73
+ def parse_csv(value)
74
+ categories = []
75
+
76
+ categories << value.to_s.split(",")
77
+ categories.flatten!
78
+
79
+ return categories
80
+ end
81
+
82
+ def require_server_hostname_or_ip_address
83
+ if options[:hostname].blank? && options[:ip_address].blank?
84
+ raise ::Thor::RequiredArgumentMissingError, "--hostname or --ip_address option must not be blank"
85
+ end
86
+ end
87
+
88
+ def require_server_option
89
+ if options[:server].blank?
90
+ raise ::Thor::RequiredArgumentMissingError, "--server options must not be blank"
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,37 @@
1
+ module ServerRegistryClient
2
+ class Client
3
+ attr_accessor :server_processor
4
+
5
+ def initialize(server_registry_url, version_number=1)
6
+ use_version(server_registry_url, version_number)
7
+ end
8
+
9
+ def servers_in_category(category)
10
+ return server_processor.servers_in_category(category)
11
+ end
12
+
13
+ def add_server_to_categories(server, category_names)
14
+ return server_processor.add_server_to_categories(server, category_names)
15
+ end
16
+
17
+ def remove_server_from_category(server, category_name)
18
+ return server_processor.remove_server_from_category(server, category_name)
19
+ end
20
+
21
+ def remove_servers_like(server)
22
+ return server_processor.remove_servers_like(server)
23
+ end
24
+
25
+ def server_registry_url
26
+ return server_processor.server_registry_url_root
27
+ end
28
+
29
+ protected
30
+
31
+ def use_version(server_registry_url, version_number)
32
+ raise "version number must be a number greater than zero" if version_number.to_i <= 0
33
+
34
+ self.server_processor = ServerRegistryClient::ServerProcessor.const_get("V#{version_number}".to_sym).new(server_registry_url)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,4 @@
1
+ module ServerRegistryClient
2
+ class ServerCommunicationError < ::StandardError
3
+ end
4
+ end
@@ -0,0 +1,58 @@
1
+ require 'active_support/core_ext/object/blank'
2
+
3
+ module ServerRegistryClient
4
+ class Server
5
+ attr_accessor :id
6
+ attr_accessor :hostname
7
+ attr_accessor :ip_address
8
+ attr_accessor :port
9
+
10
+ def initialize(id=nil, hostname=nil, ip_address=nil, port=nil)
11
+ @id = id
12
+ @hostname = hostname
13
+ @ip_address = ip_address
14
+ @port = port
15
+ end
16
+
17
+ def matches?(server)
18
+ result = false
19
+
20
+ we_have_hostname = !self.hostname.blank?
21
+ we_have_ip_address = !self.ip_address.blank?
22
+ we_have_port = !self.port.blank?
23
+
24
+ they_have_hostname = !server.hostname.blank?
25
+ they_have_ip_address = !server.ip_address.blank?
26
+ they_have_port = !server.port.blank?
27
+
28
+ ip_address_matches = (we_have_ip_address && they_have_ip_address && self.ip_address == server.ip_address)
29
+ hostname_matches = (we_have_hostname && they_have_hostname && self.hostname == server.hostname)
30
+
31
+ port_matches = if we_have_port && they_have_port && self.port == server.port && (ip_address_matches || hostname_matches)
32
+ true
33
+ elsif they_have_port && !we_have_port && (ip_address_matches || hostname_matches)
34
+ true
35
+ elsif !they_have_port && !we_have_port && (ip_address_matches || hostname_matches)
36
+ true
37
+ elsif we_have_port && they_have_port && self.port == server.port && (!we_have_hostname && they_have_hostname)
38
+ true
39
+ else
40
+ false
41
+ end
42
+
43
+ if self.id == server.id
44
+ result = true
45
+ else
46
+ if ip_address_matches
47
+ result = (true && port_matches)
48
+ elsif hostname_matches
49
+ result = (true && port_matches)
50
+ else
51
+ result = port_matches
52
+ end
53
+ end
54
+
55
+ return result
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,3 @@
1
+ module ServerRegistryClient
2
+ autoload :Server, 'server-registry-client/models/server'
3
+ end
@@ -0,0 +1,77 @@
1
+ require 'typhoeus'
2
+ require 'uri'
3
+ require 'yajl'
4
+
5
+ module ServerRegistryClient
6
+ module ServerProcessor
7
+ class Base
8
+ attr_reader :server_registry_url_root
9
+ attr_reader :last_response
10
+ attr_reader :api_version
11
+
12
+ def initialize(server_registry_url_root)
13
+ @server_registry_url_root = server_registry_url_root
14
+ @hydra = ::Typhoeus::Hydra.new
15
+ end
16
+
17
+ protected
18
+
19
+ attr_reader :hydra
20
+ attr_writer :api_version
21
+
22
+ def default_typhoeus_options
23
+ {
24
+ :timeout => 5000
25
+ }
26
+ end
27
+
28
+ def make_web_request(api_fragment, options={}, &block)
29
+ typhoeus_options = default_typhoeus_options.merge(options)
30
+
31
+ request = ::Typhoeus::Request.new(URI.join(self.server_registry_url_root, api_fragment).to_s, typhoeus_options)
32
+ response_body = nil
33
+
34
+ request.on_complete do |response|
35
+ if response.timed_out?
36
+ raise ServerRegistryClient::ServerCommunicationError, "Request to #{request.url} timed out"
37
+ elsif response.success?
38
+ if response.headers["Content-Type"].include?("application/json")
39
+ response_body = parse_json(response.body)
40
+ else
41
+ response_body = response.body
42
+ end
43
+ end
44
+ end
45
+
46
+ self.hydra.queue(request)
47
+ self.hydra.run
48
+
49
+ @last_response = request.response
50
+
51
+ unless block.nil?
52
+ block.call(self.last_response, response_body)
53
+ end
54
+
55
+ return response_body
56
+ end
57
+
58
+ def print_typhoeus_response(response)
59
+ return <<-EOF
60
+ #{response.code} #{response.status_message}
61
+ #{response.headers}
62
+
63
+ #{response.body}
64
+ EOF
65
+ end
66
+
67
+ def parse_json(data)
68
+ json = Yajl::Parser.parse(data, :symbolize_keys => true)
69
+ return json
70
+ end
71
+
72
+ def jsonify(data)
73
+ return Yajl::Encoder.encode(data, :pretty => true)
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,98 @@
1
+ module ServerRegistryClient
2
+ module ServerProcessor
3
+ class V1 < Base
4
+ def initialize(server_registry_url)
5
+ super
6
+ self.api_version = "v1"
7
+ end
8
+
9
+ def servers_in_category(category)
10
+ response_json = make_web_request("/api/#{api_version}/category/#{category}")
11
+
12
+ if response_json.nil? || last_response.response_code == 404
13
+ return []
14
+ else
15
+ return response_json[:servers].map do |server_json|
16
+ server_from_json(server_json)
17
+ end
18
+ end
19
+ end
20
+
21
+ def get_all_servers
22
+ response_json = make_web_request("/api/#{api_version}/servers")
23
+
24
+ return response_json.map do |server_json|
25
+ server_from_json(server_json)
26
+ end
27
+ end
28
+
29
+ def add_server_to_categories(server, category_names)
30
+ server_json_hash = server_to_json_hash(server)
31
+ server_json_hash[:categories] = (category_names.kind_of?(Array) ? category_names : [category_names])
32
+
33
+ server_json = jsonify(server_json_hash)
34
+
35
+ make_web_request("/api/#{api_version}/servers", {
36
+ :method => :post,
37
+ :body => server_json
38
+ }) do |response, response_body|
39
+ unless response.success?
40
+ raise ServerRegistryClient::ServerCommunicationError, "Server responded: #{print_typhoeus_response(response)}"
41
+ end
42
+ end
43
+ end
44
+
45
+ def remove_server_from_category(server, category_name)
46
+ server_name = server.hostname || server.ip_address
47
+ server_removed = true
48
+
49
+ make_web_request("/api/#{api_version}/category/#{category_name}/server/#{server_name}", {
50
+ :method => :delete
51
+ }) do |response, response_body|
52
+ unless response.success?
53
+ server_removed = false
54
+ end
55
+ end
56
+
57
+ return server_removed
58
+ end
59
+
60
+ def remove_servers_like(server_to_match)
61
+ all_servers = get_all_servers
62
+
63
+ servers_to_delete = all_servers.find_all do |server|
64
+ server_to_match.matches?(server)
65
+ end
66
+
67
+ servers_to_delete.each do |server|
68
+ make_web_request("/api/#{api_version}/server/#{server.id}", {
69
+ :method => :delete
70
+ })
71
+ end
72
+ end
73
+
74
+ protected
75
+
76
+ def server_from_json(server_json)
77
+ server = ::ServerRegistryClient::Server.new
78
+
79
+ server.id = server_json[:id]
80
+ server.hostname = server_json[:hostname]
81
+ server.ip_address = server_json[:ip_address]
82
+ server.port = server_json[:port]
83
+
84
+ return server
85
+ end
86
+
87
+ def server_to_json_hash(server)
88
+ json = {}
89
+
90
+ json[:hostname] = server.hostname
91
+ json[:ip_address] = server.ip_address
92
+ json[:port] = server.port
93
+
94
+ return json
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,6 @@
1
+ module ServerRegistryClient
2
+ module ServerProcessor
3
+ autoload :Base, 'server-registry-client/server_processor/base'
4
+ autoload :V1, 'server-registry-client/server_processor/v1'
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module ServerRegistryClient
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ require "server-registry-client/version"
2
+ require "server-registry-client/errors"
3
+ require "server-registry-client/client"
4
+ require "server-registry-client/server_processor"
5
+ require "server-registry-client/models"
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/server-registry-client/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Michael James"]
6
+ gem.email = ["umjames29@gmail.com"]
7
+ gem.description = %q{Client library and command-line tools for interacting with the server registry (https://github.com/umjames/server-registry)}
8
+ gem.summary = %q{Client library and command-line tools for interacting with the server registry (https://github.com/umjames/server-registry)}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\) - [".gitignore"]
12
+ gem.executables = %w(srctool) #gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "server-registry-client"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = ServerRegistryClient::VERSION
17
+
18
+ gem.required_ruby_version = ">= 1.9.1"
19
+ gem.required_rubygems_version = ">= 1.8.5"
20
+
21
+ gem.add_development_dependency 'rake'
22
+ gem.add_development_dependency 'rspec'
23
+
24
+ gem.add_runtime_dependency 'typhoeus', '0.5.3'
25
+ gem.add_runtime_dependency 'yajl-ruby', '~> 1.1'
26
+ gem.add_runtime_dependency 'thor', '~> 0.16'
27
+ gem.add_runtime_dependency 'activesupport', '~> 3.2'
28
+ end
@@ -0,0 +1,16 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe ServerRegistryClient::Client do
4
+ it "should be able to create a client with a valid URL" do
5
+ expect do
6
+ client = ServerRegistryClient::Client.new("http://www.apple.com")
7
+ end.to_not raise_error
8
+ end
9
+
10
+ it "should recognize localhost URLs" do
11
+ expect do
12
+ client = ServerRegistryClient::Client.new("http://localhost:3000/api/")
13
+ end.to_not raise_error
14
+ end
15
+
16
+ end
@@ -0,0 +1,96 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe ServerRegistryClient::Server do
4
+ context "matching algorithm" do
5
+ before(:each) do
6
+ @test_server = ServerRegistryClient::Server.new
7
+ @test_server.id = 1
8
+ @test_server.hostname = "localhost"
9
+ @test_server.ip_address = "127.0.0.1"
10
+ @test_server.port = 3000
11
+ end
12
+
13
+ it "should match if ids are the same" do
14
+ server = ServerRegistryClient::Server.new
15
+ server.id = 1
16
+ server.hostname = "www.example.com"
17
+ server.ip_address = "1.2.3.4"
18
+ server.port = @test_server.port + 1
19
+
20
+ @test_server.matches?(server).should be_true
21
+ end
22
+
23
+ it "should not match if the ports are different" do
24
+ server = ServerRegistryClient::Server.new
25
+ server.port = @test_server.port + 1
26
+
27
+ @test_server.matches?(server).should_not be_true
28
+ end
29
+
30
+ it "should not match less specific server attributes" do
31
+ server = ServerRegistryClient::Server.new
32
+ server.hostname = @test_server.hostname
33
+
34
+ @test_server.matches?(server).should_not be_true
35
+
36
+ server.hostname = nil
37
+ server.ip_address = @test_server.ip_address
38
+
39
+ @test_server.matches?(server).should_not be_true
40
+
41
+ server.hostname = @test_server.hostname
42
+
43
+ @test_server.matches?(server).should_not be_true
44
+
45
+ server.port = @test_server.port
46
+
47
+ @test_server.matches?(server).should be_true
48
+ end
49
+
50
+ it "should match more specific server attributes" do
51
+ server = ServerRegistryClient::Server.new
52
+ server.hostname = @test_server.hostname
53
+
54
+ server.matches?(@test_server).should be_true
55
+ @test_server.matches?(server).should_not be_true
56
+
57
+ server.hostname = nil
58
+ server.ip_address = @test_server.ip_address
59
+
60
+ server.matches?(@test_server).should be_true
61
+ @test_server.matches?(server).should_not be_true
62
+
63
+ server.hostname = nil
64
+ server.ip_address = nil
65
+ server.port = @test_server.port
66
+
67
+ server.matches?(@test_server).should be_true
68
+ @test_server.matches?(server).should_not be_true
69
+
70
+ server.hostname = @test_server.hostname
71
+ server.ip_address = @test_server.ip_address
72
+
73
+ @test_server.matches?(server).should be_true
74
+ server.matches?(@test_server).should be_true
75
+ end
76
+
77
+ it "should be able to find the correct servers" do
78
+ servers = []
79
+
80
+ server_to_match = ServerRegistryClient::Server.new(nil, "www.example.com")
81
+
82
+ servers << ServerRegistryClient::Server.new(3, "stage.shindig.io", "4.3.2.1", 345)
83
+ servers << ServerRegistryClient::Server.new(1, "www.apple.com", "1.2.3.4")
84
+ servers << ServerRegistryClient::Server.new(8, "www.example.com")
85
+ servers << ServerRegistryClient::Server.new(9, "www.example.com", nil, 80)
86
+ servers << ServerRegistryClient::Server.new(10, "www.example.com", nil, 1221)
87
+ servers << ServerRegistryClient::Server.new(2, "www.test.com", "1.2.3.4")
88
+
89
+ found_servers = servers.find_all do |server|
90
+ server_to_match.matches?(server)
91
+ end
92
+
93
+ found_servers.map(&:id).should == [8, 9, 10]
94
+ end
95
+ end
96
+ end
@@ -0,0 +1 @@
1
+ require "server-registry-client"
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: server-registry-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael James
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70335946949280 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70335946949280
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70335946948820 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70335946948820
36
+ - !ruby/object:Gem::Dependency
37
+ name: typhoeus
38
+ requirement: &70335946948320 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - =
42
+ - !ruby/object:Gem::Version
43
+ version: 0.5.3
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70335946948320
47
+ - !ruby/object:Gem::Dependency
48
+ name: yajl-ruby
49
+ requirement: &70335946947780 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70335946947780
58
+ - !ruby/object:Gem::Dependency
59
+ name: thor
60
+ requirement: &70335946947320 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '0.16'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70335946947320
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: &70335946946860 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '3.2'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70335946946860
80
+ description: Client library and command-line tools for interacting with the server
81
+ registry (https://github.com/umjames/server-registry)
82
+ email:
83
+ - umjames29@gmail.com
84
+ executables:
85
+ - srctool
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - Gemfile
90
+ - LICENSE
91
+ - README.md
92
+ - Rakefile
93
+ - bin/srctool
94
+ - lib/server-registry-client.rb
95
+ - lib/server-registry-client/cli.rb
96
+ - lib/server-registry-client/client.rb
97
+ - lib/server-registry-client/errors.rb
98
+ - lib/server-registry-client/models.rb
99
+ - lib/server-registry-client/models/server.rb
100
+ - lib/server-registry-client/server_processor.rb
101
+ - lib/server-registry-client/server_processor/base.rb
102
+ - lib/server-registry-client/server_processor/v1.rb
103
+ - lib/server-registry-client/version.rb
104
+ - server-registry-client.gemspec
105
+ - spec/client_spec.rb
106
+ - spec/server_spec.rb
107
+ - spec/spec_helper.rb
108
+ homepage: ''
109
+ licenses: []
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: 1.9.1
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: 1.8.5
126
+ requirements: []
127
+ rubyforge_project:
128
+ rubygems_version: 1.8.5
129
+ signing_key:
130
+ specification_version: 3
131
+ summary: Client library and command-line tools for interacting with the server registry
132
+ (https://github.com/umjames/server-registry)
133
+ test_files:
134
+ - spec/client_spec.rb
135
+ - spec/server_spec.rb
136
+ - spec/spec_helper.rb