tdl-client-ruby 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/README.md ADDED
@@ -0,0 +1,7 @@
1
+ [![jRuby Version](http://img.shields.io/badge/Ruby-2.2.2-blue.svg)](http://jruby.org/2015/07/09/jruby-9-0-0-0-rc2.html)
2
+ [![Gem Version](http://img.shields.io/gem/v/tdl-client-ruby.svg)](https://rubygems.org/search?query=tdl-client-ruby)
3
+ [![Codeship Status for julianghionoiu/tdl-client-ruby](https://img.shields.io/codeship/1072db10-0fc1-0133-f3de-1e6fe7bb1028.svg)](https://codeship.com/projects/91966)
4
+ [![Coverage Status](https://coveralls.io/repos/julianghionoiu/tdl-client-ruby/badge.svg?branch=master&service=github)](https://coveralls.io/github/julianghionoiu/tdl-client-ruby?branch=master)
5
+
6
+ # tdl-client-ruby
7
+ tdl-client-ruby
data/Rakefile ADDED
@@ -0,0 +1,43 @@
1
+ require 'rake/testtask'
2
+ require 'coveralls/rake/task'
3
+
4
+
5
+ #~~~~~~~ Test
6
+
7
+ Rake::TestTask.new(:test) do |t|
8
+ t.libs << 'test'
9
+ t.libs << 'lib'
10
+ t.test_files = FileList['test/**/*_test.rb']
11
+ end
12
+
13
+ task :default => :test
14
+
15
+ Coveralls::RakeTask.new
16
+ task :test_with_coveralls => [:test, 'coveralls:push']
17
+
18
+
19
+ #~~~~~~~~~ Play
20
+
21
+ desc 'Run the example'
22
+ task :example do
23
+ sh 'jruby -I lib examples/solve.rb'
24
+ end
25
+
26
+
27
+ desc 'Run the test playground'
28
+ task :playground do
29
+ sh 'jruby -I lib ./test/utils/jmx/broker/playground.rb'
30
+ end
31
+
32
+
33
+ #~~~~~~~~ Deploy
34
+
35
+ require 'tdl/version'
36
+
37
+ task :build do
38
+ system 'gem build tdl-client-ruby.gemspec'
39
+ end
40
+
41
+ task :release => :build do
42
+ system "gem push tdl-client-ruby-#{TDL::VERSION}.gem"
43
+ end
data/examples/solve.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'tdl'
2
+ require 'logging'
3
+
4
+ Logging.logger.root.appenders = Logging.appenders.stdout
5
+ Logging.logger.root.level = :info
6
+
7
+
8
+ client = TDL::Client.new('localhost', 21613, 'test')
9
+
10
+ client.go_live_with { |params|
11
+ x = params[0].to_i
12
+ y = params[1].to_i
13
+ x + y
14
+ }
data/lib/tdl.rb ADDED
@@ -0,0 +1,6 @@
1
+
2
+ require 'tdl/client'
3
+ require 'tdl/version'
4
+
5
+ module TDL
6
+ end
@@ -0,0 +1,10 @@
1
+ module TDL
2
+ class Request
3
+ attr_reader :id, :params
4
+
5
+ def initialize(id, params)
6
+ @id = id
7
+ @params = params
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module TDL
2
+ class Response
3
+ attr_reader :result, :id
4
+
5
+ def initialize(id, result)
6
+ @id = id
7
+ @result = result
8
+ end
9
+ end
10
+ end
data/lib/tdl/client.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'stomp'
2
+ require 'logging'
3
+
4
+ require 'tdl/transport/remote_broker'
5
+ require 'tdl/deserialize_and_respond_to_message'
6
+
7
+ module TDL
8
+
9
+ class Client
10
+
11
+ def initialize(hostname, port, username)
12
+ @hostname = hostname
13
+ @port = port
14
+ @username = username
15
+ @logger = Logging.logger[self]
16
+ end
17
+
18
+ def go_live_with(&user_implementation)
19
+ run(RespondToAllRequests.new(DeserializeAndRespondToMessage.using(user_implementation)))
20
+ end
21
+
22
+ def trial_run_with(&user_implementation)
23
+ run(PeekAtFirstRequest.new(DeserializeAndRespondToMessage.using(user_implementation)))
24
+ end
25
+
26
+ def run(handling_strategy)
27
+ begin
28
+ remote_broker = RemoteBroker.new(@hostname, @port, @username)
29
+ remote_broker.subscribe(handling_strategy)
30
+
31
+ #DEBT: We should have no timeout here. We could put a special message in the queue
32
+ remote_broker.join(3)
33
+ @logger.info 'Stopping client.'
34
+ remote_broker.close
35
+ rescue Exception => e
36
+ @logger.error "Problem communicating with the broker. #{e.message}"
37
+ end
38
+ end
39
+
40
+ #~~~~ Queue handling policies
41
+
42
+ class RespondToAllRequests
43
+ def initialize(message_handler)
44
+ @message_handler = message_handler
45
+ end
46
+
47
+ def process_next_message_from(remote_broker, msg)
48
+ response = @message_handler.respond_to(msg.body)
49
+ if response.nil?
50
+ remote_broker.close
51
+ else
52
+ remote_broker.publish(response)
53
+ remote_broker.acknowledge(msg)
54
+ end
55
+ end
56
+ end
57
+
58
+ class PeekAtFirstRequest
59
+ def initialize(message_handler)
60
+ @message_handler = message_handler
61
+ end
62
+
63
+ def process_next_message_from(remote_broker, msg)
64
+ @message_handler.respond_to(msg.body)
65
+ remote_broker.close
66
+ end
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,24 @@
1
+ require 'tdl/serialization/csv_serialization_provider'
2
+ require 'tdl/respond/validate_response'
3
+ require 'tdl/respond/audit_traffic'
4
+ require 'tdl/respond/obtain_response'
5
+
6
+ module TDL
7
+ class DeserializeAndRespondToMessage
8
+ def initialize(user_implementation)
9
+ @serialization_provider = CsvSerializationProvider.new
10
+ @response_strategy = ValidateResponse.new(AuditTraffic.new(ObtainResponse.new(user_implementation)))
11
+ @logger = Logging.logger[self]
12
+ end
13
+
14
+ def self.using(user_implementation)
15
+ DeserializeAndRespondToMessage.new(user_implementation)
16
+ end
17
+
18
+ def respond_to(message_text)
19
+ request = @serialization_provider.deserialize(message_text)
20
+ response = @response_strategy.respond_to(request)
21
+ @serialization_provider.serialize(response)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ require 'tdl/abstractions/request'
2
+ require 'tdl/abstractions/response'
3
+
4
+ module TDL
5
+ class AuditTraffic
6
+ def initialize(wrapped_strategy)
7
+ @wrapped_strategy = wrapped_strategy
8
+ @logger = Logging.logger[self]
9
+ end
10
+
11
+ def respond_to(request)
12
+ response = @wrapped_strategy.respond_to(request)
13
+
14
+ pretty_print_params = request.params.to_s.gsub('"', '')
15
+ @logger.info "id = #{request.id}, req = #{pretty_print_params}, resp = #{response.result}"
16
+
17
+ response
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ require 'tdl/abstractions/request'
2
+ require 'tdl/abstractions/response'
3
+
4
+ module TDL
5
+ class ObtainResponse
6
+ def initialize(user_implementation)
7
+ @user_implementation = user_implementation
8
+ @logger = Logging.logger[self]
9
+ end
10
+
11
+ def respond_to(request)
12
+ begin
13
+ result = @user_implementation.call(request.params)
14
+ rescue Exception => e
15
+ @logger.info "The user implementation has thrown exception. #{e.message}"
16
+ result = nil
17
+ end
18
+
19
+ if result.nil?
20
+ @logger.info 'User implementation has returned "nil"'
21
+ end
22
+
23
+ Response.new(request.id, result)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ require 'tdl/abstractions/request'
2
+ require 'tdl/abstractions/response'
3
+
4
+ module TDL
5
+ class ValidateResponse
6
+ def initialize(wrapped_strategy)
7
+ @wrapped_strategy = wrapped_strategy
8
+ @logger = Logging.logger[self]
9
+ end
10
+
11
+ def respond_to(request)
12
+ response = @wrapped_strategy.respond_to(request)
13
+ (response.result == nil) ? nil : response
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,25 @@
1
+ require 'tdl/abstractions/request'
2
+ require 'tdl/abstractions/response'
3
+
4
+ module TDL
5
+ class CsvSerializationProvider
6
+ def initialize
7
+ @logger = Logging.logger[self]
8
+ end
9
+
10
+ def deserialize(message_text)
11
+ items = message_text.split(', ', 2)
12
+ @logger.debug("Received items: #{items}")
13
+
14
+ request_id = items[0]
15
+ serialized_params = items[1]
16
+ params = serialized_params.split(', ')
17
+
18
+ Request.new(request_id, params)
19
+ end
20
+
21
+ def serialize(response)
22
+ (response == nil) ? nil : "#{response.id}, #{response.result}"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ module TDL
2
+ class RemoteBroker
3
+ def initialize(hostname, port, username)
4
+ @stomp_client = Stomp::Client.new('', '', hostname, port)
5
+ @username = username
6
+ end
7
+
8
+
9
+ def subscribe(handling_strategy)
10
+ @stomp_client.subscribe("/queue/#{@username}.req", {:ack => 'client', 'activemq.prefetchSize' => 1}) do |msg|
11
+ handling_strategy.process_next_message_from(self, msg)
12
+ end
13
+ end
14
+
15
+ def acknowledge(msg)
16
+ @stomp_client.acknowledge(msg)
17
+ end
18
+
19
+ def publish(response)
20
+ @stomp_client.publish("/queue/#{@username}.resp", response)
21
+ end
22
+
23
+ def join(limit = nil)
24
+ @stomp_client.join(limit)
25
+ end
26
+
27
+ def close
28
+ @stomp_client.close
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module TDL
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'tdl/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'tdl-client-ruby'
8
+ spec.version = TDL::VERSION
9
+ spec.authors = ['Julian Ghionoiu']
10
+ spec.email = ['iulian.ghionoiu@gmail.com']
11
+
12
+ spec.summary = %q{A client to connect to the central kata server.}
13
+ spec.description = %q{A ruby client to connect to the kata server}
14
+ spec.homepage = 'https://github.com/julianghionoiu/tdl-client-ruby'
15
+ spec.license = 'GPL-3.0'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_runtime_dependency 'stomp', '1.3.4'
21
+ spec.add_runtime_dependency 'logging', '2.0.0'
22
+
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.10'
25
+ spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'minitest', '5.4.1'
27
+ spec.add_development_dependency 'minitest-reporters', '~> 1.0', '>= 1.0.19'
28
+ spec.add_development_dependency 'psych', '~> 2.0', '>= 2.0.13'
29
+ spec.add_development_dependency 'jmx4r', '~>0.1.4'
30
+ spec.add_development_dependency 'simplecov', '~>0.10.0'
31
+ spec.add_development_dependency 'coveralls', '~>0.8.2'
32
+ end
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="FacetManager">
4
+ <facet type="gem" name="Ruby Gem">
5
+ <configuration>
6
+ <option name="GEM_APP_ROOT_PATH" value="$MODULE_DIR$" />
7
+ <option name="GEM_APP_TEST_PATH" value="$MODULE_DIR$/test" />
8
+ <option name="GEM_APP_LIB_PATH" value="$MODULE_DIR$/lib" />
9
+ </configuration>
10
+ </facet>
11
+ </component>
12
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
13
+ <exclude-output />
14
+ <content url="file://$MODULE_DIR$">
15
+ <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
16
+ </content>
17
+ <orderEntry type="jdk" jdkName="jruby-9.0.0.0.rc2-p0" jdkType="JRUBY_SDK" />
18
+ <orderEntry type="sourceFolder" forTests="false" />
19
+ <orderEntry type="library" scope="PROVIDED" name="ansi (v1.5.0, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
20
+ <orderEntry type="library" scope="PROVIDED" name="builder (v3.2.2, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
21
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v1.10.5, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
22
+ <orderEntry type="library" scope="PROVIDED" name="coveralls (v0.8.2, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
23
+ <orderEntry type="library" scope="PROVIDED" name="docile (v1.1.5, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
24
+ <orderEntry type="library" scope="PROVIDED" name="domain_name (v0.5.24, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
25
+ <orderEntry type="library" scope="PROVIDED" name="http-cookie (v1.0.2, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
26
+ <orderEntry type="library" scope="PROVIDED" name="jmx4r (v0.1.4, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
27
+ <orderEntry type="library" scope="PROVIDED" name="little-plugger (v1.1.3, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
28
+ <orderEntry type="library" scope="PROVIDED" name="logging (v2.0.0, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
29
+ <orderEntry type="library" scope="PROVIDED" name="mime-types (v2.6.1, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
30
+ <orderEntry type="library" scope="PROVIDED" name="minitest-reporters (v1.0.19, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
31
+ <orderEntry type="library" scope="PROVIDED" name="multi_json (v1.11.2, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
32
+ <orderEntry type="library" scope="PROVIDED" name="netrc (v0.10.3, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
33
+ <orderEntry type="library" scope="PROVIDED" name="rake (v10.4.2, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
34
+ <orderEntry type="library" scope="PROVIDED" name="rest-client (v1.8.0, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
35
+ <orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.7.5, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
36
+ <orderEntry type="library" scope="PROVIDED" name="simplecov (v0.10.0, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
37
+ <orderEntry type="library" scope="PROVIDED" name="simplecov-html (v0.10.0, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
38
+ <orderEntry type="library" scope="PROVIDED" name="stomp (v1.3.4, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
39
+ <orderEntry type="library" scope="PROVIDED" name="term-ansicolor (v1.3.2, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
40
+ <orderEntry type="library" scope="PROVIDED" name="thor (v0.19.1, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
41
+ <orderEntry type="library" scope="PROVIDED" name="tins (v1.5.4, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
42
+ <orderEntry type="library" scope="PROVIDED" name="unf (v0.1.4, jruby-9.0.0.0.rc2-p0) [gem]" level="application" />
43
+ </component>
44
+ </module>
metadata ADDED
@@ -0,0 +1,218 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tdl-client-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Julian Ghionoiu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - '='
17
+ - !ruby/object:Gem::Version
18
+ version: 1.3.4
19
+ name: stomp
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.3.4
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '='
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.0
33
+ name: logging
34
+ prerelease: false
35
+ type: :runtime
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 2.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.10'
47
+ name: bundler
48
+ prerelease: false
49
+ type: :development
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.10'
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '10.0'
61
+ name: rake
62
+ prerelease: false
63
+ type: :development
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '='
73
+ - !ruby/object:Gem::Version
74
+ version: 5.4.1
75
+ name: minitest
76
+ prerelease: false
77
+ type: :development
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 5.4.1
83
+ - !ruby/object:Gem::Dependency
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.0'
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 1.0.19
92
+ name: minitest-reporters
93
+ prerelease: false
94
+ type: :development
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.0'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.0.19
103
+ - !ruby/object:Gem::Dependency
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '2.0'
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 2.0.13
112
+ name: psych
113
+ prerelease: false
114
+ type: :development
115
+ version_requirements: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '2.0'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 2.0.13
123
+ - !ruby/object:Gem::Dependency
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: 0.1.4
129
+ name: jmx4r
130
+ prerelease: false
131
+ type: :development
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: 0.1.4
137
+ - !ruby/object:Gem::Dependency
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: 0.10.0
143
+ name: simplecov
144
+ prerelease: false
145
+ type: :development
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: 0.10.0
151
+ - !ruby/object:Gem::Dependency
152
+ requirement: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: 0.8.2
157
+ name: coveralls
158
+ prerelease: false
159
+ type: :development
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: 0.8.2
165
+ description: A ruby client to connect to the kata server
166
+ email:
167
+ - iulian.ghionoiu@gmail.com
168
+ executables: []
169
+ extensions: []
170
+ extra_rdoc_files: []
171
+ files:
172
+ - ".gitignore"
173
+ - ".gitmodules"
174
+ - CODE_OF_CONDUCT.md
175
+ - Gemfile
176
+ - Gemfile.lock
177
+ - LICENSE
178
+ - README.md
179
+ - Rakefile
180
+ - examples/solve.rb
181
+ - lib/tdl.rb
182
+ - lib/tdl/abstractions/request.rb
183
+ - lib/tdl/abstractions/response.rb
184
+ - lib/tdl/client.rb
185
+ - lib/tdl/deserialize_and_respond_to_message.rb
186
+ - lib/tdl/respond/audit_traffic.rb
187
+ - lib/tdl/respond/obtain_response.rb
188
+ - lib/tdl/respond/validate_response.rb
189
+ - lib/tdl/serialization/csv_serialization_provider.rb
190
+ - lib/tdl/transport/remote_broker.rb
191
+ - lib/tdl/version.rb
192
+ - tdl-client-ruby.gemspec
193
+ - tdl-client-ruby.iml
194
+ homepage: https://github.com/julianghionoiu/tdl-client-ruby
195
+ licenses:
196
+ - GPL-3.0
197
+ metadata: {}
198
+ post_install_message:
199
+ rdoc_options: []
200
+ require_paths:
201
+ - lib
202
+ required_ruby_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ required_rubygems_version: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ requirements: []
213
+ rubyforge_project:
214
+ rubygems_version: 2.4.8
215
+ signing_key:
216
+ specification_version: 4
217
+ summary: A client to connect to the central kata server.
218
+ test_files: []