tdl-client-ruby 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []