polytalk 0.0.1 → 0.0.2

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 CHANGED
@@ -1,6 +1,18 @@
1
1
  # Polytalk
2
2
 
3
- TODO: Write a gem description
3
+ Polytalk is a simple protocol which allows communication between different languages via TCP.
4
+
5
+ Polytalk currently supports PHP, Node.js and Ruby.
6
+
7
+ ## Protocol
8
+
9
+ The protocol is a simple language agnostic JSON object containing the class, method and arguments. It will then return an response as either a string or JSON object.
10
+
11
+ Key          | Value
12
+ ------------ | -------------
13
+ class        | The class to call the method on. Namespaced classes require the `::` separator.
14
+ method       | The method you want to call.
15
+ arguments    | The arguments to inject into the method in key value pairs.
4
16
 
5
17
  ## Installation
6
18
 
@@ -16,9 +28,40 @@ Or install it yourself as:
16
28
 
17
29
  $ gem install polytalk
18
30
 
19
- ## Usage
31
+ ## Server Example
32
+
33
+ Be sure that any classes you want to be exposed by the server to the client are included/required from the server.
34
+
35
+ ```ruby
36
+ server = Polytalk::Server.new({ port: 9090 })
37
+ server.run do |connection, request|
38
+ response = server.call(request)
39
+ server.push(connection, response)
40
+ end
41
+ ```
20
42
 
21
- TODO: Write usage instructions here
43
+ ## Client Example
44
+
45
+ ```ruby
46
+ request = {
47
+ class: 'Model::Order',
48
+ method: 'findBySize',
49
+ arguments: {
50
+ size: 'large',
51
+ limit: 3
52
+ }
53
+ }
54
+
55
+ client = Polytalk::Client.new({ port: 9090 })
56
+
57
+ puts client.call(request)
58
+
59
+ # Passing a block
60
+ first = client.call(request) do |r|
61
+ r.first
62
+ end
63
+ puts first
64
+ ```
22
65
 
23
66
  ## Contributing
24
67
 
@@ -27,3 +70,7 @@ TODO: Write usage instructions here
27
70
  3. Commit your changes (`git commit -am 'Add some feature'`)
28
71
  4. Push to the branch (`git push origin my-new-feature`)
29
72
  5. Create new Pull Request
73
+
74
+ ### License
75
+
76
+ MIT, see LICENSE.
data/examples/server.rb CHANGED
@@ -12,6 +12,7 @@ class Test
12
12
  end
13
13
 
14
14
  server = Polytalk::Server.new({ port: 9090 })
15
+ puts "Ruby Server running on port 9090. PID=#{Process.pid}"
15
16
  server.run do |connection, request|
16
17
  response = server.call(request)
17
18
  server.push(connection, response)
@@ -14,22 +14,39 @@ module Polytalk
14
14
  loop do
15
15
  Thread.start(server.accept) do |connection|
16
16
  request = connection.recv(2048)
17
- yield(connection, JSON.parse(request))
17
+ yield(connection, JSON.parse(request, symbolize_names: true))
18
18
  end
19
19
  end
20
20
  end
21
21
 
22
22
  def call(request)
23
23
  required_constant = nil
24
- request['class'].split('::').each_with_index do |c, index|
24
+ request[:class].split('::').each_with_index do |c, index|
25
25
  if index == 0
26
26
  required_constant = Kernel.const_get(c)
27
27
  else
28
28
  required_constant = required_constant.const_get(c)
29
29
  end
30
30
  end
31
- required_method = required_constant.method(request['method'])
32
- required_method.call *request['arguments'].values
31
+
32
+ # Convert string prefixed with `:` to symbols
33
+ if request[:arguments].is_a? Hash
34
+ request[:arguments].each do |key, arg|
35
+ if arg.is_a? String
36
+ if arg.match(/^:/)
37
+ request[:arguments][key] = arg[1..-1].to_sym
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ required_method = required_constant.method(request[:method])
44
+
45
+ if request[:arguments].is_a? Hash
46
+ required_method.call *request[:arguments].values
47
+ else
48
+ required_method.call
49
+ end
33
50
  end
34
51
 
35
52
  def push(connection, response)
@@ -1,3 +1,3 @@
1
1
  module Polytalk
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polytalk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-19 00:00:00.000000000 Z
12
+ date: 2012-12-08 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Polytalk is a simple protocol which allows communication between different
15
15
  languages via TCP.
@@ -52,7 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
52
  version: '0'
53
53
  requirements: []
54
54
  rubyforge_project:
55
- rubygems_version: 1.8.11
55
+ rubygems_version: 1.8.24
56
56
  signing_key:
57
57
  specification_version: 3
58
58
  summary: Polytalk is a simple protocol which allows communication between different